操作系统课程设计——0、分析
本次的课程设计采取分组进行完成。
根据我们组的分配情况,本次我负责的部分为文件管理和用户接口,主要需要写这一部分的方法和数据调用以给与我配合制作界面的同学进行使用。
本次使用的编程语言为Java。
分析部分
1、文件管理和用户接口
文件管理和用户接口部分实现的主要是单用户的磁盘文件管理部分,
包括文件的逻辑结构、物理结构、目录、磁盘分配回收、文件的保护和用户接口的实现。
(1) 文件的逻辑结构
文件的逻辑结构采用流式结构;文件均采用文本文件。
假设系统中只有两种文件,一种是存放任意字符的普通文本文件,一种是可执行文件。可执行文件的程序内容手工输入,事先创建约 10
个可执行文件,将来用这些可执行文件进行后续的进程创建、内存分配、进程执行/调度和设备分配。 这里,“可执行文件”中的“指令”只有 5
种,包括:
- x=? 给 x 赋值
- x++ x 加1 (设 x 值总是小于等于 255、大于等于 0)。
- x-- x 减 1。
- !? ? !是“特殊命令(I/O)的前缀”,第一个?为 A,B,C 中的某 个设备,第二个?为一位整数,表示使用设备的时间(例如假定一个数,这个数随着系统时间增加而递减(时间单位自定,例如:秒) 。 减到 0 时,认为设备工作完成) 。
- end 表示“可执行文件”结束。
每个可执行文件中可以包含多条同一类指令,假设每条指令在文 件中占 1 字节(自己思考如何把前述 5 种指令用一个字节表示并存储 在后述的disk 磁盘块里,其实这是一个“汇编/编译”的模拟过程) 。 如果可执行文件中的指令超过 64 条,就再多分配一个磁盘块,以此类推。
假设每种指令都是原子性的(即不考虑各指令的汇编实现细节, 每种指令都是原子执行的),且执行时间都是一个时间单位,后面进 程调度的时间片是 n个时间单位,例如 n=6,就表示本进程执行 6 条 指令之后将发生进程调度。
由题意可知,本次模拟系统中只有两种文件,一种是文本文件,另一种是我们创造的可执行文件。
由题意可知一条指令占模拟系统中的一个“字节”——我这里使用连续8个数字来表示一个字节,就像做计算机组成原理的实验时候一样。由于这5条指令功能都不尽相同,因此编码规则如下:
- 前三位用作指令编码。
-
规定:第一位为1表示需要读取下一个字节,当第一位xor第二位==1时,后五位代表x所在的内存地址(这里需要跟负责内存的同学商量一下才能确定规则)
- 000xxxxx——为end指令
- 001xxxxx——为x++
- 010xxxxx——为x–
- 100xxxxx——为控制设备,其中后五位代表外部设备的编号,而下一个“字节”表示设备执行的时间。
- 110xxxxx——为给x赋值,下一个“字节”表示赋值的大小,由于是一个字节,所以范围是0-255。
(2) 磁盘模拟
用一个文件 disk 模拟磁盘,设磁盘的每个盘块 64 字节,模拟磁 盘共有 256 块。第 0、1 块存放文件分配表,第 2 块存放根目录,其 余存放子目录和文件。(所以你创建的目录和流式文件不能太大太多, 但至少要包含 5 个目录和 15个文件。注意:文件对磁盘块是独占的, 即每个文件至少占据一个磁盘块,不会让两个文件共栖于同一磁盘块。)
对于磁盘的模拟,我目前的想法是在 真·操作系统下 用文本文件记录,根据题意可知一共有256行,每行64个字符串,每个串记录一个字节,在 模拟操作系统 开始运行的时候就把这个文件读进数组中,而此数组为二维数组,大小是256*(64*8) = 128KB,真·JVM内存兄 轻轻松松就能塞得下。
(3) 目录结构
目录结构采用树型目录结构。
- 目录项内容: 每个目录项 8 个字节,其中: 目录名或文件名:3 个字节; 扩展名: 1个字节(可执行文件扩展名为 e,目录没有扩展名) ; 目录属性、文件属性:1 字节; 起始盘号:1 字节; 文件长度:2 字节。
- 根目录 根目录位置固定,为磁盘第 2块,大小固定,共可包含 8 个 目录项,占用模拟磁盘第 2 块;
- 子目录 位置不固定,大小不固定。
这一部分直接按照要求实现就好了,文件长度信息由于是2字节,所以文件长度的范围是1~(2^15-1)(模拟字节)。
(4) 磁盘分配
磁盘的分配采用链接结构(显式链接)的分配方式。系统采用文件分配表方式记录磁盘空间的使用情况和链接结构的指针。文件分配表中一项需要 1 字节,而磁盘有 256 块,因而有 256 项, 模拟磁盘空间中的第 0、1 块用来存放文件分配表。
这里就有点疑问了,第0、1块一共只有64*2 = 128模拟字节来存储文件分配表,并没有256项。但是根据其他部分的提示,按照我的理解来说就是这个文件分配表可以记录第3-130块(因为0、1、2块被模拟系统用来存储文件系统的重要信息)。由前面的题目可以知道,假如一个文件的大小超出一个磁盘块的大小那么剩下的部分就需要别的磁盘块进行辅助储存。我们可以使用第3-255块来存储文件,但是文件分配表只能够记录128项,所以这里我认为第3-130项是用来储存文件的起始磁盘块,可以使用131-255来进行辅助存储,所以文件分配表的每一项的范围是0和3-255,其中0表示文件在这一个磁盘块就已经存储完而3-255表示辅助存储的磁盘号,当读取文件的时候可以通过文件分配表快速找到文件的存储磁盘块从而读出文件内容。
(5) 用户接口
用户接口提供用户命令接口,接收用户从键盘键入的命令。如果 不使用键盘输入命令的方式,那么就模拟 windows 操作方式,采用“右击快捷菜单”方式提供“创建删除文件/目录,修改属性”等命令,拖 动来移动/复制文件等。 要求实现以下命令: (下面例子中的 $只是命令提示符而已,和 UNIX 无关。除 aa 是目录名外,其余均为文件名。你可以根据自己实现方便或喜欢而自 定义命令参数。 ) 需要实现的命令包括:
- 创建文件:create 例如 $ create \aa\bb.e
- 删除文件:delete 例如 $ delete \aa\yy
- 显示文件:type 例如 $ type \zz
- 拷贝文件:copy 例如 $ copy \xx \aa\yy
- 建立目录:mkdir 例如 $ mkdir \dd
- 删除空目录:rmdir 目录非空时,要报错。
可选实现的命令包括:
- 改变目录路径:chdir
- 删除目录:deldir(既可删除空目录又可删除非空目录)
- 移动文件:move
- 改变文件属性:change
- 磁盘格式化:format
- 磁盘分区命令:fdisk
上述命令在实际系统中都是需要建立进程才可以运行的,这里为简单起 见,这些命令执行时不必在模拟系统中建立进程,可直接让 Windows 执行你编写的相应函数。
没什么好说的这一部分,也是按照要求来做就好了。
(6) 屏幕显示
屏幕显示要求包括: 用户命令接口:用于系统运行时用户用键盘输入或模拟 win 命令; 磁盘目录显示:要求显示磁盘的目录结构; 磁盘使用情况:显示磁盘每一个磁盘块的空间是占用还是空闲。
这一个部分就很简单了,在一开始读取磁盘情况的时候就可以将磁盘使用情况一并读取出来。
我负责部分的分析就大概是这样了,可能会有错误的地方,希望大家能够指出其中错误之处,大家一起讨论一下。