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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

操作系统进程控制和调度实验报告.docx

1、操作系统进程控制和调度实验报告实 验 报 告课程名称操作系统班级实验日期2013-12-04姓 名学号实验成绩实验名称进程控制和调度实验目的以及要求用高级语言编写和调试进程调度的模拟程序,以加深对进程调度算法的理解。实验环境Microsoft Visual Studio实验内容1、 自定义进程相关的数据结构;2、 利用MFC类库中的栈(queue),链表(list),向量(vector)等模板模拟进程控制块队列、进程控制块优先级队列、统计信息链表及其指令集合;3、 利用MSDN和MFC API编程实现常见的进程控制和调度策略(先来先服务算法(FCFS调度法)、短作业(进程)优先调度算法(SJ调

2、度算法)、最高优先权优先调度算法(优先调度算法)、时间片轮转算法(RR调度算法);4、 测试以上进程调度策略的周转时间、带权周转时间、平均周转时间和平均带权周转时间,并定性评价它们的性能。算法描述及实验步骤创建和显示进程状态算法:PCB *CreatPCB(int n)FCFS调度算法功能:根据进程到达的顺序进行调度,先到达的进程先执行。在就绪队列中排的越靠前越先执行算法:void FCFS(PCB *head,PCB *over)SJ调度算法功能:从就绪队列中选出剩余执行时间最短的就绪进程进行执行。执行结束后继续从就绪队列中选出剩余执行时间最短的。直到所有进程都被执行完。算法:void SJ

3、F(PCB *head,PCB *over)/sjf算法优先调度算法(Prio):功能:从就绪队列中选出优先级别最高的进程进行执行。重复进行。直到所有的所有的进程执行完毕。算法:void Prio(PCB *head,PCB *over)RR调度算法:功能:根据时间片的大小,对每个进程依次执行。时间片用完之后进程进入阻塞的状态,重新得到时间片后接着执行。直到完成。算法:void RR(PCB *head,PCB *over,int t,int k)/时间片轮转法调试过程及实验结果先来先服务算法(FCFS调度法):短作业(进程)优先调度算法(SJ调度算法):最高优先权优先调度算法(优先调度算法)

4、:时间片轮转算法(RR调度算法):总结优点:程序中的数组采用了动态开辟的方法,有效地减少了对于空间的占用。提高了空间的利用率。输出的界面比较的简洁,直接给出了分配资源的顺序。资源请求算法则直接给出了请求后造成的情况,比较的明了。缺点:程序仍然存在很多地方可以改进。比如输出界面,可以做的更漂亮。部分地方可以采用其他的方法。附录#include#include#define Ready 0#define Running 1#define Block 3#define Over 4typedef struct PCBNode int ID; int Priority; int CPUtime; in

5、t Alltime; int Arrivetime; int state; int counter; struct PCBNode *next;PCB;/定义数据结构PCB *run;PCB *ready;PCB *over;PCB *head;/定义状态量int Min(PCB *head)/挑选出队列中的拥有最小alltime 值的块,返回块号,用于sjf算法 PCB *p;/q用来记录这个块的地址 int min,id;/记录最小值和块号 p=head-next; if(p) min=p-Alltime; id=p-ID; while(p-next) if(minp-next-Allti

6、me) min=p-next-Alltime; id=p-next-ID; p=p-next; else p=p-next; return id; int Max(PCB *head)/挑选出队列中的拥有最大优先级的块,返回块号,用于prio算法 PCB *p;/q用来记录这个块的地址 int max,id;/记录最大和块号 p=head-next; if(p) max=p-Priority; id=p-ID; while(p-next) if(maxnext-Priority) max=p-next-Priority; id=p-next-ID; p=p-next; else p=p-nex

7、t; return id; PCB *CreatPCB(int n) int i; PCB *p,*q; head=(PCB*)malloc(sizeof(PCB); head-next=NULL; p=head; for(i=1;iID=i; q-CPUtime=0; q-Alltime=rand()%200; q-Priority=rand()%10; q-state=Ready; q-Arrivetime=0; p-next=q; p=q; q-next=NULL; head-next-Priority=0; return head;/创建pcb块void Display(PCB *he

8、ad) PCB *p; p=head-next; printf(ID Arrivetime CPUtime(已占用) Alltime Priority state n); while(p) printf(%d ,p-ID); printf(%d ,p-Arrivetime); printf(%d ,p-CPUtime); printf(%d ,p-Alltime); printf(%d ,p-Priority); printf(%d n,p-state); p=p-next; /显示PCB块void FCFS(PCB *head,PCB *over) PCB *p,*q; int j=0; i

9、nt n=0,s=0; double m; ready=head; p=ready-next; q=over; while(p) p-state=Running; ready-next=p-next; n=p-Alltime+n; p-CPUtime=p-Alltime; p-Alltime=0; s=s+n; p-next=NULL; q-next=p; p-state=Over; q=q-next; q-next=NULL; p=head-next; j+; printf(第%d次执行算法后的就绪队列:n,j); Display(head); m=(double)s/j; printf(完

10、成顺寻为:n); Display(over); printf(n); printf(每个进程等待的平均时间为:%lfn,m); printf(所有进程等待的总时间为:%d,s);void SJF(PCB *head,PCB *over)/sjf算法 PCB *p,*q,*b,*o;/b 用来记录该块的地址 int s;/记录块号 int m,n,h=0,d=0,j=0; double f; p=head-next; q=over; o=head; printf(完成顺寻为:n); m=p-ID; n=p-Alltime; s=Min(head); b=p-next; printf(%d:n,s

11、); while(head-next) while(s!=p-ID) o=p; p=p-next; d=p-Alltime+d; p-CPUtime=p-Alltime; p-Alltime=0; h=d+h; b=p; q-next=b; o-next=p-next; p=head-next; b-next=NULL; o=head; q=q-next; s=Min(head); j+; printf(第%d次执行算法后的就绪队列:n,j); Display(head); f=(double)h/j; printf(完成顺寻为:n); Display(over); printf(每个进程等待

12、的平均时间为:%lfn,f); printf(所有进程等待的总时间为:%d,h);void Prio(PCB *head,PCB *over) PCB *p,*q,*b,*o;/b 用来记录该块的地址 int s;/记录块号 int m,n,h=0,d=0,j=0; double f; p=head-next; o=head; q=over; printf(当前拥有最大优先级的块号为:n); m=p-ID; n=p-Alltime; s=Max(head); b=p-next; printf(%d:n,s); while(head-next) while(s!=p-ID) o=p; p=p-n

13、ext; d=p-Alltime+d; p-CPUtime=p-Alltime; p-Alltime=0; h=d+h; b=p; q-next=b; o-next=p-next; p=head-next; b-next=NULL; o=head; q=q-next; s=Max(head); j+; printf(第%d次执行算法后的就绪队列:n,j); Display(head); f=(double)h/j; printf(完成顺寻为:n); Display(over); printf(每个进程等待的平均时间为%lfn,f); printf(所有进程等待的总时间为:%d,h);void

14、RR(PCB *head,PCB *over,int t,int k)/时间片轮转法 /k用来记录剩余要执行的进程数目 PCB *p,*q,*r,*o,*tail;/o用来记录当前块的地址 int n=0,s=0,f; double h; f=k; p=head-next; while(p-next) tail=p; p=p-next; printf(执行顺序为:n); tail=p; o=p;/前驱 tail-next=head-next; p=head-next; q=over; while(k0) r=head-next; if(p-Alltimet)/该进程还未执行完成 p-Allti

15、me=p-Alltime-t; n=n+t; s=s+n; o=p; printf(执行进程%d ,p-ID); printf(该进程的Alltime变为%dn,p-Alltime); p=p-next; else/该进程可以完成了 printf( 完成进程:%d n,p-ID); n=n+p-Alltime; s=s+n; p-Alltime=0; o-next=p-next; q-next=p; q=q-next; q-next=NULL; p=o-next; k-; h=(double)s/f; printf(完成顺寻为:n); Display(over); printf(每个进程等待的

16、平均时间为:%lfn,h); printf(所有进程等待的总时间为:%d,s);void main() int n,m,t; printf(|-|); printf(| 进 程 调 度 的 模 拟 |); printf(|-|); printf(ttt|-选项-|n); printf(ttt| 1. FCFS调度法 |n); printf(ttt|-|n); printf(ttt| 2. SJF调度算法 |n); printf(ttt|-|n); printf(ttt| 3. 优先调度算法 |n); printf(ttt|-|n); printf(ttt| 4. RR调度算法 |n); pri

17、ntf(ttt|-|n); printf(n); printf(请输入要创建的进程数目:); scanf(%d,&n); head=CreatPCB(n); printf(创建的就绪队列为:n); Display(head); printf(请选择要进行的操作:); scanf(%d,&m); over=(PCB*)malloc(sizeof(PCB); over-next=NULL; switch(m) case 1: system(CLS); FCFS(head,over); break; case 2: system(CLS); SJF(head,over); break; case 3: system(CLS); Prio(head,over); break; case 4: system(CLS); printf(请输入时间片的大小:); scanf(%d,&t); RR(head,over,t,n); break; /Release(head);

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2