1 / 12
文档名称:

时间片轮转算法和优先级调度算法 C语言模拟实现 收藏.doc

格式:doc   页数:12页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

时间片轮转算法和优先级调度算法 C语言模拟实现 收藏.doc

上传人:xxj16588 2016/7/28 文件大小:0 KB

下载得到文件列表

时间片轮转算法和优先级调度算法 C语言模拟实现 收藏.doc

文档介绍

文档介绍:时间片轮转算法和优先级调度算法 C 语言模拟实现收藏一、目的和要求进程调度是处理机管理的核心内容。本实验要求用高级语言编写模拟进程调度程序,以便加深理解有关进程控制快、进程队列等概念,并体会和了解优先数算法和时间片轮转算法的具体实施办法。二、实验内容 1. 设计进程控制块 PCB 的结构,通常应包括如下信息: 进程名、进程优先数(或轮转时间片数)、进程已占用的 CPU 时间、进程到完成还需要的时间、进程的状态、当前队列指针等。 2. 编写两种调度算法程序: 优先数调度算法程序循环轮转调度算法程序 3. 按要求输出结果。三、提示和说明分别用两种调度算法对伍个进程进行调度。每个进程可有三种状态;执行状态(R UN )、就绪状态( READY, 包括等待状态)和完成状态( FINISH ),并假定初始状态为就绪状态。(一)进程控制块结构如下: NAME ——进程标示符 PRIO/ROUND ——进程优先数/进程每次轮转的时间片数(设为常数 2) CPUTIME ——进程累计占用 CPU 的时间片数 NEEDTIME ——进程到完成还需要的时间片数 STATE ——进程状态 NEXT ——链指针注: ,程序中进程的的运行时间以时间片为单位进行计算; ,以及进程运行时间片数的初值,均由用户在程序运行时给定。(二)进程的就绪态和等待态均为链表结构,共有四个指针如下: RUN ——当前运行进程指针 READY ——就需队列头指针 TAIL ——就需队列尾指针 FINISH ——完成队列头指针(三)程序说明 ,进程优先数的初值设为: 50-NEEDTIME 每执行一次,优先数减 1, CPU 时间片数加 1,进程还需要的时间片数减 1。在轮转法中,采用固定时间片单位(两个时间片为一个单位),进程每轮转一次, CPU 时间片数加 2,进程还需要的时间片数减 2,并退出 CPU ,排到就绪队列尾, 等待下一次调度。 : 整个程序可由主程序和如下 7个过程组成: (1) INSERT1 ——在优先数算法中,将尚未完成的 PCB 按优先数顺序插入到就绪队列中; (2) INSERT2 ——在轮转法中,将执行了一个时间片单位(为 2),但尚未完成的进程的 PCB ,插到就绪队列的队尾; (3) FIRSTIN ——调度就绪队列的第一个进程投入运行; (4) PRINT ——显示每执行一次后所有进程的状态及有关信息。(5) CREATE ——创建新进程,并将它的 PCB 插入就绪队列; (6) PRISCH ——按优先数算法调度进程; (7) ROUNDSCH ——按时间片轮转法调度进程。主程序定义 PCB 结构和其他有关变量。(四)运行和显示程序开始运行后,首先提示:请用户选择算法,输入进程名和相应的 NEEDTIM E值。每次显示结果均为如下 5个字段: name cputime needtime priority state 注: state 字段中, "R" 代表执行态, "W" 代表就绪(等待)态, "F" 代表完成态。 "R" 态的,再显示"W" 态的,再显示"F" 态的。 "W" 态中,以优先数高低或轮转顺序排队;在"F" 态中,以完成先后顺序排队。 view plain copy to clipboard print ? 1. /* 2. 操作系统实验之时间片轮转算法和优先级调度算法 3. By Visual C++ 4. */ #include <> #include <> #include <> typedef struct node { char name[20]; /* 进程的名字*/ int prio; /* 进程的优先级*/ int round; /* 分配 CPU 的时间片*/ int cputime; /*CPU 执行时间*/ int needtime; /* 进程执行所需要的时间*/ char state; /* 进程的状态, W ——就绪态, R ——执行态, F ——完成态*/ int count; /* 记录执行的次数*/ struct node *next; /* 链表指针*/ }PCB; PCB *ready=NULL,*run=NULL,*finish=NULL; /* 定义三个队列, 就绪队列, 执行队列和完成队列*/ int num; void GetFirst(); /* 从就绪队列取得第一个节点*/ void Output(); /* 输出队列信息*/ void InsertPrio(PCB *in); /* 创建优先级队列, 规定