ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

《Unix/Linux系统编程》第十一章学习笔记

2021-10-17 16:32:52  阅读:136  来源: 互联网

标签:EXT2 编程 文件系统 索引 Unix Linux 磁盘 节点 block


第11章 EXT2文件系统

1.EXT2文件系统数据结构

  在Linux下,命令mke2fs [-b blksize -N ninodes] device nblocks在设备上创建一个带有nblocks个块和ninodes个索引节点的EXT2文件系统。

默认块大小为1kb。未指定ninoides,将根据nblocks计算一个默认的ninodes数。

2.虚拟磁盘布局

  上述EXT2文件系统的布局如图:

3.Block

  B0:引导块,文件系统不会使用它。它用于容纳从磁盘引导操作系统的引导程序。

  B1:超级块,用于容纳关于整个文件系统的信息。

    部分重要字段:

 

  B2:块组描述符块。EXT2将磁盘块分为几个组。每个组有8192个块(硬盘上的大小为32k)。每组用一个块组描述符结构体描述。

 

 

  B8:块位图。位图用于分配和回收项。

  B9:索引节点位图。一个索引节点就是用于代表一个文件的数据结构。

  B10:索引(开始)节点块。

    主要索引节点字段:

 

    i_block[15]数组包含指向文件磁盘块的指针,这些磁盘块有:

    直接块:i_block[0]至i_block[11],指向直接磁盘块;

    间接块:i_block[12]指向一个包含256个块编号生物磁盘块,每个块编号指向一个磁盘块;

    双重间接块:i_block[13]指向一个指向256个块的块,每个块指向256个磁盘块;

    三重间接块:i_block[14],可以忽略。

4.邮差算法

  一个城市有M个街区,编号从0到M-1.每个街区有N座房子,编号从0到N-1.每座房子有一个唯一的街区地址,用(街区,房子)表示。已知某个街区地址BA=(街区,房子),怎么把他转换为线性地址LA。

  Linear_address LA=N*block + house;
  Block_address BA=(LA/N,LA%N)。

  相关应用:

  (1) C语言中的Test-Set-Clear位;

  (2) 将索引节点号转换为磁盘上的索引节点。

5.遍历EXT2文件系统树

  遍历算法:

  (1) 读取超级块,验证它确实是EXT2 FS;

  (2) 读取块组描述符块,以访问组0描述符;

  (3) 读取InodeBeginBlock,获取/的索引节点;

  (4) 将路径名标记为组件字符串,假设组件数量为n;

  (5) 从(3)中的根索引节点开始,在其数据块中搜索name[0];

  (6) 使用索引节点号ino来定位相应的索引节点。

  (5) (6)步将重复n次。

  将路径名转换为索引节点:

  INODE *path2inode(int fd, char *pathname)

  返回一个指向文件索引节点的INODE指针;如果文件不可访问,则返回0。

标签:EXT2,编程,文件系统,索引,Unix,Linux,磁盘,节点,block
来源: https://www.cnblogs.com/liujiaqi20191309/p/15417200.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有