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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

用C语言模拟Linux操作系统下处理机调度实验报告Word下载.docx

1、2、按时间片轮转法实现处理机调度:1)每个进程用一个进程控制块PCB来代表,进程控制块包括进程名(进程的标识)、指针(把进程连成循环队列,用指针指出下一个进程的进程控制块首地址,最后一个进程中的指针指出第一个进程的进程控制块首地址)、已运行时间、状态(就绪、结束);3)用指针把给定的进程按顺序排成循环队列,用另一标志单元记录轮到的进程;4)每模拟运行一次进程,已运行时间加一;5)进程运行一次后,把该进程控制块的指针值送到标志单元,以指示下一个轮到的进程。若该进程要求运行时间已运行时间,未执行结束,待到下一轮再执行;若要求运行时间=已运行时间,状态改为结束,退出队列;6)若就绪队列不为空,重复步

2、骤四和五;3、程序设计:1、优先数调度算法:/*我的思路:先主函数输入要进行调度的进程数,然后调用函数create(),把进程的信息输入,再调用函数insert(),把输入的函数按照优先数的大小排成链表,然后调用函数prio()实现优先数调度*/#include stdlib.hstring.htypedef struct node char name10; /*进程名*/ int prio; /*优先数*/ int cputime; /*占用cpu时间*/ int needtime; /*要求运行时间*/ char state; /*状态*/ struct node *next; /*指针*

3、/PCB;PCB *ready,*run,*finish; /*就绪 执行 结束指针*/int N;void prt() /*输出函数,可以方便看到进程执行的演示*/ PCB *p; printf( NAME CPUTIME NEEDTIME PRIORITY STATUSn); if(run!=NULL) printf( %-10s%-10d%-10d%-10d %cn,run-name,run-cputime,run-needtime,run-prio,run-state); /*输出执行的进程的信息*/ p=ready; while(p!=NULL) printf(,p-name,p-c

4、putime,p-needtime,p-prio,p- /*输出就绪进程的信息*/ p=p-next; p=finish;=NULL) /*输出结束队列的信息*/ getchar(); /*使用getchar()函数可以让输出时停留画面,等待人按回车继续*/void insert(PCB *q) /*插入新进程,把进程按优先数大小排序*/ PCB *p1,*s,*r; int b; s=q; /*指针s指向新要插入的进程*/ p1=ready; /*指针p1指向原来的进程队列的队首*/ r=p1; /*使用指针r是指向p1前面的进程*/ b=1; while(p1!=NULL)&b) if(p

5、1-prio=s-prio) r=p1; p1=p1- /*新进程的优先数小,则p1 else b=0; 指向下一个进程继续比*/ if(r!=p1) r-next=s; s-next=p1; /*新进程找到位置,插在r和p1之间*/ else s- ready=s; /*新进程的优先数最大,插在队首,并void create() 修改就绪队首ready指针*/ PCB *p; int i;ready=NULL; run=NULL; finish=NULL;printf(Please enter the name and time and priority of PCB:n/*输入进程名、和*

6、/for(i=0;ineedtime); /*输入进程要求运行时间*/prio); /*输入进程优先数*/ p-cputime=0;state=W; /*表示就绪队列中未在队首先执行,但也是就绪状态*/ if (ready!=NULL) insert(p); /*就绪队首不为NULL,插入新进程*/ else p-next=ready; ready=p; /*否则先插在NULL前*/ Display is going to start: n*n prt(); run=ready; /*队列排好,run指向就绪队列队首*/ ready=ready- /*ready指向下一个进程,这样当进程执行时

7、如果优先数小于其他的进程,应该先进行优先数最大的进程*/ run-R /*队首进程的状态为就绪*/void prio() while(run! run-cputime=run-cputime+1; /*运行一次cpu占用时间加一*/needtime=run-needtime-1; /*运行一次要求运行时间减一*/prio=run-prio-1; /*运行一次优先数减一*/ if(run-needtime=0) /*若要求运行时间为0时*/next=finish; /*退出队列*/ finish=run; /*finish为结束进程的队列 */E /*修改状态为结束*/ /*释放run指针*/=

8、NULL) /*创建新就绪队列的头指针*/ run=ready; else if(ready!(run-prioprio) /*队首进程的优先数比它下一个小,且下一个进程不为NULL时执行*/next=NULL; /*队首进程退出进程队列*/ insert(run); /*在进程队列中重新插入原来的队首进程*/ /*重新置就绪队列的头指针*/void main() printf(Please enter the total number of PCB:N); create(); /*模拟创建进程,并输入相关信息*/ prio(); /*优先数调度算法*/2、时间片轮转法: int count;

9、 /*计数器,判断是否=时间片的大小*/PCB *ready,*run,*finish,*tail; /*就绪 执行 结束 尾指针*/int N,round; /*略 同优先数法*/ void insert(PCB *q) /*在队尾插入新的进程*/ tail-next=q; tail=q; q-void create() Please enter the name and time of PCB: else p- tail=p; /*ready指向下一个进程*/void count()count=run-count+1; /*运行一次计数器加一*/count=round) /*如果时间片到*

10、/count=0; /*计数器置0*/ if(ready!=NULL) /*如就绪队列不空*/Please enter the timeround(dont be too big,1 or 2 is best):round); /*输入时间片的大小,不应太大*/ count();四、程序运行的初值及执行结果:以下是输出的结果(符合优先数调度):2、时间片轮转法调度算法:以下是输出结果(符合时间片轮转法调度):五、结果分析:在优先数调度中,程序首先输出各个进程的初始值,按回车之后,由于进程p1的优先数最大,排在就绪队列的队首,首先执行,执行一次后优先数减一,要求运行时间减一,cpu占用时间加一,

11、再和其他的进程比较优先数,还是最大,继续执行,再执行一次后优先数小于进程p3,所以下一个执行的是p3,按这样的顺序,在就绪队列队首的进程状态为R,不在队首的就绪进程状态为W,结束的进程状态为E,一直执行,直到所有进程状态都为,调度完成。在时间片轮转法调度中,先设置了时间片的大小为1,然后各个进程按循环队列依次执行,每执行一次,要求运行时间减一,若等于0了,则状态改为,退出队列,直到所有进程的状态为6、实验小结: 本次实验虽然为模拟在单处理机情况下处理机的调度,但深深帮我理解了处理机调度的工作,也对进程的几种状态就绪、结束等有了明确的认识。优先数调度的思考度更强点,在编写C程序的时候,对于其中的进程插入和优先数调度两个函数思考了蛮久,每执行一次进程后,优先数的改变将又要重新排就绪队列,这也是实验的难点所在,自己原来学C的时候对于队列不是很熟,也借本次实验又巩固了原来的知识。也许是有了优先数调度的基础,时间片轮转法调度的编写来得相对轻松,它的insert()函数比较简单,不用根据优先数来排队,而是直接插在队尾即可。另外,通过本次实验,我对函数的分模块书写的优点感受颇深,方便了移植和修改,减轻了下次编写的负担,这也是我们以后面向程序设计的要求所在。

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

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