目 录
一、操作系统理论算法实验 5
实验一、银行家算法 5
实验题目 5
设计要求 5
需求分析 5
数据结构 5
算法思想 6
算法流程 8
算法实现 9
运行结果 20
结论展望 22
实验二:处理机管理 23
实验题目 23
设计要求 23
需求分析 23
数据结构 23
算法思想 24
算法流程 25
算法实现 27
运行结果 36
结论展望 39
实验三:可变式分区管理 40
实验题目 40
设计要求 40
需求分析 40
数据结构 41
算法思想 41
算法流程 43
算法实现 44
运行结果 58
结论展望 65
实验五:分页存储管理 66
实验题目 66
实验要求 66
需求分析 66
数据结构 66
算法思想 66
算法流程 69
算法实现 72
运行结果 81
结论展望 86
二、实训项目:Linux系统、Windows系统 87
实验二:进程同步模拟 87
实验内容 87
实验目的/目标 87
开发/运行/测试环境 87
实验步骤 88
关键数据结构 88
问题解析 89
算法思想 90
算法流程 93
算法实现 97
运行结果 114
结论体会 118
结论和展望 119
实验三:可变式分区管理
实验题目
(1)采用空闲区表,并增加已分配区表 {未分配区说明表、已分配区说明表(分区号、起始地址、长度、状态)}。分配算法采用最佳适应算法(内存空闲区按照尺寸大小从小到大的排列)和循环首次适应算法,实现内存的分配与回收。
(2)采用空闲区链法管理空闲区,结构如P137/P128,并增加已分配区表。分配算法分别采用首次适应法(内存空闲区的地址按照从小到大的自然顺序排列)和最佳适应法(按照内存大小从小到大排列),实现内存的分配与回收。
设计要求
1.学生自己设计一个进程申请序列以及进程完成后的释放顺序,实现主存的分配与回收。
2.进程分配时,应该考虑以下3中情况:进程申请的空间小于、大于或者等于系统空闲区的大小。
3.回收时,应该考虑4种情况:释放区上邻、下邻、上下都邻接和都不邻接空闲区。
4.每次的分配与回收,都要求把记录内存使用情况的各种数据结构的变化情况以及各进程的申请、释放情况显示或打印出来。
需求分析
可变式分区管理是操作系统用来存放任务的重要手段,也能显著地提高分区的灵活性。不同的分区管理有不同的优缺点,比如最佳适应法就容易产生很多小的细碎的空间但它每次选择的分区都是最合适的。具体还是要按照需求来选择。
数据结构
int pos, n, Size; //查找位置,分区数量,最小分割大小
//分区
struct List
{
int id; //空闲分区编号
int startAdress; //空闲分区首地址
int room; //空间
int state; //状态,0为空,1为未满,2为满;
} L[2000];
//作业
struct Task
{
int id; //作业编号
int room; //作业空间
int startAdress; //作业起始地址
} T[2000];
算法思想
回收内存:
先判断是否与空闲分区有邻接:
作业起始地址是分区的末尾地址,那就是上邻接空闲区。
作业末尾位置是分区的起始位置,那就是下邻接空闲区。
接下来又有四种情况:
上邻接空闲区:分区空间扩充作业空间即可。
下邻接空闲区:分区扩充空间的同时修改起始地址。
上下都邻接空闲区:此时两个分区合二为一,分区扩充空间的同时,分区数量减一,分区编号前移。
上下都不邻接空闲区:此时一个分区分为两个分区,寻找作业后面的第一个分区,自此以后的分区编号后移,分区数量加一,为新分区设置参数。