操作系统实验报告实验一聚焦于进程管理,主要目的是让学生通过编写和调试一个简单的进程调度程序,深入理解进程控制块(PCB)、进程队列以及进程调度算法。实验内容涉及设计PCB结构、模拟系统资源分配、实现时间片轮转调度算法,并在Windows环境下使用C#编程语言进行实现。
PCB是操作系统中跟踪和控制进程状态的关键数据结构。在实验中,PCB通常包含进程ID、优先级、时间片、CPU使用时间、进程状态以及当前队列指针等信息。在这个实验中,进程运行时间按时间片计算,用户可以设定各进程的初始轮转时间数。
实验还涉及到了系统资源的模拟,有w类资源,每类资源数量为r1至rw。n个进程(Pi)随机生成,每个进程具有id、需要的资源s(j,k)以及总的运行时间t。在运行过程中,进程可能会随机申请新的资源。
进程的状态分为就绪(W)、运行(R)和等待/阻塞(B)三种。实验初始时,所有进程处于就绪状态,且建立进程就绪队列。时间片轮转调度算法是实验的核心,该算法将进程按需分配固定时间片执行,每次执行后,进程剩余时间片减1,直至达到所需的执行次数。
实验流程主要包括:
1. 初始化进程,构建就绪和阻塞队列。
2. 当触发时钟事件时,调用时间片轮转调度算法,从就绪队列取出第一个进程。
3. 如果进程时间片达到预设次数,释放资源;否则,执行一个时间片后,将进程重新排入就绪队列。
4. 输出队列信息,检查阻塞队列,若资源满足条件,将阻塞进程转为就绪。
5. 检查是否有新进程产生,如果资源足够则分配给新进程,否则将其放入阻塞队列。
6. 显示资源情况,监控系统状态。
7. 循环进行调度,直到所有进程完成。
在C#代码实现中,使用了ArrayList来存储就绪队列(hready)和阻塞队列(hblock),以及Random类来生成随机进程。通过输入对话框获取用户设定的参数,如进程数、资源量等。整个程序的运行和调度逻辑由一系列方法(如input()、runFcfs()、running()等)实现,这些方法共同构成了一个简单操作系统模拟的核心部分。
这个实验有助于学生在实际操作中理解和掌握操作系统中进程管理的基本原理,通过编写代码加深对进程状态转换、资源分配以及调度算法的理解。