UNIX的文件系统

更新时间:2023-09-19 05:34:01 阅读量: 小学教育 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

UNIX的文件系统

1、UNIX的磁盘文件系统结构: 引导块 超级块 i-索引结点表 文件数据区

2、引导块(块0)

块0不属于文件系统,通常用来存放启动计算机的代码。 3、超级块(块1)(UINX心脏) 磁盘块已用块数、数据块可用数、i索引结点长度等。

4、i-索引结点表 所有文件的结点号。 1-node 2-node … n-node

1-node 目录文件的索引结点。

计算机启动时把目录文件的i-node装入主存,成为活动i-node。

5、目录文件结构

14字节 2字节 文件名 i-node结点号

A

… …

6、i-node(索引结点) i节点是一个64字节长的表。

文件长度 修改时间 文件所有者 文件存取方式 文件类型 磁盘地址列表

7、磁盘地址列表(共有13个登记项),也称为索引表(每个文件) 注意:索引表与索引结点表(超级块后面)的区别。 前10个块号(每个地址占4字节)是文件前10块的存放地址。这10个块号能给出一个至多10块长的文件的逻辑结构,文件将以块号在磁盘地址表中出现的顺序依次取相应的块。

当文件长于10块时又怎样呢?磁盘地址表中的第十一项给出一个块号,这个块号指出的块中含有128个(128×4字节=512字节,刚好一个块大小。高版本256)块号(这些信息放在文件数据区),至此,这种方法满足了至多长于128块的文件(138块)。如果文件大于138块,磁盘地址表的第十二项给出一个块号, 这个块号指出的块中含有128个块号,这128个块号的每一个块号又指出一块, 块中含128个块号,这些块号才用于取文件的内容。磁盘地址中和第十三项索引寻址方式与第十二项类似,只是多一级间接索引。

这样,在UNIX系统中,每个文件的最大长度是10块(5KB),138(10+128)块(69KB),

1

10+128+128×128块(16384+138块)(8MB多),10+128+128×128+128×128×128块(1GB多)。每个文件对应需要最大索引结点地址列表数分别为:10个,138(10+128)个,10+128+128×128个,10+128+128×128+128×128×128个。

i-addr[0]

i-addr[1] … … i-addr[2] i-addr[3]

i-addr[4] 0 0 i-addr[5] … … … i-addr[6] 127 127 i-addr[7] … i-addr[8] 0 0 … i-addr[9] … … i-addr[10] 127 127 i-addr[11] 0 i-addr[12] … 0 0 … … … 127 … 127 127 … 0 … 0 … … 127 127 0

… …

127

0

… …

127

8、空闲块管理

UNIX采用成组链接方式管理空闲块。 每100个空闲块为一组,每组的第一个空闲块中登记下一组空闲块的磁盘物理块号和空闲块数,最后不足100块的那部分磁盘物理块号及块数记入专用块中。 系统初始化时先把专用块内容读到主存,当有申请空闲块时,就可以直接在主存中找到哪些空闲块是空闲的,每分配一块后,把空闲块数减1。注意专用组中第一块分配出之间,把登记在该块中的下一组的块号保存到专用块中。 例题:

某个系统采用成组链接法来管理磁盘的空闲空间,目前磁盘的状态如下图所示。 (1)该磁盘中目前还有多少个空闲盘块? (2)请简述磁盘块的分配过程。

(3)在为某个文件分配3个盘块后,系统要删除另一个文件,并回收它所占的5个盘块,

2

它们的盘块依次为700、711、703、788、701,请画出回收后的盘块链接情况。 答案:

(1)从图中可以看出,目前系统共有四组空闲盘块,第一组2块,第2、3组分别为100块,第四组虽记为100块,阶除去结束标记0后实际只有99块,还有专用块1块,共299+2+1=302块。

空闲块号 2 300 100 单元

299 100 400 399 100 500 499 100 0 599 … ……… 301 300 299 401 400 399 501 500 499 599

(2)磁盘块的分配过程:首先检查超级块是否已经上锁,若已上锁则进程睡眠等待;否则将s_nfree减1,若s_nfree仍大于0,即第一组中不止一个空闲盘块,即将s_nfree中登记的(即空闲盘块号栈栈顶的)空闲盘块分配出去。若s_nfree为0,即当前空闲盘块号栈中只剩是后一个空闲盘块,由于该盘块中登记有下一组空闲盘块的盘块号和盘块数,因此核心在给超级块的空闲盘块号栈上锁后,先将该盘块号的内容读入超级块的空闲盘块号栈,再将该盘块分配出去,另外,还需将空闲盘块号线解锁,并唤醒所有等待其解锁的过程。若s_nfree为0,而且栈底登记的盘块号为0,则表示系统已无空闲盘块可分配。

空闲块号

99 100 100

400 500 0

399 499 599

………

302 401 501

400 500

300

399 499 599

………

302 401 501

(3)分配一个3块的文件,块号分别为X1、X2、X3,其链接的空闲块图如下图。

…301 …401 …501 3

空闲块号 99 100 100 400 500 0 399 499 599 … … … 302 401 501 400 500 300 399 499 599 ……… 302 401 501 删除一个共5块的磁盘块文件,其空闲块链接情况如下图。

空闲块号 5 100 100 100 300 400 500 0 100 711 399 499 599 单703 … … …元

788 700 401 501 701 300 400 500 … 711 399 499 599 ……… 703 401 501 700 401 501 788 701

4

本文来源:https://www.bwwdw.com/article/7srh.html

Top