
该课设采用Java实现仿UNIX操作系统。
5星
- 浏览量: 0
- 大小:None
- 文件类型:None
简介:
一、UNIX文件系统的基本原理
UNIX系统采用一种树状的目录结构,其中每个目录被视为一个目录文件。这些目录文件由一系列的目录项构成。每一个目录项占用16字节的空间,而一个辅存磁盘块(容量为512字节)能够容纳32个这样的目录项。在每个目录项中,前两位字节分别存储着该文件的外存i节点号,这作为该文件的内部唯一标识符;后14字节则用于记录文件名,作为该文件的外部标识。因此,文件目录项负责维护文件内外标识之间的对应关系。通过文件名可以快速地找到其对应的辅存i节点号,从而获取到该文件的所有者、访问权限、以及存储在辅存中的数据地址等关键信息。UNIX系统中的存储介质以512字节为单位进行划分,从0字节开始连续编号,最终形成一个文件卷,也称为文件系统。本次课程设计旨在构建一个简化的UNIX文件系统模拟程序。具体而言,我们将在磁盘中预先申请一个二进制文件,以模拟UNIX内存环境,并依次初始化位图区、i节点区和数据块区。
二、基本要点思路
1. **模拟磁盘块的实现:**为了满足文件系统对磁盘数据的读取和写入需求,我们采用了使用文件来模拟磁盘的方式。在一个文件中,我们将磁盘划分为若干个不同的区域或块。主要包含三个区域:位图区、inode索引节点区和磁盘块区。位图区的实现采用了512字节的数组进行存储。对于inode索引节点区和磁盘块区,我们采取了一种相对巧妙的方法:将它们以对象列表的形式存储起来。正如前面所强调的,本次实验的所有结构都采用对象进行存储管理。inode节点和磁盘块这两个数据结构是核心组成部分。在初始化阶段,我们分别实例化了32个inode对象和512个block对象(关于这些类别的具体定义将在后续章节中详细阐述)。随后将这些对象添加到各自对应的对象列表中。在存储过程中,我们利用Java的对象序列化技术将这些对象数组持久化地保存到磁盘文件中。当程序运行时需要使用文件系统时,首先从磁盘文件中读取出位图数组、inode对象列表以及block对象列表;之后的操作则通过对这些列表进行增删操作来实现所需的功能。这种方法不仅能够有效地减小存储空间占用(借助Java的对象序列化技术),而且避免了在使用过程中不必要的查找操作;只要在初始化阶段将所有相关对象加载出来即可完成后续的所有读写操作.
2. **界面的实现:** 在实现此文件系统时采用了两种不同的方案。“直接在Java控制台进行输入输出”最初是基于对UNIX文件系统传统命令行操作方式的理解而设的;为了更贴近原生的UNIX体验,控制台实现方式较为接近原始设计意图. 然而,经过老师的建议,程序随后进行了全面重构,改为在图形用户界面(GUI)上进行输入输出操作. 这种GUI界面设计不仅更加美观且易于使用,同时也显著提升了用户体验. 虽然两种方案的技术实现方式存在差异——前者主要依赖于系统的标准输入输出流,后者则利用了Java监听器机制——但都有效地完成了目标功能的实现.
3. **权限的实现:** 为了支持多用户的权限管理功能,我们在文件和文件夹级别分别定义了三级权限。“访问”权限允许用户查看文件的内容或进入相应的文件夹。“修改”权限允许用户对文件进行编辑或在文件夹中创建新的文件/文件夹。“删除”权限则代表最高级别的权限,只有拥有最高级权限的用户才能对指定的文件或文件夹进行授权以及授权相关的操作 (例如授予其他用户访问或修改权限)。在每次对文件或文件夹执行访问、修改或删除操作时,程序都会首先检查当前用户所拥有的权限信息; 只有当用户的拥有的权限等级高于所要执行的操作所需的最低权限等级时,才允许该操作得以成功执行.
全部评论 (0)


