动态优先权与时间片轮转:进程调度算法模拟实验详解

需积分: 16 36 下载量 22 浏览量 更新于2024-09-11 4 收藏 45KB DOC 举报
本篇实验报告主要探讨的是使用动态优先权和时间片轮转的进程调度算法在计算机科学与技术领域的应用。作者郅伟远,来自2103级,是在张倩倩老师的指导下进行的计算机操作系统课程设计性实验。实验目标是通过编程模拟理解进程调度的过程,特别是动态优先权调度策略。 实验的核心部分在于设计和实现一个C语言程序,模拟N个进程的调度。这些进程被赋予不同的优先级,优先级高的进程优先获得CPU资源。进程控制块(PCB)作为进程的抽象表示,包含了进程标识、优先级、所需CPU时间、运行时间和状态等关键信息。进程的状态会在就绪、执行、阻塞和完成等状态间转换,并且可能在不同的队列中(如就绪队列和阻塞队列)进行操作。 时间片轮转策略下,每个进程在分配到一个固定的时间片后运行,如果没有在该时间内完成,优先级会降低并返回就绪队列等待下一轮调度。而动态优先权则是根据进程的运行情况动态调整优先级,例如,每运行一个时间单位优先级下降3,如果在就绪队列等待则优先级上升1。 当优先权相同时,实验采用了先来先服务(FCFS)策略,即优先调度最早进入就绪队列的进程。由于实验着重于模拟而非实际运行,当一个进程被选中时,仅更新其PCB的相关信息,而不是真正启动进程。 报告中强调了程序设计应清晰展示每个时间片内各个进程的状态,包括进程ID、CPU时间、剩余时间、优先级和当前状态。例如,"00248 ready" 和 "10347 ready" 描述了两个进程在某个时间片内处于就绪状态。 整个实验不仅锻炼了学生的编程技能,还深化了他们对进程调度理论的理解,尤其是动态优先权和时间片轮转这两种常用调度策略的实际运用。通过这样的设计性实验,学生能够将理论知识与实践相结合,提高解决问题的能力。
2013-01-14 上传
  本模拟程序实现对n个进程根据优先权的高低调度的模拟,创建进程描述符PCB,进程的优先权在运行过程中动态改变,每个时间片结束后显示当前各进程的状态。具体要求如下: 用C语言来实现对n个进程采用不同调度算法的进程调度。 每个用来标识进程的进程控制块PCB用结构来描述,包括以下字段:  进程标识数 ID。 进程优先数 PRIORITY,并规定优先数越大的进程,其优先权越高。 进程已占用的CPU时间CPUTIME。 进程还需占用的CPU时间NEEDTIME。当进程运行完毕时,NEEDTIME变为0。 进程的阻塞时间STARTBLOCK,表示当进程再运行STARTBLOCK个时间片后,将进入阻塞状态。 进程被阻塞的时间BLOCKTIME,表示已阻塞的进程再等待BLOCKTIME个时间片后,将转换成就绪状态。 进程状态STATE。 队列指针NEXT,用来将PCB排成队列。 优先数改变的原则: 进程在就绪队列中呆一个时间片,优先数加1。 进程每运行一个时间片,优先数减3。 假设在调度前,系统中有5个进程,它们的初始状态如下: ID 0 1 2 3 4 PRIORITY 9 38 30 29 0 CPUTIME 0 0 0 0 0 ALLTIME 3 3 6 3 4 STARTBLOCK 2 -1 -1 -1 -1 BLOCKTIME 3 0 0 0 0 STATE READY READY READY READY READY 为了清楚的观察各进程的调度过程,程序应将每个时间片内的情况显示出来,参照的具体格式如下: RUNNING PROG:i READY-QUEUE:-〉id1-〉id2 BLOCK-QUEUE:-〉id3-〉id4 = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = == = = ID 0 1 2 3 4 PRIORITY P0 P1 P2 P3 P4 CUPTIME C0 C1 C2 C3 C4 ALLTIME A0 A1 A2 A3 A4 STARTBLOCK T0 T1 T2 T3 T4 BLOCKTIME B0 B1 B2 B3 B4 STATE S0 S1 S2 S3 S4