写在最前面,需要pdf的请资源里下载,已经排版好了,这里不知道为什么粘贴上来排版这么难看!!!
某一个分区进行格式化的时候,这个分区的文件系统就被建立了,一旦这个文件系统建立完后,就确定了文件系统使用的什么样的物理结构。
操作系统引导:
主存分为两部分,RAM和ROM(BIOS),开机时,cpu会先执行BIOS的自举程序。
①CPU会先执行ROM中的引导程序(先进行硬件自检,再开机)
②将磁盘(RAM)的第一块:主引导记录(MBR)读入内存,执行磁盘引导程序,扫描分区表。(知道电脑有几个分区,并且知道哪个分区是系统盘)
③从系统所在盘(C盘):读入引导记录(PBR),执行其中的程序
④执行程序又引导操作系统把查找根目录将根目录的内容读入内存,于是操作系统又可以从C盘的根目录出发,将所有需要的东西找到,逐个加载进来。
注1:主引导记录和引导记录不是一个东西。
注2:主引导记录在整个磁盘的前边,而引导记录是在系统盘的前边。
注3:根目录表是怎么找到的?根目录的在磁盘块的位置定死了,设置固定地址去读就好。
补充知识点:open系统调用是要得到文件的控制信息,而不是文件数据本身!!!
2.UFS文件系统(物理结构:混合索引)
2.1.UFS文件系统的基本概念
将操作系统系统盘分区放大,于是系统盘分区如下所示(只包含了引导记录部分):
引导块:用于引导操作系统初始化的一段程序。作用效果是引导操作系统找到根目录,并将根目录的目录文件的内容载入内存。
超级块:包含一些重要的文件系统管理信息,如:魔数、磁盘转速、磁道数、扇区数等
位示图:这个位示图(字,位),位为1bit,1表示不空闲,0表示空闲。
注1:每个bit对应一个物理块。因此,若磁盘块共有 n 个,则位示图也至少要有 n bit。
注2:设⼀个磁盘块大小为4KB,即 32K bit,因此这个位示图能支持的磁盘大小上限为 32K 个块。如果需要支持更多磁盘块,则需要扩充位示图的大小。
inode区:在Unix文件系统中,所有的索引结点集中存放,即所有inode有共同的起始地址。
“inode结点”就是“索引节点”。每个文件对应一个inode!!!用于表示“文件物理结构”的“混合索引表”被包含在inode结点中,通过“混合索引表”,即可找到一个文件中每个块存储的物理位置。
根目录(存在固定位置):
根目录文件的内容
注1:根目录的信息存储在磁盘的固定位置,这样可以保证开机时,能够找到根目录,再从根目录出发找到其他信息。
注2:开机时,根目录的内容通常会被加载到内存,并一直常驻内存。
注3:由于Unix文件系统采用了“索引结点”,因此每个目录项只需包含“文件名、inode号”,文件的具体属性包含在inode中。
注4:每个目录文件中默认包含两个目录项,分别是“.”和“..”,表示当前目录,“..”表示上一级目录。根目录比较特殊,没有所谓的“上一级目录”,因此它的目录项“..”指向自身
2.2.UFS文件系统打开文件的过程(对应文件系统骚图来看!)
当前工作目录在根目录下。开机时,根目录文件的内容通常会被加载到内存,并常驻内存。(即顶级索引表结点已经在内存中)
- 根据目录文件的内容查找到各个文件(目录也是文件)对应inode编号(inode索引各个文件)
注:如果是目录文件,则inode索引的文件记录的又是该目录下各个文件的inode。如果是普通文件,则inode索引的文件就是文件数据。
- 通过目录文件又可以得到下一级文件的inode。
如果读取对应物理块,用read系统调用,才可以得到对应的目录文件(或普通文件)
3、循环反复。
例如*fd = open(“\A\Dm”): 假设Dm在7号物理块
①根据根目录文件内容,文件A对应inode→1号 inode(1号inode索引的目录文件A)(图1)
②将1号inode读入内存(1次读磁盘),可知目录文件A占用两个磁盘(6号和7号)(图2左)。
③读入6号块(1次读磁盘),寻找Dm,发现没有,于是继读7号物理块(1次读磁盘),找到了文件Dm对应的inode→5号inode(图2)(5号inode索引文件Dm数据),将5号inode读入内存(1次读磁盘),返回fd,open系统调用完成。
注:fd:文件描述符,相当于指向该文件的指针;作为对进程发出open系统调用的回应
思考1:如何确定目录文件A需要占多少个块?
回答1:(目录项的数量*每个目录项的大小)/ 块大小
例1:系统调用open(“/A/Dm”) 目标是找到并将Dm的 inode读入内存,返回。
(1)查找根目录(开机时已经读入内存,并且常驻内存,访问无需读磁盘),目录文件A对应的inode号为→ 1号inode(1号inode索引的文件就是目录文件A)
(2)将1号inode读入内存。(1次读磁盘)
根据inode结点可知,目录文件A的FCB总共占用两个块(6号块和7号块),此时有两种查找策略:
①.两个块全部读入后再查找Dm文件的FCB(2个块,固定2次读磁盘)
②.每读入一个块就立即对该块查询Dm的FCB,没有才读入下一块(最少1次,最多2次读磁盘)
设Dm的FCB存放在7号块中,则以上两种方案都需要读2次磁盘。则读6号块(1次读磁盘),找不到,再将目录文件A的7号块读入内存后(1次读磁盘),根据目录文件A的内容,查询可知Dm所对应的inode号为→5号inode
- 读入5号inode(1次读磁盘),完成OPEN系统调用
共4次读磁盘
例2:open(“/B”) 文件B就是 发如雪.mp3
①根据根目录的目录文件,查找普通文件B对应的目录项→2号inode((注意!2号inode索引的文件就是文件B的数据!!!))
②读入2号inode(1次读磁盘),open系统调用完成。发现对应着3块(10、12、8),读入10号块,播放。(不一定要按照顺序10号、11号、12号的读取,支持直接访问第12块)
问题:文件B是一个.mp3类型的文件,什么歌呢一周杰伦的《发如雪》。如果你的音乐播放器,每次只读入一块的数据。那这首歌直接快进到最后一句,背后发生了什么?
回答:这首歌的最后一句,应该存储在该文件的最后一个逻辑块。此时文件B的inode结点已经被调入内存,因此只需要根据inode节点中保存的混合索引表,即可直接找到 B的最后一个逻辑块存放在哪儿,显然,应该是8号物理块。因此如果快进到歌曲的最后一句,背后会根据索引表的指示,调入8号物理块
这也就是为什么索引方式 支持随机访问。
Z文件是二级索引!!!
例3:open(“/C/F/Z”)
①查找根目录文件,查找C对应的目录项,文件C对应的目录项→7号inode)(7号inode索引的文件就是目录文件C)
②将7号inode读入内存(1次读磁盘),可知目录文件C在9号物理块,则将9号物理块读入(1次读磁盘:目录文件C的内容),查找到F对应的目录项→4号inode(4号inode索引的文件是目录文件F)
③读入4号inode(1次读磁盘),可知目录文件F在14号物理块,读入14号物理块(1次读磁盘:目录文件F的内容)。查找Z对应的表项→13号inode。(13号inode索引的文件就是Z)将13号inode读入内存(1次读磁盘),返回,此时open系统调用完成。
共需5次读磁盘。
由于Z的文件很多,所以需要用到二级索引才可以索引到这么多块。
所以想要访问Z的第6154块(“/C/F/Z”),要访问的物理块分别是9号(目录文件C)、14号(目录文件F)、24号块(一级索引块)、30号(二级索引块)、28号(文件Z第6154块)
注1:如果一个磁盘块用于存储索引表,则通常将其称为“索引块”,也占用磁盘空间;如果一个磁盘块用于存储文件的数据,则通常将其称为“数据块”
注2:每一张索引表需要刚好占满一个块(整块全部用来装索引/地址项)因此,若每个磁盘块(簇)大小为4KB,每个索引(地址)项4B,则一张索引表包含1024个索引(地址)项。
3.FAT文件系统(物理结构:显式链接)
3.1.FAT文件系统基本概念
开机之后,磁盘分区图如下所示
引导块:用于引导操作系统初始化的一段程序
FAT表(存在固定位置):本质就是静态链表
注:在这个FAT表示意图中,什么都没填表示盘块空闲,-1表示到达文件末尾
问题1:FAT表中,每个表项的大小对文件系统有什么影响?
回答1:
①对文件系统支持的最大磁盘块数有影响,如:每个FAT表项16bit,则最多只能表示2^16个块号(即最多有2^16个FAT表项);
②对FAT表的总大小有影响,FAT表的大小 = 每个表项的大小*表项的数量。
问题2:简述操作系统是如何使用FAT表的?
回答2:开机时,就会把整个FAT表读入内存,系统运行过程中,该表会一直常驻内存,也就是说,查FAT表不需要读磁盘,内存里本来就有这个表。系统运行过程中,如果要访问某个文件,则首先要找到这个文件对应的目录项,从目录项中找到文件的起始块号,再根据起始块号查FAT表,从而确认文件的后序那些块存放在哪里。
例如:假设每个簇4kB,一个文件大小12KB,占3个簇,分别是100→150→520。
则当想将该文件的第3块读入内存时,只需
①目录文件(访问1次目录文件)中查找到起始块100。
②在FAT表中从100开始查找(在FAT中查找,但是不访问对应的磁盘块),直到查到第三块块号520,然后访问520号块。
因此访问的簇号分别是:目录文件A所在簇号和520号簇
根目录(存在固定位置):
注1:目录项“.”表示当前目录,即根目录,起始块号为4
注2:目录项“..”表示上一级目录,由于根目录没有上一级目录,因此将目录项“..”指向其自身,起始块号为4
问题:为什么根目录要存放在磁盘的固定位置?
回答:因为开机的时候,需要从根目录出发,找到操作系统初始化相关的各种文件。因此,将根目录存放在固定位置,那么开机时候取这个固定位置读入根目录的数据即可。
3.2.FAT文件系统打开文件的过程(对应文件系统骚图来看!)
2.FAT文件系统下打开文件的过程:
①根据文件路径找到目录文件。
②根据目录文件中的找到对应的FCB(目录项),得到起始块号。
注:操作系统找到该文件后,将会给进程返回一个fd(文件描述符,相当于指向该文件的指针;作为对进程发出open系统调用的回应),进程接下来对该文件的操作可以转化为对该fd的操作(例如read(fd))
③根据起始块号在FAT文件分配表中通过逐块查找,找到任何一个逻辑块对应的物理块(需要逐块查找;但可以指定某个特定的块读入)
④修改页表,完善逻辑地址到物理地址的映射关系
总结:
①FCB(目录项)确定起始块的位置
②FAT文件分配表确定后续块的位置(可以得到同一文件任意块对应的物理块)。
例如,A需要3块:100→520→666。若已知A的起始块是100,想访问A的第二块,则直接查FAT表(存放在内存)可以直接得到第二块对应的物理块号520,而不需要读100号磁盘才知道。
例1:*fd = open(“/B”),read(fd);
①查找根目录文件,找到B对应的表项→得到了B的完整控制信息,起始块号是10。返回fd,Open调用完成。
②read:根据FAT表,找到10的后续块,则B的块分别是10→12→8
例2:进程通过open(“/A/Dm”)打开Dm文件。
①在根目录文件下查找名为A的目录文件→起始块号5号
注:我们在这里可以看到目录文件A占用3个块
②由FAT表可知,目录文件A的后续块,分别是5→6→7(假设Dm位于第7块)
操作系统依次将(磁盘中的)物理块5、6、7(因为目录表项比较长,所以占用了三块磁盘来存储),读入内存(分开读入,读入后立即查询;该块没有,则读入下一块;该块有,则不用读入下一块),然后逐一查找A的FCB中是否有同名的文件Dm;找到Dm后,就可以知道它的起始块号和所占用的块数
③找到Dm的FCB后,返回给进程fd,供其接下来使用,然后进程就可以使用READ系统调用读入Dm的两个块。Open系统调用完成
OPEN系统调用和READ系统调用期间一共发生5次读磁盘:
- 根目录已经在内存中,因此查询根目录不需要访存
- OPEN系统调用:Dm存放在目录A的FCB的第三个块中,因此,需要读入5、6、7块磁盘,磁盘读写以块为单位,故需要访存三次(不同策略下OPEN系统所需要的读磁盘次数不同:①一次性将目标目录的所有FCB全部读入 ②每读入一个物理块的FCB就查询,这个磁盘块上没有目标FCB才读入下一个物理块,这样能有效减少读磁盘操作)
- READ系统调用:将Dm的两个块读入内存,需要2次读磁盘
问题1:如何确定目录文件A需要占多少个块?
回答1:(目录项的数量*每个目录项的大小)/块大小
问题2:目录文件A必须占用连续的磁盘块吗?
回答2:不用!如果目录文件A继续变大,还需要新的磁盘块,那么通过查FAT表可以找到空闲磁盘块,将其分配给文件A使用即可。当然,本来文件A的最后一块是7号块,如果给A再分配一个新的块,就需要修改FAT表的7号表项,指向新分配的块。
问题3:如果现在从根目录开始查找,要将文件“/A/Dm”读入内存,描述背后发生了什么?
回答3:根目录常驻内存,首先查内存中的根目录,找到目录项A——根据目录项中记录的起始块号,读入A的第一块(5号块),尝试在5号块中找到Dm目录项;如果没找到,那么通过查内存中的FAT表,读入A的第二块(6号块),尝试在6号块中找到D目录项;如果还没找到,那么继续查FAT表,并读入A的第三块(7号块),尝试在7号块中找到Dm目录项——找到Dm的目录项,就可以确定Dm的起始块号为m,再结合FAT表,就可以知道m号块之后是k号块,k号块是文件Dm的最后一块。因此将m、k两个块读入内存即可。
例2:OPEN(“/C/F/G”),READ
①查找根目录下的目录文件C的起始块号 →起始 9号块
②由FAT表已知目录文件C已经没有后续块。将9号物理块读入内存,并查找文件F→起始14号块
③由FAT表可知,14号块没有后续块。将14号块读入内存,寻找文件G→起始块号。
依次读入G的后续块即可...
.
FAT表附加功能:标记空闲块,操作系统分配
可以在FAT中设置特殊值来标记磁盘块是否空闲,例如设置为-2表示空闲。
例子:给文件“/B”增加一块磁盘块
①操作系统从FAT从上往下找,寻找下一块块号为-2(即空闲)的块→11号物理块。
②找到之后,查找根目录的目录文件内容,查找到文件B的起始块号→10号物理块
③在FAT表中从10号物理块,一直往下查,找到文件B的最后一块为8号物理块。把8号物理块的下一块块号修改成“11”,再把11号物理块的下一块块号改成“-1”即可;
索引和FAT目录文件以及访问过程对比
需要排版美丽的 word或者高清pdf版本请私信