操作系统 进程管理 报告Word文档下载推荐.docx

上传人:b****1 文档编号:5768918 上传时间:2023-05-05 格式:DOCX 页数:12 大小:66.86KB
下载 相关 举报
操作系统 进程管理 报告Word文档下载推荐.docx_第1页
第1页 / 共12页
操作系统 进程管理 报告Word文档下载推荐.docx_第2页
第2页 / 共12页
操作系统 进程管理 报告Word文档下载推荐.docx_第3页
第3页 / 共12页
操作系统 进程管理 报告Word文档下载推荐.docx_第4页
第4页 / 共12页
操作系统 进程管理 报告Word文档下载推荐.docx_第5页
第5页 / 共12页
操作系统 进程管理 报告Word文档下载推荐.docx_第6页
第6页 / 共12页
操作系统 进程管理 报告Word文档下载推荐.docx_第7页
第7页 / 共12页
操作系统 进程管理 报告Word文档下载推荐.docx_第8页
第8页 / 共12页
操作系统 进程管理 报告Word文档下载推荐.docx_第9页
第9页 / 共12页
操作系统 进程管理 报告Word文档下载推荐.docx_第10页
第10页 / 共12页
操作系统 进程管理 报告Word文档下载推荐.docx_第11页
第11页 / 共12页
操作系统 进程管理 报告Word文档下载推荐.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

操作系统 进程管理 报告Word文档下载推荐.docx

《操作系统 进程管理 报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《操作系统 进程管理 报告Word文档下载推荐.docx(12页珍藏版)》请在冰点文库上搜索。

操作系统 进程管理 报告Word文档下载推荐.docx

其中0为idle进程,用户进程为1,2,3……)

2.进程优先级priority:

idle进程为0,用户优先级大于0且随机产生,数值越大优先级越高

3.进程占用CPU的执行时间CPUT:

4.进程总共需要运行时间AllT:

用随机数生成

5.进程状态:

0—表示就绪,1—表示运行,2—表示阻塞

6.队列指针next,存放多个进程的PCB链表

(2)优先数的改变策略

1.进程在就绪队列每呆一个时间片优先数+1

2.进程每运行一次,优先数-3

(3)执行可通过循环、睡眠等多种方式模拟,阻塞和唤醒可通过捕获键盘按键来执行。

排放在对手,ready指向p

获取就绪队列的长度

检查并打印出正在运行的进程和等待中的进程

如果执行时间和进程所需时间相同,则释放该进程的空间,否则进程优先数减1,并且将状态改为等待

P要进程长度len不为0,就不断循环执行,直至len=0

循环比较,将p放在适当的位置

比较进程优先级,p优先级高

输入进程信息

开始

程序框图:

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

VC++6.0

4、实验方法、步骤

源程序:

#include<

stdio.h>

stdlib.h>

conio.h>

#definegetpch(type)(type*)malloc(sizeof(type))//将申请内存空间函数自定义为getpch(type)

structpcb{//定义进程控制块的结构

charname[10];

//进程名称

charstate;

//进程状态

intsuper;

//进程优先级

intneedtime;

//进程总共需要的cpu时间

intrtime;

inttijiaotime;

intstarttime;

intfinishtime;

intzztime;

intdzztime;

structpcb*link;

//进程指向下一个进程的指针

}*ready=NULL,*p;

//ready表示指向就绪队列中首元素的指针,初始化为NULL,p用来存放当前刚输入的PCB

typedefstructpcbPCB;

//自定义PCB结构体

intpzztime=0;

intpdzztime=0;

intnum;

inttime=10000;

voidsort()

{

PCB*first,*second;

intinsert=0;

//insert用于记录当前PCBp是否插在就绪队列的尾部

if((ready==NULL)||((p->

super)>

(ready->

super)))//如果就绪队列为空或当前process的super比就绪队列中的第一各元素大,则:

{//注:

就绪队列中的元素按优先级从高到低排的

p->

link=ready;

//把P放在队首,并且让ready指向p

ready=p;

}

else//就绪队列不为空,p的super不比首元素大,那就循环进行比较

{

first=ready;

second=first->

link;

//first和second都是两个用于循环的变量

while(second!

=NULL)//一直比较到就绪队列的末尾

if((p->

(second->

super))//当前进程的优先级大于原就绪队列中second所指向的元素时,就把p插入到first和second所指向的元素之间

link=second;

first->

link=p;

second=NULL;

insert=1;

//插入队列记录符号

else

first=first->

//两个循环变量继续后移,为下一轮循环做准备

second=second->

if(insert==0)first->

//循环到最后了,如果insert仍为0的话,就把P放在队尾

}

//*******************************PCB输入模块*********************************************

voidinput()

inti;

printf("

\n请输入进程数:

"

);

scanf("

%d"

&

num);

for(i=0;

i<

num;

i++)

\n第%d个进程:

\n"

i);

p=getpch(structpcb);

\n进程名:

%s"

p->

name);

