没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
实验二 进程调度
1。目得与要求
通过这次实验,理解进程调度得过程,进一步掌握进程状态得转变、进程调
度得策略,进一步体会多道程序并发执行得特点,并分析具体得调度算法得特点,
掌握对系统性能得评价方法。
2.实验内容
阅读教材《计算机操作系统》第二章与第三章,掌握进程管理及调度相关概
念与原理。
编写程序模拟实现进程得轮转法调度过程,模拟程序只对 PCB进行相应得
调度模拟操作,不需要实际程序.假设初始状态为:有 n 个进程处于就绪状态,有
m个进程处于阻塞状态。采用轮转法进程调度算法进行调度(调度过程中,假设
处于执行状态得进程不会阻塞),且每过 t 个时间片系统释放资源,唤醒处于阻塞
队列队首得进程。
程序要求如下:
1)输出系统中进程得调度次序;
2)计算 CPU 利用率。
3。实验环境
Windows 操作系统、VC++6、0
C语言
4设计思想:
(1) 程序中进程可用 PCB 表示,其类型描述如下:
struct PCB_type
{
int pid ; //进程名
int state ; //进程状态
2——表示“执行”状态
1——表示“就绪”状态
0-—表示“阻塞”状态
int cpu_time ; //运行需要得 CPU 时间(需运行得时间片个数)
}
用 PCB 来模拟进程;
(2)设置两个队列,将处于“就绪”状态得进程 PCB 挂在队列 ready
中;将处于“阻塞”状态得进程 PCB 挂在队列 blocked 中。 队列类型描
述如下:
struct QueueNode{
struct PCB_type PCB;
Struct QueueNode *next;
}
并设全程量:
struct QueueNode *ready_head=NULL,//ready 队列队首
指针
*ready_tail=NULL , //ready队列队尾指针
*blocked_head=NULL,//blocked 队列
队首指针
*blocked_tail=NULL; //blocked 队列队
尾指针
(3)设计子程序:
start_state();
读入假设得数据,设置系统初始状态,即初始化就绪队列与阻塞队
列。
dispath();
模拟调度,当就绪队列得队首进程运行一个时间片后,放到就绪队列末
尾,每次都就是队首进程进行调度,一个进程运行结束就从就绪队列
中删除,当到 t 个时间片后,唤醒阻塞队列队首进程。
calculate();
就绪进程运行一次,usecpu 加 1,当就绪队列为空时 unusecpu 加
1,CPU 利用率为 use_cpu/(use_cpu+unuse_cpu)。
5 源代码:
#include<stdio、h〉
#include<stdlib、h>
struct PCB_type
{
int pid ; //进程名
int state ; //进程状态
//2-—表示”执行"状态
//1-—表示"就绪"状态
//0--表示"阻塞"状态
int cpu_time ; //运行需要得 CPU时间(需运行得时间片个数)
};
struct QueueNode{
struct PCB_type PCB;
struct QueueNode *next;
};
struct QueueNode *ready_head=NULL, //ready 队列队首指针
*ready_tail=NULL, //ready 队列队尾指针
*block_head=NULL, //blocked 队列队首指针
*block_tail=NULL; //blocked 队列队尾指针
int use_cpu,unuse_cpu;
void start_state() //读入假设得数据,设置系统初始状态
{
int n,m;
ﻩ int i;
ﻩ struct QueueNode *p,*q;
ﻩ printf("输入就绪节点个数n:");
ﻩ scanf("%d”,&n);
ﻩ printf("输入阻塞节点个数m:”);
scanf("%d”,&m);
p=(struct QueueNode *)malloc(sizeof(struct QueueNode));
p->next =NULL;
ready_head=ready_tail=p;
ﻩ for(i=0;i<n;i++)
{
ﻩ p=(struct QueueNode *)malloc(sizeof(struct QueueNode));
p—>next =NULL;
ﻩ p—>PCB、state=1;
printf("输入就绪进程%d 得 pid 与 cpu_time:",i+1);
scanf(”%d%d”,&p-〉PCB、pid,&p->PCB、cpu_time);
ready_tail->next=p;
ﻩready_tail=p;
}
q=(struct QueueNode *)malloc(sizeof(struct QueueNode));
ﻩ q->next =NULL;
block_head=block_tail=q;
剩余10页未读,继续阅读
资源评论
平头哥在等你
- 粉丝: 1578
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功