操作系统中的动态高优先权是一种进程调度策略,它根据进程的行为动态调整其优先级。在这个实验报告中,学生通过编写C++代码模拟了这种算法,旨在理解操作系统中的进程管理和调度过程。
实验目标是:
1. 深化对进程概念和调度机制的理解。
2. 提升实践能力,通过亲自编码来理解和实现动态优先权算法。
3. 明确进程调度的工作流程和原理,特别是时间片轮转调度算法。
实验要求包括:
1. 显示每次调度前后的所有进程状态。
2. 计算每个进程的周转时间。
3. 定义初始化函数、优先级设置、运行时间和调度函数。
4. 当进程运行结束,将其从队列中删除。
实验内容涉及N个进程,每个进程由一个进程控制块(PCB)描述,包含以下字段:
- 进程优先级P。
- needtime:进程还需要占用的CPU时间。
- cputime:进程已使用的CPU时间。
- startblock:进程运行startblock个时间片后进入阻塞状态。
- endblock:进程阻塞后还需等待endblock个时间片变为就绪状态。
- state:状态标识,0表示就绪,1表示结束,-1表示阻塞。
- next:用于将PCB链成队列。
动态优先级变化规则是:
- 进程在就绪队列中待一个时间片,优先级加1。
- 进程每运行一个时间片,优先级减1。
实验结果部分未给出,但可以预期的是,程序会输出每个时间片的调度情况,包括进程状态的变化、优先级的调整以及周转时间的计算。
实验小结中,学生表示通过实验对动态高优先级算法有了深入理解,并对进程调度的原理有了更清晰的认识。尽管在实验初期对动态优先级理解不足,但通过学习和实践,加深了对基础知识的理解,同时也增强了C++面向对象编程的技能。
在提供的代码片段中,可以看到结构体pcb定义了进程控制块,并包含了一些辅助函数,如changestate0()用于更新进程状态,state0()用于获取当前进程的优先级,以及maxp()用于找到当前最高优先级的进程ID。这些函数构成了模拟动态优先权算法的基础。
这个实验帮助学生实践了操作系统的理论知识,特别是进程调度和优先级管理,同时锻炼了他们的编程技能,尤其是在C++环境中实现面向对象的编程思维。