logo资料库

《操作系统》课程设计(含源代码).doc

第1页 / 共11页
第2页 / 共11页
第3页 / 共11页
第4页 / 共11页
第5页 / 共11页
第6页 / 共11页
第7页 / 共11页
第8页 / 共11页
资料共11页,剩余部分请下载后查看
《操作系统》课程设计内容及相关要求 实验目的:通过实验理解操作系统的工作原理和实现方法。 实验要求:能在选定的计算机系统中顺利运行所模拟的操作系统基本功能的 程序,并得到预期的效果。 实验内容: 下列两个实验为必做,若有兴趣可自行设计其他实验 实验 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
分享到:
收藏