操作系统课程设计——进程调度模拟算法(5种)
更新时间:2024-05-02 22:17:01 阅读量: 综合文库 文档下载
福建农林大学计算机与信息学院
课程名称:实习题目:姓 名:系:专 业:年 级:学 号:指导教师:职 称:
课程设计报告
操作系统
进程调度算法模拟 ***
计算机
计算机科学与技术 2011级 ** *** *** 2014年1月16日
福建农林大学计算机与信息学院信息工程类
课程设计报告结果评定
评语: 成绩: 指导教师签字: 评定日期:
目 录
1.进程调度算法模拟课程设计的目的……………………………………………1 2.进程调度算法模拟课程设计的要求……………………………………………1 3.进程调度算法模拟课程设计报告内容…………………………………………1 3.1前言 ………………………………………………………………………1 3.2进程调度算法模拟设计的环境 …………………………………………1 3.3系统流程图及各模块 ……………………………………………………2 4.总结 …………………………………………………………………………18 参考文献………………………………………………………………………19 参考网站………………………………………………………………………19
进程调度算法模拟
1.进程调度算法模拟课程设计的目的和意义
2013-2014学年,在学习了《操作系统》这门课后,对当中的进程调度算法产生了浓厚的兴趣。各种调度算法,理论上比较好理解。为了加深印象,我决定把各种调度算法用C语言写出来。于是便产生这份从头到尾都让我绞尽脑汁的课程设计。
做这份课程设计,对从事系统开发的人员来说,是必要的,可以在一定程度上为自己以后的发展铺路。虽然用处不是特别明显,但对加深系统调用算法的理解无疑用处是巨大的。
2.进程调度算法模拟课程设计的要求
1. 2. 3. 4.
用C语言写出至少两种进程调度算法。 画出大概流程图。
对算法过程出现的bug进行调试。 展示最后的算法结果
3.1前言:
目前比较常见的几种进程调度算法有:
1. 先到先服务(FCFS)
2. 短进程优先(非抢占和抢占)算法(SPF) 3. 高响应比优先算法 4. 时间片轮转算法
我选出其中三种即先到先服务,短进程优先(2种)和时间片轮转算法进行C语言描 述以加深对这三种算法的理解。
3.2进程调度算法模拟设计的环境
VC++6.0及CodeBlocks,32位计算机WIN7操作系统。
3.3流程图
定义进程结构体:
struct Pro{ int num; //进程号 int time_in; //进程到达时间 int work_time; //进程服务时间
int btime;//用于抢占式进程优先记录该进程开始时间 int l_w_time;//用于抢占式进程优先记录剩余服务时间 int end_time; //记录该进程结束时间,(需要时时监测) int judge; //用于需要时的标记
}pro[10]; //进程结构体
1先到先服务
算法描述:把所有进程按到达先后排序,每次取最先到的进程执行后淘汰,再取下一个,直到所有进程调度完毕。
主要代码:
void FCFS() //先到先服务 { char s[] = {\先到先服务\ printmat(s); PT; int i, j; int min; int t = pro_num;
int begin_time = 0x7fff; for(i = 1; i <= pro_num; i++) { if(pro[i].time_in < begin_time) begin_time = pro[i].time_in; pro[i].judge = 0; //所有进程号查找标志置0,表示还未查找 }
while(t--) {
for(i = 1; i <= pro_num; i++) {
if(pro[i].judge==0) {
min = i; //设其为目前最早到达的时间 for(j = i+1; j <= pro_num; j++) {
if(pro[j].judge == 0 && pro[j].time_in <= pro[min].time_in)//该进程号若还未被查找且小于预设
min = j; }
pro[min].judge = 1; //该进程号被查找过
printf(Format2,pro[min].num,pro[min].time_in,pro[min].work_time,
begin_time,begin_time+pro[min].work_time,begin_time+pro[min].work_time-pro[min].time_in); begin_time += pro[min].work_time; puts(\ } } } printmat(s); puts(\}
程序截图:
2段进程优先非抢占
算法描述:每次选出最短的进程进行调度,调度完毕则淘汰,直到所有进程都调度完毕;
void SJF() //短进程优先(非抢占) {
char s[] = \非抢占短进程优先\ printmat(s); PT; struct Pro *p,*q,*head; int t_num,t_work_time,t_time_in; head = &pro[1]; /************************按所有进程到达时间排序*************/ p = head; while(p - head < pro_num) {
for(q = p+1; q-head < pro_num; q++) {
if(q->time_in < p->time_in || (q->work_time < p->work_time && q->time_in == p->time_in)) {
t_num = p->num,t_time_in = p->time_in,t_work_time = p->work_time; p->num = q->num,p->time_in = q->time_in,p->work_time = q->work_time;
q->num = t_num, q->time_in = t_time_in,q->work_time = t_work_time; } } p++; } /*************************************************************/ /**********找出第一个执行的进程,即最先到达的最短进程*********/ int time = 0; p = head; for(q = head; q < head + pro_num; q++) { q->judge = 0; if(q->time_in < p->time_in) p = q; if(q->time_in == p->time_in && q->work_time < p->work_time) p = q; } int cnt = pro_num; p = head; while(cnt--) { time = time < p->time_in ? p->time_in:time; p->judge = 1; p->begin_time = time; time += p->work_time; p->end_time = time; for(q = head; q < head + pro_num; q++) { if(p->judge == 1 && q->judge == 0) p = q; else if(p->judge == 0 &&(q->work_time < p->work_time)) { p = q; } } } for(p = head; p < head+pro_num; p++) { printf(Format2,p->num,p->time_in,p->work_time,p->begin_time,p->end_time,p->end_time-
p->time_in); puts(\ } printmat(s); puts(\}
3短进程优先(抢占)
算法描述:按时间叠加,当新进程到达时,判断如果比当前执行的进程短,则发生抢占,执行完的淘汰,直到所有进程都调度完毕。 int find(int pp,int time) { int i; for(i = 1; i <= pro_num; i++) { if(pro[pp].l_w_time == 0 ||( pro[i].l_w_time != 0 && pro[i].l_w_time < pro[pp].l_w_time && time >= pro[i].time_in)) pp = i; } return pp; }
void test() { int i; for(i = 1; i <= pro_num; i++) {
4总结:
在本次课程设计过程中,我碰到不少程序调试的问题,但通过不懈努力一一解决了,从中我也学到了很多调试技巧,从而提升了自己在以后程序编写中的技能。
另外,进程调度算法,虽然不是很难,但是再写一次,能加深对算法的理解和运用,好处还是很多的。
参考文献:
《操作系统设计与实现》第三版;电子出版社 《操作系统教程第四版》 清华大学出版社
参考网站
http://zhidao.http://m.njliaohua.com//link?url=VceNdZRpKPK61bUoZG6oMeJ8QJyD7tTNXgnlhCf6O9piadDL01R3jKMp2PuBt3EfXVgKP9DFW-LK9aD-61aqka
正在阅读:
考场之趣作文800字06-16
住宅照明系统设计和供电系统设计10-23
山东中医药大学骨伤科学复习重点09-20
自我反省检讨书1000字精选6篇03-22
我学会游泳小学作文06-15
解三角形全章教案(整理)01-08
中国工会章程11-28
建筑市场秩序规范实施意见03-08
- 计算机试题
- 【2012天津卷高考满分作文】鱼心人不知
- 教育心理学历年真题及答案--浙江教师资格考试
- 20180327-第六届“中金所杯”全国大学生金融知识大赛参考题库
- 洪林兴达煤矿2018年度水情水害预测预报
- 基本要道讲义
- 机电设备安装试运行异常现象分析与对策
- 《有机化学》复习资料-李月明
- 非常可乐非常MC2--非常可乐广告策划提案 - 图文
- 2011中考数学真题解析4 - 科学记数法(含答案)
- 企业人力资源管理师三级07- 09年真题及答案
- 基于单片机的光控自动窗帘控制系统设计说明书1 - 图文
- 20160802神华九江输煤皮带机安装方案001
- (共53套)新人教版一生物必修2(全册)教案汇总 word打印版
- 2014行政管理学总复习
- 中国银监会关于加强地方政府融资平台贷款风险监管的指导意见
- 民宿酒店核心竞争与研究
- 游园活动谜语大全2012
- 河南省天一大联考2016届高三英语5月阶段性测试试题(六)(A卷)
- 小型超市管理系统毕业论文详细设计4
- 调度
- 算法
- 进程
- 操作系统
- 模拟
- 课程
- 设计