1 / 32
文档名称:

操作系统实验报告.doc

格式:doc   大小:313KB   页数:32页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

操作系统实验报告.doc

上传人:文库旗舰店 2020/12/13 文件大小:313 KB

下载得到文件列表

操作系统实验报告.doc

文档介绍

文档介绍:《操作系统原理》
实验报告
专 业:计算机科学与技术
学 号:030940426
姓 名:成 凤
实验一 进程调度实验
一、实验目的
通过对进程调度算法的模拟加深对进程概念和进程调度算法的理解。
二、实验要求
编写程序实现对5个进程的调度模拟,要求至少采用两种不同的调度算法分别进行模拟调度。
三、实验方法内容
算法设计思路
根据不同的调度算法模拟操作系统对进程的调度。调度算法有二种:动态优先级法和时间片循环法。
1、 设计进程控制块PCB表结构,分别适用优先数调度算法和循环时间片轮转算法。
2、PCB结构通常包括以下信息:进程名、进程优先数、轮转时间片、进程的CPU时间,进程状态等。根据调度算法不同,PCB结构可作适当的调整。
3、 建立进程队列。对不同的算法编制不同的入链程序编制两种进程调度算法:
a、最高优先数优先调度算法
b、循环时间轮转调度
算法中用到的数据结算法
A:最高优先数优先调度算法
1)系统初始化时给每一个进程赋一个NEEDTIME和初始PRI。并按优先数入队。
2)系统每次选定一个优先级最高的进程投入运行,进程每执行一次,优先数减2,并将它的进程占用的CPU时间加10,进程到完成还要的CPU时间减10。
3)每当一个进程运行一个时间片后,系统根据它的CPUTIME来判断它是否已经结束,若CPUTIME>0,那么将它重新排入就绪队列。
4)如果系统中尚有进程没有运行完毕,那么转入2)。
B:简单时间片轮转调度算法
1)系统初始化时给每一个进程赋以一个NEEDTIME,并将所有进程按进入的次序排成一个队列。
2) 取队头进程,并投入运行。
3)采用相对固定时间片(ROUND),进程每执行一次,进程占用的CPU
时间加ROUND,进程到完成还要的CPU时间减ROUND。并排到就绪队列的尾部。
4) 如果当前进程的NEEDTIME>0,那么将它排到队尾。
5)如果尚有进程在队列中,那么转入2)
主要的常量变量
#define getpch(type)(type*)malloc(sizeof(type))
#define NUll 0
struct pcb{     /*定义进程控制块PCB*/
char name[10];
char state;
int super;
int ntime;
int rtime;
struct pcb* link;
const int prnum=5;
const int ROUND=3
char name[10]; //进程名
int pri; //进程优先数
int round; //进程轮转时间片
int cputime; //进程占用的CPU时间
int needtime;
int i;
int chose;
主要模块
struct pcb{
int space()
destroy()
void showlist(link,char*,int); //显示进程队列
void instlist(link,link); //按优先数插入进程
void appenlist(link,link);
void appenlist()
算法流程图
四、实验代码
1. 最高优先数优先算法
#include ""
#include <>
#include <>
#define getpch(type)(type*)malloc(sizeof(type))
#define NUll 0
struct pcb{     /*定义进程控制块PCB*/
char name[10];
char state;
int super;
int ntime;
int rtime;
struct pcb* link;
}*ready=NULL,*p;
typedef struct pcb PCB;
sort()/*建立对进程进行优先级排列函数*/
{PCB *first,*second;
int insert=0;
if((ready==NULL)||((p->super)>(ready->super)))/*优先级最大者,插入队首*/
{
p->link=ready;
ready=p;}
else