ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:163.83KB ,
资源ID:5820173      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5820173.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(计算机操作系统处理机调度实验报告.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

计算机操作系统处理机调度实验报告.docx

1、计算机操作系统处理机调度实验报告中南大学实验名称:处理机调度课程名称:计算机操作系统学生姓名 盛 希 玲 学 号 0903060215 学 院 信息科学与工程学院 专业班级 电子信息工程0602 完成时间 2008年10月12日 目 录一 实验内容 2二 实验目的 2三 实验题目 2四 基本思想 2五 算法分析 2六 流程图 3七 算法描述 4八 运行输出结果 9一 实验内容选择一个调度算法,实现处理机调度。二 实验目的多道系统中,当就绪进程数大于处理机数时,须按照某种策略决定哪些进程优先占用处理机。本实验模拟实现处理机调度,以加深了解处理机调度的工作。三 实验题目设计一个按优先权调度和时间片

2、轮转算法实现处理机调度的程序。四 基本思想 先选择时间片的个数和每个时间片需要的时间,正在运行的进程每运行一秒其优先权数目加一,即其优先权减小。每个时间片运行结束后,选择进入时间片进程优先权数目最小的进程,开始下一个时间片的运行。如果有进程运行结束,则离开,再在就绪队列中选择优先权数目最小的进程进入。在运行期间,如果有新的进程来到,按优先权大小放入就绪队列中。五 算法分析 定义一个结构体,此包含了PCB的信息: struct PCB char PID5; /*进程名*/ int needtime; /*要求运行的时间*/ int cputime; /*已运行时间*/ int priority;

3、 /*优先权(越小越高)*/ int starttime; /*进入就绪队列的时间*/ int overtime; /*运行完成的时间*/ int state; /*状态:1就绪2运行3完成*/ struct PCB *next;子函数struct PCB *create(int num,int n)用来建立一个按优先级大小排列的就绪进程链表和一个按时间先后循序排列的将进入就绪进程的链表。main()函数中用一while循环输出进入时间片的进程状态。六 流程图七 算法描述#define NULL 0#define LEN sizeof(struct PCB)#includestdio.h#in

4、cludestdlib.hstruct PCB char PID5; /*进程名*/ int needtime; /*要求运行的时间*/ int cputime; /*已运行时间*/ int priority; /*优先权(越小越高)*/ int starttime; /*进入就绪队列的时间*/ int overtime; /*运行完成的时间*/ int state; /*状态:1就绪2运行3完成*/ struct PCB *next;struct PCB *create(int num,int n) /*创建进程,并将进程按优先级顺序插入队列中*/ struct PCB *head,*p,*

5、p1,*p2; int i; head=NULL; /*头指针指零*/ for(i=1;iPID); printf(要求运行的时间:); /*输入要运行的时间*/ scanf(%d,&p-needtime); p-cputime=0; /*占用处理机的时间赋为零*/ printf(优先权:); /*输入优先权*/ scanf(%d,&p-priority); if(n=1) p-starttime=0; /*进入就绪队列的时间赋为零*/ else printf(进入就绪队列时间:); /*输入进入就绪队列的时间*/ scanf(%d,&p-starttime); p-overtime=-1;

6、/*运行没有结束所以运行完成的时间赋为-1*/ p-state=1; /*状态赋为就绪状态*/ p1=head; /*p1指针指向头指针*/ if(head=NULL) /*如果头指针为零将头指针指向新建立的进程*/ head=p;head-next=NULL; else /*头指针不为零的情况*/ if(n=1) while(p1!=NULL&p-priorityp1-priority) /*查找插入点*/ p2=p1; p1=p1-next; else while(p1!=NULL&p-starttimep1-starttime) /*查找插入点*/ p2=p1; p1=p1-next;

7、if(head=p1) /*优先权的值最小作为表头*/ p-next=head;p2=head=p; else /*否则的话插入*/ p2-next=p;p-next=p1; return(head);void main() char now5; int cho,num,num1,timepiece,time,i,j,k,flag,choo,clock=0; struct PCB *head,*head1,*over,*later,*l,*l1,*l2,*p,*p0,*p1,*p2,*q,*q1,*q2,*q3; over=NULL; printf(初始化进程.n); printf(输入总的就

8、绪进程数:); scanf(%d,&num); head=create(num,1); /*建立就绪进程的链表*/ printf(输入将会就绪的进程数:); scanf(%d,&num1); /*建立将会进入就绪进程的链表*/ later=create(num1,2); printf(cpu是否开始运行:1是 2不是-); scanf(%d,&cho); if(cho=1) /*处理机开始进行调度*/ printf(现在的时间是:); scanf(%s,now); printf(显示所有就绪的进程:n); p2=head; printf(进程名t要求运行时间t已运行时间t优先权t状态(1就绪2

9、运行3结束)n); while(p2!=NULL) printf(%st%dtt%dtt%dt%dn,p2-PID,p2-needtime,p2-cputime,p2-priority,p2-state);p2=p2-next; printf(请输入时间片总数:); scanf(%d,&timepiece); printf(请输入时间片的时间:); scanf(%d,&time); printf(运行正式开始!n); head1=head; printf(tt进程名t要求运行时间t已运行时间t优先权t状态n); for(i=1;inext; else break; p-next=NULL; w

10、hile(head1!=NULL) /*就绪进程头指针不为零就循环*/ head1-state=2; /*状态:1就绪2运行3完成*/ for(j=1;jstarttime) /*如果将进入就绪队列的进程时间到达加入就绪队列*/ l=later; l1=head; later=later-next; if(head=NULL) head=l;head-next=NULL; else while(l1!=NULL&l1-prioritypriority) l2=l1;l1=l1-next; if(l1=head) l-next=head; head=l; else l2-next=l; l-ne

11、xt=l1; flag=0; printf(n%3d秒 时间片第%d秒 ,clock,j); q=head1; if(head1-needtimehead1-cputime) /*以运行时间和优先权都加1*/ head1-cputime+; head1-priority+; while(q) /*运行队列不为零输出其信息*/ if(q=head1) printf(%st%dtt%dtt%dt%dn,q-PID,q-needtime,q-cputime,q-priority,q-state); else printf(tt %st%dtt%dtt%dt%dn,q-PID,q-needtime,q

12、-cputime,q-priority,q-state); q=q-next; if(head1-needtime=head1-cputime) /*运行完成将其放入over为头指针的链表中*/ head1-state=3; head1-overtime=clock; if(over=NULL) over=head1;head1=head1-next;over-next=NULL; else if(over!=NULL&head1!=NULL) p1=head1-next; p0=over; over=head1; over-next=p0; head1=p1; flag=1; if(flag

13、=1) break; if(flag=1) /*有进程结束的情况*/ if(head!=NULL) /*就绪队列不为零将优先权最高的放入运行链表中*/ q1=head; head=head-next; q2=head1; while(q2!=NULL&q2-prioritypriority) q3=q2;q2=q2-next; if(q2=head1) q1-next=head1; head1=q1; else q3-next=q1; q1-next=q2; else /*无进程结束的情况,寻找优先权最高的运行*/ head1-state=1; q1=head1; head1=head1-ne

14、xt; q2=head1; while(q2!=NULL&q2-prioritypriority) q3=q2;q2=q2-next; if(q2=head1) q1-next=head1;head1=q1; else q3-next=q1;q1-next=q2; printf(cpu结束运行!n); printf(是否输出所有结束的进程:1是2不是-);scanf(%d,&choo);if(choo=1) /*输出所有完成运行的进程*/ printf(开始时间:%sn,now); printf(进程名t要求运行时间t进入就绪队列的时间t运行完成的时间n); while(over!=NULL) printf(%st%dtt%dttt%dn,over-PID,over-needtime,over-starttime,over-overtime); over=over-next; 八 运行输出结果初始化进程如右图显示现在的时间和所有就绪的进程输入时间片的总数和每个时间片的时间运行时显示的信息

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1