OS进程调度实验
一、实验目的
通过实验加强对进程调度算法的理解和掌握。
二、实验内容
编写程序实现基于优先级的时间片轮转调度算法。
三、实验要求
1、假定系统有5个进程,每个进程用一个进程控制块PCB来代表,进程控制块的结构如下图1.1所示:
进程名
优先级
要求运行时间
已运行时间
进程状态
指针
其中:
进程名:作为进程的标识,假设五个进程的进程名分别为p1,p2,p3,p4,p5。
指针:进程按顺序排成循环链表,用指针指出下一个进程的进程控制块首地址,最后一个进程中的指针指出第一个进程的进程控制块首地址。
要求运行时间:假设进程需要运行的单位时间数。
已运行时间:假设进程已经运行的单位时间数,初值为0。
状态:可假设有两种状态,就绪状态和结束状态。进程的初始状态都为就绪状态。
2、每次运行所设计的处理器调度程序调度进程之前,为每个进程随机确定它的要求运行时间。
3、此程序是模拟处理器调度,因此,被选中的进程并不实际启动运行,而是执行
已运行时间+1
来模拟进程的一次运行,表示进程已经运行过一个单位时间。
4、在所设计的程序中应有显示语句,能显示每次被选中的进程名以及运行一次后进程队列的变化。
- 再次犯错了!pre是指针变量,可以修改pre向的内容,但修改pre的指向是不会影响外部的!
PCB*getHp(PCB *pre); - code:
#include<iostream>
#include<cstring>
#include<cstdlib>
using namespace std;
struct PCB{
char name[20];
int priority;
int all_time;
int run_time;
int status;//1 ready 0 stop
PCB* next;
PCB(){
priority=0;
all_time=run_time;
status=1;
}
};
const int piece=10;
PCB *pcb=NULL;
PCB* getHp(PCB* pre);