竭诚为您提供优质文档/双击可除
《计算机操作系统原理》课外实验报告
《计算机操作系统原理》课外实验报告 设计思路和内容
先用随机函数初始化pcb结构体,从而模拟3个进程的特性,然后voidproInsert(pcb*p)/*优先数插入算法,将进程p按其优先级插入到就绪队列中相应位置*/、voidprintpcb(pcb*q)//输出进程控制字信息、voidprintLine(pcb*head)/*输出以p为队首的队列中所有pcb信息*/、voidprintAll()//输出某一时刻进程队列信息、voidFirstIn()/*将就绪队列中进程调入运行队列*/等函数体,实现进程调度过程中最基本的功能。在主函数中先调用voidcreatepcb()/*随机产生n个进程,并对各个进程随机赋予初值*/,从而创建了就绪队列,为进程调度做好准备。而后voidsp()/*静态优先级抢占式调度策略*/、voidDp()/*动态优先级抢占式调度策略*/、voidRR()/*时间片轮转调度策略*/等来分别实现静态优先级抢占式调度策略、动态优先级抢占式调度策略和时间片轮转调度策略三种功能。而最后的多级反馈调度策略实现因为与前三者有很大的不同,所以在同一cpp中我几乎是重新重构了所有的基本算法来帮助快速实现多级调度策略的。
首先,对于时间的复杂性,我在进程调度实验中忽略了运行队列
竭诚为您提供优质文档/双击可除
(cpu处理器的模拟)处理程序是依据进程进入就绪队列的时间来调度的,所以1、静态优先级抢占式调度策略最基本的思想是循环将就绪队列中程序调入到运行队列中,再在运行队列中执行对进程的操作。2、动态优先级抢占式调度策略的基本思想是循环的调度就绪队列中进程程序,然后再运行队列中对进程的优先级进行动态的操作,如每执行一次进程,它的优先级就相应的减2.,如果没有运行完,就将其重新按照优先级重新插入到就绪队列中,从而模拟出调度返回这一操作。3、时间片轮转调度策略,我预先确定时间片的长度为2,在循环从就绪队列中调度进程时,在运行队列中将其执行2个时间点,若没有执行完,则重新插入。4、而对于多级队列调度策略,则首先建立pcb*ready1,*ready2,*ready3,*ready4;//多级调度队列策略时建立的四个就绪队列,再将这些就绪队列逐渐分别(从高优先级到低优先级就绪队列)“时间片轮转法” 。最后输出运行、就绪队列1、就绪队列2、就绪队列3、就绪队列4、结束队列5个队列中进程。
我将进程随进入运行队列时间的影响与进程调度分开编写程序,进程阻塞实验来模拟进程进入cpu时,遇到阻塞情况下进入到阻塞队列中,从而简化了程序的书写。
核心数据结构设计和操作函数设计 typedefstructnode{
竭诚为您提供优质文档/双击可除
charname[10];/*进程名*/
charID;/*进程标识名*/
intpriority;/*优先级*/
charstate;/*进程状态标志*/
intin_time;/*进程进入cpu的时间*/
intall_time;/*进程需要的总时间*/
intrun_time;/*进程已运行的时间*/
intblock_time;/*进程被阻塞的时间点*/
intweak_time;/*进程被唤醒的时间点*/
intround;/*进程时间轮转时间片*/
structnode*next;/*下个pcb指针*/