操作系统实验主要目的是通过实际编程来理解操作系统的进程调度机制,特别是“最高优先数优先”调度算法。这个实验涉及了以下几个核心知识点:
1. **进程**:进程是操作系统中执行程序的实例,它拥有独立的内存空间和资源。每个进程都有一个进程控制块(PCB,Process Control Block),用于存储关于进程的重要信息,如进程名、优先数、到达时间、需要运行时间、已用CPU时间以及进程状态等。
2. **进程调度**:操作系统负责管理进程的执行,通过进程调度算法来决定哪个进程应该获取CPU执行。在这个实验中,采用了“最高优先数优先”的调度策略,即优先选择优先数最高的进程运行。
3. **静态优先数**:在实验中,静态优先数是在创建进程时确定的,并且在整个进程的生命周期内保持不变。这意味着,一旦分配了优先数,进程的执行顺序就不会因为其运行状态而改变。
4. **进程控制块(PCB)**:在C语言中,PCB被定义为一个结构体,包含了进程的相关信息。例如,`struct pcb`包含进程名、状态、优先数、需要的运行时间、已使用的CPU时间以及指向下一个PCB的指针,用于链式存储进程队列。
5. **调度算法实现**:实验要求编写一个模拟的调度程序,使用“最高优先数优先”调度算法。程序包括了输入进程信息、排序进程(根据优先数)和进程调度等功能。`sort()`函数用于将新进程按照优先数大小插入到就绪队列中,确保优先级高的进程位于队列前面。`input()`函数则用于读取用户输入的进程信息,并调用`sort()`函数进行排序。
6. **进程状态**:在C语言的结构体中,`state`字段代表进程的状态,可以是'w'(等待)、'r'(就绪)或's'(运行)。
7. **优先数的动态调整**:虽然实验中提到动态优先数调度,但具体实现未包含在提供的代码中。动态优先数调度允许根据某些条件(如进程等待时间、CPU使用情况)动态调整进程的优先数。
8. **代码实现**:实验提供了`jingchendiaodu.cpp`的源代码,包含`sort()`、`input()`和`disp()`等函数。`sort()`实现了优先级队列的插入操作,`input()`用于用户输入进程信息并调用排序,`disp()`则用于显示当前就绪队列的进程信息。
这个实验通过编程实践,帮助学生深入理解操作系统如何管理和调度进程,以及进程控制块在这一过程中的关键作用。同时,通过实现静态优先数调度,可以直观地观察到不同优先级进程的执行顺序,从而更好地掌握调度算法的工作原理。