Unix文件系统(一)

本文详细介绍了Unix文件系统的组成,包括超级块、inode表和数据区,并重点阐述了目录的本质——作为文件名和i-节点号对应关系的索引。通过分析,指出目录中的每个条目都是一个链接,指向文件的i-节点。接着,文章探讨了pwd命令的实现原理,解释了如何通过递归和比较”.“和”..“的i-节点号来确定当前工作目录。
摘要由CSDN通过智能技术生成

此文着重介绍系统是如何表示目录的以及pwd命令的编写。

我们都知道Unix将磁盘分为三部分:超级块(superblock),节点表(inode table)以及数据区。超级块中记录文件系统本身的结构信息。节点表中记录文件的属性,文件系统中每个文件在表中都至少有一个i-节点,表中每个节点的大小相同。数据区就是文件数据真实的存储位置。

简要介绍磁盘知识后,我们来谈谈目录。在Unix中,目录是包含了文件名字列表的特殊文件,其抽象模型是一个包含i-节点号和文件名的表。所以一个目录的内容有两个部分:一个i-节点表和文件名表,其相互对应。对于文件来说,目录是找到该文件的一个索引(链接),本质上就是负责记录文件i-节点表与文件名的对应关系(一个文件可能对应好多个i-节点)。对于open、cat、cp等命令,都是通过在目录中寻找目的文件名,然后根据对应关系获取i-节点号以获取文件属性,最终获取文件内容来实现的。

假设目录demodir中有一个文件y,y文件对应的i-节点号是491。从系统角度来看,目录中有一个包含文件名y和i-节点号为491的入口,也可以说目录demodir中有一个指向i-节点号为491的链接,这个链接所附加的文件名为y。

说来说去这么绕,书上有一句结论概括地很好:目录包含的是文件的引用,每个引用被成为链接。文件的内容存储在数据块,文件的属性被记录在一个被称为i-节点的结构中,i-节点的编号和文件名存储在目录中。就像我前面说的,目录本质上是记录对应关系。

了解了pwd的内核属性后,我们来实现一下pwd。
此程序中使用递归语句实现,从当前目录不断循环深入直到”.”与”..”的i-节点号相同,

1.本题目为模拟UNIX文件系统来设计一个多用户多级目录的文件系统。 1)课程设计所利用的空间为1M的内存(模拟外存文件系统存储空间)或用一个文件模拟一个磁盘分区,模拟外存文件系统存储空间。这1M内存分成512块,每块为512个字节,这512块就是文件系统总共的可用块数,文件系统的分配就是以块为单位来分配的,空闲块的管理利用位示图的方法来管理。申请1M的内存的方法可以利用malloc()等。 2)在构造文件系统空间时,不用做引导块;专用块中只包含对空闲块和空闲磁盘i节点进行管理的信息,即位示图和记录空闲磁盘i节点号的数组(该数组大小可设置为与磁盘i节点总数相等);要做磁盘i节点区和文件存储区;不用做进程对换区。注意:仔细计算,合理分配各区域。 3)磁盘i节点可以利用在内存中生成链表或者数组的方法来生成,并且限制磁盘i节点数的最大值。同样内存活动i节点也可以利用链表的方法在内存中生成。 4)在往文件中写或者读的时候我们都是对内存中内容进行读写。例如你在文件中写的时候,其实是对分配的文件块中对应的内存赋值。当程序运行结束的时候,文件的内容都丢失。我们这个文件系统只是一个模拟文件系统功能的虚拟文件系统。当然,若用一个文件模拟一个磁盘分区,模拟外存文件系统存储空间,那你在这个模拟系统中建立的文件其内容就不丢失了 本程序使用txt文件模拟磁盘分区
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值