1 / 13
文档名称:

操作系统实验报告.docx

格式:docx   大小:101KB   页数:13页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

操作系统实验报告.docx

上传人:cjl201801 2022/1/14 文件大小:101 KB

下载得到文件列表

操作系统实验报告.docx

文档介绍

文档介绍:int pid ; 〃进程名
实验
进程调度
int pid ; 〃进程名
.目的和要求
通过这次实验,理解进程调度的过程,进一步掌握进程状态的转变、进程调度的策略,进一步体会多道程序并发执行的特点,并分析具体的调度算法的特点,掌握对系统性能的评价方法。
.实验内容
阅读教材《计算机操作系统》第二章和第三章,掌握进程管理及调度相关概念和原理。
编写程序模拟实现进程的轮转法调度过程,模拟程序只对PCB进行相应的
调度模拟操作,不需要实际程序。假设初始状态为:有n个进程处于就绪状态,
有m个进程处于阻塞状态。采用轮转法进程调度算法进行调度(调度过程中,假
设处于执行状态的进程不会阻塞),且每过t个时间片系统释放资源,唤醒处于阻塞队列队首的进程。
程序要求如下:
1)输出系统中进程的调度次序;
2)计算CPU利用率。
.实验环境
Windows操作系统、VC++
C语言
1)程序中进程可用pcb表示,其类型描述如下:structPCB_type
int pid ; 〃进程名
intstat*//进程状态
2——表示执行”状态
1表示就绪”状态
0——表示阻塞”状态
intcpu_time;〃运行需要的CPU时间(需运行的时间片个数))
用PCB来模拟进程;
(2)设置两个队列,将处于“就绪”状态的进程PCB挂在队列ready中;
将处于“阻塞”状态的进程PCB挂在队列blocked中。队列类型描述如下:
structQueueNode{
structPCB_typePCB:
StructQueueNode*next;
)并设全程量:structQueueNode
eady_head=NULL,//ready队歹ij队首指《十
*ready_tail=NULL,//ready队列队尾指针
3)设计子程序:
start_state();dispath();
*b1ocked_head=NULL,//blocked队列队首指针
*blocked_tail=NULL://blocked队歹ij队尾指针
读入假设的数据,设置系统初始状态,即初始化就绪队列和阻塞队列。
模拟调度,当就绪队列的队首进程运行一个时间片后,放到就绪队列末尾,每次都是队首进程进行调度,一个进程运行结束就从就绪队列中删除,当到t个时间片后,唤醒阻塞队列队首进程。
calculate();
就绪进程运行一次,useepu加1,当就绪队列为空时unuseepu加1,
CPU利用率为use_cpu/(use_cpu+unuse_cpu)o
5源代码:
#inelude<>
#inelude<>structPCB_type
int pid ; 〃进程名
intpid;
//进程名
int pid ; 〃进程名
intstate;〃进程状态
//2一表示〃执行〃状态
//I一表示〃就绪〃状态
//0一表示〃阻塞〃状态
需运行的时间片个数)
//ready队列队首指针
//ready队列队尾指针
“blocked队列队首指针
“blocked队列队尾指针
int〃运行需要的CPU时间
cpu_time;};structQueueNode{
structpcB_typePCB;
structQueueNode*next;
);
structQueueNode*ready_head=NULL,
*ready_tai1=NULL,
*blocktai『NULL;
*blockhead=NULL,
intuse_cpu,unuse_cpu;
voidstart_state()〃读入假设的数据,设置系统初始状态{
intn,m;
inti;
structQueueNode*p,*q;
printf(,z输入就绪节点个数n:〃);scanf(〃%d〃,&n);
printf(,z输入阻塞节点个数m:〃);scanf(〃%d〃,&m);
p=(structQueueNode*)malloc(sizeof(structQueueNode));p->next
二NULL;
ready_head=ready_tail=p;
for(i=0;i<n;i++)(
p=(structQueueNode*)malloc(sizeof(structQueueNode));p->next二NULL;
p->=l;
printf输入就绪进程%d的pid和cpu_time:i+1);
scanf(〃%d%d〃,&p->,