将每个进程抽象成一个控制块PCB, PCB用一个结构体描述。 构建一个进程调度类。将进程调度的各种算法封装在一个类中。类中存在三个容器,一个保存正在或未进入就绪队列的进程,一个保存就绪的进程,另一个保存已完成的进程。还有一个PCB实例,主要保存正在运行的进程。类中其他方法都是围绕这三个容器可以这个运行中的PCB展开。 主要用到的技术是STL中的vector以维护和保存进程容器、就绪容器、完成容器。 当程序启动时,用户可以选择不同的调度算法。然后用户从控制台输入各个进程的信息,这些信息保存到进程容器中。进程信息输入完毕后,就开始了进程调度,每调度一次判断就绪队列是否为空,若为空则系统时间加一个时间片。判断进程容器中是否有新的进程可以加入就绪队列。 《程序设计实践》实验报告的主题聚焦于进程调度的模拟,主要涵盖了进程的抽象、调度算法的实现以及数据结构的应用。实验旨在通过模拟多种调度算法,加深对进程管理和调度策略的理解。 在操作系统中,进程被抽象为一个控制块,称为PCB(Process Control Block),它是一个结构体,包含了关于进程的基本信息,如进程名、到达时间、服务时间、开始时间、完成时间、等待时间和剩余时间。实验中,使用C++的STL库,特别是vector容器来存储和管理PCB对象,分别对应于三个不同的状态:等待执行、就绪和已完成的进程。 实验要求至少实现两种调度算法,包括先来先服务(FCFS)、最短进程优先(SJF)、简单时间片轮转(RR)以及最高优先级数优先(PD)。这些算法的实现封装在一个进程调度类中,类中包含了各种调度方法。用户可以在程序启动时选择所需的调度算法,并通过控制台输入进程的相关信息。调度过程会持续检查就绪队列,如果为空,则增加系统时间;反之,将满足条件的进程调度到就绪队列。 算法流程如下: 1. 用户选择调度算法。 2. 输入进程信息,存储到相应的队列。 3. 进行调度,每次调度时检查就绪队列是否为空,如果为空,更新系统时间;否则,根据所选调度算法选取下一个进程执行。 4. 检查当前运行的进程状态,如果已完成,将其移动到完成队列;否则,根据算法调整其优先级并放回就绪队列。 5. 在整个调度过程中,记录和统计相关信息,如周转时间,以便分析比较不同算法的性能。 实验中涉及的主要数据结构是PCB结构体,包含进程的关键属性。同时,使用了三个vector容器来存储不同状态的进程:m_ProcessQueue用于等待执行的进程,m_WaitQueue用于就绪的进程,m_FinishQueue用于已完成的进程。迭代器m_iter用于遍历这些容器。 此外,实验还涉及到一些关键变量,如m_RunTime记录运行时间,m_tagIsRun表示当前是否有进程在运行,m_TimeSlice表示时间片长度。通过这些变量和方法,实验能够模拟多进程环境下的动态调度过程,从而帮助学生深入理解操作系统中的进程管理和调度原理。
剩余12页未读,继续阅读
- 粉丝: 2
- 资源: 7
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 学习记录111111111111111111111111
- 通过java实现原型模式(Prototype Pattern).rar
- 通过python实现原型模式(Prototype Pattern).rar
- xiefrnsdklmkds
- 基于PyQt5+pytorch的在线疲劳检测系统项目源码+文档说明(Python毕业设计)
- Excel表格拆分工具.exe
- Python毕业设计基于PyQt5+pytorch的在线疲劳检测系统项目源码+文档说明
- 基于Unity开发的消消乐小游戏源代码(毕业设计和大作业适用).zip
- 基于hadoop和hbase的电商交易记录的简单分析项目源码+文档说明.zip
- Vue 3前端框架核心特性详解及其应用