欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    模拟进程创建终止阻塞唤醒原语操作系统原理讲解Word下载.docx

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

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

    模拟进程创建终止阻塞唤醒原语操作系统原理讲解Word下载.docx

    1、0退出请输入您需要的功能(05):输入选择=?54321退出创建阻塞唤醒终止显示结束六、程序清单#include string.hstruct pcb char name10; int status; int order; int time; int wtime; int ytime;pcb11;/该结构体用于存储已经输入的进程struct ghostghost11;/该结构体用于优先级调度时,进程的优先级排序char a_name10;int i=0,y,a=0,x,z,jilu;void insert();void block();void rouse();void stop();void

    2、 outPut();void control();/实验二添加函数void order_control();void time_control();void insert() jilu=0;/jilu是一个用于判断的变量,在重复时进行判断跳过 if(i=10) printf(进程已经存在10个,无法继续添加进程n); else 请输入插入pcb的数据:n1、进程名: scanf(%s,&pcbi.name);2、该进程的优先级(1-10):%dpcbi.order);3、运行时间pcbi.time); for(y=0;y0)jilu=0; else printf(输入已经完成n您输入的数据为:

    3、n进程名: %sn优先级: %dn运行时间: %dn,pcbi.name,pcbi.order,pcbi.time);-n strcpy(ghosti.name,pcbi.name); ghosti.order=pcbi.order; ghosti.time=pcbi.time; pcbi.status=1; ghosti.status=1; pcbi.wtime=pcbi.time; pcbi.ytime=0; i+; void block() int m; printf(n请输入您要改变状态的进程的进程名: scanf(a_name); for(y=0;=i; if(strcmp(pcby

    4、.name,a_name)=0) a=1; if(pcby.status=0)您要修改的进程已经是阻塞状态,无法更改n if(pcby.status=2) pcby.status=0; for(m=0;mm+) if(strcmp(ghostm.name,a_name)=0) ghostm.status=0; 操作已完成,进程成功改为阻塞状态n if(a=0)对不起!您查找的进程名不存在n a=0;void rouse() if(pcby.status=1)您要修改的进程已经是就绪状态,无法更改n break; ; pcby.status=1; ghostm.status=1;操作已完成,进程

    5、成功改为运行状态n break;void stop() for(; pcby=pcby+1; i-;操作已完成,进程成功删除n break;void outPut() if(i=0)对不起,没有进程存在,无法显示n elsenn 已存在进程分别为:(状态:2表示正在运行,1表示就绪,0表示阻塞)n if(pcby.status!=3)printf(进程%d 进程名: %s 状态:,y+1,pcby.name,pcby.status);void control() for(;1;)进程调度子菜单n0 :返回主菜单n1 :优先级调度n2 :时间片轮转调度n请输入您想要进行的操作的指令 :x); i

    6、f(x=0) switch(x) case 0: case 1: order_control(); case 2: time_control(); default:您输入的指令有误,请重新输入nvoid order_control() int jishi;/用于CPU运行时间计时 jishi=0; char panduan1,panduan2;/用于判断是否继续调度 struct ghost jiaohuan; int gg,bl; for(gg=0;gggg+) if(pcbgg.status=2) for(bl=0;blbl+) if(strcmp(ghostbl.name,pcbgg.n

    7、ame)=0) ghostbl.status=2; for(x=0;xi-1;x+) for(y=x+1; if(ghostx.orderghosty.order) jiaohuan=ghostx; ghostx=ghosty; ghosty=jiaohuan; /以上语句是根据优先级为进程排序nn按照优先级调度进程,具体内容为: if(ghostx.status=1)正在运行的进程: %dnnn,ghostx.name,ghostx.order,ghostx.time); if(strcmp(pcby.name,ghostx.name)=0) pcby.status=2; ghostx.st

    8、atus=2;/该语句用于更改另一个结构体进程的状态是否继续运行直至进程运行完毕(Y/N)panduan1); if(panduan1=Y|panduan1=y if(ghostx.status=2) jishi=jishi+ghostx.time;CPU运行时间 %d ,进程 %s 运行完毕,正在关闭!,jishi,ghostx.name); pcby.status=3; ghostx.status=3; if(x=(i-1)所有进程全部运行完毕!n-n else-n是否继续调度(y/n)panduan2); if(panduan2=N|panduan2=n)break; else brea

    9、k; printf(如果无输出内容,请检查就绪队列是否存在进程void time_control() int z,kz1,kz2,kz3,kz4,kz5,kz6;/kz1表示时间片运行的时间计时,kz2表示CPU运行的总时间,kz3用于所有进程时间的输出kz4表示已完成的进程数kz5用于表示状态为就绪的进程的个数kz6用于更改ghost的状态值 z=0;kz2=0;kz4=0;kz5=0; if(pcby.status=1) kz5=kz5+1;nn请输入时间片长度:nn按照时间片轮转调度进程,具体内容为: if(kz5!=0) for(;kz4kz5; if(pcby.status=1|pc

    10、by.status=2) for(kz1=0;kz1x;kz1+) if(pcby.status=1|pcby.status=2) kz2=kz2+1; pcby.wtime=pcby.wtime-1; pcby.ytime=pcby.ytime+1;CPU运行时间: %d ,正在运行进程: %sn,kz2,pcby.name);进程名 已运行时间 未运行时间 要求运行时间n for(kz3=0;kz3kz3+) if(pcbkz3.status=1|pcbkz3.status=2)%s%12d%12d%12dn,pcbkz3.name,pcbkz3.ytime,pcbkz3.wtime,pc

    11、bkz3.time); if(pcby.wtime=0&pcby.status!=3)进程 %s 运行完毕,正在关闭!n-n,pcby.name); kz4=kz4+1; pcby.status=3; for(kz6=0;kz6kz6+) if(strcmp(ghostkz6.name,pcby.name)=0) ghostkz6.status=3; kz1=x; break;-n 注意:如果未输出过程,请检查就绪列表是否存在进程nvoid main() char c;系统主菜单n1、创建n2、阻塞n3、唤醒n4、终止n 5、显示n6、调度n0、退出n请输入操作指令 : if(scanf(x) if(x=0) switch(x) case 1: insert(); case 2: block(); case 3: rouse(); case 4: stop(); case 5: outPut(); case 6: control(); case 0: default:格式非法,请重新输入n else if(scanf(%cc)七、程序中使用的数据结构及符号说明/添加进程/阻塞进程/唤醒进程/删除进程/输出八、调试程序时出现问题及解决方法问题一:现象:使用阻塞功能后,输出功能无法正常显示进程状态。解决:在进程的结构体中添加控制进程状态的变量。


    注意事项

    本文(模拟进程创建终止阻塞唤醒原语操作系统原理讲解Word下载.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

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




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

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

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


    收起
    展开