操作系统 实验 - EP2
实验名称:进程调度
- 实验学时:2学时
预习报告 2021-05-12
实验原理摘要
- 先来先服务的调度算法:最简单的调度算法,当作业调度中采用该算法时,系统将按照作业到达的先后次序来进行调度,优先从后备队列中,选择一个或多个位于队列头部的作业,把他们调入内存,分配所需资源、创建进程,然后放入“就绪队列”,直到该进程运行到完成或发生某事件堵塞后,进程调度程序才将处理机分配给其他进程。
实验仪器
- 编程环境:Visual C++6.0环境下的C语言
- 操作系统软件:windows 7
实验内容及步骤
- 设计一个先来先服务调度的算法
- 对选定的调度算法编程实现。
- 对选定的调度算法进行描述(包括数据结构即进程控制块的描述和算法步骤描述)描述算法时可以采用自然语言、可以画流程图也可以使用伪码。将算法描述写入预习报告
实验报告 2021-05-13
实验目的及要求:
- 进程调度是处理机管理的核心内容。
- 通过本实验可以加深理解有关进程控制块、进程队列的概念,并体会和了解优先数和时间片轮转调度算法的具体实施办法。
- 本实验要求用C语言编写和调试一个简单的进程调度程序。
实验环境
- 编辑器: VSCode
- 编程环境: GCC 4.8.1
- 操作系统软件: Windows 10
实验内容
- 设计一个先来先服务调度的算法
- 对选定的调度算法编程实现。
- 对选定的调度算法进行描述(包括数据结构即进程控制块的描述和算法步骤描述)描述算法时可以采用自然语言、可以画流程图也可以使用伪码。将算法描述写入预习报告
实验步骤
- 首先定义一个结构体,用于保存一个进程的各种信息
1
2
3
4
5struct pcb {
char name[10], state;
int ntime, rtime, vtime;
struct pcb* link;
}*ready = 0, *p; - 以下为主要模块
1
2
3
4
5
6
7
8void sort(); // 建立对进程进行先来先服务排列函数,先来的放在队头,行成一个带头结点的链表队列
void input(); // 建立进程控制块函数,输入测试用例
void space(); // 统计就绪程序数目
void disp(); // 显示进程当前状态
void check(); // 查看进程
void destory(); // 进程撤销函数,用于进程运行结束,撤销进程
void running(); // 进程运行函数
int main(void); // 主函数 - 主要代码(进程运行函数)
1
2
3
4
5
6
7
8
9void running() {
(p->rtime)++;
if(p->rtime == p->ntime) {
destroy();
} else {
p->state = 'w';
sort();
}
}
实验结果
-
测试用例
进程名称 A B C D E 到达时间 0 1 2 3 4 服务时间 4 3 5 2 4 -
结果
总结
- 通过这次实验,加深了对进程的理解,同时掌握了进程控制块的结构,理解了进程的运行的并发性。