《计算机操作系统》实验指导书

发布时间 : 星期一 文章《计算机操作系统》实验指导书更新完毕开始阅读

专业资料

for(i=0;i<500;i++) printf(\ else for(i=0;i<500;i++)

printf(\} }

运行结果:略

分析:由于函数printf()输出和字符串之间不会被中断,因此字符串内部的字符顺序输出不变。但是由于进程并发执行时的调度顺序和父进程的抢占处理机问题,输出字符串的顺序和先后随着执行的不同而发生变化。

进程加锁后的参考程序如下: #include main() {int p1,p2,i;

while ((p1=fork())==-1); if(p1==0) {

lockf(1,1,0); for(i=0;i<500;i++) printf(\lockf(1,0,0); } else {

while((p2=fork())==-1); if(p2==0)

{

lockf(1,1,0) for(i=0;i<500;i++) printf(\ lockf(1,0,0) else {

lockf(1,1,0) for(i=0;i<500;i++)

word完美格式

专业资料

printf(\ lockf(1,0,0) } } }

运行结果:略 分析:学生自己完成 七、

实验步骤 1)进入vi编辑器

2)在编译器中输入所要运行的程序代码

3)退出编辑器,返回命令行输入方式,使用gcc编译器编译程序,获得能运行的目标程序。

4)运行目标程序,查看运行结果。 八、

注意事项

1)如果使用gcc编译程序有错的话,需要重新修改程序,直到无错为止。 2)注意系统是如何创建进程的?

3)查看结果是否是交替输出,如果修改输出的次数是否会出现交替现象? 4)相关函数的介绍见第一部分的介绍。 九、

实验报告要求

需要列出运行了的程序清单及相应结果,并对结果进行分析和讨论。对结果的分析主要讨论结果为什么会交替出现?并发进程是如何执行的?

word完美格式

专业资料

实验三 进程调度

一、 二、

实验类型

本实验为综合性实验 实验目的与任务

在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态。当就绪进程个数大于处理机数时,就必须依照某种策略来决定那些进程优先占用处理机。本实验模拟在单处理机情况下的处理机调度,帮助学生加深了解处理机调度的工作。 三、

预习要求

1)熟悉进程控制块和进程组织方式 2)熟悉进程调度的概念 3)熟悉时间片轮转调度算法等

4)熟悉c语言编程,指针及结构体等知识 5)数据结构中的链表的建立及基本操作 四、

实验基本原理

进程控制块通过链表队列的方式组织起来,系统中存在运行队列和就绪队列(为简单起见,不设阻塞队列),进程的调度就是进程控制块在运行队列和就绪队列之间的切换。当需要调度时,从就绪队列中挑选一个进程占用处理机,即从就绪队列中删除一个进程,插入到运行队列中,当占用处理机的进程运行的时间片完成后,放弃处理机,即在运行队列中的进程控制块等待一段时间(时间片)后,从该队列上删除,如果该进程运行完毕,则删除该进程(节点);否则,则插入到就绪队列中。 五、 译器。 六、

实验内容

设计一个时间片轮转调度算法实现处理机调度的程序,具体内容如下 1)实验中使用的数据结构 (1) PCB进程控制块

word完美格式

实验仪器与设备(或工具软件)

实验设备:计算机一台,软件环境要求:安装Red Hat Linux操作系统和gcc编

专业资料

内容包括参数①进程名name;②要求运行时间 runtime;③优先数 prior;④状态 state;⑤已运行时间runedtime。

(2) 为简单起见,只设运行队列,就绪链表两种数据结构,进程的调度在这两个队列中切换,如图3.1所示

运行队列 PCBi ∧ PCBj

PCBj+1 PCBj+1 ∧

就绪队列 图3.1PCB链表

2)每个进程运行时间随机产生,为1~20之间的整数。 3)时间片的大小由实验者自己定义,可为3或5 4)可参考的程序流程图如图3.2

结束该进程,即释放节点空就绪队列为空吗? 修改相应参数 将该进程插入就绪队列中 Runtime=0 每个进程占用处理机一个时间片,即runtime=runtime-时间片大小 从就绪队列中按时间先后顺序选一个进程插入运行队列 建立运行队列指针,初始值指向空 建立就绪队列,每个进程设置相应参数,如运行时间,进程名字等 是 如果runtime≤0? 否 修改相应参数 产生一次调度,即按时间先后顺序从头节点删除一个节点插入运行队列中 否 是 结束程序 word完美格式

联系合同范文客服:xxxxx#qq.com(#替换为@)