c 语言进程管理程序分析,C语言模拟进程管理.doc

操作系统课程设计报告

目 录

一 需求分析6

二 概要设计6

三 详细设计(含主要代码)6

四 调试分析、测试结果12

五 用户使用说明14

六 后记14

七 参考资料14

一 需求分析

在多道处理程序运行环境下,进程数目一般多于处理机数目,使得进程要通过竞争来使用处理机。这就要求系统能按照某种算法,动态地把处理机分配给就绪队列中的一个进程,使之运行,分配处理机的任务是由金城调度程序完成的。一个进程被创建后,系统为了便于对进程进行管理,将系统中的所有进程按照其状态,将其组成不同的进程队列。于是系统中有运行进程队列、就绪队列和各种事件的进程等待队列。进程调度的功能就是从就绪队列中挑选一个进程到处理机上运行。进程调度的算法有多种,常用的有优先级调度算法、先来先服务算法、时间片轮转算法。

二 概要设计

最高优先级优先调度算法

动态优先数是指在进程创建时例如:在进程获得一次CPU后就将其优先数减少。或者,进程等待的时间超过某一时限时增加其优先数的值,等等所有就绪进程按 FCFS排成一个队列,总是把处理机分配给队首的进程,各进程占用CPU的时间片相同。CPU的时间如果运行进程用完它的时间片后还完成,就把它送回到就绪队列的末尾,队首进程。直至所有的进程运行完毕。所有就绪进程按排成一个队列,( PCB)进程控制块包含如下信息:等等。

图.最高优先级优先调度算法流程图

主要代码:void priority(char algo){

PCB q;

prt1(algo);

for(int i = 0; i<= Num ; i++)

{

q = pq.top();

pq.pop();

if(q.state != 3)

q.state = 1;

prt2(algo , q);

if(q.state !=3 )

q.state = 2;

q.cputime++;

if(q.needtime>0)

q.needtime--;

if(q.needtime == 0)

q.state = 3;

if(q.state!=3)

q.prio-=3;

pp.push(q);

while(!pq.empty())

{

q = pq.top();

pq.pop();

if(q.needtime == 0)

q.state = 3;

prt2(algo , q);prt1(algo);

pp.push(q);

}

pq = pp;

pp = pqempty;

}

printf("**************************************************************************\n");

printf(" 输出结束\n");

getchar();

}

二.时间片轮转算法:

用户可以自行输入进程的数量,每一个进程由进程控制块( PCB)void Roundrun(int timeSlice){

while(run != NULL){

run->cputime = run->cputime + timeSlice;

run->needtime = run->needtime - timeSlice;

run->round+=timeSlice;

run->count++;

if(run->needtime <= 0){

run->needtime = 0;

run->next = finish;

finish = run;

if(run != tail){

tail->next = ready;

}

else{

ready = NULL;

}

run->state = 'F';

run = NULL;

if(ready != NULL){

firstin();

}

}

else{

if(ready != NULL){

run->state = 'W';

tail = run;

run = ready; //就绪队列的头指针赋值给运行

run -> state = 'R'; //进程状态变为等待状态

ready = ready -> next; //就绪队列头指针移到下一个进程

}}

prt(

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值