西安石油大学操作系统原理实验一进程及其管理Word下载.docx
- 文档编号:18789954
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:14
- 大小:157.91KB
西安石油大学操作系统原理实验一进程及其管理Word下载.docx
《西安石油大学操作系统原理实验一进程及其管理Word下载.docx》由会员分享,可在线阅读,更多相关《西安石油大学操作系统原理实验一进程及其管理Word下载.docx(14页珍藏版)》请在冰豆网上搜索。
进程状态:
STATE(一般为就绪,不用)
②设计进程就绪队列及数据结构;
③设计进程调度算法,并画出程序流程图;
④设计输入数据和输出格式;
结构格式:
当前正运行的进程:
当前就绪队列:
2,1,3,4
⑤编程上机,验证结果。
4.提示:
假设调度前,系统中有5个进程,其初始状态如下:
1
2
3
4
可否考虑用二维数组去实现
PRIORITY
9
38
30
29
ALLTIME
6
STATE
ready
①以时间片为单位调度运行;
②每次总是从ALLTIME中不为0,且PRIORITY最大的进程调度运行一个时间片;
③上述进程运行后其优先数减3,再修改其CPUTIME和ALLTIME,重复②,③
④直到所有进程的ALLTIME均变为0。
5.书写实验报告
①实验题目;
②程序中所用数据结构及说明;
③程序清单及描述;
④执行结果。
6.实验源代码:
#include<
stdio.h>
malloc.h>
typedefintStatus;
#defineERROR0
#defineOK1
typedefstructPCB{
charNAME[10];
//进程名字
intPRIO;
//进程优先数
intROUNT;
//轮转时间片
intCOUNT;
//计数器
intNEEDTIME;
//需要的CPU时间
intCPUTIME;
//占用cpu时间
char*STATE;
//进程状态
}ElemPCB;
typedefstructQNode{
ElemPCBpcb;
structQNode*next;
}QNode,*QueuePtr;
typedefstruct{//就绪队列
QueuePtrRUN;
//当前运行进程指针
QueuePtrREADY;
//头指针
QueuePtrTAIL;
//尾指针
}READYQueue;
typedefstruct{//完成队列
QueuePtrFINISH;
}FINISHQueue;
StatusCreate(READYQueue&
ready);
StatusPrint(READYQueueready,FINISHQueuefinish);
StatusPrintr(READYQueueready,FINISHQueuefinish);
StatusFisrt(READYQueue&
StatusInsert1(READYQueue&
StatusInsert2(READYQueue&
StatusPrisch(READYQueue&
ready,FINISHQueue&
finish);
StatusRoundsch(READYQueue&
voidmain(){
charch;
READYQueueready;
FINISHQueuefinish;
ready.READY=ready.TAIL=(QueuePtr)malloc(sizeof(QNode));
//存储分配
ready.RUN=(QueuePtr)malloc(sizeof(QNode));
ready.RUN->
next=NULL;
finish.FINISH=finish.TAIL=(QueuePtr)malloc(sizeof(QNode));
Create(ready);
//创建后就绪对列中
printf("
\n就绪对列中初始值:
\n"
);
Print(ready,finish);
Fisrt(ready);
请输入要选择调度的算法(p--优先数调度,r--时间片轮转法):
while
(1){
do{
ch=getchar();
scanf("
%c"
&
ch);
}while(ch!
='
p'
&
&
ch!
r'
switch(ch){
case'
:
//优先数调度
Prisch(ready,finish);
break;
//时间片轮转法
Roundsch(ready,finish);
}
}
StatusPrint(READYQueueready,FINISHQueuefinish){//打印就绪队列中的进程状态
QueuePtrp,q;
p=ready.READY;
q=finish.FINISH;
//运行中的进程
if(ready.RUN->
next!
=NULL)
{
printf("
%s"
ready.RUN->
next->
pcb.NAME);
%s\t"
pcb.STATE);
优先数:
%d\n"
pcb.PRIO);
//就绪队列的进程
while(p!
=ready.TAIL){
p->
p=p->
next;
//完成队列的进程
while(q!
=finish.TAIL){
q->
q=q->
returnOK;
StatusPrintr(READYQueueready,FINISHQueuefinish){//打印就绪队列中的进程状态
剩余时间:
pcb.NEEDTIME);
ready){
QueuePtrp;
inti=0;
intn;
请输入进程个数:
"
scanf("
%d"
n);
while(i<
n)
p=(QueuePtr)malloc(sizeof(QNode));
输入第%d进程名:
i+1);
scanf("
输入进程需要的时间:
p->
输入进程的进程优先数:
p->
pcb.STATE="
W"
;
pcb.ROUNT=2;
pcb.COUNT=0;
i++;
ready.TAIL->
next=p;
ready.TAIL=p;
if(ready.READY==ready.TAIL)
returnERROR;
next=ready.READY->
RUN"
//修改进程状态
if(ready.TAIL==ready.READY->
next)
ready.READY=ready.TAIL;
else
ready.READY->
//头指针后移
\n%s被从就绪队列调度运行\n"
inti=0,j=0;
QueuePtrp=ready.READY,q;
ElemPCBtemp;
QueuePtrs=(QueuePtr)malloc(sizeof(QNode));
s->
pcb=ready.RUN->
pcb;
//将未完成的进程插入就绪队列
ready.TAIL->
next=s;
ready.TAIL=s;
//按优先数从大到小排序
for(p;
p!
=ready.TAIL;
p=p->
for(q=p->
q!
q=q->
{
if(p->
pcb.PRIO<
q->
pcb.PRIO)
{
temp=p->
p->
pcb=q->
q->
pcb=temp;
}
}
QueuePtrp=ready.RUN->
if(p->
pcb.NEEDTIME>
0)
//插入到就绪队列
ready.RUN->
finish){
while(ready.RUN->
pcb.CPUTIME++;
pcb.NEEDTIME--;
pcb.PRIO-=3;
if(ready.RUN->
pcb.NEEDTIME==0)
finish.TAIL->
next=ready.RUN->
//插入到完成队列
finish.TAIL=ready.RUN->
//尾指针后移
ready.RUN->
FINISH"
if(ready.READY!
=ready.TAIL)
Fisrt(ready);
elseif(ready.READY!
=ready.TAIL&
(ready.RUN->
pcb.PRIO)<
(ready.READY->
pcb.PRIO))
printf("
%s被调到就绪队列里\n"
Insert1(ready);
Fisrt(ready);
\n进程执行第%d个时间片的结果:
i);
Print(ready,finish);
inti=0;
pcb.COUNT++;
elseif(ready.RUN->
pcb.COUNT==ready.RUN->
pcb.ROUNT)
if(ready.READY!
=ready.TAIL)
ready.RUN->
printf("
Insert2(ready);
}
Printr(ready,finish);
returnOK;
7.运行结果截图:
8.实验心得
操作系统是计算机系统中必不可少的系统软件,它是计算机系统中各种资源的管理者和各种活动的
组织者、指挥者。
操作系统采用时间片法调度进程,是系统资源得到充分利用,用户可以花更少的时间
完成过多的工作。
通过这次实验,将以前只会做题的过程转化外程序执行的过程,模拟了在单处理机情
况下的处理及调度问题,体会到了程序执行的过程,加深了对进程调度的理解。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 西安石油 大学 操作系统 原理 实验 进程 及其 管理