操作系统实验报告__实验一.docx

上传人:wj 文档编号:102485 上传时间:2022-10-03 格式:DOCX 页数:19 大小:103.09KB
下载 相关 举报
操作系统实验报告__实验一.docx_第1页
第1页 / 共19页
操作系统实验报告__实验一.docx_第2页
第2页 / 共19页
操作系统实验报告__实验一.docx_第3页
第3页 / 共19页
操作系统实验报告__实验一.docx_第4页
第4页 / 共19页
操作系统实验报告__实验一.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

操作系统实验报告__实验一.docx

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

操作系统实验报告__实验一.docx

昆明理工大学信息工程与自动化学院学生实验报告

(2012—2013学年第二 学期)

课程名称:

操作系统 开课实验室:

信自楼4452011年4月18日

年级、专业、班

学号

成绩

实验项目名称

进程管理

指导教师 舒国锋

教师签名:

一、实验要求:

对一个非抢占式多道批处理系统采用以下算法的任意两种,实现进程调度,并计算进程的开始执行时间,周转时间,带权周转时间,平均周转时间,平均带权周转时间

1.先来先服务算法

2.短进程优先算法

3.高响应比优先算法二、实验目的

通过编写进程管理的算法,要求学生掌握整个进程管理的各个环节,进程的数据结构描述,进程的各种状态之间的转换,以及进程的调度算法。

以加深对进程的概念及进程调度算法的理解,并且提高链表的应用能力,达到提高编程能力的目的。

三、实验原理及基本技术路线图(方框原理图)

输入开始进程数n

创建n个PCB并加入ready-queue中

ready-queue是否为

Y

-1-

用C语言或C++语言开发。

需要定义PCB的数据结构,用链表的形式管理进程,采用多级反馈队列调度的算法模拟进程的控制。

要求有创建、撤销、调度、阻塞、唤醒进程等功能。

输入开始进程数n

创建n个PCB并加入ready-queue中

ready-queue是否为

Y

N

Running<=逐个将redy_pc中的PCB

-2-

Running<=id

N

Running<=id

Running<=逐个将redy_pc中的PCB

N

阻塞Running

Y

Running=idle

N

Y

将Running从ready_queue中删除,再将running加入block_queueb

更新新进程就绪队列进程优先数,优先数加1

N

是否创建新PCB

Y

创建新进程并加入到ready_queue中

随机对block_queue中的进程PCB询问是否要唤醒?

Y

处理完了吗

N

N

是否要唤醒

Y

将其从blick_queuek队列是中删除,再将其加入ready_queuek

N

阻塞Running

Y

Y

Running=idle

N

将Running从ready_queue中删除,再将running加入block_queueb

N

是否创建新PCB

Y

创建新进程并加入到ready_queue中

随机对block_queue中的进程PCB询问是否要唤醒?

Y

处理完了吗

N

N

是否要唤醒

Y

将其从blick_queuek队列是中删除,再将其加入ready_queuek

Y

四、所用仪器、材料(设备名称、型号、规格等)。

计算机一台

五、实验方法、步骤

源代码:

#include"stdio.h"#include"stdlib.h"#include"iostream.h"#defineNULL0#definefalse0#definetrue1

bool_state=0;

-5-

structPCB

{

intID;

intpriority;intCPUtime;intALLtime;intState;PCB*next;

};

voidinit();/*产生idle进程,输入用户进程数目,调用insert()*/voidprint(PCB*pcb);/*输出进程属性信息*/

voidprint_init(PCB*pcb);/*输出所有PCB的初始值*/

voidinsert();/*生成进程属性信息,插入进程就绪队列*/

voidRun_priority(PCB*pcb);/*运行进程,随机阻塞进程、产生新进程,插入就绪队列,唤醒阻塞进程

*/

voidblock(PCB*pcb);/*调用destroy()将进程插入阻塞队列*/voidwakeup();/*唤醒进程,插入就绪队列*/

voidproc_priority();/*优先权调度算法模拟*/

//voidRun_loop(PCB*pcb);

