进程调度是操作系统中至关重要的部分,它决定了哪个进程在何时可以获得CPU执行。在这个课程设计中,学生被要求用C语言实现一个单处理机环境下的多任务进程调度程序,特别是采用最高优先级优先(HPF)和先来先服务(FCFS)这两种调度算法。
了解进程控制块(PCB)的概念至关重要。PCB包含了进程的基本信息,如进程名、优先数、到达时间、需要运行时间、已用CPU时间以及进程状态。在设计过程中,每个进程都有一个与之关联的PCB。
设计的调度算法是混合型的,既包括了优先级高的进程优先执行(HPF),也包含了先来先服务的原则(FCFS)。当进程到达时,它们会被添加到就绪队列中。调度程序会按照优先级分配CPU,优先数高的进程会被选中执行。如果一个进程的优先级相同,则按照FCFS原则,先到达的进程先执行。
在运行过程中,每个进程被限制在一个时间片内执行。一旦时间片用完,进程状态会变为就绪,其优先级会降低一级,然后重新插入就绪队列等待下一轮调度。如果进程的运行时间已达到需要的总时间,那么该进程会被标记为完成(Finish)并从系统中移除。
为了便于调试和验证,每次调度改变都会打印出当前运行的进程、就绪队列以及所有进程的PCB信息。这个设计要求程序结构清晰,功能完整,代码易读,而且每个学生需要独立完成。
在设计方法上,首先对整个调度程序进行功能分析,然后分解为多个子模块,包括输入、排序、空间计算、显示、检查、运行和销毁等功能。每个子模块都有其特定的流程图和功能,比如`sort()`负责按优先级排序进程,`input()`创建进程控制块,`space()`计算进程数量,`disp()`显示进程状态,`check()`检查进程状态,`running()`处理进程运行时间,而`destroy()`则在进程完成后撤销进程。
在调试和测试阶段,需要确保程序能够正确运行,针对各种情况进行功能测试,包括使用特殊数据进行调试以优化设计。通过对结果的分析,确认程序设计的正确性和效率。
通过这次课程设计,学生不仅深化了对进程调度策略、调度时机的理解,还增强了分析问题和解决问题的能力。尽管存在一些困难,如对某些原理不熟悉,代码阅读不够流畅,但通过自我学习和他人的帮助,学生最终能独立完成设计,这无疑是对编程技能和操作系统概念的宝贵实践。