河北大学2008级操作系统学年论文(课程设计)
块号=字号*字长+位号
2.2.2主存回收策略
根据页表归还存储空间时,可以根据归还块的块号推算出在位示图中的位置: 字号=[块号/位示图中字长] 位号=块号mod位示图中字长 然后把这一位的“1”清成“0”,表示该块成为空闲块了。
最后回收页表所占用空间 。
2.2.3 主存的模拟
采用数组来模拟主存的用户区,每个数组元素占用一个字节。 实验中主存大小为512个字节,每个主存块16个字节 。
2.2.4 用户接口
主存使用情况示意图:已分配主存用红色表示,用紫色表示未分配,黄色表示在运行的进程对应指令存放的位置。
2.3设备管理的实现方法和原理
设备管理主要包括设备的分配和回收。设备的分配应用先来先服务策略,设备回收后,要注意唤醒等待设备的进程。
3
河北大学2008级操作系统学年论文(课程设计)
2.3.1 设备的模拟
模拟系统中有A、B、C三种独占型设备,A设备3个,B设备2个,C设备1个。
2.3.2 数据结构
因为模拟系统比较小,因此只要设备表设计合理既可。 private DeviceTable[] table=new DeviceTable[3]; private void Init() {
table[0]=new DeviceTable(DeviceType.a, 3); table[1]=new DeviceTable(DeviceType.b, 2); table[2]=new DeviceTable(DeviceType.c, 1);
}
2.3.3 设备分配
设备分配实行先来先服务策略。
2.3.4设备的回收
回收设备后,要注意唤醒等待设备的进程。
2.3.5用户接口
屏幕显示要求包括:每个设备是否被使用,哪个进程在使用该设备,哪些进程在等待使用该设备。
4
河北大学2008级操作系统学年论文(课程设计)
3 系统实现
3.1存储管理
3.1.1全局变量与初始化
private char[,] RamUnit = new char[32, 16]; //用数组模拟内存 private int[,] Wst = new int[4, 8]; //位示图 private int UnuseRam; public memory() {
Init(); }
private void Init() //初始化,主存的存储单元全为空闲(未占用) {
UnuseRam = 32;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 8; j++) {
Wst[i, j] = 0; } } }
3.1.2位示图的模拟(起初都为0)
第0字 第1字 第2字 第3字 0位 1位 2位 3位 4位 5位 6位 7位 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3.1.3地址映射过程
系统为每个进程建立一张页表,用于记录进程逻辑页面与内存物理页面之间的对应关系。地址空间有多少页,该页表里就登记多少行,且按逻辑页的顺序排列。页式存储管理采用动态重定位,即在程序的执行过程中完成地址转换。
5
河北大学2008级操作系统学年论文(课程设计)
3.1.4主存空间的分配
开始 查看空闲块是否够用 是否 进行内存的分配,返回页表的地址(内存的第几块) 结束 6
河北大学2008级操作系统学年论文(课程设计)
3.1.3 主存空间的回收
开始 根据归还块的块号推算出在位示图中的位置 把该位的“1”清成“0”,表示该块成为空闲块了 回收页表所占用空间 结束 3.1.4屏幕显示实现存储管理
7