# 实验三 - 进程调度



## 前言

（1）为什么要引入进程调度？

（2）主要针对单核处理机的调度算法做研究

（3）历史发展脉络

（4）进程调度的性能指标是什么

（5）进程切换

（6）进程调度的实现



## 一、实验目的 

​	操作系统的内核中实现的调度器比较复杂，其本质组成就是3大模块：就绪队列、调度器、分配器。

​	在本次实验中，三者之中的就绪队列将会作为参数提供给你，你需要实现的是调度器，然后由系统本身实现的分配器调用你事先的调度器，以检验算法的正确性。

​	实现调度器的最困难的地方在于实现调度算法（抛开提高性能、降低耦合性等事实不谈），请你结合实验教程完成调度算法的实现，并按照规范实现程序接口，以保证整个系统能够运行。





## 二、实验步骤

### 1. 进程控制块(PCB)结构

​	进程控制块（PCB）是操作系统中用于管理和描述进程的数据结构。它存储了一个进程的相关信息，包括进程状态、程序计数器、寄存器值、内存分配信息、打开的文件列表等。

​	在本次实验中，我们已经帮你设计好了PCB，你需要理解PCB中的每个变量的作用以及意义，在此基础上实现调度算法，并通过实验数据测试。

​	下面是我们规定的PCB结构体：

```cpp
struct PCB {
    int pid;                 // 进程ID
    string name;             // 进程名称
    string state;            // 进程状态 (一般来说 就绪队列里面的进程都是Ready状态)
    int priority;            // 进程优先级
    int burst_time;          // 进程的执行时间
    int remain_time;         // 剩余执行时间
    int arrive_time;         // 进程到达时间
};
```

​	该结构体具有上述变量。对于不同的编程语言，变量名称都与上面的代码一致。



### 2. 调度策略

​	在这一步，你需要根据不同的调度策略设计响应的调度算法，调度策略有以下几种：

- FCFS（First Come First Serve）

- RR（Round-Robin，轮转调度）

- SJF（Shortest Job First，最短作业优先）

- MLFQ（多级反馈队列调度）

- CFS（Completely Fair Scheduler，完全公平调度器）

​	请跳转到响应的实验教程中继续完成实验。





## 课外资料