\n优先数:

p->

super);

\n运行时间:

needtime);

\n提交时间:

tijiaotime);

rtime=0;

state='

w'

;

//所有进程的初始状态都是等待状态

link=NULL;

sort();

//*******************************PCB就绪队列中元素计数模块********************************

intspace()//计算就绪队列中PCB的总数

intl=0;

PCB*pr=ready;

//获取就绪队列的头指针ready

while(pr!

=NULL)//循环计数

l++;

pr=pr->

return(l);

//*******************************打印PCB信息模块*****************************************

voiddisp(PCB*pr)

\nqname\tstate\tpriority\n"

time=pr->

tijiaotime>

time?

pr->

tijiaotime:

time;

pr->

starttime=time;

time+=pr->

needtime;

R'

finishtime=time;

zztime=pr->

finishtime-pr->

tijiaotime;

dzztime=pr->

zztime/pr->

pzztime=pr->

zztime+pzztime;

pdzztime=pr->

dzztime+pdzztime;

printf("

|%s\t"

pr->

|%c\t"

state);

|%d\t\t\n"

作业名提交时间开始时间所需时间结束时间周转时间带权周转时间\n"

%s%d%d%d%d%d%d"

name,pr->

tijiaotime,pr->

starttime,pr->

needtime,pr->

finishtime,pr->

zztime,pr->

dzztime);

//****************************检查当前有哪些进程在运行,那些处于wait状态*******************************

voidcheck()

PCB*pr;

\nThecurrentrunningprocessis:

%s\n"

disp(p);

pr=ready;

\nThestateoftheWaitingList:

=NULL)//打印其它等待的进程

disp(pr);

//*******************************打印已经完成的进程并释放内存空间**********************************

voiddestroy()

\nAfterthisdispatch,theprocess[%s]willfinish.\n"

free(p);

//*******************************本程序实行的是动态优先级调度************************************

//进程运行一段时间(这里设为5)后将其优先级减一,插入后续队列

voidrunning()

(p->

rtime)+=5;

if(p->

rtime==p->

needtime)//如果执行时间和该进程所需时间相等则撤销该进程

destroy();

else//未执行完毕则优先级减一并将状态改为w

super)--;

//加入队列并重新排序

//*******************************主函数模块*************************************************

voidmain()//主函数

intlen,h=0;

//h表示进程调度的次数,每调度一次,h++

charch;

input();

//输入程序

len=space();

//获取就绪队列长度

while((len!

=0)&

&

(ready!

=NULL))

ch=getchar();

h++;

\nTheexecutenumber:

%d\n"

h);

p=ready;

//以下三行是将P从就绪队列的队首摘除

ready=p->

//将P的状态改为R

check();

running();

pzztime=pzztime/num;

pdzztime=pdzztime/num;

\n平均周转时间,平均带权周转时间\n"

%d,%d"

pzztime,pdzztime);

\nProcessAnyKeytoContinue..."

\n\nAlltheprocesseshasfinishedrunning"

//所有进程已经完成

5、实验过程原始记录

1.输入进程数

2.输入第0个进程

3.3输入第1个进程

4.输入第2个进程

5.运行结果

6、实验总结:

操作系统是计算机系统中必不可少的系统软件,它是计算机系统中各种资源的管理者和各种活动的组织者、指挥者。

操作系统采用时间片法调度进程,是系统资源得到充分利用,用户可以花更少的时间完成过多的工作。

通过这次实验,将以前只会做题的过程转化外程序执行的过程,模拟了在单处理机情况下的处理及调度问题,体会到了程序执行的过程,加深了对进程调度的理解。

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

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2