目录
前言
最后一个实验了。。。
还有 xv6 综合实验二,寄!
上周打游戏去了,经典赶 ddl
用逆天鲨鱼头的话说就是:哇哇哇哇!!!!💃💃💃💃💃 上大分了 happy!
🍎+一下:这次实验挺简单的,除了第二题读盘块听变态的说实话,因为要自己看看 ext4 的 inode 组成,磁盘组的划分等知识点,其他的直接做就行了,然后最后的选做题直接嗯编
1. 目录树构建
1) 构建以下目录子树:(20%)
首先创建对应结构的目录,但是不进行链接:
通过 tree 查看目录结构:
然后使用 ln 命令创建链接,其中 g->e 是硬连接,b->f 是硬连接:
2. Inode 与物理盘块读取
(2)创建一个4KB左右的文本文件,其内容为重复出现的“Hello Operating
system”。
读入该文件的目录项内容,并解读出其对应的inode节点号;
然后读出对应的inode内容,找到文件的第一个扇区,
读入第一个盘块并查看其内容;
(30%)
创建对应要求的文本文件:
首先通过 df -i 命令查找 hello.txt 对应的目录,挂载在那个文件系统下,发现是 /dev/sda5,如图:
然后通过 df -T 查看 /dev/sda5 的文件系统类型为 ext4,如图:
然后再通过 dump2fs 命令查看 sda5 的格式化的文件系统信息:
信息的解释如下:
Inode size :内核 Inode 结构体大小为 256 字节
Inodes per group :每组内存放了 8192 个 Inode
Block size :一个盘块大小为 4096 字节
Blocks per group :每组内有 32768 个盘块
Inode blocks per group :每组内存放了 Inode 的盘块的数量为 512
从逻辑上来看,每个盘块 4096 字节,能够存储 4096/256 = 16 个 Inode,而一个磁盘有 512 个盘块存放了 Inode,那么就有 16 * 512 = 8192 个 Inode,这和图中的数据相吻合!
然后通过 stat 命令查看当前文件的 inode 信息,其中 inode 号是 1051749,如图:
然后计算编号为 791104 的 Inode 所在的组号:
组 号 = I n o d e 编 号 每 组 有 多 少 个 I n o d e = ( 791104 − 1 ) 8192 = 96 组号 = \frac{Inode 编号}{每组有多少个 Inode} = \frac{(791104 - 1) }{ 8192} = 96 组号=每组有多少个InodeInode编号=8192(791104−1)=96
然后找到刚刚 dump2fs 命令打印的第 96 号盘块的信息,3145760 ~ 3146271 一共 512 个盘块中,存放了该组所有的 Inode,故 Inode 表的起始盘块位于 3145760 处:
计算编号为 791104 的 Inode 在 Inode 表中的索引:
组 内 索 引 = I n o d e 编 号 % 每 组 有 多 少 个 I n o d e = ( 791104 − 1 ) % 8192 = 4671 组内索引 = Inode 编号 \ \% \ 每组有多少个 Inode \\ = (791104 - 1) \% 8192 = 4671 组内索引=Inode编号