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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

实验三 进程调度.doc

1、实验三:进程调度一、实验内容1模拟批处理多道操作系统的进程调度;2模拟实现同步机构避免并发进程执行时可能与时间相关的错误;二、实验目的进程调度时进程管理的主要内容之一,通过设计,编制,调试一个简单的进程调度模拟系统,对进程调度,进程运行状态变换及 PV 操作加深理解和掌握。三、实验题目采用剥夺式优先算法,对三个进程进行模拟调度模拟 PV 操作同步机构,用 PV 操作解决进程进入临界区的问题。【提示】(1)对三个进程进行模拟调度,对各进程的优先数静态设置,P1,P2,P3 三个进程的优先数为 1,2,3,并指定 P1 的优先数最高,P3 的优先数最低,每个进程都处于执行态“e”,就绪态“r”,等

2、待态“w”三种状态之一,并假定初始态为“r”。(2)每一个进程用一个 PCB 表,PCB 表的内容根据具体情况设置,该系统在运行过程中能显示或打印各进程和参数的变化情况,以便观察各进程的调度。(3)在完成必要的初始化后,便进入进程调度程序,首先由 P1 进入执行,当执行进程因等待某各事件被阻塞或唤醒某个进程等待进程时,转进程调度。(4)在进入临界区前后,调 PV 操作。(5)如果被唤醒的进程优先数高于现有执行的进程,则剥夺现行进程的执行权。(6)当三个进程都处于等待状态时,本模拟系统退出执行。四、实验要求1、仔细阅读程序,然后调试该程序;2、将程序中进程的优先数改为随机数或者改为动态优先数,重

3、新调试该程序;3、将 p1 先执行改为 p2 或者 p3 先执行,并与 p1 先执行时的结果进行比较;4、写好书面实验报告,于下次实验课时提交实验报告。五、示例1.数据结构:(1)进程控制块 PCBstructint id;char status;int priority;int waiter1;(2)信号量structint value;int waiter2;sem2(3)现场保护栈 stackchar stack114每个进程都有一个大小为 10 个字的现场保护栈,用来保护被中断时的断点地址等信息。(4)全局变量int i;用以模拟一个通用寄存器char addr;用以模拟程序计数器in

4、t m1,m2;为系统设置的公用数据被三个进程共享使用。六、程序框图:略七、程序说明:本程序是用 C 语言编写,模拟三个进程的运行情况,过程在运行中要调用 P 操作申请信号量,如果该过程得到其申请的信号量,就继续运行,否则 P 操作阻塞该申请过程的运行,并将过程置为所申请信号量的等待者,如果已有其它过程在等待同一信号量则将该申请过程排在所有等待进程之后。过程运行中除了调用 P 操作申请信号量外,还要调用 V 操作释放信号量,V 操作在释放信号量之后,还将唤醒因申请此信号量而被阻塞的过程。在程序运行的三个过程(PROCESS1,PROCESS2,PROCESS3),其中过程运行中通过 P 操作申

5、请信号量 1,过程 2 通过 V 操作释放信号量 2,然后做一次操作申请信号量 2。三个过程之间存在这样一种关系:过程 1 消耗的信号量 1 由过程 2 通过 V 操作产生,而过程 3 即释放信号量 2 也消耗信号量 2。三个过程的运行通过进程调度模块同意安排,调度模块通过 FIND()函数找到第一个就绪过程,如果当前没有过程已在运行,就直接运行此过程,如果有,则比较两者的优先数,然后运行优先权高者。七、源程序:#include int m1;int m2;structint id;int waiter1;int priority;char status;pcb4;structint valu

6、e;int waiter2;sem3;char stack114;int i,ep;char addr;void init();int find();int w2();int process1();int process2();int process3();int p(int,int ,char);int v(int,int ,char);main()init();printf(“系统程序开始执行n“);for(;)if(find()!=0) w2();else break;printf(“系统程序结束n“);void init()int j,k;pcb0.status=w;pcb0.prio

7、rity=4;for(j=1;j4)printf(“进程 3 在信号量 sem2上调用 P 操作n“);if(p(2,3,n)=0) return(0);n:m2=i;printf(“进程 3 在 sem2信号量上调用 V 操作 m=%dn“,m2);if(v(2,3,m)=0) return(0);elsem:i+=1;goto a;int p(int se,int p,char ad)int w;semse.value-;if(semse.value=0) return(1);printf(“阻塞当前进程%dn“,p);pcbp.status=w;ep=0;pcbp.waiter1=0;w

8、=semse.waiter2;if(w=0) semse.waiter2=p;elsewhile(pcbw.waiter1!=0) w=pcbw.waiter1;pcbw.waiter1=p;stack1p=i;stack2p=ad;return(0);int v(int se,int p,char ad)int w;semse.value+;if(semse.value0) return(1);w=semse.waiter2;semse.waiter2=pcbw.waiter1;pcbw.status=r;printf(“唤醒进程%dn“,w);stack1p=i;stack2p=ad;return(0);

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报