将每个进程抽象成一个控制块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币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 时间复杂度与数据结构:算法效率的双重奏
- QT 简易项目 网络调试器(未实现连接唯一性) QT5.12.3环境 C++实现
- YOLOv3网络架构深度解析:关键特性与代码实现
- 2024 CISSP考试大纲(2024年4月15日生效)
- ACOUSTICECHO CANCELLATION WITH THE DUAL-SIGNAL TRANSFORMATION LSTM NETWORK
- 深入解析:动态数据结构与静态数据结构的差异
- YOLOv2:在YOLOv1基础上的飞跃
- imgview图片浏览工具v1.0
- Toony Colors Pro 2 2.2.5的资源
- Java项目:基于SSM框架+Mysql+Jsp实现的药品管理系统(ssm+B/S架构+源码+数据库)