操作系统课程设计——进程调度模拟算法(5种)(2)

2019-06-05 14:42

定义进程结构体:

struct Pro{ int num; //进程号 int time_in; //进程到达时间 int work_time; //进程服务时间

int btime;//用于抢占式进程优先记录该进程开始时间 int l_w_time;//用于抢占式进程优先记录剩余服务时间 int end_time; //记录该进程结束时间,(需要时时监测) int judge; //用于需要时的标记

}pro[10]; //进程结构体

1先到先服务

算法描述:把所有进程按到达先后排序,每次取最先到的进程执行后淘汰,再取下一个,直到所有进程调度完毕。

主要代码:

void FCFS() //先到先服务 { char s[] = {\先到先服务\ printmat(s); PT; int i, j; int min; int t = pro_num;

int begin_time = 0x7fff; for(i = 1; i <= pro_num; i++) { if(pro[i].time_in < begin_time) begin_time = pro[i].time_in; pro[i].judge = 0; //所有进程号查找标志置0,表示还未查找 }

while(t--) {

for(i = 1; i <= pro_num; i++) {

if(pro[i].judge==0) {

min = i; //设其为目前最早到达的时间 for(j = i+1; j <= pro_num; j++) {

if(pro[j].judge == 0 && pro[j].time_in <= pro[min].time_in)//该进程号若还未被查找且小于预设

min = j; }

pro[min].judge = 1; //该进程号被查找过

printf(Format2,pro[min].num,pro[min].time_in,pro[min].work_time,

begin_time,begin_time+pro[min].work_time,begin_time+pro[min].work_time-pro[min].time_in); begin_time += pro[min].work_time; puts(\ } } } printmat(s); puts(\}

程序截图:

2段进程优先非抢占

算法描述:每次选出最短的进程进行调度,调度完毕则淘汰,直到所有进程都调度完毕;

void SJF() //短进程优先(非抢占) {

char s[] = \非抢占短进程优先\ printmat(s); PT; struct Pro *p,*q,*head; int t_num,t_work_time,t_time_in; head = &pro[1]; /************************按所有进程到达时间排序*************/ p = head; while(p - head < pro_num) {

for(q = p+1; q-head < pro_num; q++) {

if(q->time_in < p->time_in || (q->work_time < p->work_time && q->time_in == p->time_in)) {

t_num = p->num,t_time_in = p->time_in,t_work_time = p->work_time; p->num = q->num,p->time_in = q->time_in,p->work_time = q->work_time;

q->num = t_num, q->time_in = t_time_in,q->work_time = t_work_time; } } p++; } /*************************************************************/ /**********找出第一个执行的进程,即最先到达的最短进程*********/ int time = 0; p = head; for(q = head; q < head + pro_num; q++) { q->judge = 0; if(q->time_in < p->time_in) p = q; if(q->time_in == p->time_in && q->work_time < p->work_time) p = q; } int cnt = pro_num; p = head; while(cnt--) { time = time < p->time_in ? p->time_in:time; p->judge = 1; p->begin_time = time; time += p->work_time; p->end_time = time; for(q = head; q < head + pro_num; q++) { if(p->judge == 1 && q->judge == 0) p = q; else if(p->judge == 0 &&(q->work_time < p->work_time)) { p = q; } } } for(p = head; p < head+pro_num; p++) { printf(Format2,p->num,p->time_in,p->work_time,p->begin_time,p->end_time,p->end_time-

p->time_in); puts(\ } printmat(s); puts(\}

3短进程优先(抢占)

算法描述:按时间叠加,当新进程到达时,判断如果比当前执行的进程短,则发生抢占,执行完的淘汰,直到所有进程都调度完毕。 int find(int pp,int time) { int i; for(i = 1; i <= pro_num; i++) { if(pro[pp].l_w_time == 0 ||( pro[i].l_w_time != 0 && pro[i].l_w_time < pro[pp].l_w_time && time >= pro[i].time_in)) pp = i; } return pp; }

void test() { int i; for(i = 1; i <= pro_num; i++) {


操作系统课程设计——进程调度模拟算法(5种)(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:SD卡基础原理及读写程序

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: