您好,欢迎来到刀刀网。
搜索
您的当前位置:首页操作系统原理高优先权调度算法

操作系统原理高优先权调度算法

来源:刀刀网


《操作系统原理》

课 程 设 计 报 告 书

题 目: 高优先权调度算法 学 号: 学生姓名: 专 业: 指导教师:

5月30日

目 录

1 功能描述 ................................................................................................. 1 2 系统设计 ................................................................................................. 1 2.1总体设计.............................................................................................. 1 2.2详细设计.............................................................................................. 1 2.3程序运行流程图 ................................................................................. 1 3 系统实现 ................................................................................................. 2 3.1程序代码.............................................................................................. 3 4 系统测试与分析 .................................................................................... 7 4.1程序运行开始界面见图2和图3 ...................................................... 7 4.2高优先权程序正常运行 ..................................................................... 8 教师评分表 ............................................................................................... 13

1 功能描述

先权是指在创建进程时所赋予的优先权,是可以随进程的推进或随其等待时间的增加而改变的,以便获得更好的调度性能。高优先权优先调度算法可以使紧迫型作业进入系统后能得到优先处理。此算法常被用于批处理系统,作为作业调度算法,也作为多种操作系统中的进程调度算法,还可用于实时系统。该算法用于作业调度时,系统将从后备队列中选择若干个优先权最高的作业装入内存。当用于进程调度时,该算法是把处理机分配给就绪队列中优先权最高的进程。

2 系统设计

2.1总体设计

验内容利用C语言来实现对N个进程采用动态优先权优先算法的进程调度。优先数改变的原则:进程每运行一个时间片,优先数减1。

2.2详细设计

1.在运行界面里输入进程名称,进程优先级和进程时间; 2.每运行一个时间单位,作业的优先权级数减一;

3.在运行出的用户界面中显示初始作业名,作业状态,优先权级数,需要服务的时间,已经运行的时间;

4.每次调度前后显示作业队列;

2.3程序运行流程图

程序运行流程图见流程图1

1

开始 按1回车 是 输入进程名、优先数、运行时间 从就绪队列中选择优先级高的进程运行 优先数减一、运行时间加一 否 否 需要时间是否等于运行时间 是 进程运行完成 结束

流程图1 3 系统实现

用c++编写的高优先权调度算法算法。

2

3.1程序代码

程序源代码如下: #include #include

struct PCB{

char p_name[20]; int p_priority; int p_needTime; int p_runTime; char p_state;

struct PCB* next; };

void HighPriority(); void RoundRobin(); void Information(); char Choice();

struct PCB* SortList(PCB* HL);

int main() {

Information();

char choice = Choice(); switch(choice) {

case '1':

system(\"cls\"); HighPriority(); break;

default: break; }

system(\"pause\"); return 0; }

void Information() {

3

printf(\" 按回车键进入演示程序\"); getchar(); system(\"cls\"); }

char Choice() {

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

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

printf(\" 按1继续:\"); char ch = getchar(); return ch; system(\"cls\"); }

void HighPriority() {

struct PCB *processes, *pt;

//pt作为临时节点来创建链表,使用for语句,进程数为5个 processes = pt = (struct PCB*)malloc(sizeof(struct PCB)); for (int i = 0; i != 5; ++i) {

struct PCB *p = (struct PCB*)malloc(sizeof(struct PCB)); printf(\"进程号No.%d:\\n\ printf(\"输入进程名:\"); scanf(\"%s\ printf(\"输入进程优先数:\"); scanf(\"%d\ printf(\"输入进程运行时间:\"); scanf(\"%d\ p->p_runTime = 0; p->p_state = 'W'; p->next = NULL; pt->next = p; pt = p;

printf(\"\\n\\n\"); }

getchar(); //接受回车

//processes作为头结点来存储链表 processes = processes->next; int cases = 0;

struct PCB *psorted = processes; while (1) {

4

++cases;

pt = processes;

//对链表按照优先数排序

//psorted用来存放排序后的链表 psorted = SortList(psorted);

printf(\"The execute number: %d\\n\\n\

printf(\"**** 当前正在运行的进程是:%s\\n\ psorted->p_state = 'R';

printf(\"qname state super ndtime runtime\\n\"); printf(\"%s\%c\%d\%d\%d\\\n\\n\psorted->p_name, psorted->p_state, psorted->p_priority, psorted->p_needTime, psorted->p_runTime); pt->p_state = 'W';

psorted->p_runTime++; psorted->p_priority--;

printf(\"**** 当前就绪状态的队列为:\\n\\n\"); //pt指向已经排序的队列 pt = psorted->next; while (pt != NULL) {

printf(\"qname state super ndtime runtime\\n\");

printf(\"%s\%c\%d\%d\%d\\\n\\n\pt->p_name, pt->p_state, pt->p_priority, pt->p_needTime, pt->p_runTime); pt = pt->next; }

//pt指向已经排序的链表,判断链表是否有已用时间啊等于需要时间的 pt = psorted; struct PCB *ap;

ap = NULL; //ap指向pt的前一个节点 while (pt != NULL) {

if (pt->p_needTime == pt->p_runTime) {

if (ap == NULL) {

pt = psorted->next; psorted = pt; } else

ap->next = pt->next; }

ap = pt;

pt = pt->next; }

if (psorted->next == NULL)

5

break; getchar(); } }

struct PCB* SortList(PCB* HL) {

struct PCB* SL;

SL = (struct PCB*)malloc(sizeof(struct PCB)); SL = NULL;

struct PCB* r = HL; while (r != NULL) {

struct PCB* t = r->next; struct PCB* cp = SL; struct PCB* ap = NULL; while (cp != NULL) {

if (r->p_priority > cp->p_priority) break; else {

ap = cp;

cp = cp->next; } }

if (ap == NULL) {

r->next = SL; SL = r; } else {

r->next = cp; ap->next = r; } r = t; }

return SL; }

6

4 系统测试与分析

经过测试运行正常,可以达到预期的输出结果。

4.1程序运行开始界面见图2和图3

图2

图3 7

4.2高优先权程序正常运行

输入进程名输入5个进程名、优先数、运行时间,然后程序自动从就绪队列中选择优先级高的进程运行优先执行,一直到所有进程全部运行完毕。具体的见图4—图12。

8

图4

图6 图5 9

图8 图7 10

图9

图10 11

图11

12

图12 教师评分表

评分细则 分数 理解功能及基本原理程度。(20分) 报告文字、图、表格式规范、整齐程度。(15分) 报告内容完整、逻辑性程度。(15分) 程序代码是否有注释、是否有语法错误。(10分) 程序运行是否正常。(20分) 程序运行界面是否美观。(15分) 是否有创新思考、做法等。(5分) 其他说明: 总分: 成绩: 指导老师签名: 日期:

13

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- gamedaodao.com 版权所有 湘ICP备2022005869号-6

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务