- 1、本文档共21页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
五邑大学实验报告
操作系统课程
2016~2017年度 第1学期
实验题目:进程调度
院系: 计算机学院
班级: 140801
学号: 3114002472
姓名: 黄凯鑫
任课教师: 白明 成绩评定:
实验二题目:进程调度
完成日期:2016年 12 月 11 日
1、实验目的
(1)设计一个有n个进程工行的进程调度程序。每个进程由一个进程控制块(PCB)表示。进程控制块通常应包含下述信息:进程名、进程优先数、进程需要运行的时间、占用CPU的时间以及进程的状态等,且可按调度算法的不同而增删。
(2)调度程序应包含2~3种不同的调度算法,运行时可任意选一种,以利于各种算法的分析比较。
(3)系统应能显示或打印各进程状态和参数的变化情况,便于观察诸进程的调度过程
2、实验内容
(1)编制和调试示例给出的进程调度程序,并使其投入运行。
(2)自行设计或改写一个进程调度程序,在相应机器上调试和运行该程序,其功能应该不亚于示例。
(3)直观地评测各种调度算法的性能。
3、算法设计
算法:
(1) 优先数法。
进程就绪链按优先数大小从高到低排列,链首进程首先投入运行。每过一个时间片,运行进程所需运行的时间片数减1,说明它已运行了一个时间片,优先数也减3,理由是该进程如果在一个时间片中完成不了,优先级应该降低一级。接着比较现行进程和就绪链链首进程的优先数,如果仍是现行进程高或者相同,就让现行进程继续进行,否则,调度就绪链链首进程投入运行。原运行进程再按其优先数大小插入就绪链,且改变它们对应的进程状态,直至所有进程都运行完各自的时间片数。
(2) 简单轮转法。
进程就绪链按各进程进入的先后次序排列,进程每次占用处理机的轮转时间按其重要程度登入进程控制块中的轮转时间片数记录项(相当于优先数法的优先数记录项位置)。每过一个时间片,运行进程占用处理机的时间片数加1,然后比较占用处理机的时间片数是否与该进程的轮转时间片数相等,若相等说明已到达轮转时间,应将现运行进程排到就绪链末尾,调度链首进程占用处理机,且改变它们的进程状态,直至所有进程完成各自的时间片。
实验源代码:
#include stdio.h
#include dos.h
#include stdlib.h
#include conio.h
#include iostream.h
#include time.h
enum state //进程的状态
{
Ready,
Working,
Finish
};
struct pcb //PCB数据结构
{
int pid;
int priority;
int cputime;
int needtime;
int round;
state process;
pcb *next;
};
int timepiece;
pcb *get_process(){ //优先数算法--输入进程个数
int proc;
pcb *q;
pcb *t;
pcb *p;
int i=0;
cout Input Process Number(1-10): ;
cin proc;
while (proc1 || proc10)
{
cout endl Illegal Input! endl endl Input Process Number(1-10): ;
cinproc;
}
//cout endl endl Start Scheduling!!!\n\n;
getch();
srand((unsigned)time(NULL)); //初始化随机数种子发生器
while (iproc)
{
q=(struct pcb *)malloc(sizeof(pcb));
q-pid=rand()%10000;
q-needtime=rand()%10+1;
q-cputime=0;
q-priority=rand()%100;
q-process=Ready;
q-next=NULL; //利用随机数生成进程信息
if (i==0)
{
p=q;
t=q;
}
else
{
t-next=q;
t=q;
} //尾插法建立PCB节点
i++;
} //while
return p;
}
void display(pcb *p)
{ //优先数算法结果输出
coutProcessID Cputime Need
文档评论(0)