20211306 密码系统设计与实现课程学习笔记5
任务详情
自学教材第11章,提交学习笔记
- 知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容
“我在学***X知识点,请你以苏格拉底的方式对我进行提问,一次一个问题”
核心是要求GPT:“请你以苏格拉底的方式对我进行提问”
然后GPT就会给你提问,如果不知道问题的答案,可以反问AI:“你的理解(回答)是什么?”
如果你觉得差不多了,可以先问问GPT:“针对我XXX知识点,我理解了吗?”
GPT会给出它的判断,如果你也觉得自己想清楚了,可以最后问GPT:“我的回答结束了,请对我的回答进行评价总结”,让它帮你总结一下。
- 问题与解决思路,遇到问题最先使用chatgpt等AI工具解决,并提供过程截图
- 实践过程截图,代码链接
- 其他(知识的结构化,知识的完整性等,提交markdown文档,使用openeuler系统等)
一、第十一章(EXT2)学习总结
实现一个完全与Linux兼容的完整EXT2文件系统。只要充分理解了一个文件系统,那么就可以轻松改编其他任何文件系统。
- EXT2文件系统
多年来,Linux一直使用EXT2(Card等1995)作为默认文件系统。EXT3(EXT3,2014)是EXT2的扩展。EXT3中增加的主要内容是一个日志文件,它将文件系统的变更记录在日志中。日志可在文件系统崩溃时更快地从错误中恢复。没有错误的 EXT3 文件系统与EXT2文件系统相同EXT3的最新扩展是EXT4(Cao等2007)。EXT4的主要变化是磁盘块的分配。在EXT4中,块编号为48位。EXT4不是分配不连续的磁盘块,而是分配连续的磁盘块区,称为区段。除了这些细微的更改之外,文件系统结构和文件操作保持不变。本书的目的是讲授文件系统的原理。主要目标并非实现大的文件存储容量,而是重点论述文件系统设计和实现的原则,强调简单性以及与Linux的兼容性。为此,我们以ETX2作为文件系统。
- EXT2文件系统数据结构
通过mkfs创建虚拟磁盘
命令:mke2fs [-b blksize -N ninodes] device nblocks
可以在设备上创建一个带有nblocks个块(每个块大小为blksize字节)和ninodes个索引节点的EXT2文件系统。设备可以是真实设备,也可以是虚拟磁盘文件。如果未指定 blksize,则默认块大小为1KB。如果未指定ninoides,mke2fs将根据nblocks计算一个默认的ninodes数。得到的EXT2文件系统可在 Linux 中使用。
举例:dd if=/dev/zero of=vdisk bs=1024 count=1440
mke2f vdisk 1440
可在一个名为vdisk的虚拟磁盘文件上创建一个EXT2文件系统,有1440个大小为1KB的块。
虚拟磁盘布局
上述EXtend2布局如图
一开始,我们先使用这个基本文件系统布局进行假设。在适当的时候,我们会指出些变化,包括硬盘上大型 EXT2/3 文件系统中的变化。下面来简要解释一下磁盘块的内容。Block#0:引导块
B0是引导块,文件系统不会使用它。它用来容纳一个引导程序,从磁盘引导操作系统。
超级块
s_log_block_size
确定文件块大小,为1KB*(2**s_log_block_size),例如:0表示1KB块大小,1表示2KB块大小,2表示4KB块大小等。最常用的块大小是用于小文件系统的1KB和用于大文件系统的4KB。
s_mnt_count
已挂载文件系统的次数。当挂载计数达到max_mnt_count时,fsck会话将被迫检查文件系统的一致性。
s_magic
标识文件系统类型的幻数。EXT2/3/4文件系统的幻数是0xEF53。
块组描述符
块和索引节点位图
索引节点
数据块
目录条目
- 3级文件系统
挂载算法
命令:
mount filesys mount_point
卸载算法
交叉挂载点
文件保护
实际uid和有效uid
文件锁定
二、代码实现
三、苏格拉底挑战
四、Linux代码实现
- man
sort+ctrlD
sort -r +CtrlD
man -k + 关键字
- who