欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

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

    • 资源ID:38631796       资源大小:336.52KB        全文页数:11页
    • 资源格式: PDF        下载积分:4.3金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要4.3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    个人资料整理仅限学习使用实验报告 1 课程 计算机操作系统实验名称进程调度第1页班级 11计本学号 105032018130 姓名风律澈实验日期: 2018年 10月4日报告退发 (订正 、 重做 一、实验目的:多道系统中,当就绪进程数大于处理机数时,必须按照某种策略决定选取哪些进程占用处理器。本实验模拟实现处理器调度,进一步加深对处理器调度算法的理解。二、实验内容:选择某种调度算法,设计一个实现处理器调度的程序。三、实验环境:VS2008,window7 操作系统四、实验步骤:1、设计一个有N个进程并发的处理器调度程序,每个进程由一个PCB表示, PCB包含以下信息:进程名、优先数、要求服务时间、进程状态。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。/服务时间int 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 。/输出函数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。coute.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_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(listlead 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 页个人资料整理仅限学习使用 / / 正式使用部分 / / / / / 查找 / /使用说明: 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/ 表头插入if(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 页个人资料整理仅限学习使用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_insert(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 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 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- 。 else/多元表头删除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- 。 / / 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 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-prior 。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 。 / / / 进程事件集合 / 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 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( 。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-next-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/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。initilead(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 页

    注意事项

    本文(2022年进程调度vc代码计算机操作系统实验 .pdf)为本站会员(H****o)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开