静态优先级调度算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

__ 成绩(五级制):________

武汉科技大学城市学院

《操作系统》实验报告

院系武汉科技的大学城市学院

学生专业_信科________

年级班_大三________

课程名称_操作系统_

实验题目_进程调度________

学生姓名__宋骋_______

指导教师__郭冀生____

2013年11 月 4 日

实验二进程调度

一、实验目的

进程是操作系统最重要的概念之一,进程调度又是操作系统核心的重要内容。通过该实验,要求同学们了解各进程在执行过程中的状态和参数的变化情况,以便于观察诸进程的调度过程。

二、实验内容及要求

按剥夺式优先数法对三个进程P1,p2,p3进行模拟调度,各进程的优先数静态设置,其中P1的优先数最高,P3的优先数最低。每个进程都处于执行E(execute),就绪R(ready)和等待W(wait)三种状态之一,并假定初始状态均为R.。

三个进程有如下同步关系:P1因等待事件1被阻塞后由P2发现并唤醒之,P2因等待事件2被阻塞后由P3发现并唤醒之。

当系统进入运行,在完成必要的初始化工作以后便进入进程调度,首先选择优先数最高的进程使其进入执行(分配CPU)。当执行进程因等待某个事件被阻塞或唤醒某个等待进程时,转入进程调度。

如果被唤醒的进程的优先数大于现行的执行进程,则剥夺现行进程的执行权,而将CPU分配给被唤醒的进程。当系统处于死锁或三个进程都执行

完毕时系统退出运行。

系统中应用到如下数据结构:

*进程控制块PCB;

*信号量sem;

*其它需要的数据结构。由自己设计。

三、实验原理及步骤

根据现代操作系统的特征

1.并发性(concurrence);

2.共享性(sharing);

3.虚拟性(virtual);

4.异步性(asynchronism) 。

模拟出进程在执行中的状态变化过程;

体会进程申请资源、使用资源、归还资源;

体会死锁。

步骤(参考框图)

4、算法和流程图

可强占优先调度算法实现过程流程图(如下图):

四、程序运行

1 选择输入执行程序(如下图)

2 可强占优先调度算法图(如下图)

五.设计总结:

通过该课程设计,加深了对系统进程调度机制的理解。在抢占方式中实践了“抢占”必须遵循的原则:优先权原则。认识了几种进程调度算法的优缺点以及应用范围。加强C++的编程能力,实现类的封

装。

附录:

程序及注释(用红色黑体标注自己设计的函数)

//进程PCB类和模拟cpu的进程类的声明

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define MAX_PHILOSOPHERS 3 //待测试的哲学家数

#define ZERO 48 //数字0的ASCII码

#define DELAY rand()%25

struct PCB

{

char p_name[20];

int p_priority;

int p_needTime;

int p_runTime;

char p_state;

char deadlock();

struct PCB* next;

};

void HighPriority();

void deadlock();

void Information();//形参的改变映射给实参说白了就是实参传过去不用return 返回就可以把实参改变

char Choice();

struct PCB* SortList(PCB* HL);

int main(int argc,char *argv[])

{

Information();

char choice = Choice();

switch(choice)

{

case '1':

system("cls");

HighPriority();

break;

case '2':

system("cls");

void deadlock();

break;

default:

break;

}

system("pause");

return 0;

}

void Information()

{

printf("\n\n");

printf(" ********************************************* \n");

printf(" 模拟进程调度算法\n");

printf(" ********************************************* \n\n\n");

printf(" 静态优先级调度算法");

printf(" 死锁问题");

printf(" 按回车键进入演示程序");

getchar();

system("cls");

system("cls");

}

char Choice()

{

printf("\n\n");

printf(" ********************************************* \n");

printf(" 进程调度演示\n");

printf(" ********************************************* \n\n\n");

printf(" 1.演示最高优先数优先算法。\n");

printf(" 2.演示死锁问题。\n");

printf(" 3.退出程序。\n\n\n\n");

printf(" 选择进程调度方法:");

printf("select a function(1~3):");

char ch = getchar();

return ch;

system("cls");

}

void HighPriority()

{

struct PCB *processes, *pt;

//pt作为临时节点来创建链表

processes = pt = (struct PCB*)malloc(sizeof(struct PCB));

for (int i = 1; i != 4; ++i)

{

struct PCB *p = (struct PCB*)malloc(sizeof(struct PCB));

printf("进程号No.%d:\n", i);

printf("输入进程名:");

scanf("%s", p->p_name);

printf("输入进程优先数:");

scanf("%d", &p->p_priority);

printf("输入进程运行时间:");

scanf("%d", &p->p_needTime);

p->p_runTime = 0;

p->p_state = 'W';

p->next = NULL;

相关文档
最新文档