进程调度文档格式.docx

上传人:b****5 文档编号:20611622 上传时间:2023-01-24 格式:DOCX 页数:13 大小:135.07KB
下载 相关 举报
进程调度文档格式.docx_第1页
第1页 / 共13页
进程调度文档格式.docx_第2页
第2页 / 共13页
进程调度文档格式.docx_第3页
第3页 / 共13页
进程调度文档格式.docx_第4页
第4页 / 共13页
进程调度文档格式.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

进程调度文档格式.docx

《进程调度文档格式.docx》由会员分享,可在线阅读,更多相关《进程调度文档格式.docx(13页珍藏版)》请在冰豆网上搜索。

进程调度文档格式.docx

2、深入理解同步与互斥的概念及p、v操作;

3、上机前仔细阅读参考程序,并在参考程序的基础上,对程序作相应的修改;

给出实验数据与结果

二、实验目的

进程调度时进程管理的主要内容之一,通过设计,编制,调试一个简单的进程调度模拟系统,对进程调度,进程运行状态变换及PV操作加深理解和掌握。

三、实验环境

每人一台电脑,在下实现。

四、实验内容

1、模拟批处理多道操作系统的进程调度;

采用剥夺式优先算法,对三个进程进行模拟调度

2、模拟实现同步机构避免并发进程执行时可能与时间相关的错误;

模拟PV操作同步机构,用PV操作解决进程进入临界区的问题。

五、实验程序数据结构

1,进程控制块PCB

Struct{

Intid;

Charstatus;

Intpriorrty;

Intwaiter1;

}

2,信号量

Struct

{

Intvalue;

Intwater2;

}sem[2]

3,现场保护栈

Charstack[11][4]

每个进程都有一个为10个字的现场保护栈,用来保护被中断时的断点地址等。

以及全局变量

Inti;

charaddr;

intm1,m2;

六、实验输入数据

输入进程:

输入PCB参数

3,4,,5进程以此类推。

七、实验输出数据与分析总结

按任意键开始一次时间片调度:

进行了一次进程调度轮回,每一个进程公平的获得了一定时间的CPU使用。

进程全部运行完毕,正常退出。

实验结果的分析及说明

实验结果很明显的看出时间片轮转片算法的实质,即每一个进程按顺序公平的获得一定的CPU使用时间,如果没有运行结束,那么它将排到队尾等待下一次调度。

等待队列中的进程也会有次序的排队等待调度。

 

八、教师评语

教师签字:

年月日

程序中源程序和可执行程序:

voidmain();

/*主函数,用来进行调度操作*/

voidnewPCB();

/*建立PCB块并将他们组成一个队列*/

voidpushPCB();

/*将新的PCB块放到链表末尾*/

voidshowPCB();

/*调度一次时间轮转算法并显示*/

voidpinrtSort();

/*排序输出各个进程的PCB*/

代码清单:

/*

本程序实现模拟进程的时间片轮转调度算法,即每一个进程按照在队列中的顺序平均获得cpu执行时间,

如未能在时间片中完成,则该进程回到队尾等待调度,直到运行完毕

Authorjuju

*/

#include<

stdio.h>

stdlib.h>

conio.h>

windows.h>

staticintid=0;

intprocess_num;

intcurrent_process;

structpcb

charname[20];

intid;

charstate;

intneed_time;

intrun_time;

structpcb*next;

}*p,*q,*first_pcb=NULL;

typedefstructpcbPCB;

/*排序输出各个进程PCB*/

voidprintSort()

inti;

q=first_pcb;

for(i=0;

i<

process_num;

){

if(i==q->

id){

printf("

|%s\t\t|%d\t\t|%c\t\t|%d\t\t|%d\n"

q->

name,q->

id,q->

state,q->

need_time,q->

run_time);

i++;

}else{

q=q->

next;

if(q==NULL){

q=first_pcb;

i++;

}

}

}

/*调度一次PCB并显示*/

voidshowPCB()

first_pcb->

run_time++;

state='

r'

;

/*进程执行完毕,将其清除出链表*/

if((first_pcb->

run_time)==(first_pcb->

need_time)){

current_process--;

printf("

进程%s已经运行完毕"

first_pcb->

name);

system("

pause"

);

first_pcb=first_pcb->

if(first_pcb==NULL){

printf("

所有进程都已经运行完毕"

system("

return;

first_pcb->

system("

cls"

/*显示运行的进程和就绪的进程*/

q=first_pcb->

-------当前运行的进程是:

进程%s\n\n"

-------在等待队列的进程是:

"

while(q!

=NULL){

进程%s"

q=q->

/*显示相应的PCB块*/

\n\n------------------------------进程详细PCB------------------------------------"

\n\n|进程名\t\t|进程ID\t\t|进程状态\t|进程所需时间\t|进程运行时间\n"

printSort();

/*进行一次时间片轮换调度算法,将队首的进程放到队尾,之前第二位进程获得cpu时间片*/

while(q->

next!

w'

q->

next=first_pcb;

first_pcb=first_pcb->

next->

next=NULL;

\n"

运行调度"

/*将新的PCB块放到链表末尾*/

voidpushPCB(inti)

next=p;

q=p;

if(i==process_num-1)q->

/*建立PCB块并将他们组成一个队列*/

voidnewPCB()

请输入进程数:

scanf("

%d"

&

process_num);

q=(PCB*)malloc(sizeof(PCB));

first_pcb=(PCB*)malloc(sizeof(PCB));

i++){

p=(PCB*)malloc(sizeof(PCB));

请输入第%d个进程名:

id+1);

scanf("

%s"

p->

请输入进程需要的运行时间:

p->

need_time);

p->

id=id++;

run_time=0;

if(i==0){

first_pcb=q=p;

p->

elsepushPCB(i);

voidmain()

newPCB();

current_process=process_num;

按任意键开始进程调度\n"

while(current_process){

showPCB();

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

当前位置:首页 > 考试认证 > IT认证

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

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