自学教材第11章,提交学习笔记(10分),评分标准如下 1. 知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容 (4分) “我在学***X知识点,请你以苏格拉底的方式对我进行提问,一次一个问题” 核心是要求GPT:“请你以苏格拉底的方式对我进行提问” 然后GPT就会给你提问,如果不知道问题的答案,可以反问AI:“你的理解(回答)是什么?” 如果你觉得差不多了,可以先问问GPT:“针对我XXX知识点,我理解了吗?” GPT会给出它的判断,如果你也觉得自己想清楚了,可以最后问GPT:“我的回答结束了,请对我的回答进行评价总结”,让它帮你总结一下。 2. 问题与解决思路,遇到问题最先使用chatgpt等AI工具解决,并提供过程截图(3分) 3. 实践过程截图,代码链接(2分) 4. 其他(知识的结构化,知识的完整性等,提交markdown文档,使用openeuler系统等)(1分)
一、课本第十一章内容总结
第十一章 EXT2文件系统
1.EXT2文件系统
在第七章中已经简要学习过EXT2系统的一些基本知识。EXT2是Linux的默认文件系统。
2.EXT2文件系统数据结构
2.1创建虚拟磁盘
命令mkd2fs [-b blksize -N ninodes] device nblocksk可以用来创建带有nblocks个块和ninodes个索引节点的EXT2文件系统,设备可以是真实设备,也可以是虚拟磁盘文件。
如dd if=/dev/zero of=vdisk bs=1024 count=1440
mke2fs vdisk 1440
可以在一个名为vdisk的虚拟磁盘文件上创建一个EXT2文件系统,有1440哥大小为1kb的块。
2.2虚拟磁盘布局
Block#0是引导块,用来容纳一个引导程序,从磁盘引导操作系统。
Block#1:超级块,容纳整个文件系统信息。以下为一些重要字段。
Block#2:块组描述符,EXT2将磁盘块分成几个组,每组有8192个块,每组用一个块组描述符结构体来描述。
Block#8:块位图,用来表示某种项的位序列。
Block#9:索引节点位图,一个索引节点就是用来代表一个文件的数据结构。
Block#10:索引开始节点,每个文件都用一个128字节的唯一索引节点结构体表示。
其中i_block[15]包含指向文件磁盘块的指针,这些磁盘块有:
直接块、间接块、双重与三重间接块。
随后的是文件存储数据块。
3.邮差算法
一个城市有M个街区,编号从0到M-1.每个街区有N座房子,编号从0到N-1.每座房子有一个唯一的街区地址,用(街区,房子)表示。已知某个街区地址BA=(街区,房子),怎么把它转换为线性地址LA,反过来,已知线性地址,怎么把它转换为街区地址?
如果都从0开始计数,
Linear_address LA=N*block + house;
Block_address BA=(LA/N,LA%N);
这就是邮差算法。
4.编程示例
显示超级块
(1)打开虚拟磁盘:int fd = open("vdisk",O_RDONLY)
(2)将超级块读入
char buf[1024];
lseek(fd,1024,SEEK_SET);
int n = read(fd,buf,1024)
(3)让ext2结构体指向buf【】,然后利用指针访问结构体的各个字段。
还有显示位图等操作,详细见课本271页。
5.遍历EXT2文件系统树
遍历算法
(1)读取超级块。
(2)读取快组描述符。
(3)读取InodeBeginBlock,获取/的索引节点。
(4)将路径名称记为组件字符串。
(5)从(3)的跟索引节点开始搜索。
(6)使用索引节点号ino定位相应的索引节点。
6.EXT2文件系统的实现
(1)是当前运行进程的 PROC结构体。在实际系统中,每个文件操作都是由当前执行的进程决定的。每个进程都有一个cwd,指向进程当前工作目录(CWD)的内存索引节点s 它还有一个文件描述符数组 fd【】,指向打开的文件实例。
(2)是文件系统的根指针。它指向内存中的根索引节点。当系统启动时,选择其中一个设备作为根设备,它必须是有效的 EXT2文件系统。根设备的根索引节点(inode #2)作为文件系统的根(/)加载到内存中。该操作称为"挂载根文件系统"。
(3)是一个openTable条目。当某个进程打开文件时,进程 fd数组的某个条目会指向openTable,openTable 指向打开文件的内存索引节点。
(4)是内存索引节点。当需要某个文件时,会把它的索引节点加载到minode槽中以供使用。因为索引节点是唯一的,所以在任何时候每个索引节点在内存中都只能有一个副本。在minode中,(dev; ino)会确定索引节点的来源,以便将修改后的索引节点写回磁盘。refCount字段会记录使用minode 的进程数。
dirty字段表示索引节点是否已被修改。挂载标志表示索引节点是否已被挂载,如果已被挂载,mntabPtr将指向挂载文件系统的挂载表条目。lock字段用于确保内存索引节点一次只能由一个进程访问,例如在修改索引节点时,或者在读/写操作过程中。
(5)是已挂载的文件系统表。对于每个挂载的文件系统,挂载表中的条目用于记录挂载的文件系统信息,例如挂载的文件系统设备号。在挂载点的内存索引节点中、挂载标志打开,mntabPtr指向挂载表条目。在挂载表条目中,mntPointPtr指向挂载点的内存索引节点。后面将会讲到,这些双链接指针允许我们在遍历文件系统树时跨越挂载点。此外,挂载表条目还可能包含挂载文件系统的其他信息,例如超级块、块组描述符、位图和索引节点启动块的值,以便快速访问。如果任何缓存项有修改,当卸载设备时,必须将它们写回设备。
系统级别:分为三级,第一级包含基本文件系统树,第二级实现文件内容读写,第三级实现文件系统的挂载、卸载和文件保护。
7.基本文件系统
type.h
这类文件包含 EXT2文件系统的数据结构类型,比如超块、组描述符、索引节点和目录条目结构。此外,它还包含打开文件表、挂载表、PROC结构体和文件系统常数。
global.c
这类文件包含文件系统的全局变量
8.1级文件系统函数
mkdir算法
mkdir pathname
创建一个带路径名的新目录。
creat算法
创建空的普通文件
除此外还有link、unlink算法等。
9.2级文件系统函数
open算法
int open(char *filename,int flags)
打开一个文件进行读写。
还有lseek、close等算法。
10.3级文件系统函数
此处包括挂载算法、卸载算法等。
二、课堂代码实践
三、苏格拉底挑战
标签:文件,EXT2,文件系统,笔记,学习,索引,第五,挂载,节点 From: https://www.cnblogs.com/liTCabcAbc/p/17765490.html