本实验报告深入探讨了操作系统中进程的状态转换及其在不同阶段PCB(进程控制块)的变化情况,通过理论结合实践的方式,全面解析了进程管理机制。
### 目的
自行设计并编写模拟程序,通过形象化的状态显示来深入理解进程的概念、进程之间的状态转换及其带来的PCB内容与组织结构的变化,并进一步理解进程与其PCB间的一一对应关系。
### 内容及要求
1. 设计和实现一个能够模拟进程状态转换及其相应PCB内容变化的程序。
2. 独立完成代码编写和调试工作。可以选择不同的参数,如进程数量、进程的状态模型(三态、五态、七态等)以及PCB的组织形式。
3. 合理设计与进程对应的PCB数据结构。确保该数据结构包含进程的基本信息、控制信息、资源需求及现场信息等内容。
4. 设计出易于理解且具有较好可视性的用户界面,能够反映出因进程状态变化而产生的对应PCB内容和组织结构的变化。
5. 编写规范化的代码,并在适当的地方加入注释以提高程序的可读性。
6. 认真进行预习并完成相应的预习报告。
7. 实验完成后,要认真总结经验教训,并撰写详细的实验报告。
### 使用的数据结构及说明
本实验中主要使用到的数据结构为PCB(进程控制块):
```c
struct PCB {
int P_Id; // 进程ID号
char P_Name[10]; // 进程名称
char P_State[10]; // 进程状态,如:Create_state, Ready_state等五种状态之一。
int P_Runtime; // 完成进程所需的时间(单位:时间片)
int P_Requiry; // 表示完成该进程所需的资源需求情况
struct PCB *next; // 指向下一个PCB的指针,用于同一队列中的链接
};
```
其中:
- `P_Id` 和 `P_Name` 用来标识一个具体的进程。
- `P_State` 字段表示当前进程的状态(共有五种状态:创建态、就绪态、阻塞态、运行态和终止态)。
- `P_Runtime` 表示完成该特定进程所需的时间量,以时间片为单位进行计数。
- `P_Requiry` 标识执行一个进程所需的其他条件。当所有需求得到满足时此字段置1;否则置0。
- 结构体中的指针成员变量 `next` 用于在相同队列中链接各个PCB块,以实现链表结构的管理方式。