(2025)408考研:王道操作系统文件管理强化

写在最前面,需要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文件系统打开文件的过程(对应文件系统骚图来看!)

当前工作目录在根目录下。开机时,根目录文件的内容通常会被加载到内存,并常驻内存。(即顶级索引表结点已经在内存中)

  1. 根据目录文件的内容查找到各个文件(目录也是文件)对应inode编号(inode索引各个文件)

注:如果是目录文件,则inode索引的文件记录的又是该目录下各个文件的inode。如果是普通文件,则inode索引的文件就是文件数据。

  1. 通过目录文件又可以得到下一级文件的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

  1. 读入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的后续块,分别是567(假设Dm位于第7块)

操作系统依次将(磁盘中的)物理块5、6、7(因为目录表项比较长,所以占用了三块磁盘来存储),读入内存(分开读入,读入后立即查询;该块没有,则读入下一块;该块有,则不用读入下一块),然后逐一查找A的FCB中是否有同名的文件Dm;找到Dm后,就可以知道它的起始块号和所占用的块数

找到Dm的FCB后,返回给进程fd,供其接下来使用,然后进程就可以使用READ系统调用读入Dm的两个块Open系统调用完成

OPEN系统调用和READ系统调用期间一共发生5次读磁盘

  1. 根目录已经在内存中,因此查询根目录不需要访存
  2. OPEN系统调用:Dm存放在目录A的FCB的第三个块中,因此,需要读入5、6、7块磁盘,磁盘读写以块为单位,故需要访存三次(不同策略下OPEN系统所需要的读磁盘次数不同:①一次性将目标目录的所有FCB全部读入     ②每读入一个物理块的FCB就查询,这个磁盘块上没有目标FCB才读入下一个物理块,这样能有效减少读磁盘操作)
  3. 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版本请私信

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值