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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

进程调度实验实验报告.docx

1、进程调度实验实验报告实验一 进程调度实验专业:信息管理与信息系统学号:2014*姓名:陈*实验日期:2016年11月11日一、 实验目的通过本实验,采用动态优先权优先的调度算法编写和调试一个简单的进程调度程序,加深理解了有关进程控制块、进程队列的概念,并体会了优先权调度算法的具体实施办法。二、 实验要求用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解三、实验方法内容1. 算法设计思路(流程图)2. 算法中用到的数据结构(1)首先定义一个结构体,用以保存一个进程的各种信息,最后一个指针便于将所有进程形成一个链表typedef struct pcbint id;int

2、arriveTime; /到达时间int priority; int cpuTime;int allTime;int startBlock;int blockTime;char state;struct pcb *next;PCB;(2)接着建立一个链表存储所有进程,以结构体PCB为节点(头节点为空节点,从第二个节点开始存储数据)。链表建立过程如下:int i = 0; PCB *head,*p1,*p2; head = (PCB *)malloc(sizeof(PCB); /创建链表头 p2 = head; /三个进程 for(i = 0; i id = pcIdi; p1-priority

3、 = priorityi; p1-cpuTime = cpuTimei; p1-allTime = allTimei; p1-startBlock = startBlocki; p1-blockTime = blockTimei; p1-state = W; /初始状态为就绪 p2-next = p1; p2 = p1; p2-next = NULL; /表尾指针设为空指针,表示链表结束3. 主要模块(函数名)如下:(1) 创建初始队列,用链表存储PCB *createLink();(2)输出链表中所有进程的状态void printLink(PCB *head, int time);(3)判断

4、是否所有进程都已完成int isFinish(PCB *head);(4)判断是否所有未完成的进程都处于阻塞状态int isBlock(PCB *head);(5)获得当前时刻优先权最高且处于就绪状态的进程PCB *getHighPriority(PCB *head);(6)运行(调度函数,在这里展示所有代码)void run(PCB *head);所有代码如下:#include #include /三个进程的初始状态int pcId = 0, 1, 2;int priority = 6, 8, 5;int cpuTime = 0, 0, 0;int allTime = 7, 7, 6;int

5、 startBlock = 6, 4, 2;int blockTime = 3, 8, 6;typedef struct pcb int id; int arriveTime; /到达时间 int priority; int cpuTime; int allTime; int startBlock; int blockTime; char state; struct pcb *next;PCB;/创建初始队列,用链表存储PCB *createLink() /int pcNum = 0; /进程个数 int i = 0; PCB *head,*p1,*p2; head = (PCB *)mall

6、oc(sizeof(PCB); /创建链表头 p2 = head; for(i = 0; i arriveTime = i; /进程到达时间为输入时间 /设置进程的初始状态 p1-id = pcIdi; p1-priority = priorityi; p1-cpuTime = cpuTimei; p1-allTime = allTimei; p1-startBlock = startBlocki; p1-blockTime = blockTimei; p1-state = W; /初始状态为就绪w p2-next = p1; p2 = p1; p2-next = NULL; /表尾指针设为空

7、指针,表示链表结束 return head;/输出所有队列中所有进程的状态void printLink(PCB *head, int time) printf(当前时刻为:%dn,time); printf(ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATEn); PCB *p1 = head-next; while(p1 != NULL) printf(%d %d %d %d %d %d %cn ,p1-id,p1-priority,p1-cpuTime,p1-allTime,p1-startBlock,p1-blockTime,p1

8、-state); p1 = p1-next; /指向下一个节点 printf(n); /空行 return ;/判断是否所有进程都已完成int isFinish(PCB *head) PCB *p1 = head-next; while(p1 != NULL) if(p1-state != F) /如果有未完成的进程,返回0 return 0; p1 = p1-next; return 1; /所有进程都完成了,返回1/判断是否所有未完成的进程都处于阻塞状态int isBlock(PCB *head) PCB *p1 = head-next; while(p1 != NULL) if(p1-s

9、tate != F & p1-state != B) /如果有未阻塞的进程,返回0 return 0; p1 = p1-next; return 1; /所有进程都阻塞了,返回1/获得当前时刻优先权最高且处于就绪状态的进程PCB *getHighPriority(PCB *head) int pri = -32768; /优先权 PCB *p1,*p2 = NULL; p1 = head-next; while(p1 != NULL) if(p1-state = W & p1-priority pri) pri = p1-priority; /获得优先权更高的进程 p2 = p1; p1 =

10、p1-next; return p2; /返回优先权最高的进程/运行void run(PCB *head) int time = 0; /时刻 int i; int mark; PCB *p1,*p2; while(!isFinish(head) mark = 0; p1 = getHighPriority(head); /p1所指进程优先权最高,获得运行资格 if(p1 != NULL) p1-state = R; for(i = 1;i next; while(p2 != NULL) if(p2 = p1 & p2-state != F) p2-priority -= 2; /进程每运行一

11、个时间片,优先权减2。 p2-cpuTime+; p2-allTime-; if(p2-allTime = 0) p2-state = F; mark = 1; else if(p2-cpuTime % p2-startBlock = 0) p2-state = B; /如果进程运行了startBlock个时间片,进入阻塞状态 mark = 1; else if(p2 != p1 & p2-state != F) if(p2-state = W) p2-priority+; /进程在就绪队列中呆一个时间片,优先权增加1 if(p2-state = B) p2-blockTime -; if(p

12、2-blockTime = 0) p2-state = W; /阻塞时间结束,回到就绪队列 p2-blockTime = blockTimep2-id; p2 = p2-next; time+; printLink(head,time); if(isBlock(head) break; if(mark = 1) break; if(p1 != NULL & p1-state = R) p1-state = W; /主函数int main() PCB *head; head = createLink(); printLink(head,0); run(head); return 0;四、实验结果

13、1. 执行结果:当前时刻为:0ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE0 6 0 7 6 3 W1 8 0 7 4 8 W2 5 0 6 2 6 W当前时刻为:1ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE0 7 0 7 6 3 W1 6 1 6 4 8 R2 6 0 6 2 6 W当前时刻为:2ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE0 8 0 7 6 3 W1 4 2 5 4 8 R2 7 0

14、 6 2 6 W当前时刻为:3ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE0 6 1 6 6 3 R1 5 2 5 4 8 W2 8 0 6 2 6 W当前时刻为:4ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE0 4 2 5 6 3 R1 6 2 5 4 8 W2 9 0 6 2 6 W当前时刻为:5ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE0 5 2 5 6 3 W1 7 2 5 4 8 W2 7 1

15、 5 2 6 R当前时刻为:6ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE0 6 2 5 6 3 W1 8 2 5 4 8 W2 5 2 4 2 6 B当前时刻为:7ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE0 7 2 5 6 3 W1 6 3 4 4 8 R2 5 2 4 2 5 B当前时刻为:8ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE0 8 2 5 6 3 W1 4 4 3 4 8 B2 5 2

16、 4 2 4 B当前时刻为:9ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE0 6 3 4 6 3 R1 4 4 3 4 7 B2 5 2 4 2 3 B当前时刻为:10ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE0 4 4 3 6 3 R1 4 4 3 4 6 B2 5 2 4 2 2 B当前时刻为:11ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE0 2 5 2 6 3 R1 4 4 3 4 5 B2 5

17、 2 4 2 1 B当前时刻为:12ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE0 0 6 1 6 3 B1 4 4 3 4 4 B2 5 2 4 2 6 W当前时刻为:13ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE0 0 6 1 6 2 B1 4 4 3 4 3 B2 3 3 3 2 6 R当前时刻为:14ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE0 0 6 1 6 1 B1 4 4 3 4 2 B

18、2 1 4 2 2 6 B当前时刻为:15ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE0 0 6 1 6 3 W1 4 4 3 4 1 B2 1 4 2 2 5 B当前时刻为:16ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE0 1 6 1 6 3 W1 4 4 3 4 8 W2 1 4 2 2 4 B当前时刻为:17ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE0 2 6 1 6 3 W1 2 5 2 4

19、8 R2 1 4 2 2 3 B当前时刻为:18ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE0 3 6 1 6 3 W1 0 6 1 4 8 R2 1 4 2 2 2 B当前时刻为:19ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE0 1 7 0 6 3 F1 1 6 1 4 8 W2 1 4 2 2 1 B当前时刻为:20ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE0 1 7 0 6 3 F1 -1 7

20、0 4 8 F2 1 4 2 2 6 W当前时刻为:21ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE0 1 7 0 6 3 F1 -1 7 0 4 8 F2 -1 5 1 2 6 R当前时刻为:22ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE0 1 7 0 6 3 F1 -1 7 0 4 8 F2 -3 6 0 2 6 F2. 结果分析 (1) 每对一个进程进行一次操作(优先级加减、CPUtime加减等)后,就要判断是否要进行状态改变。情况如下:运行状态的进程运行一个

21、时间片之后,CPUTime加1,AllTime加1,此时判断AllTime是否为零,为零则该进程状态设为F(完成),否则不变;再判断CPUTime对startTime求余是否为零,为零则该进程状态设为B(阻塞),否则不变;:阻塞状态的进程经过一个时间片之后,blockTime减1,此时判断blockTime是否为零,为零则该进程状态设为W(就绪),否则不变;(2) 若所有未完成的进程都进入阻塞状态,则按照对阻塞进程的操作进行两个时间片。再判断是否有进程可以获得运行资格。3. 实验总结(1) 通过本实验,我更加理解了什么是进程,也对高优先级调度方法有了更深层次的了解。借助本实验,我也加深了对其他调度算法理解。(2) 本次试验,我通过实践,加深了理论知识。通过理论与实践的结合,更好地掌握了知识。这也是以后要继续实行的学习方法。C语言编程技能与操作系统知识的相结合,让我在提高编程能力的同时,加强了与实际问题的结合,提高了对实际问题的解决能力。(3)

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

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