C++实现操作系统进程调度:时间片轮转法

5星 · 超过95%的资源 需积分: 10 83 下载量 166 浏览量 更新于2024-12-02 1 收藏 7KB TXT 举报
该代码是实现操作系统进程调度时间片轮转法的一个C++程序。它通过模拟进程调度过程,展示了如何在时间片轮转法下管理进程。程序包括创建进程、优先级调度和时间片轮转等核心功能。 在操作系统中,进程调度是管理多个并发执行任务的关键部分。时间片轮转法(Round Robin Scheduling)是一种常见的调度算法,尤其适用于多用户交互式系统。它将CPU的时间划分为固定长度的时间片(通常很短),每个进程在分配到的时间片内执行,然后被强制挂起,进入就绪队列的末尾。这个过程持续进行,直到所有进程都得到执行机会或满足特定结束条件。 在这个C++程序中,定义了一个结构体`PCB`(Process Control Block),用于存储进程的基本信息,如进程名称、优先级、当前CPU时间、需要的总时间、状态(等待、运行、完成)以及计数器。程序维护了三个链表:`ready`表示就绪队列,`run`表示正在运行的进程,`finish`表示已完成的进程。 `GetFirst()`函数用于获取就绪队列中的第一个进程并将其标记为运行。`Output()`函数用于打印进程状态和相关信息。 `PrioCreate()`和`Priority()`函数处理基于优先级的调度。`PrioCreate()`创建进程并根据优先级插入到就绪队列,`Priority()`则按照优先级执行进程。 `TimeCreate()`和`RoundRun()`函数实现了时间片轮转法。`TimeCreate()`负责创建进程并分配时间片,而`RoundRun()`则模拟了时间片轮转的过程,当时间片耗尽时,进程会重新进入就绪队列。 `InsertPrio()`, `InsertTime()`, 和 `InsertFinish()` 函数分别用于在不同链表中插入进程。 在主函数`main()`中,用户可以输入进程数量和调度类型(优先级调度或时间片轮转),然后调用相应的函数执行调度。最后,通过`Output()`函数显示调度结果。 这个程序可以帮助理解操作系统进程调度的基本原理,尤其是在时间片轮转法下的操作,对于学习操作系统和并发编程的学生来说,是一个很好的实践示例。
2009-05-27 上传
(1)、假定系统有五个进程,每一个进程用一个进程控制块PCB来代表。进程控制块的格式 (2)、每次运行你所设计的处理器调度程序之前,为每个进程任意确定它的“要求运行时间”。 把五个进程按顺序排成循环队列,用指针指出队列连接情况。另用一标志单元记录轮到运行的进程。 (3)、处理器调度总是选择标志单元指示的进程运行。由于本实验是模拟处理器调度的功能,所以,对被选中的进程并不实际启动运行 (4)、进程运行一次后,应把该进程的进程控制块中的指针值送到标志单元,以指示下一个轮到运行的进程。同时,应判断该进程的要求运行时间与已运行时间,若该进程要求运行时间≠已运行时间,则表示它尚未执行结束,应待到下一轮时再运行。若该进程的要求运行时间=已运行时间,则表示它已经执行结束,应把它的状态修改为“结束”(E)且退出队列。此时,应把该进程的进程控制块中的指针值送到前面一个进程的指针位置。 (5)、若“就绪”状态的进程队列不为空,则重复上面(4)和(5)的步骤,直到所有进程都成为“结束”状态。 (6)、在所设计的称序中应有显示或打印语句,能显示或打印每次被选中进程的进程名以及运行一次后进称对列的变化。 (7)、为五个进程任意确定一组“要求运行时间”,启动所设计的处理器调度程序,显示或打印逐次被选中进程的进程名以及进程控制块的动态变化过程。