《操作系统》课程设计内容及相关要求
实验目的:通过实验理解操作系统的工作原理和实现方法。
实验要求:能在选定的计算机系统中顺利运行所模拟的操作系统基本功能的
程序,并得到预期的效果。
实验内容:
下列两个实验为必做,若有兴趣可自行设计其他实验
实验 1: 模拟分页式存储管理中硬件地址转换和利用先进先出调度算法
(FIFO)处理缺页中断。
实验 2: 模拟采用二级目录结构的磁盘文件系统中的文件操作。
实验 1:模拟设计页面调度
实验要求:模拟页式虚拟存储管理中硬件的地址转换和缺页中断,并用先进先出调度
算法(FIFO)处理缺页中断。
模拟设计:
1. 页表:
为了装入一个页面而必须调出一页时,如果被选中调出的页面在执行中没有修改过,
则实际上不必把该页调出而重新写到磁盘上(因磁盘上已有副本)。因此在页表中应该有
是否修改过的标志。当执行“存”指令和“写”指令时,把对应的修改标志置成 1,表示
该页修改过,否则为 0,表示该页未修改过。
假定主存的每块长度为 1024 个字节。现有一个共 7 页的作业,其副本已在磁盘上。
系统为该作业分配了 4 个主存块,且该作业的第 0 页---第 3 页已经装入主存。该作业的
页表如表 9—3 所示。
表 9—3:
页号
标志 主存块号 修改标志 在磁盘上的位置
5
8
9
1
0
1
2
3
4
5
6
1
1
1
1
0
0
0
0
0
0
0
0
0
0
1
011
012
013
021
022
023
121
2.指令序列:
可假设该作业依次执行的指令序列如表 9—4 所示。
表 9—4:
操作
页号
页内地址
+
+
×
存
取
-
0
1
2
3
0
6
070
050
015
021
056
040
操作
移位
+
存
取
+
存
页号
页内地址
4
5
1
2
4
6
053
023
037
078
001
084
3.地址转换和缺页中断:
设计一个地址转换程序来模拟硬件的地址转换和缺页中断。如果访问的页在主存,
则形成绝对地址,但不去模拟指令的执行,可用输出转换后的绝对地址来表示一条指令
已完成。如果访问的饿页不在主存,则输出“*该页页号”,来表示硬件产生了一个缺页
中断。
4.模拟页面调度:
编制一个 FIFO 页面调度程序。因为 FIFO 页面调度算法总是先调出最先进入主存的
那一页,因此可以用一个数组来构成页号序列。数组的元素是在主存的页面号。根据上
例中的假定,允许使用的主存块数为 4,且开始的 4 页已装入主存,则数组可由 4 个元素
组成:P[0],P[1],P[2],P[3]。它们的初值为:P[0]:=0,P[1]:=1,P[2]:=2,P[3]:
=3 用一指针 K 指示:当要装入新页时,应调出的页在数组中的位置,K 的初值为 0。
当产生缺页中断后,操作系统总是选择 P[K]所指的页面调出,然后执行 P[K]:=要
装入的新一页页号 K:=(K+1)mod 4。在实验中,不必实际地启动磁盘去执行调出一页
和装入一页的工作,而用输出“OUT 调出的页号”和“要装入的新页页号”来模拟一次
调出和装入的过程。
流 程 图
模拟地址转换,缺页中断及页面调度的流程如图 9—3 所示。可根据该流程图编制源
程序,然后按假设的页表和指令序列来调试你所编制的程序。
2
开 始
取一条指令
指令中访问的页号保存到 X 中
查页表
是
形成绝对地址
该页标志=1?
是否“存”
指令?
是
否
置该页的修改标志为 1
输出绝对地址
取下
一条
指令
是
有后继
指令?
结 束
否
否(产生缺页中断)
输出:“该页页号”
j:=P[k]
该页的修改
标志=1?
是
否
模
拟
硬
件
地
址
转
换
模
拟
F
I
F
O
页
面
调
度
输出“OUT j”
输出“IN X”
P[k]:=X
K:=(k+1) mod 4
修改页表
图 9—3 地址转换和 FIFO 页面调度流程
3
实验 2:模拟设计文件操作
1. 实验要求:
模拟采用二级目录结构的磁盘文件系统中的文件操作。
模拟设计
1. 二级目录结构
目录 UFD。
模拟设计的目录结构如图 9-4 所示。第一级为主文件目录 MFD,第二级为用户文件
用户名 用户文件目录地址
文件名 文件属性 记录长度 文件地址
主文件目录 MFD
用户文件目录 UFD
9-4 二级目录结构
假定系统可同时管理 N 个用户文件,每个用户最多在磁盘上保存 L 个文件。约定用
户把文件都组织成记录式文件,文件中每个记录都是定长的,文件在磁盘上的组织形式
为链接结构。整个系统只有一张主文件目录表,但有 N 张用户文件目录表。用户文件目
录 UFD 中的“文件属性”规定文件的使用权限为“只可读”或“可读可写”;“记录长度”
是指组成该文件的逻辑记录长度,“文件地址”是指文件存放在磁盘上的首块地址。
2. 已打开 文件表
可为每个用户设置一张“”,用以说明该用户当前正在使用文件的情况。如果允许用
户最多同时打开或建立 S 个文件,那么用户已打开文件表 UOF 应该有 S 个登记栏,结构
如图 9—5 所示。
文件名 文件属性 记录状态 状态(打开/建立)
读指针
写指针
用户请求打开或建立一个文件时,由相应的文件操作把有关该文件的信息登记到 UOF
中,读指针和写指针用于指出对文件进行存取的当前位置。
图 9—5 UOF 结构
4
流 程 图
假定文件系统提供的文件操作有建立文件(create),打开文件(open),关闭文件(close),
读文件(read),写文件(write)和撤消文件(delete)。在模拟程序中可从键盘上输入文件操作
命令来模拟各用户程序中所调用的各种文件操作,用一个结束命令(end)停止持续执行。
1. 主程序流程:主程序结构流程如图 9-6 所示。
开 始
初始化文件目录表
初始化已打开文件表
输入用户名
建立子程序
否
显示:
无 此
用户
MFD 中 有
该用户?
是
打开子程序
关闭子程序
输入文件操作命令
读子程序
分析命令
写子程序
撤消子程序
显示:
命令错
结 束
图 9--6 主程序结构流程
2.建立文件子程序流程:
建立文件的命令格式为:create(文件名,记录长度,文件属性)
模拟文件系统进行“建立文件”的处理流程如图 9—7 所示,其中“找一个磁盘空闲块”
5
的工作可用“取一个随机数”来模拟,取到的随机数即为空闲块的块号。
是
显 示 : 有 同 名 文
件,不能建立
开 始
查找用户的 UFD
UFD 中有
该文件?
否
在 UFD 和 UOF 中找空登记项
在 UFD 和 UOF 中登记文件名,
记录长度,文件属性
找一磁盘空闲块
i:=找到的块号
UFD 登记栏中的
文件地址:= i
该用户的 UOF 表项中的状
态:=建立写指针:= i
显示“建立”成功
返 回
图 9—7 “建立文件”模拟流程
3. 打开文件子程序流程:
打开文件的命令格式为:open(文件名,操作类型)
其中操作类型指出文件打开后,用户将对文件进行读还是进行写。约定操作类型与
文件属性不符合或正处于“建立”状态的文件不允许打开。其处理流程如图 9—8 所示。
6
开 始
查 找 用 户 的
UFD 中有
该文件?
是
查找用户的 UOF
否
显示:文件不存
在,不能打开
是
UOF 中有
该文件?
否
否
该文件是“建
立”状态?
是
是
文件属性与操
作类型相符?
显示:
文 件 已
打开
显示:
正在建立,
不能打开
登记 UOF:文件名,记录
长度,文件属性
状态:=“打开”
读指针:=UFD 中文件地址
写指针:=UFD 中文件地址
显示:“打开”成功
否
显示:
操 作 不 合
法 , 不 能 打
开
返 回
图 9--8 “读文件”模拟流程
4.写文件子程序流程
写文件的命令格式为:write(文件名,记录号)
执行写文件操作时要区分两种情况,第一种是在执行 create 后要求写,第二种是在
执行 open 后要求写。对第二种情况可认为用户要对一个已建立好的文件进行修改。
一个文件可以分多次写。既可按记录顺序一个记录一个记录写,也可随机地写各个
记录。采用顺序写时可省略记录号。模拟写文件操作的工作流程如图 9—9 所示。
5.读文件子程序流程
读文件的命令格式为:read(文件名,读长度)
文件打开后可用读文件操作请求读指定文件中的若干记录。既可顺序地读,也可随
机地读。这里约定总是顺序地读文件中的记录。读长度表示本次读操作需读的记录个数。
其处理流程如图 9—10 所示。
7
显示:文件尚
未 建 立 或 打
开,不能写
否
是
是
显示:操作不
合法,不能写
取出“写指针”
指出的块号
修改“写指针”
开 始
查找用户的 UOF
UOF 中有
该文件?
是
该文件为“建
立”状态?
否
文件属性为
“只读”
否
顺序修改?
把修改信息 写入到物
理块中(用显示物理
块号来模拟)
显示:
“ 写文件”成功
返回
是
把记录信息写到“写
指针”指示的物理块
中(用显示物理块号
和记录号来模拟)
找一空闲块填
文件链接字,并
修改“写指针”
否
指出存放指定
记录的块号
图 9--9 “写文件”模拟流程
8