1 设计目的与内容
1.1 设计目的
通过课程设计, 加深对操作系统对程序执行的理解,掌握操作系统的多程序运行原理,能模拟操作系统设计相应的进程调度算法,掌握操作系统的基本原理及功能, 具有初步分析实际操作系统、设计、构造和开发现代操作系统的基本能力。
1.2 设计内容
1、设计进程控制块PCB表结构,分别适用于可强占的优先数调度算法和循环轮转调度算法。 2、建立进程就绪队列。对两种不同算法编制入链子程序。
3、编制两种进程调度算法:1)可强占的优先进程调度;2)循环时间片轮转调度 4、设计操作系统运行的指令。
2 设计说明
2.1 需求分析
设计虚拟内核实现进程的调度,实现多道程序的调度。设计调度算法计算各个进程的优先权限来确定进程执行的次序。进程调度程序选择一个就绪状态的进程,使之在处理器上运行。进程的调度采用最高优先数优先的调度算法和先来先服务调度算法相结合的算法,并且采用动态优先数策略,选择进程占用处理器后该进程仅能使用一个时间片,运行完后优先数减1。
2.2 设计思路
本程序用两种算法对多个进程进行调度,每个进程可有三个状态,并假设初始状态为就绪状态。 为了便于处理,程序中的某进程运行时间以时间片为单位计算。各进程的优先数或轮转时间数以及进程需运行的时间片数的初始值均由用户给定。
在优先数算法中,优先数的值为31与运行时间的差值。进程每执行一次,优先数减1,CPU时间片数加1,进程还需要的时间片数减1。在轮转算法中,采用固定时间片(即:每执行一次进程,该进程的执行时间片数为已执行了1个单位),这时,CPU时间片数加1,进程还需要的时间片数减1,并排列到就绪队列的尾上。
设计程序指令,
第 1 页 共 16 页
MOV n //把整数n赋给累加器A SAV m //把累加器A的值存入地址M
ADD n //从累加器A的值减去整数n,结果送到累加器A。 SUB n //从累加器A的值减去整数n,结果送到累加器A。 MUL n //从累加器A的值乘以整数n,结果送到累加器A。 DIV n //从累加器A的值除以整数n,结果送到累加器A。 JEQ m //F为0跳转到m JLG m //F大于0跳转到m JLE m //F大于等于0跳转到m JMP m //无条件跳转到m
OUT port //累加器的内容输出到端口port。port为0,指显示器
2.3 算法和流程图
定义一个PCB数据结构:
struct PCB{ int A; //累加器A int PC; //程序计数器PC char *addr; //程序加载起始地址 int length; //程序大小 int runtime; int waittime; int state; int pname; int pri; //优先级数 struct PCB *next;
}pcbs[MAX_PID]; /* 运行指针*/
进程调度算法如下: while( !apd() ) {
while(pcbs[cur_pid].state == 05 || pcbs[cur_pid].priority < pri) cur_pid = (cur_pid+1) % max_pid; exeInstruction(cur_pid); //执行指令
PCB *pcb=pcbs+cur_pid; //获取当前进程PCB tick++;
if(pcb->PC>=pcb->length) //执行完毕 {
第 2 页 共 16 页
delete [] pcb->addr; //回收内存 pcb->priority = 0; //优先级置零 pri = maxpri();
pcb->state = 05; //将已经完成了的pcb状态设置为 05 已完成 }
if( pcb->last >= pcb->slice ) { pcb->last = 0;
cur_pid = (cur_pid+1) % max_pid; }
可强占的优先进程调度,开始建立一个就绪队列,首先检查是否还有进程没有完毕,如果没有时间片就加1,从就绪队列中查找一个优先级最高的进程,如果在设定的时间片内没有完成就将此进程放入就绪队列中的后面,并将优先级减1。并循环检查是否还有进程没有完成。可强占优先调度算法实现过程流程图,如图2.1:
图2.1可强占优先调度算法实现过程流程图
循环轮转算法实现过程,开始建立一个就绪队列,首先检查是否还有进程没有完毕,如果没有时间片就加1,根据进程的时间片的个数运行进程。并循环检查是否还有进程没有完成。循环轮转算法实现过程流程图,如图2.2:
第 3 页 共 16 页
图2.2循环轮转算法实现过程流程图
2.4 测试
2.4.1 执行多进程
同时执行同一个存在的程序。两个进程的结果一样。 同时执行两个存在的程序。两个进程的结果正确。 同时执行3个存在的程序。3个进程的结果正确。 同时执行10个进程。每个进程结果正确。 同时执行10个以上的进程。输出错误信息。
输入程序名,并在后面加入要运行的用户程序,并输入初始化优先级。
2.4.2 程序运行结果
运行程序的优先级相同时的结果如图2.3
第 4 页 共 16 页
图2.3优先级相同时的结果图
运行程序的优先级不相同时,高优先级运行结束后低优先级的再运行,结果如图2.4
图2.4优先级不相同时的结果图
第 5 页 共 16 页
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库操作系统课程设计文档及代码在线全文阅读。
相关推荐: