操作系统原理(进程调度)实验报告
实验一:动态优先权 一.实验目的:
(1).理解进程创建的相关理论; (2).掌握进程创建方法; (3).掌握进程相关的数据结构; (4).了解进程的调度算法;
二.实验内容:
1、最好采用图形界面; 2、可随时增加进程;
3、规定道数,设置后备队列和挂起状态。若内存中进程少于规定道数,可自动从后备队列调度一作业进入。被挂起进程入挂起队列,设置解挂功能用于将指定挂起进程解挂入就绪队列。 4、每次调度后,显示各进程状态。
三.实验步骤
1.创建进程PCB。包括进程ID,优先权,执行时间,占用cpu时间,状态五个部分;
struct Process {
int id;
int priority; int cputime;
int alltime;
enum STATE state; }process[N];
2.初始化进程队列。进程号用ID表示,优先权随机设定,状态均置为ready;
void Init() {
srand((unsigned)time(NULL)); for(int i=0;i process[i].alltime = rand()%3+3; process[i].state = ready; TIME += process[i].alltime; } Sort(); Print(); flag = 1; } 3.运行进程。首轮按优先权大小排列进程执行顺序,优先权最大的最先执行,首轮执行后,运行程序优先权减2,未执行程序优先权加1.第二轮再按优先权顺序排序执行,以此类推,直到所有程序执行完成。 .......... 附录(源代码): #include enum STATE{ready,run,finish}; struct Process { int id; int priority; int cputime; int alltime; enum STATE state; }process[N]; int Rseq[N]; int flag = 0; int TIME = 0; void Print() { printf(\ =============================================================\\n\ printf(\ id priority cputime alltime state \\n\ for(int i=0;i =============================================================\\n\\n\ } void Sort() { int temp; for(int i=0;i void Init() { srand((unsigned)time(NULL)); for(int i=0;i process[i].alltime = rand()%3+3; process[i].state = ready; TIME += process[i].alltime; } Sort(); Print(); flag = 1; } void Run() { for(int i=0;i<=TIME;i++) { printf(\ run process:%d\\n\ for(int j=0;j main() { Init(); Run(); }