实验二单处理器系统的进程调度学习资料

上传人:s9****2 文档编号:456577527 上传时间:2023-01-16 格式:DOC 页数:17 大小:163.50KB
返回 下载 相关 举报
实验二单处理器系统的进程调度学习资料_第1页
第1页 / 共17页
实验二单处理器系统的进程调度学习资料_第2页
第2页 / 共17页
实验二单处理器系统的进程调度学习资料_第3页
第3页 / 共17页
实验二单处理器系统的进程调度学习资料_第4页
第4页 / 共17页
实验二单处理器系统的进程调度学习资料_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《实验二单处理器系统的进程调度学习资料》由会员分享,可在线阅读,更多相关《实验二单处理器系统的进程调度学习资料(17页珍藏版)》请在金锄头文库上搜索。

1、实验二 单处理器系统的进程调度(附实验报告)1实验目的加深对进程概念的理解,明确进程和程序的区别;深入了解系统如何组织进程、创建进程;进一步认识如何实现处理器调度。2实验预备知识进程的概念;进程的组织方式;进程的创建;进程的调度。3实验内容编写程序完成单处理机系统中的进程调度, 要求采用时间片轮转调度算 法。实验具体包括:首先确定进程控制块的内容,进程控制块的组成方 式;然后完成进程创建原语和进程调度原语; 最后编写主函数对所作工 作进程测试。4提示与讲解这个实验主要要考虑三个问题:如何组织进程、如何创建进程和如何实 现处理器调度。考虑如何组织进程, 首先就要设定进程控制块的内容。 进程控制块

2、 PCB 记录各个进程执行时的情况。 不同的操作系统,进程控制块记录的信息 内容不一样。操作系统功能越强,软件也越庞大,进程控制块记录的内 容也就越多。这里的实验只使用了必不可少的信息。一般操作系统中, 无论进程控制块中信息量多少,信息都可以大致分为以下四类: 标识信息每个进程都要有一个惟一的标识符, 用来标识进程的存在和区别于其他 进程。这个标识符是必不可少的,可以用符号或编号实现,它必须是操 作系统分配的。在后面给出的参考程序中,采用编号方式,也就是为每 个进程依次分配一个不相同的正整数。 说明信息 用于记录进程的基本情况,例如进程的状态、等待原因、进程程序存放 位置、进程数据存放位置等等

3、。实验中,因为进程没有数据和程序,仅 使用进程控制块模拟进程,所以这部分内容仅包括进程状态。 现场信息现场信息记录各个寄存器的内容。当进程由于某种原因让出处理器时, 需要将现场信息记录在进程控制块中, 当进行进程调度时, 从选中进程 的进程控制块中读取现场信息进行现场恢复。 现场信息就是处理器的相 关寄存器内容,包括通用寄存器、程序计数器和程序状态字寄存器等。 在实验中,可选取几个寄存器作为代表。用大写的全局变量AX 、BX 、CX、DX 模拟通用寄存器、大写的全局变量 PC 模拟程序计数器、大写 的全局变量 PSW 模拟程序状态字寄存器。 管理信息管理信息记录进程管理和调度的信息。 例如进程

4、优先数、进程队列指针 等。实验中,仅包括队列指针。因此可将进程控制块结构定义如下:struct pcbint name;int status;int ax, bx, 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、进程, 并将其进程控制块从进程就绪队列中摘下来,另一部分工作就是分配处理器给选中的进程, 也就是将指向正在运行进程的进程控制块指针指向该进程的进程控制 块,并将该进程的进程控制块信息写入处理器的各个寄存器中。取空闲进程控制块队刿的第一令Apf険闲进程控制块瓯列再空?pfreefi 移;pfr etpcbespfrntxt填写该进程控帝除内容;pcbaxeafi nampc1?aieai status are aiyP 新始化雄程控需做內观场信息绪队列齿空1袪入就绪臥mh pcb&rafftad. tail ready .tail=i;pcbart出悶蚊 tail ,net=-1;连入就绪趴列匕

10、 ready.head=i. readjr.tail-i, pctar ? are ady .tdJ .nez t=-1 1结束图2.2进程创建流程图 实验中采用时间片轮转调度算法。 时间片轮转调度算法让就绪进程按就 绪的先后次序排成队列, 每次总是选择就绪队列中的第一个进程占有处 理器,但是规定只能使用一个 “时间片 ”。时间片就是规定进程一次使用 处理器的最长时间。实验中采用每个进程都使用相同的不变的时间片。采用时间片轮转调度算法的进程调度流程图如图 2.3 所示。完成上述功能后,编写主函数进行测试:首先建立一个就绪队列,手工 输入信息建立几个进程; 然后进行进程调度; 最后将指向正在运行

11、进程 的指针指向的进程控制块的内容输出,察看结果。5.课外题图2.3进程调度流程图编程实现采用优先数调度算法的进程调度。我的实现代码( C 语言):#include #define N 10 /系统中所允许的最大进程数量#define SLOT 5 /时间片大小/进程状态枚举typedef enumRunning, / 运行状态Aready, / 就绪状态Blocking / 阻塞状态 ProStatus;/进程控制块typedef structint name;/ 进程标识符ProStatus status;/ 进程状态int ax,bx,cx,dx;/ 通用寄存器int pc;/程序计数器

12、寄存器int psw;/ 程序状态字寄存器int next;/指向下一个进程的指针 PCB;/就绪队列指针 typedef structint tail;/尾指针 Ready;/模拟寄存器int PSW,AX,BX,CX,DX,PC,TIME;/PCB 的静态链表PCB pcbAreaN;/模拟 PCB 区域的数组int run;/运行状态程序的指针Ready ready;/ 就绪队列指针int pfree;/ 空闲队列的指针/ 初始化运行状态进程指针void InitRun()run=-1;/ 初始化就绪状态队列void InitReady()ready.head=ready.tail=-1

13、;/ 初始化空闲队列void InitFree()int temp;for(temp=0;tempN-1;temp+)pcbAreatemp.next=temp+1;pcbAreatemp.next=-1;pfree=0;/ 就绪队列出队int PopReady()/返回结点在 PCB 区域数组的编号int temp;if(ready.head=-1)printf( 就绪队列为空,不能出队。 n);return -1;temp=ready.head; ready.head=pcbAreatemp.next;if(ready.head=-1)ready.tail=-1;pcbAreatemp.n

14、ext=-1;return temp;/ 空闲队列出队int PopFree()/返回结点在 PCB 区域数组的编号int temp;if(pfree=-1)printf( 空闲队列为空,不能出队。 n);return -1;temp=pfree;pfree=pcbAreatemp.next;pcbAreatemp.next=-1;return temp;/ 就绪队列入队void PushReady(int x) /x 为入队结点的编号int temp;if(ready.head=-1)ready.head=x;ready.tail=x;elsetemp=ready.tail;ready.tail=x;pcbAreaready.tail.next=-1;/创建 PCBvoid CreatePCB(int x,PCB pcb)/x 为要创建 PCB 在 PCB 区域数组的编号pcbAreax.ax=pcb.ax;pcbAreax.bx=pcb.bx;pcbAreax.cx=pcb.cx; pcbAreax

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号