操作系统实验指导书 联系客服

发布时间 : 星期二 文章操作系统实验指导书更新完毕开始阅读7ce2996d7e192279168884868762caaedc33baff

《操作系统原理》

实 验 指 导 书

吴微 编

前 言

1.实验总体目标

通过学生自己动手设计实验验证理论知识,使学生掌握操作系统特征和功能,掌握不同调度算法下进程的调度、进程控制、进程调度与死锁,并必须掌握作业管理、存储器管理、设备管理和文件管理的主要原理。加深对操作系统基本原理理解。 ⒉ 适用专业

计算机科学与技术

⒊ 先修课程

C语言程序设计、计算机组成原理、数据结构

⒋ 实验课时分配 实验项目 实验一 单处理器系统的进程调度 实验二设计一个有N个进程共行的进程调度程序。 实验三批处理系统中作业调度 实验四 银行家算法 实验五LRU页面置换调度算法 实验六 独占设备的分配和回收模拟 学时 2 4 2 4 4 4 ⒌ 实验环境 有40台中等配置的计算机组成的小型局域网的实验室环境。计算机的具体要求:⒈Pentium 133Hz以上的CPU;⒉建议至少256MB的内存;⒊建议硬盘至少2GB,并有1GB空闲空间。4.安装Windows操作系统及C语言编译程序。 ⒍ 实验总体要求

培养计算机专业的学生的系统程序设计能力,是操作系统课程的一个非常重要的环节。通过操作系统上机实验,可以培养学生程序设计的方法和技巧,提高学生编制清晰、合理、可读性好的系统程序的能力,加深对操作系统课程的理解。使学生更好地掌

握操作系统的基本概念、基本原理、及基本功能,具有分析实际操作系统、设计、构造和开发现代操作系统的基本能力。 ⒎ 本实验的重点、难点及教案方法建议

重点:理解进程调度中PCB的设计,以实现对进程的调度。 难点:进程调度程序的设计,设备管理程序的设计。

教案方法建议:力争在本指导书的帮助下,独立设计程序以加深理解。

目 录 实验一、 单处理器系统的进程调度

实验二 设计一个有 N个进程共行的进程调度程序。实验三 批处理系统中作业调度 实验四 银行家算法

实验五 LRU页面置换调度算法 实验六 独占设备的分配和回收模拟

5

10 15 18 25 29

实验一 单处理器系统的进程调度

一、实验目的

模拟单处理器系统的进程调度,采用动态优先权的进程调度算法作为进程设计算法,以加深对进程的概念及进程调度算法的理解. 二、实验类型<含验证型、设计型或综合型)

设计型

三、实验仪器

一台安装Windows操作系统及C语言编译程序的pc机。

四、实验原理 五、实验方法与步骤

<一)内容:

<1)用C语言实现对N个进程使用动态优先权算法的进程调度。 <2)描述用来标识进程的进程控制块PCB结构。

? 进程标识数ID

? 进程优先数PRIORITY,并规定优先数越大的进程,其优先权越高<人为指定或随机数)。

? 进程已占用的CPU时间CPUTIME。

? 进程还需占用的CPU时间ALLTIME,当进程运行完毕ALLTIME是为0。 ? 进程的阻塞时间STARTBLOCK,表示当进程再运行STARTBLOCK个时间片后,进程将进入阻塞状态。 ? 进程被阻塞的时间BLOCKTIME,表示已阻塞的进程再等待BLOCKTIME个时间片后将转换成就绪状态。 ? 进程状态STATE。

? 队列指针NEXT,用来将PCB排成队列。

<3)手工输入建立几个进程,建立一个就绪队列,按优先数由高到低排列。 <4)进行进程调度

<5)每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的PCB,以便进行检查。重复以上过程,直到所要进程都完成为止。 <二)参考程序:

#include \

#define running 1 /*用running 表示进程处于运行态*/

#define aready 2 /*用aready表示进程处于就绪态*/

#define blocking 3 /*用blocking表示进程处于等待态*/

#define sometime 5 /*用sometime 表示时间片大小*/

#define n 10 /* 假定系统允许进程个数为10 */

struct

{

int name。 /*进程标识符*/

int status。 /*进程状态*/

int ax, bx, cx,dx。 /*进程现场信息,通用寄存器内容*/

int pc。 /*进程现场信息,程序计数器内容*/

int psw。 /*进程现场信息,程序状态字寄存器内容*/

int next。 /*下一个进程控制块的位置*/

}pcbarea[n]。 /*定义模拟进程控制块区域的数组*/

int PSW,AX,BX,CX,DX,PC,TIME。 /*模拟寄存器*/

int run。 /*定义指向正在运行进程的进程控制块的指针*/

struct

{

int head。

int tail。

}ready。 /*定义指向就绪队列的头指针head和尾指针tail*/

int block。 /*定义指向等待队列的指针*/

int pfree。 /*定义指向空闲进程控制块队列的指针*/

sheduling( >

/*进程调度函数*/

{

int i。

if (ready.head==-1> /*空闲进程控制块队列为空,退出*/

{

printf(\无就绪进程\\n\。

return。

}

i=ready.head。 /*就绪队列头指针赋给i*/