1 实验一 进程管理 一、目的 进程调度是处理机管理的核心内容。本实验要求编写和调试一个简单的进程调度程序。通过本实验加深理解有关进程控制块、进程队列的概念,并体会和了解进程调度算法的具体实施办法。 二、实验内容及要求 1、设计进程控制块PCB 的结构(PCB 结构通常包括以下信息:进程名(进程ID)、进程优先数、轮转时间片、进程所占用的CPU 时间、进程的状态、当前队列指针等。可根据实验的不同,PCB 结构的内容可以作适当的增删)。为了便于处理,程序中的某进程运行时间以时间片为单位计算。各进程的轮转时间数以及进程需运行的时间片数的初始值均由用户给定。 2 、 系 统 资 源 (r1…rw ), 共 有w类 , 每 类 数 目 为 r1…rw 。随 机产 生 n 进程Pi(id,s(j,k) ,t),0<=i<=n,0<=j<=m,0<=k<=dt 为总运行时间,在运行过程中,会随机申请新的资源。 3、每个进程可有三个状态(即就绪状态 W、运行状态 R、等待或阻塞状态 B),并假设初始状态为就绪状态。建立进程就绪队列。 4、编制进程调度算法:时间片轮转调度算法 本程序用该算法对 n 个进程进行调度,进程每执行一次,CPU 时间片数加1,进程还需要的时间片数减 1。在调度算法中,采用固定时间片(即:每执行一次进程,该进程的执行时间片数为已执行了 1个单位),这时,CPU 时间片数加1,进程还需要的时间片数减 1,并排列到就绪队列的尾上。 三、实验环境 操作系统环境:Window s 系统。 编程语言:C#。 四、实验思路和设计 1 、程序流程图 2 对进程进行初始化,建立就绪队列、阻塞队列。Input() 触发时钟,调用时间片轮转调度算法。runFcfs() 取就绪队列的第一个进程,判断其运行的时间片是否达到所需次数。如果达到,则释放资源 如果没达到,则运行一个时间片。running() 输出就绪队列和阻塞队列的信息。outputall() 就绪队列为空? 检查阻塞队列,对于当前资源数目满足阻塞队列的进程,由阻塞转入就绪队列。testblock() 检查是否有新进程产生,如果有,则判断系统资源是否够用,如果够用,则分配给该进程,插入就绪队列。如果不够用,则插入阻塞队列。testnew () 显示三类资源情况。rescore() 结束 开始 是 否 3 2、主要程序代码 //PCB 结构体 struct pcb { public int id; //进程ID public int ra; //所需资源A 的数量 public int rb; //所需资源B 的数量 public int rc; //所...