的睡眠函数,主动进入睡眠状态,并转调度程序。也可由操作使进程强迫挂起,睡眠适当时间。进程睡眠时在 PCB 中记录睡眠原因和优先数。Р 4.进程的唤醒:根据睡眠原因,将相应的进程从睡眠队列中调出,转入就绪队列。如该进程优先级比现运行进程优先级高,转调度程序。Р 5. 进程的终止:一个进程运行完作业所需的时间,或者用操作杀死该进程,该进程就终止,释放所占用的内存和PCB 资源,转调度程序。Р(2)非抢占式优先调度算法Р 模拟UNIX 的进程管理程序采用的是非抢占式优先权算法,具体算法如下:Р 当系统把处理机分配给就绪队列中优先权最高的进程后,该进程便一直执行下去,直至完成;或因发生某事件使该进程放弃处理剂时,系统才可将处理机重新分配给另一优先权最高的进程。Р(3)数据结构Р每一个进程用一个进程控制块PCB 表示,PCB结构定义如下:Рstruct PCBР { Р char pname; //进程名称Р char pstate; //进程状态Р char priority; //进程优先级Р int runtime; // 进程当前运行的时间Р int totaltime; 作业运行的(剩余)总时间Р char reason; //进程睡眠原因Р struct proc *p_next, *p_prior; //进程PCB的双向链指针Р } Р PCB* readyPCB,*obstructPCB;//定义就绪和阻塞队列Р 此外系统中还有一个全局变量curPCB 指向正在运行的进程。Р(4)系统总体框图Р四、源程序Р五、程序运行时初值和运行结果Р(1)程序运行时初值Р(2)程序运行结果Р六、实验总结Р通过本次实验加深了对非抢占式优先调度算法的理解,进一步熟悉了进程就绪、执行、阻塞状态的转换关系,也巩固了C++程序语言设计的基础;实验中的不足之处是,对阻塞队列的处理存在部分瑕疵。