voidproc_loop();/*轮转法调度算法模拟*/voidupdate(PCB*pcb);/*更新进程信息*/

voidpushback_queue(PCB*queue,PCB*item);/*将item插入到队列的尾部*/

voidinsert_queue(PCB*queue,PCB*item);/*将item插入到队列中,使得插入后,队列中按照优先级从高到低有序*/

voidsort_queue(PCB*&queue);/*对queue中的结点进行排序,按照优先级从大到小*/

PCB*ready_queue,*block_queue,*idleprocess;/*就绪队列,阻塞队列及闲逛进程指针变量*/intmain(intargc,char*argv[])

{

inti=0;while

(1)

{

cout<<"\\**********PROCESS**********/";

cout<<("\nPleaseselectanumin(1,2,0)");cout<<("\n1--priority");

cout<<("\n2--loop");cout<<("\n0--exit\n");

cout<<"Pleaseselectanum:

";cin>>i;

while(i)

{

if(i==1)

{

cout<<("\nThisisaexampleforpriorityprocessing:

\n");init();

proc_priority();

}

elseif(i==2)

{

cout<<("\nThisisaexampleforroundrobinprocessing:

\n");init();

proc_loop();

}else

{

cout<<"Pleaseselectanumin(1,2,0)\n";

}

cout<<"Pleaseselectanum:

";cin>>i;

}

return0;

}

}

voidprint_init(PCB*pcb)//输出所有PCB的初始值

{

PCB*temp=pcb->next;

cout<<("\nIDpriorityCPUtimeALLtimeState");while(temp!

=NULL)

{

cout<<"\n"<ID<<" "<priority<<" "<CPUtime<<""<ALLtime;

if(temp->State==0)cout<<("ready");

elseif(temp->State==1)cout<<("running");

else

cout<<("blocked");temp=temp->next;

}

}

voidprint(PCB*pcb)//输出进程属性信息

{

PCB*temp;temp=pcb;if(pcb->ID==0)

cout<<("\nTheidlepeocessidrunning!

");

else

{

cout<<"\n"<ID<<" "<priority<<" "<CPUtime<<""<ALLtime;

if(temp->State==0)cout<<("ready");

elseif(temp->State==1)

cout<<("running");

-6-

else

cout<<("blocked");

}

}

voidinsert_queue(PCB*queue,PCB*item)//将item插入到队列中,使得插入后,队列中按照优先级从高到低有序

{

PCB*p,*q;q=queue;p=q->next;

while(p!

=0&&p->priority>=item->priority)

{

q=p;

p=p->next;

}if(p==0)

{

item->next=0;q->next=item;

}else

{

item->next=p;q->next=item;

}

}

voidpushback_queue(PCB*queue,PCB*item)//将item插入到阻塞队列的尾部

{

PCB*p,*q;q=queue,p=q->next;while(p!

=0)

-16-

{

q=p;

p=p->next;

}

item->next=q->next;q->next=item;

}

voidsort_queue(PCB*&queue)//对queue中的结点进行排序,按照优先级从大到小

{

PCB*temp=newPCB;temp->next=0;while(queue->next)

{

PCB*p;p=queue->next;

queue->next=p->next;insert_queue(temp,p);

}

queue->next=temp->next;deletetemp;

}

voidinsert()//生成进程属性信息,插入进程就绪队列,显示进程信息

{

PCB*newp=0;staticlongid=0;newp=newPCB;id++;

newp->ID=id;newp->State=0;newp->CPUtime=0;

newp->priority=rand()%3+1;newp->ALLtime=rand()%3+1;newp->next=NULL;

pushback_queue(ready_queue,newp);

//print(newp);

//cout<<("建立:

Creating->ready\n");

}

voidinsert(intn)//生成n个进程属性信息,插入进程就绪队列,显示进程信息

{

for(inti=0;i

}

voidinit()//产生idle进程,输入用户进程数目,调用insert()

{

block_queue=newPCB;block_queue->next=0;ready_

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

当前位置:首页 > 人文社科 > 法律资料

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

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