操作系统实验指导书.docx

上传人:b****2 文档编号:2464019 上传时间:2022-10-29 格式:DOCX 页数:33 大小:25.28KB
下载 相关 举报
操作系统实验指导书.docx_第1页
第1页 / 共33页
操作系统实验指导书.docx_第2页
第2页 / 共33页
操作系统实验指导书.docx_第3页
第3页 / 共33页
操作系统实验指导书.docx_第4页
第4页 / 共33页
操作系统实验指导书.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

操作系统实验指导书.docx

《操作系统实验指导书.docx》由会员分享,可在线阅读,更多相关《操作系统实验指导书.docx(33页珍藏版)》请在冰豆网上搜索。

操作系统实验指导书.docx

操作系统实验指导书

《操作系统原理》

实验指导书

吴微编

前言

1.实验总体目标

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

加深对操作系统基本原理理解。

⒉适用专业

计算机科学与技术

⒊先修课程

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

⒋实验课时分配

实验项目

学时

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

2

实验二设计一个有N个进程共行的进程调度程序。

4

实验三批处理系统中作业调度

2

实验四银行家算法

4

实验五LRU页面置换调度算法

4

实验六独占设备的分配和回收模拟

4

⒌实验环境

有40台中等配置的计算机组成的小型局域网的实验室环境。

计算机的具体要求:

⒈Pentium133Hz以上的CPU;⒉建议至少256MB的内存;⒊建议硬盘至少2GB,并有1GB空闲空间。

4.安装Windows操作系统及C语言编译程序。

⒍实验总体要求

培养计算机专业的学生的系统程序设计能力,是操作系统课程的一个非常重要的环节。

通过操作系统上机实验,可以培养学生程序设计的方法和技巧,提高学生编制清晰、合理、可读性好的系统程序的能力,加深对操作系统课程的理解。

使学生更好地掌握操作系统的基本概念、基本原理、及基本功能,具有分析实际操作系统、设计、构造和开发现代操作系统的基本能力。

⒎本实验的重点、难点及教案方法建议

重点:

理解进程调度中PCB的设计,以实现对进程的调度。

难点:

进程调度程序的设计,设备管理程序的设计。

教案方法建议:

力争在本指导书的帮助下,独立设计程序以加深理解。

实验一、

单处理器系统的进程调度

5

实验二

设计一个有N个进程共行的进程调度程序。

10

实验三

批处理系统中作业调度

15

实验四

银行家算法

18

实验五

LRU页面置换调度算法

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"stdio.h"

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

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

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

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

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

struct

{

intname。

/*进程标识符*/

intstatus。

/*进程状态*/

intax,bx,cx,dx。

/*进程现场信息,通用寄存器内容*/

intpc。

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

intpsw。

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

intnext。

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

}pcbarea[n]。

/*定义模拟进程控制块区域的数组*/

intPSW,AX,BX,CX,DX,PC,TIME。

/*模拟寄存器*/

intrun。

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

struct

{

inthead。

inttail。

}ready。

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

intblock。

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

intpfree。

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

sheduling(>

/*进程调度函数*/

{

inti。

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

{

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

return。

}

i=ready.head。

/*就绪队列头指针赋给i*/

ready.head=pcbarea[ready.head].next。

/*就绪队列头指针后移*/

if(ready.head==-1>ready.tail=-1。

/*就绪队列为空,修正尾指针ready.tail*/

pcbarea[i].status=running。

/*修改进程控制块状态*/

TIME=sometime。

/*设置相对时钟寄存器*/

/*恢复该进程现场信息:

*/

AX=pcbarea[run].ax。

BX=pcbarea[run].bx。

CX=pcbarea[run].cx。

DX=pcbarea[run].dx。

PC=pcbarea[run].pc。

PSW=pcbarea[run].psw。

/*修改指向运行进程的指针*/

run=i。

}/*进程调度函数结束*/

create(intx>

/*创建进程*/

{

inti。

if(pfree==-1>/*空闲进程控制块队列为空*/

{

printf("无空闲进程控制块,进程创建失败\n">。

return。

}

i=pfree。

/*取空闲进程控制块队列的第一个*/

pfree=pcbarea[pfree].next。

/*pfree后移*/

/*填写该进程控制块内容:

*/

pcbarea[i].name=x。

pcbarea[i].status=aready。

pcbarea[i].ax=x。

pcbarea[i].bx=x。

pcbarea[i].cx=x。

pcbarea[i].dx=x。

pcbarea[i].pc=x。

pcbarea[i].psw=x。

if(ready.head!

=-1>

{

/*就绪队列不空时,挂入就绪队列方式*/

pcbarea[ready.tail].next=i。

ready.tail=i。

pcbarea[ready.tail].next=-1。

}

else

{

/*就绪队列空时,挂入就绪队列方式:

*/

ready.head=i。

ready.tail=i。

pcbarea[ready.tail].next=-1。

}

}/*进程创建函数结束*/

main(>

{

/*系统初始化*/

intnum,i,j。

run=ready.head=ready.tail=block=-1。

pfree=0。

for(j=0。

j

j++>

pcbarea[j].next=j+1。

pcbarea[n-1].next=-1。

printf("输入进程编号(避免编号的冲突,以负数输入结束,最多可以创建10个进程>:

\n">。

scanf("%d",&num>。

while(num>0>

{

create(num>。

scanf("%d",&num>。

}

sheduling(>。

if(run!

=-1>

{

printf("进程名进程状态寄存器内容:

axbxcxdxpcpsw:

\n">。

printf("%4d%10d%3d%3d%3d%3d%3d%3d\n",pcbarea[run].name,

pcbarea[run].status,pcbarea[run].ax,pcbarea[run].bx,

pcbarea[run].cx,

pcbarea[run].dx,pcbarea[run].pc,pcbarea[run].psw>。

}

}/*main(>结束*/

六、注意事项

因为程序长而且有难度,所以在设计实验时,要细心,多次调试。

七、思考题

实验二设计一个有N个进程共行的进程调度程序。

一、实验目的

用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解。

二、实验类型<含验证型、设计型或综合型)

设计型

三、实验仪器

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

四、实验原理

五、实验方法与步骤

<一)内容:

进程调度算法:

采用最高优先数优先的调度算法<即把处理机分配给优先数最高的进程)和先来先服务算。

每个进程有一个进程控制块

进程控制块可以包含如下信息:

进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。

进程的优先数及需要的运行时间可以事先人为地指定<也可以由随机数产生)。

进程的到达时间为进程输入的时间。

进程的运行时间以时间片为单位进行计算。

每个进程的状态可以是就绪W

就绪进程获得CPU后都只能运行一个时间片。

用已占用CPU时间加1来表示。

如果运行一个时间片后,进程的已占用CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1<即降低一级),然后把它插入就绪队列等待CPU。

每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的PCB,以便进行检查。

  

重复以上过程,直到所要进程都完成为止。

<二)参考程序:

#include

#include

#include

#definegetpch(type>(type*>malloc(sizeof(type>>

#defineNULL0

structPCB{/*定义进程控制块PCB*/

charname[10]。

charstate。

intsuper。

intntime。

intrtime。

structPCB*link。

}*ready=NULL,*p。

typedefstructPCB。

sort(>/*建立对进程

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1