操作系统课程设计报告 处理机调度问题

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

操作系统课程设计

学号:1233050169

姓名:安心

专业:计算机科学与技术

课程:操作系统

指导教师:

时间:2015/3/9

成绩:

目录

目录 (1)

1.设计题目与要求................................. 错误!未定义书签。

1.1设计目的........................................ 错误!未定义书签。

1.2设计要求..................................... 错误!未定义书签。2.总体设计思想................................... 错误!未定义书签。

2.1总体设计思想................................ 错误!未定义书签。3.功能设计 (4)

3.1 数据结构设计 (4)

3.2程序清单 (4)

3.3运行结果 (7)

4.设计心得 (9)

5. 参考资料 (9)

附录............................................................................................

10

程序源代码:............................................................................

10

1

一.设计题目与要求

课题:理机调度模拟程序:选择一个调度算法,实现处理机调度。1.设计目的:

在多道程序和多任务系统中,系统内同时处于就绪状态的进程可能有若干个。也就是说能运行的进程数大于处理机个数。为了使系统中的

进程能有条不紊地工作,必须选用某种调度策略,选择一进程占用处理机。要求学生设计一个模拟处理机调度算法,以巩固和加深处理机调度的概念。

2.设计要求:

1)进程调度算法包括:时间片轮转法,短作业优先算法,最高响应比优先算法。

2)可选择进程数量

3)本程序包括三种算法,可用C语言实现,执行时在主界面选择算法(可用函数实现),进入子页面后输入进程数及每个进程的运行时间,每个进程的优先数由随机函数产生且优先数随等待时间而变化,执行,显示结果。

二.总体设计思想

(1)进程的创建:由系统为某个进程设置一个进程控制块PCB,用于对进程进行控制和管理。进程任务完成,由系统收回其PCB,该进程便消亡。

2

(2)进程的三种状态:运行、就绪、完成。进程的三种状态可以通过设计三个链队列来实现:finish为完成队列的头指针,ready为就绪队列的头指针,tail为循环轮转法队列的尾指针。因为每一时刻,CPU 只能运行一个进程,所以运行队列只有一个run指针指向当前运行进

程。

(3)进程调度的功能:按照一定的策略从就绪队列的多个进程中选取

一个进程,使其获得CPU而运行。

①动态优先数调度算法:

思想:为每一个进程设一个优先数,它总是把处理机给就绪队列中具有最高优先级的进程。初始的进程优先数是随机产生的,随着进程的运行对优先数进行调整,每次运行时都是从就绪队列中选取优先数最大的进程运行,所以将就绪队列按照优先数的大小从高到低排序,这样,每次取对首进程即可。将进程按优先数的大小排列在就绪队列中,每次选取就绪队列中优先权最高的进程首先占用处理机。优先数由随机函数产生进程最初的优先数。优先数的动态变化:进程每执行一次优先数-1。优先数随着进程的执行进行调整,每次执行时都从就绪队列中选取优先数最大的进程投入运行。

②时间片轮转调度算法:

思想:将所有进程按照先来先服务的规则排成一个队列,把CPU分

配给就绪队列的队首进程,并规定它的执行时间(称此时间为时间片),当时间片用完但并未执行结束时,剥夺该进程的执行,将其链接到就绪队列的队尾,等待下一次的选择。将就绪队列的队首指针投入运行。

③短作业优先调度算法(不可剥夺式的)

思想:根据估计运行时间的长短,将各个进程排成一个就绪队列(估计运行时间最短的进程排在队首),每次运行将队首进程投入运行,

直到运行结束,将此进程连接到完成队列的队尾。然后,再将下一个

队首进程投入运行,直到所有的进程都运行完毕。

3

三.功能设计

1.数据结构设计

PCB结构体:

typedef struct node

{ char name[10]; /*进程时间轮转时间片*/

int pid; /*进程的标号*/

int prio; /*优先级*/

int round; /*时间片*/

int cputime; /*进程占用cpu的时间*/

int runtime; /*进程运行所用的时间*/

int waittime; /*进程的等待时间*/

int length; /*进程的长度*/

int count; /*计数器*/

char state; /*进程的状态*/

struct node *next;/*链指针*/

}PCB ; PCB结构体用于标识进程的创建与撤消。

链指针:

PCB *finish,*ready,*tail,*run;.

Finish:完成队列的首指针,用于标识完成队列;

Ready:就绪队列的首指针,用于标识就绪队列;;

Run:运行队列的首指针,用于标识运行队列;;

Tail:循环轮转队列的尾指针;

2.程序清单

(1)Create1(),create2(),create3()分别为创建进程的函数

①Create1():按照优先级调度算法创建进程,用户输入进程名及进程所需的时间后,创建每个进程的PCB,将每个进程的PCB调用函数insert1()按照优先数从高到低排列到就绪队列中。

②create2():按照时间片调度算法创建进程,用户输入进程名及进程所需的时间后,创建每个进程的PCB,将每个进程的PCB调用函数insert2()将每个进程PCB按照输入的先后顺序插入到就绪队列的末尾。

③create3():按照短作业优先调度算法创建进程,用户输入进程名及进程所

相关文档
最新文档