收藏 分享(赏)

实验三 进程调度.doc

上传人:myw993772 文档编号:7823662 上传时间:2019-05-27 格式:DOC 页数:11 大小:53.50KB
下载 相关 举报
实验三 进程调度.doc_第1页
第1页 / 共11页
实验三 进程调度.doc_第2页
第2页 / 共11页
实验三 进程调度.doc_第3页
第3页 / 共11页
实验三 进程调度.doc_第4页
第4页 / 共11页
实验三 进程调度.doc_第5页
第5页 / 共11页
点击查看更多>>
资源描述

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营业执照举报