- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PAGE
PAGE #/9
实验二单处理器系统的进程调度
2012413039蔡青12信管
.实验目的
加深对进程概念的理解,明确进程和程序的区别:
深入了解系统如何组织进程、创建进程;
进一步认识如何实现处理器调度。
.实验预备知识
进程的概念;
进程的组织方式:
进程的创建;
进程的调度。
.实验内容
编写程序完成单处理机系统中的进程调度,要求采用时间片轮转调度算法。实验具体包括: 首先确定进程控制块的内容,进程控制块的组成方式:然后完成进程创建原语和进程调度原 语;最后编写主函数对所作工作进程测试。
.提示与讲解
这个实验主要要考虑三个问题:如何组织进程、如何创建进程和如何实现处理器调度。
考虑如何组织进程,首先就要设定进程控制块的内容。进程控制块PCB记录各个进程执行 时的情况。不同的操作系统,进程控制块记录的信息内容不一样。操作系统功能越强,软件 也越庞大,进程控制块记录的内容也就越多。这里的实验只使用了必不可少的信息。一般操 作系统中,无论进程控制块中信息量多少,信息都可以大致分为以下四类:
①标识信息
每个进程都要有一个惟一的标识符,用来标识进程的存在和区别于其他进程。这个标识符是 必不可少的,可以用符号或编号实现,它必须是操作系统分配的。在后面给出的参考程序中, 采用编号方式,也就是为每个进程依次分配一个不相同的正整数。
②说明信息
用于记录进程的基本情况,例如进程的状态、等待原因、进程程序存放位置、进程数据存放 位置等等。实验中,因为进程没有数据和程序,仅使用进程控制块模拟进程,所以这部分内 容仅包括进程状态。
③现场信息
现场信息记录各个寄存器的内容。当进程由于某种原因让出处理器时,需要将现场信息记录 在进程控制块中,当进行进程调度时,从选中进程的进程控制块中读取现场信息进行现场恢 So现场信息就是处理器的相关寄存器内容,包括通用寄存器、程序计数器和程序状态字寄 存器等。在实验中,可选取几个寄存器作为代表。用大写的全局变量AX、BX、CX、DX模拟 通用寄存器、大写的全局变量PC模拟程序计数器、大写的全局变量PSW模拟程序状态字寄 存器。
④管理信息
管理信息记录进程管理和调度的信息。例如进程优先数、进程队列指针等。实验中,仅包括 队列指针。
因此可将进程控制块结构定义如下:
struct pcb
(
int name;
int status;
int ax, bxz cx,dx;
int pc;
int psw;
int next;
)
确定进程控制块内容后,要考虑的就是如何将进程控制块组织在一起。多道程序设计系统中, 往往同时创建多个进程。在单处理器的情况下,每次只能有一个进程处于运行态,其他的进 程处于就绪状态或等待状态。为了便于管理,通常把处于相同状态的进程的进程控制块链接 在一起。单处理器系统中,正在运行的进程只有一个。因此,单处理器系统中进程控制块分 成一个正在运行进程的进程控制块、就绪进程的进程控制块组织成的就绪队列和等待进程的 进程控制块组成的等待队列。由于实验模拟的是进程调度,没有对等待队列的操作,所以实 验中只有一个指向正在运行进程的进程控制块指针和一个就绪进程的进程控制块队列指针。 操作系统的实现中,系统往往在主存中划分出一个连续的专门区域存放系统的进程控制块, 实验中应该用数组模拟这个专门的进程控制块区域,定义如下:
#define n 10
struct pcb pcbarea[n];
这样,进程控制块的链表实际上是数据结构中使用的静态链表。进程控制块的链接方式 可以采用单向和双向链表,实验中,进程控制块队列采用单向不循环静态链表。为了管理空 闲进程控制块,还应该将空闲控制块链接成一个队列。
实验中采用时间片轮转调度算法,这种算法是将进程控制块按照进入就绪队列的先后次序排 成队列。关于就绪队列的操作就是从队头摘下一个进程控制块和从队尾挂入一个进程控制块。 因此为就绪队列定义两个指针,一个头指针,指向就绪队列的第一个进程控制块;一个尾指 针,指向就绪队列的最后一个进程控制块。
实验中指向运行进程的进程控制块指针、就绪队列指针和空闲进程控制块队列指针定义如下:
int run;
struct
{int head;
int tail;
}ready;
int pfree;
以上是如何组织进程,下面考虑如何创建进程。
进程创建是一个原语,因此在实验中应该用一个函数实现,进程创建的过程应该包括:
①申请进程控制块:进程控制块的数量是有限的,如果没有空闲进程控制块,则进程不能创 建,如果申请成功才可以执行第②步;
②申请资源:除了进程控制块外,还需要有必要的资源才能创建进程,如果申请资源不成功, 则不能创建进程,并且归还已申请的进程控制块:如果申请成功,则执行第三步,实验无法 申请资
文档评论(0)