


下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验二单处理器系统的进程调度2012413039蔡青12信管1. 实验目的加深对进程概念的理解,明确进程和程序的区别:深入了解系统如何组织进程、创建进程;进一步认识如何实现处理器调度。2. 实验预备知识进程的概念;进程的组织方式:进程的创建;进程的调度。3. 实验内容编写程序完成单处理机系统中的进程调度,要求采用时河片轮转调度算法。实验具体包括: 首先确定进程控制块的内容,进程控制块的组成方式:然后完成进程创建原语和进程调度原 语;最后编写主函数对所作工作进程测试。4. 提示与讲解这个实验主要要考虑三个问题:如何组织进程、如何创建进程和如何实现处理器调度。 考虑如何组织进程,首先就要设定进程控
2、制块的内容。进程控制块PCB记录各个进程执行 时的情况。不同的操作系统,进程控制块记录的信息内容不一样。操作系统功能越强,软件 也越庞人,进程控制块记录的内容也就越多。这里的实验只使用了必不可少的信息。一般操 作系统中,无论进程控制块中信息量多少,信息都可以大致分为以下四类: 标识信息每个进程都要有一个惟一的标识符,用来标识进程的存在和区别于其他进程。这个标识符是 必不可少的,可以用符号或编号实现,它必须是操作系统分配的。在后面给出的参考程序中, 采用编号方式,也就是为每个进程依次分配一个不相同的正整数。 说明信息用于记录进程的基本情况,例如进程的状态、等待原因、进程程序存放位置、进程数据存放
3、 位置等等。实验中,因为进程没有数据和程序,仅使用进程控制块模拟进程,所以这部分内 容仅包括进程状态。 现场信息现场信息记录各个寄存器的内容。当进程由于某种原因让出处理器时,需要将现场信息记录 在进程控制块中,当进行进程调度时,从选中进程的进程控制块中读取现场信息进行现场恢 复。现场信息就是处理器的相关寄存器内容,包括通用寄存器、程序计数器和程序状态字寄 存器等。在实验中,可选取几个寄存器作为代表。用人写的全局变量AX、BX、CX、DX模拟 通用寄存器、大写的全局变量PC模拟程序计数器、人写的全局变量PSW模拟程序状态字寄 存器。 管理信息管理信息记录进程管理和调度的信息。例如进程优先数、进程
4、队列指针等。实验中,仅包括 队列指针。因此可将进程控制块结构定义如下:struct pcbint name;int status;int axz bxz cx,dx;int pc;int psw;int next;确定进程控制块内容后,要考虑的就是如何将进程控制块组织在一起。多道程序设计系统中, 往往同时创建多个进程。在单处理器的情况卞,每次只能有一个进程处于运行态,其他的进 程处于就绪状态或等待状态。为了便于管理,通常把处于相同状态的进程的进程控制块链接 在一起。单处理器系统中,正在运行的进程只有一个。因此,单处理器系统中进程控制块分 成一个正在运行进程的进程控制块、就绪进程的进程控制块组织
5、成的就绪队列和等待进程的 进程控制块组成的等待队列。由于实验模拟的是进程调度,没有对等待队列的操作,所以实 验中只有一个指向正在运行进程的进程控制块指针和一个就绪进程的进程控制块队列指针。 操作系统的实现中,系统往往在主存中划分出一个连续的专门区域存放系统的进程控制块, 实验中应该用数组模拟这个专门的进程控制块区域,定义如下:#define n 10struct pcb pcbarean;这样,进程控制块的链表实际上是数据结构中使用的静态链表。进程控制块的链接方式 可以采用单向和双向链表,实验中,进程控制块队列采用单向不循坏静态链表。为了管理空 闲进程控制块,还应该将空闲控制块链接成一个队列。
6、实验中采用时间片轮转调度算法,这种算法是将进程控制块按照进入就绪队列的先后次序排 成队列。关于就绪队列的操作就是从队头摘下一个进程控制块和从队尾挂入一个进程控制块。 因此为就绪队列定义两个指针,一个头指针,指向就绪队列的第一个进程控制块;一个尾指 针,指向就绪队列的最后一个进程控制块。实验中指向运行进程的进程控制块指针、就绪队列指针和空闲进程控制块队列指针定义如下:int run;structint head;int tail;ready;int pfree;以上是如何组织进程,卞面考虑如何创建进程。进程创建是一个原语,因此在实验中应该用一个函数实现,进程创建的过程应该包括: 申请进程控制块:
7、进程控制块的数量是有限的,如果没有空闲进程控制块,则进程不能创 建,如果申请成功才可以执行第步; 申请资源:除了进程控制块外,还需要有必要的资源才能创建进程,如呆申请资源不成功, 则不能创建进程,并且归还已申请的进程控制块:如果申请成功,则执行第三步,实验无法 申请资源,所以模拟程序忽略了申请资源这一步; 填写进程控制块:将该进程信息写入进程控制块内,实验中只有进程标识符、进程状态可 以填写,每个进程现场信息中的寄存器内容由于没有具体数据而使用进程(模拟进程创建时, 需输入进程标识符字,进程标识符本应系统建立,并且是惟一的,输入时注意不要冲突), 刚刚创建的进程应该为就绪态,然后转去执行第四步
8、; 挂入就绪队列:如果原来就绪队列不为空,则将该进程控制块挂入就绪队列尾部,并修改 就绪队列尾部指针:如果原来就绪队列为空,则将就绪队列的头指针、尾指针均指向该进程 控制块,进程创建完成。进程创建流程图如图2.2所示。多道程序设计的系统中,处于就绪态的进程往往是多个,它们都要求占用处理器,可是单处 理器系统的处理器只有一个,进程调度就是解决这个处理器竞争问题的。进程调度的任务就 是按照某种算法从就绪进程队列中选择一个进程,让它占有处理器。因此进程调度程序就应 该包括两部分,一部分是在进程就绪队列中选择一个进程,并将其进程控制块从进程就绪队 列中摘下来,另一部分工作就是分配处理器给选中的进程,也
9、就是将指向正在运行进程的进 程控制块指针指向该进程的进程控制块,并将该进程的进程控制块信息写入处理器的各个寄 存器中。图2.2进程创建流程图实验中采用时间片轮转调度算法。时间片轮转调度算法让就绪进程按就绪的先后次序排成队 列,每次总是选择就绪队列中的第一个进程占有处理器,但是规定只能使用一个“时间片”。 时间片就是规定进程一次使用处理器的最长时间。实验中采用每个进程都使用相同的不变的 时间片。采用时间片轮转调度算法的进程调度流程图如图2.3所示。完成上述功能后,编写主函数进行测试:首先建立一个就绪队列,手工输入信息建立几个进 程;然后进行进程调度:最后将指向正在运行进程的指针指向的进程控制块的
10、内容输出,察 看结果。我的实现代码(C语言):include <stdio.h>#define N 10系统中所允许的最人进程数量#define SLOT 5时间片大小进程状态枚举typedef enumRunning,运行状态Aready,就绪状态Blocking阻塞状态 ProStatus;进程控制块 typedef structint name; ProStatus status; int axzbxzcx,dx;int pc;int psw;int next;PCB;就绪队列指针 typedef structint head;int tail; Ready;进程标识符进程状
11、态通用寄存器程序计数器寄存器程序状态字寄存器指向卞一个进程的指针头指针尾指针模拟寄存器int PSW,AX,BX,CX,DX,PC,TIME;/PCB的静态链表 PCB pcbAreaN; int run;Ready ready; int pfree;模拟PCB区域的数组运行状态程序的指针就绪队列指针空闲队列的指针初始化运行状态进程指针void lnitRun()run=-l;初始化就绪状态队列void lnitReady()ready, head 二 ready, tail二初始化空闲队列void lnitFree()int temp;for(temp=0;temp<N-l;temp+
12、)pcbAreatemp.next=temp+l;pcbAreaftemp. ne xt=-l;pfree=O;就绪队列出队int PopReady()返回结点在PCB区域数组的编号int temp;if(ready.head=二printf("就绪队列为空,不能出队。n“);return -1;temp=ready.head;ready.head=pcbAreatemp. next;if(ready.head=二ready.tail=pcbAreaftemp. ne xt=-l;return temp;空闲队列出队int PopFree()返回结点在PCB区域数组的编号int te
13、mp;if(pfree=-l)printf("空闲队列为空,不能出队。n“);return -1;temp=pfree;pf ree=pcbArea temp. next;pcbAreaftemp. ne xt=-l;return temp;就绪队列入队void PushReady(int x)/x为入队结点的编号int temp;if(ready.head=二ready.head=x;ready.tail=x;elsetemp=ready.tail;ready.tail=x;pcbAreaready.tail.next=-l;创建PCBvoid CreatePCB(int x,PC
14、B pcb)/x为要创建PCB在PCB区域数组的编号pcbAreax.ax=pcb.ax;pcbAreax.bx=pcb.bx;pcbAreax.cx=pcb.cx;pcbAreax.dx=pcb.dx;pcbAreafx. name二pcb. name;pcbAreafx. next"pcbAreafx.pc=pcb.pc;pcbAreafx.psw=pcb.psw;pcbAreafx.status=pcb.status;创建进程函数void Create(PCB pcb)int temp;if(pfree=-l)printf("空闲队列为空,不能创建进程。n“);ret
15、urn;temp=PopFree();pcb.status=Aready;CreatePCB(temp/pcb);PushReady(temp);进程调度函数void Schedule()int temp;if(ready.head=二printf("系统内没有进程可以调度。”);return;temp=PopReady();pcbAreatemp.status=Run ning;TIME=SLOT;恢复 CPU 现场AX=pcbAreatemp.ax;BX=pcbAreatemp.bx;CX=pcbAreatemp.cx;DX=pcbAreatemp.dx;PC=pcbArea t
16、emp pc;PSW=pcbAreatemp.psw;run=temp;将选中的进程赋给运行指针printf("当前运行的程序:n");输出调度结果printf("进程号:%dn,/pcbA);printf("进程状态:%dn,pcbArearun.status);printf(n寄存器内容:nAXtBXtCXtDXtPCtPSWnH);printf(,%dt%dt%dt%dt%dt%dn,l/pcbArearun.ax,pcbArearu nbx,pcbArearuncx,pcbArearundx,pcbArear un .pczpcbArearun psw);void main()int temp;PCB tmp_pcb;printf("请输入进程号,以负数为结束(进程号应保持唯一)。nn按任意键进入输入模式:");getchar();lnitRun();lnitReady();lnitF
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 校园电子图书资源合作合同(2篇)
- 《婴幼儿游戏活动实施》课件-项目2 感官游戏设计与实施 9.2 2-3岁感官游戏设计与实施
- 2025年笔记本电脑租赁合同模板
- 政治考点新质生产力
- 过敏性紫癜肾炎的临床护理
- 《按揭贷款证券化》课件
- 2025年主治医师之内科主治303模考模拟试题(全优)
- 2025年签订“租赁合同”的注意事项
- 手干裂的临床护理
- 鼻头缩小的临床护理
- 2025年重庆市中考物理模拟试卷(一)(含解析)
- 《服务营销双主动》课件
- 公司法公章管理制度
- 演出经纪人员资格备考资料2025
- 希尔顿管理制度
- 成都交通投资集团有限公司招聘考试真题2024
- (二模)嘉兴市2025年高三教学测试语文试卷(含答案)
- 湖北省宜昌二中2025年高考化学考前最后一卷预测卷含解析
- 医院不良事件上报制度
- MTK安全架构研究-全面剖析
- 餐饮食堂消防安全培训
评论
0/150
提交评论