操作系统进程同步实验文档格式.docx

上传人:b****0 文档编号:13590438 上传时间:2022-10-11 格式:DOCX 页数:16 大小:100.32KB
下载 相关 举报
操作系统进程同步实验文档格式.docx_第1页
第1页 / 共16页
操作系统进程同步实验文档格式.docx_第2页
第2页 / 共16页
操作系统进程同步实验文档格式.docx_第3页
第3页 / 共16页
操作系统进程同步实验文档格式.docx_第4页
第4页 / 共16页
操作系统进程同步实验文档格式.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

操作系统进程同步实验文档格式.docx

《操作系统进程同步实验文档格式.docx》由会员分享,可在线阅读,更多相关《操作系统进程同步实验文档格式.docx(16页珍藏版)》请在冰豆网上搜索。

操作系统进程同步实验文档格式.docx

(1)编写一个进程调度模拟程序,实现以下调度算法:

先来先服务调度,

时间片轮转调度算法,短作业优先调度算法,最高响应比优先调度算法,多级反

馈队列调度算法。

(2)计算平均周转时间和平均带权的周转时间。

(3)先来先服务调度,短作业优先调度算法测试用例。

(4)时间片为4的轮转调度算法的测试用例。

(5)最高响应比优先调度算法的测试用例。

(6)多级反馈队列调度算法的测试用例。

三、实验要求

1.设计进程控制块PCB的结构,通常应包括如下信息:

进程名、进程优先数(或轮转时间片数)、进程已占用的CPU时间、进程

到完成还需要的时间、进程的状态、当前队列指针等。

2.能演示进程调度过程。

3.界面友好。

4.实验报告书写请参考附录

四、设计原理

1.每个进程可有三种状态;

执行状态(RUN)、就绪状态(READY,包括等待状

态)和完成状态(FINISH),并假定初始状态为就绪状态。

2.主程序定义PCB结构和其他有关变量,每个调度算法用一个子程序实现。

3.进程控制块结构参考:

NAME——进程标示符

PRIO/ROUND——进程优先数/进程每次轮转的时间片数(设为常数2)

CPUTIME——进程累计占用CPU的时间片数

NEEDTIME——进程到完成还需要的时间片数

STATE——进程状态3

NEXT——链指针

注:

(1)为了便于处理,程序中进程的的运行时间以时间片为单位进行计算;

(2)各进程的优先数或轮转时间片数,以及进程运行时间片数的初值,均由

用户在程序运行时给定。

4.进程的就绪态和等待态均为链表结构。

5.在优先数算法中,进程优先数的初值设为:

50-NEEDTIME

每执行一次,优先数减1,CPU时间片数加1,进程还需要的时间片数减1。

6.在轮转法中,采用固定时间片单位(两个时间片为一个单位),进程每轮

转一次,CPU时间片数加2,进程还需要的时间片数减2,并退出CPU,排到就绪

队列尾,等待下一次调度。

六:

程序清单

#include<

iostream>

stdio.h>

string>

windows.h>

usingnamespacestd;

//hyugtyftydrtdtrdrrtrdrt

structNode

{

stringname;

//进程(作业)名称

intarriveTime;

//到达时间

intServerTime;

//服务时间

intleftTime;

//thelefttime

Node*link;

//指向下一个节点的指针

};

classCProcess

public:

CProcess();

//构造函数

~CProcess();

//析构函数

constCProcess&

operator=(constCProcess&

p);

//重载赋值操作符

voidinsertNode(string&

na,int&

at,int&

st);

//插入新元素(at由小到大)到链表合适的位置

voidsort();

//按照服务时间由大到小排序

boolisEmpty();

//判断是否为空

voiddestroy();

//销毁

intlength();

//求出链表长度

voidprint();

//打印出元素

voidFCFS();

//先到先服务

voidSJF();

//短进程(作业)优先

voidRR(int&

q);

//时间片轮转

voidpriority();

//优先权调度

protected:

Node*first;

Node*last;

constCProcess&

CProcess:

:

operator=(constCProcess&

p)

Node*newNode;

Node*Current;

if(this!

=&

p)//避免自己给自己赋值

{

if(first!

=NULL)//如果链表不为空

destroy();

if(p.first==NULL)

{

//如果要拷贝的对象为空

this->

first=NULL;

last=NULL;

}

else

Current=p.first;

first=newNode;

first->

name=Current->

name;

//

arriveTime=Current->

arriveTime;

ServerTime=Current->

ServerTime;

link=NULL;

last=first;

Current=Current->

link;

while(Current!

=NULL)

{

newNode=newNode;

newNode->

link=NULL;

last->

link=newNode;

last=newNode;

Current=Current->

}

}

return*this;

}

CProcess:

CProcess()

{//构造函数

first=NULL;

last=NULL;

~CProcess()

Node*temp;

while(first!

temp=first;

first=first->

deletetemp;

voidCProcess:

insertNode(string&

st)

{//按照到达时间升序排序

Node*Current;

Node*trailCurrent;

//指向Current的前一个节点

Node*newNode;

boolfound;

newNode=newNode;

//建立一个新节点

newNode->

name=na;

arriveTime=at;

ServerTime=st;

if(first==NULL)//如果第一个节点为空(如果是第一次插入元素)

first=newNode;

//将新节点赋给第一个节点

else

{//如果不是第一次

Current=first;

found=false;

while(Current!

=NULL&

&

!

found)

if(Current->

arriveTime>

=at)

found=true;

trailCurrent=Current;

Current=Current->

if(Current==first)

link=first;

first=newNode;

trailCurrent->

link=newNode;

link=Current;

intCProcess:

length()

intcount=0;

//声明变量,并初始化为0(用来记录长度)

Current=first;

while(Current!

=NULL)//当前节点不为空,记录值自加,一直向后遍历,

count++;

Current=Current->

returncount;

//返回长度

sort()//按照服务时间,升序排列

{//冒泡排序

stringsname;

intat;

intst;

//指向当前节点

//指向当前节点的前一个节点

for(trailCurrent=first->

trailCurrent!

=NULL;

trailCurrent=trailCurrent->

link)//控制条件有问题

for(Current=trailCurrent->

Current!

Current=Current->

if(trailCurrent->

ServerTime>

Current->

ServerTime)

sname=trailCurrent->

at=trailCurrent->

st=trailCurrent->

trailCurrent->

Current->

name=sname;

boolCProcess:

isEmpty()//判断是否为空

return(first==NULL);

//如果第一个节点为空,返回值

print()

Current=first->

//头节点赋给当前节点

=NULL)//当前节点不为空,一直向后遍历打印

cout<

<

name<

"

"

;

arriveTime<

ServerTime<

\n"

destroy()

{

//定义一个临时指针变量

FCFS()

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

当前位置:首页 > 自然科学 > 物理

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

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