.
数学与计算机学院 单处理机系统的进程调度 实验报告
年级 07 学号 2007429023 姓名 王阳 成绩 专业 信计 实验地点 主楼402 指导教师 王硕 实验项目 单处理机系统的进程调度 实验日期
实验报告要求: 一、 实验目的
1、加深对进程概念的理解,明确进程和程序的区别。 2、深入了解系统如何组织进程、创建进程。 3、进一步认识如何实现处理机调度。 二、实验原理
三、实验要求
1、采用时间片轮转调度算法实现进程调度。 2、确定进程控制块的内容,进程控制块的组织方式。 3、完成进程创建原语和进程调度原语。 4、编写主函数对所做工作进行测试。
四、实验结果(程序)及分析
#include
#define N 10 //系统中所允许的最大进程数量 #define SLOT 5 //时间片大小
精选文档
.
//进程状态枚举 typedef enum {
} ProStatus;
//进程控制块 typedef struct {
int name; //进程标识符 ProStatus status; //进程状态 int ax,bx,cx,dx; //通用寄存器
int pc; //程序计数器寄存器 int psw; //程序状态字寄存器 int next; //指向下一个进程的指针 Running, //运行状态 Aready, //就绪状态 Blocking //阻塞状态
} PCB;
//就绪队列指针 typedef struct {
int head; //头指针
精选文档
.
int tail; //尾指针
} Ready;
//模拟寄存器
int PSW,AX,BX,CX,DX,PC,TIME;
//PCB的静态链表
PCB pcbArea[N]; //模拟PCB区域的数组 int run; //运行状态程序的指针
Ready ready; //就绪队列指针 int pfree; //空闲队列的指针
//初始化运行状态进程指针
void InitRun() { }
//初始化就绪状态队列 run=-1;
void InitReady() { }
//初始化空闲队列
精选文档
ready.head=ready.tail=-1;
.
void InitFree() { }
//就绪队列出队 pfree=0; int temp;
for(temp=0;temp pcbArea[temp].next=-1; pcbArea[temp].next=temp+1; int PopReady() //返回结点在PCB区域数组的编号 { int temp; if(ready.head==-1) { } temp=ready.head; ready.head=pcbArea[temp].next; if(ready.head==-1) 精选文档 printf(\就绪队列为空,不能出队。\\n\ return -1; . } ready.tail=-1; pcbArea[temp].next=-1; return temp; //空闲队列出队 int PopFree() //返回结点在PCB区域数组的编号 { } //就绪队列入队 int temp; if(pfree==-1) { } temp=pfree; pfree=pcbArea[temp].next; pcbArea[temp].next=-1; return temp; printf(\空闲队列为空,不能出队。\\n\ return -1; void PushReady(int x) //x为入队结点的编号 { 精选文档
相关推荐: