Unix文件管理

这篇博客探讨了Unix文件系统的存储结构,包括inode树和文件的三级索引机制,详细阐述了如何通过inode找到文件在磁盘的存储位置。此外,还介绍了内存中文件的管理方式,如进程PCB、控制方式和内存索引点,以及磁盘空闲空间的管理策略,如成组链表构成的索引表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

磁盘上文件存储

inode tree

  1. 将文件名从文件的属性中分离,【文件名,inode号】为一项,组成了inode树
    1. 根目录没有名字,只有一个固定的inode,据对路径的文件查找都自动从这个inode开始
      /不是名字(null/);
      考虑bin/是
    2. 如果文件是目录,那么它会指向下一个由【文件名,inode号】项组成的数组(作为一个目录文件)
  2. 根据inode可以查找到文件属性,在属性中有一项char di_addr[40],储存着文件在磁盘上的存储位置

文件的三级索引(结合直接索引)

char di_addr[40]
1. 每三个字节表示一个物理块号,因此分为13块,余一块是为了凑40方便对齐,

1.  0-9直接索引物理块号,
2. 10一级索引11-二级索引
3. 12-三级索引
  1. 每一个物理块是1KB,
    直接索引10k大小,加上三级索引,每级索引1000/3(1KB,每个块号用3B表示),
    计算得到最大索引为10k(1000/3)3=32GB
    即最大能够表示32GB的文件

满足其他条件下,保证了较理想的查找效率

内存中文件管理

当文件调入内存中时,会建立三级的文件管理

进程PCB->控制方式->内存索引点

内存索引点:

    存储着inode号,以便文件的写回,与二次读取

控制方式:

    f_flag
    f_inode //存贮其中的控制方式(o_WONLY,O_RDONLY etc)
    f_count //共享的进程数,当为0时,进程索引点就可以被清理了 

进程PCB:

    int u_ofile //指向不同控制方式的指针数组

1. 内存索引点可以被不同的控制方式共享(同时以不同方式打开文件)
2. 控制方式可以被不同的PCB共享(相同的方式打开同一个文件)
3. PCB通过u_ofile数组,同时拥有不同的控制方式

磁盘空闲空间管理

成组链表构成的索引表

索引表:每一百个顺序排列的纪录位为一组,第一个纪录位指向下一组所在的物理块号,块0表示null

具体过程是这样的:
(特殊的头插法)
每当一个块被设为空闲,判断一下索引表的头一组的记录的空闲块数,<100就顺序添加到头一组的尾部添加空闲的块号,如果==100,则复制索引表到刚设为空闲的块中,同时原来块的索引表的记录数置1,并在第一个纪录位时写入刚空闲的块号

  1. 一个物理块有至多有一个索引表,所有索引从一个专用块上的索引表开始
  2. 一个索引表有效记录100个块,同时记录下一个索引表所在的物理块,第一块既是空块又是指针
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值