2022年进程调度vc代码计算机操作系统实验

上传人:re****.1 文档编号:567311819 上传时间:2024-07-19 格式:PDF 页数:11 大小:336.52KB
返回 下载 相关 举报
2022年进程调度vc代码计算机操作系统实验_第1页
第1页 / 共11页
2022年进程调度vc代码计算机操作系统实验_第2页
第2页 / 共11页
2022年进程调度vc代码计算机操作系统实验_第3页
第3页 / 共11页
2022年进程调度vc代码计算机操作系统实验_第4页
第4页 / 共11页
2022年进程调度vc代码计算机操作系统实验_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《2022年进程调度vc代码计算机操作系统实验》由会员分享,可在线阅读,更多相关《2022年进程调度vc代码计算机操作系统实验(11页珍藏版)》请在金锄头文库上搜索。

1、个人资料整理仅限学习使用实验报告 1 课程 计算机操作系统实验名称进程调度第1页班级 11计本学号 105032018130 姓名风律澈实验日期: 2018年 10月4日报告退发 (订正 、 重做 一、实验目的:多道系统中,当就绪进程数大于处理机数时,必须按照某种策略决定选取哪些进程占用处理器。本实验模拟实现处理器调度,进一步加深对处理器调度算法的理解。二、实验内容:选择某种调度算法,设计一个实现处理器调度的程序。三、实验环境:VS2008,window7 操作系统四、实验步骤:1、设计一个有N个进程并发的处理器调度程序,每个进程由一个PCB表示, PCB包含以下信息:进程名、优先数、要求服务

2、时间、进程状态。2、可分别用链表表示就绪队列,用队列中的结构体结点表示进程。3、已知各进程的的到达时间等如下:进程名到达时间服务时间优先数A 0 3 12 B 1 5 31 C 2 2 21 D 3 4 10 4、分别实现下面两种调度算法按FCFS调度算法实现处理器调度;按优先数调度算法实现处理器调度。五、实验程序:链表队列 此部分头文件名:link.h #include using namespace std。/ / 修改部分 / /节点定义typedef struct listnode listnode *prior 。char name。/进程名int serve_time。/服务时间i

3、nt priors 。 /优先权int arrival_time 。/到达时间float start_time 。/开始时间float finish_time 。/结束时间float turnover_time 。/周转时间精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 11 页个人资料整理仅限学习使用float t_t_s。/带权重周转时间int state。listnode *next 。progress。/表头定义typedef struct listnode *head。int length 。listlead,list 。/输

4、出函数void coutdata(listnode *p cout 进程名为 name 。cout 服务时间为 serve_time 。cout 优先权为 priors 。cout 到达时间为 arrival_time 。cout 开始时间为 start_time 。cout 结束时间为 finish_time 。cout 周转时间为 turnover_time 。cout 带权重周转时间为t_t_s e.name=n。e.serve_time=s。e.priors=p。e.arrival_time=time 。 void cindata(listnode &e coute.name。cout

5、e.serve_time。coute.priors 。 /初始化void initilead(listlead &L L.head=NULL 。L.length=0 。 void initinode(listnode &e,char n,int s,int p,int timee.prior=NULL 。e.next=NULL 。e.finish_time=0 。e.start_time=0。e.state=0。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 2 页,共 11 页个人资料整理仅限学习使用e.turnover_time=0 。e.t_

6、t_s=0。cindata(e,n,s,p,time。 /拷贝函数void copy(listnode* p,listnode &e e.arrival_time=p-arrival_time 。e.finish_time=p-finish_time。e.name=p-name。e.next=p-next。e.prior=p-prior 。e.priors=p-priors 。e.serve_time=p-serve_time。e.start_time=p-start_time 。e.state=p-state。 / / / 一些复用函数 / / / listnode* fin_i(listl

7、ead L,int i while(iL.length couti 位置不合法!请重新输入,位置为i 。 listnode*p=L.head 。int j=1 。if(i while(j p=p-next 。j+ 。 return p。 else i=L.length-i 。if(i=0 return L.head。 else while(j p=p-prior 。j+ 。 return p。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 3 页,共 11 页个人资料整理仅限学习使用 / / 正式使用部分 / / / / / 查找 / /使用说明:

8、 L表示表头, i表示查找位置,e表示提取出该元素的备份/ / / void fin_elem(listlead L,int i,listnode &e listnode* p 。p=fin_i(L,i 。copy(p,e。 / / / * 插入 * / /使用说明: L表示表头, i表示位置 ,表尾 i为L.Length+1 , e表示插入元素,e必须是 new出来的空间 / / void insert(listlead &L,int i,listnode &e while(iL.length+1 couti 位置不合法!请重新输入,位置为L.length+1i 。if(i=1/ 表头插入i

9、f(L.length=0 L.head=&e 。e.next=&e 。L.length+ 。/ 空表首元插入else if(L.length=1/一元表头插入L.head-next=&e 。e.next=L.head。L.head-prior=&e 。L.length+ 。 else/超一元表头插入listnode* p=L.head-next 。p-prior=&e 。e.next=p。L.head-next =&e 。L.length+ 。 else if(i1&i 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 4 页,共 11 页个人资料整

10、理仅限学习使用listnode *p,*q 。/表中插入p=fin_i(L,i-prior。q=p-next 。p-next=&e 。e.next=q。q-prior=&e 。e.prior=p。L.length+ 。 else/表尾插入listnode*p=L.head 。e.next=p-next。e.prior=p。p-next=&e 。L.head=&e 。L.length+ 。 / / / * 优先插入 * /使用说明: L表示表头, e表示插入元素 ,e必须是 new出来的空间 / /使用时需要修改比较元素 ,可以通过修改比大小来决定小头还是大头/ void prior_inser

11、t(listlead &L,listnode &e if(L.length=0 insert(L,1,e 。else int in=1 。int i=1 。listnode* p=new listnode( 。initinode(*p,x,0,0,0 。/需要自适应部分/ do fin_elem(L,in,*p 。if(e.priorsp-priors/ 需要自适应部分/ break。else in+。while(in。insert(L,in,e 。 / 删除 / /使用说明: L表示表头, i表示删除位置 / / / void del_elem(listlead &L,int i 精选学习资

12、料 - - - - - - - - - 名师归纳总结 - - - - - - -第 5 页,共 11 页个人资料整理仅限学习使用while(iL.length couti 位置不合法!请重新输入,位置为i 。 listnode *p,*q 。if(i=1/ 表头删除if(L.length=1/一元表头删除delete L.head。L.head=NULL 。L.length=0 。 else if(L.length=2/二元表头删除listnode* p=L.head 。listnode* q 。q=p-next 。p-next=p 。p-prior=NULL 。L.length- 。 els

13、e/多元表头删除listnode* p=L.head 。listnode* q 。q=p-next 。p-next=q-next 。q-next-prior=NULL。delete q。L.length- 。 else if(i1&i/表中删除p=fin_i(L,i-prior。q=p-next 。p-next=q-next 。q-next-prior=p 。delete q。L.length- 。 else/表尾删除listnode *p=L.head-prior 。p-next=L.head-next 。delete L.head 。L.head=p。L.length- 。 / / 精选学

14、习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 6 页,共 11 页个人资料整理仅限学习使用/ 修改 / /使用说明: L表示表头, i表示修改元素的位置/ / / void modify(listlead &L,int i listnode* p 。p=fin_i(L,i 。cindata(*p 。 / / / 释放 / /使用说明:直接释放表L的全部元素 / / / void del_list(listlead &L listnode *p,*q 。p=L.head。if(L.length=1 del_elem(L,1 。 else q=p-prio

15、r 。while(q-prior!=NULL delete p。p=q。q=p-prior 。 delete q。L.head =NULL 。L.length=0 。 本次实验算法部分此部分头文件名:Assist and extension.h / / / 适应小函数 / void this_insert(list &ready,int Type,listnode* xif(Type=1 insert(ready,ready.length+1,*x 。else if(Type=2 prior_insert(ready,*x 。 / / / 进程事件集合 / 精选学习资料 - - - - - -

16、 - - - 名师归纳总结 - - - - - - -第 7 页,共 11 页个人资料整理仅限学习使用/使用说明:按照时间进度逐步开始发生,ABCD 依时间触发后,进入链表/ /type=1,则按时间顺序加入队列,type=2,则以权重大小加入队列 / void accident(list &ready,int time,int Type if(time=0 progress* x=new progress( 。initinode(*x,A,3,12,time。this_insert(ready,Type,x 。 else if(time=1 progress* x=new progress(

17、 。initinode(*x,B,5,31,time。this_insert(ready,Type,x 。 else if(time=2 progress* x=new progress( 。initinode(*x,C,2,21,time 。this_insert(ready,Type,x 。 else if(time=3 progress* x=new progress( 。initinode(*x,D,4,10,time。this_insert(ready,Type,x 。 else if(time cout if(ready.head-next-state=0 ready.head-n

18、ext-start_time=time 。ready.head-next-state+。 else if(ready.head-next-state0 if(ready.head-next-state=ready.head-next-serve_timeready.head-next-finish_time=time 。ready.head-next-turnover_time=ready.head-next-finish_time-ready.head-next-arrival_time 。ready.head-next-t_t_s=ready.head-next-turnover_time

19、/ready.head-next-serve_time 。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 8 页,共 11 页个人资料整理仅限学习使用coutdata(ready.head-next。ready.head-next-next-start_time=time 。ready.head-next-next-state+。del_elem(ready,1。 else ready.head-next-state+。 else coutwrong / 变量声明 / int time=0 。list ready。int Type=3。initil

20、ead(ready 。/ 开始流程 / cout 选择调度方式,输入1表示 FCFS,输入 2表示抢占式优先权调度算法endl。coutType。do accident(ready,time,Type。handle(ready,time。time+。while(ready.head!=NULL/*time。 六、实验结果:FCFS调度方式精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 9 页,共 11 页个人资料整理仅限学习使用抢占式优先调度方式:精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 10 页,共 11 页个人资料整理仅限学习使用精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 11 页,共 11 页

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号