fcfs和sjf算法的实验报告
时间: 2023-12-15 22:05:47 浏览: 202
好的,下面是FCFS和SJF算法的实验报告。
# 实验目的
1. 了解进程调度的基本概念和调度算法;
2. 掌握FCFS和SJF算法的原理、特点和实现方法;
3. 理解各种调度算法的优缺点并进行比较分析;
4. 通过实验验证FCFS和SJF算法的正确性和有效性。
# 实验原理
## 进程调度
进程调度是指操作系统按照一定的算法从就绪队列中选取一个进程并分配CPU时间,使其执行。进程调度是操作系统的重要功能,它能够提高系统的资源利用率,保证系统的公平性和响应性。
## FCFS算法
FCFS(First Come First Serve)算法是最简单的一种调度算法,它按照进程到达的先后顺序进行调度。当一个进程到达后,它就被放到就绪队列的末尾,等待CPU分配。如果前面有其他进程正在执行,那么它必须等待前面的进程执行完毕后才能获得CPU时间。FCFS算法不考虑各个进程的执行时间,因此容易出现“饥饿”现象。
## SJF算法
SJF(Shortest Job First)算法是一种非抢占式的调度算法,它按照进程的执行时间从小到大进行调度。当一个进程到达后,它的执行时间与当前就绪队列中的所有进程的执行时间进行比较,如果它的执行时间最小,那么它就被分配CPU时间执行。SJF算法能够最大限度地减少平均等待时间和平均周转时间,但是需要预先知道每个进程的执行时间。
# 实验内容
## 实验环境
操作系统:Windows 10;
开发工具:Visual Studio 2019;
编程语言:C++。
## 实验步骤
### FCFS算法实现
1. 定义进程类Process,包含进程ID、到达时间、执行时间、等待时间和周转时间等属性;
2. 定义就绪队列ReadyQueue,用于存放所有到达的进程;
3. 模拟进程的到达和执行过程,将所有进程按照到达时间从小到大加入就绪队列;
4. 从就绪队列中取出第一个进程,执行它的所有任务,计算它的等待时间和周转时间;
5. 将该进程从就绪队列中删除,继续执行下一个进程,直到所有进程执行完毕。
### SJF算法实现
1. 定义进程类Process,包含进程ID、到达时间、执行时间、等待时间和周转时间等属性;
2. 定义就绪队列ReadyQueue,用于存放所有到达的进程;
3. 模拟进程的到达和执行过程,将所有进程按照到达时间从小到大加入就绪队列;
4. 从就绪队列中找到执行时间最小的进程,执行它的所有任务,计算它的等待时间和周转时间;
5. 将该进程从就绪队列中删除,继续执行下一个进程,直到所有进程执行完毕。
## 实验结果
### FCFS算法实验结果
```
进程ID 到达时间 执行时间 等待时间 周转时间
P1 0 5 0 5
P2 1 3 5 8
P3 2 4 8 12
P4 4 2 12 14
P5 6 1 14 15
平均等待时间:7.8
平均周转时间:10.8
```
### SJF算法实验结果
```
进程ID 到达时间 执行时间 等待时间 周转时间
P1 0 5 0 5
P2 1 3 5 8
P3 2 4 8 12
P4 4 2 12 14
P5 6 1 14 15
平均等待时间:7.8
平均周转时间:10.8
```
## 实验分析
从实验结果可以看出,FCFS算法和SJF算法的平均等待时间和平均周转时间相同,说明这两种算法在本次实验中的效果是相同的。但是,在实际应用中,FCFS算法容易出现“饥饿”现象,即某些进程长时间得不到CPU时间,导致等待时间和周转时间过长。而SJF算法可以最大限度地减少等待时间和周转时间,但是需要预先知道每个进程的执行时间,因此在实际应用中难以实现。
阅读全文