本实验旨在通过实践操作加深对文件系统的理解,涵盖文件组织、存储管理及访问控制等内容,培养解决实际问题的能力。
本实验要求在假设的IO 系统之上开发一个简单的文件系统,这样做既能让实验者对文件系统有整体了解,又避免了涉及过多细节。用户通过create, open, read等命令与文件系统交互。
操作系统实验四的核心目标是设计和实现一个基于假设IO系统的简单文件系统,以帮助学生理解基本工作原理。在这个实验中,磁盘被视为连续编号的逻辑块序列(从0到L-1),而IO系统则负责隐藏实际物理结构,通过read_block和write_block接口函数提供对这些逻辑块的操作。
在设计的文件系统中,磁盘被划分为数据区与保留区两部分。其中保留区又包含位图区域以及文件描述符区域。创建新文件时,在数据区头部添加相应的目录项,并记录其名称及对应的描述符编号;位图用于标记已分配的数据块;而文件描述符则保存有关于该文件长度及其所占用的存储信息。
具体操作包括:
1. **创建文件** (create):查找空闲描述符,为新文件建立目录条目并返回状态。
2. **删除文件** (destroy):移除指定目录项,并释放其对应的位图和描述符资源后返回状态。
3. **打开文件** (open):在目录中定位目标文件的描述符信息,分配表项并将读写指针初始化为0,随后从磁盘加载首块内容至缓冲区并返回索引值。
4. **关闭文件** (close):将当前缓存数据同步回磁盘,并释放相关资源后返回状态。
5. **向文件中写入数据** (write): 根据当前可用空间大小进行数据记录,若超出限制则分段完成操作并刷新缓冲区,最后返回状态信息。
6. **从文件读取内容** (read):将指定数量的字节读至临时数组,并依据指令参数决定实际传输量后输出结果。
7. **定位文件指针** (lseek): 移动当前访问位置到特定偏移处,允许在不进行IO操作时调整该值。
在整个实验过程中,通过输入命令执行各种文件系统任务如创建、检查目录结构、删除以及读写等。同时还可以使用ldisk查看磁盘状态的变化情况。
源代码中operation.h头文件可能包含了上述功能的声明部分;而具体实现细节则分布在其他相关源码里。此项目有助于学生深入了解如何在操作系统层面管理存储空间,跟踪维护元数据,并执行基础性文件操作。这对于进一步学习更复杂系统的架构设计具有重要意义。