本实验模拟了单处理机情况下的进程调度问题,通过编写算法实现先到先服务算法(FCFS)、轮转调度算法(RR)、最短作业优先算法(SJF)、优先级调度算法(PRIOR)和最短剩余时间优先算法(SRTF)。本实验的目的是加深对进程调度的理解,并进行算法评价,计算平均等待时间和平均周转时间。
首先是先来先服务算法。该算法按照进程到达的先后顺序进行调度,没有考虑进程的执行时间和优先级。代码实现如下:
```c++
void FCFS(Process *P, int n) {
// 按照进程到达时间升序排序
sort(P, P + n, compareByArrivalTime);
// 执行进程
for (int i = 0; i < n; i++) {
// 执行进程
}
}
```
其次是轮转调度算法。该算法将每个进程分配一个时间片,当时间片用完后,将进程移到队列末尾继续执行,直到所有进程都执行完毕。代码实现如下:
```c++
void RR(Process *P, int n, int timeQuantum) {
queue<Process> q;
int currentTime = 0;
int index = 0;
while (!q.empty() || index < n) {
if (!q.empty()) {
Process p = q.front();
q.pop();
// 执行进程直到时间片用完或者进程执行完
}
else {
// 将到达时间小于当前时间的进程加入队列
}
}
}
```
接下来是优先级调度算法。该算法根据进程的优先级进行调度,具有较高优先级的进程先执行。代码实现如下:
```c++
void PRIOR(Process *P, int n) {
// 按照进程的优先级降序排序
sort(P, P + n, compareByPriority);
// 执行进程
for (int i = 0; i < n; i++) {
// 执行进程
}
}
```
然后是最短作业优先算法。该算法优先执行执行时间最短的进程,以减少平均等待时间。代码实现如下:
```c++
void SJF(Process *P, int n) {
// 按照进程的执行时间升序排序
sort(P, P + n, compareByBurstTime);
// 执行进程
for (int i = 0; i < n; i++) {
// 执行进程
}
}
```
最后是最短剩余时间优先算法。这是SRTF算法的实现,用指针表示。该算法在每次调度时选择剩余执行时间最短的进程进行执行,以减少平均等待时间。代码实现如下:
```c++
void SRTF(Process *P, int n) {
// 执行进程
}
```
在整个模拟过程中,SRTF算法使用了指针表示,而其他算法均使用数组表示。通过对这五种进程调度算法的模拟实现,并计算平均等待时间和平均周转时间,加深了对进程调度的理解。
总之,通过本次实验,对进程调度算法有了更深入的了解,同时也学会了如何用代码实现这些算法,并进行评价。这对于进程调度相关的学习和应用具有重要的意义。