408王道操作系统强化——文件管理及大题解构(上)

简介: 408王道操作系统强化——文件管理及大题解构

1.基本概念

1.文件目录 = 目录文件

2.文件的逻辑结构有①无结构文件(由记录组成) ②有结构文件

337c80de3b404212a93c806438b64f39.png3.MP3文件格式:

①Mp3Frame(Mp3帧)是文件记录(相当于一个Struct结构体):Mp3Fream由Mp3Header(头信息)和Mp3Data(数据信息)组成,即Mp3文件是记录式文件,即Mp3属于有结构文件

②Mp3Header大小固定,而Mp3Data不一定

③使用Mp3文件时,用户提供的是逻辑地址,操作系统根据MpHeader中的各种信息将逻辑地址转换为物理地址

3.DOS采用FAT文件分配表(显示链接);UFS采用混合索引

2.FAT文件系统

2.1.FAT文件系统的基本概念aaa18776d45c465599369a7c237abbf2.png

1.目录文件:即我们打开文件时所看到的各文件夹

2.每个文件系统都有可能作为系统的启动盘,因此,每个文件系统的第一个块为启动块存放自举程序(ROM引导程序,作用是完成一系列开机的动作;区别于BIOS:BIOS存放在ROM中,自举程序是BIOS的最重要的组成部分)0f41538852214755ae4656ca09472d71.png

3.FAT采用显示链接的文件物理结构,即FAT文件分配表(类似操作系统中的静态链表):说明第1 - n块分别在磁盘的什么地方

(隐式链接(类似链表):每个文件FCB中只记录文件的起始块号和结束块号;只支持从起始块号开始的顺序访问;使用指针表示块之间的关系)

4.FAT文件分配表采用连续存放的方式:FAT文件系统中会使用在引导块后的若干连续块存放FAT文件分配表(开机时操作系统将FAT文件表读入内存中,即查询和访问FAT文件分配表无需进行度磁盘操作

5.根目录存放在FAT表之后的固定位置:操作系统在完成一系列开机操作时以根目录为起点逐层往下寻找相应文件并执行(开机时操作系统将根目录读入内存中,并且常驻内存,即查询和访问根目录无需进行度磁盘操作6b03d6d14561403aadf56931cd0234ba.png

6.①一行即为一个目录项(FCB)

FAT文件分配表的每个目录项大小(位数)决定FAT文件系统的总块数:每个FAT表项16bit,则最多只能表示2^16个 块号

FAT文件分配表的每个目录项大小(位数)决定FAT文件分配表的总大小:每个表项的大小*表项的数量 = FAT表的大小,即FAT文件分配表的总大小 = 2 ^ 16 * 16 bit

7.文件类型即文件格式

2.2.FAT文件系统打开文件的过程(OPEN系统调用)

1.①进程使用open系统调用打开某个文件时需指明该文件的存储路径(例如:/x/y/z.exe)

②因此,打开某个文件时,先需要找到该文件的目录项(FCB,该文件的FCB中记录了该文件的存储路径)

③该文件存储在哪个目录下,则该文件的目录项(FCB)就存放在这级目录中(通过对比这级目录中是否有与该文件名相同的文件的方式)

④该文件FCB上记录了该文件的起始块号,通过该起始块号操作系统就可以在FAT表中查到存储该文件所使用的每一个块的块号和存储位置从起始块号出发,逐块查找,直到最后一个块

操作系统找到该文件后,将会给进程返回一个fd文件描述符相当于指向该文件的指针;作为对进程发出open系统调用的回应)

⑥进程接下来对该文件的操作可以转化为对该fd的操作(例如read(fd))

用户可以指定读取具体哪个块,即用户不需要每次都从头开始读;同样的,操作系统也可以只将用户指定的具体该进程的第几个块读入内存,读入内存后,操作系统还要建立起该文件虚拟地址到物理地址转换的映射关系,即修改页表

2.FAT文件系统下打开文件的过程

①根据文件路径找到文件的FCB

②根据文件FCB中的找到该文件的起始块号

③根据起始块号在FAT文件分配表中通过逐块查找,找到任何一个逻辑块对应的物理块(需要逐块查找;但可以指定某个特定的块读入)

③修改页表,完善逻辑地址到物理地址的映射关系

3.例:进程通过OPEN(/A/Dm)打开Dm文件

即打开存放在目录A下的文件Dm;目录A的n个FCB共占用三个物理块,并且占用的三个物理块号为5、6、7,设Dm的FCB在第七个物理块

①在根目录下查找名为A的目录文件,即在内存中存放根目录的页框查找(任何文件的存储路径都可以从根目录出发找到,而操作系统开机时已经将根目录入读内存,且常驻内存)1d1a5d9acd8f4336b165ef4ff2a5d76b.png

步骤①中只能找到目录A的起始块号;并且目录A由n个FCB(所有存放在目录A下的文件/目录文件)组成,这些FCB的总大小为3个物理块(即这n个FCB被存放在这3个物理块中),故需要查找FAT文件表就需要将目录A的目录项读入内存(可以每读入一个块就进行查询,该块没有目标文件的FCB则继续读入下一个块;该块有目标文件的FCB,则不必继续读入剩余块088507dad3e34e98bed3fca2281caf1c.png479ad1bcef174e279c44147ad3a62845.png

③操作系统依次将(磁盘中的)物理块5、6、7读入内存(分开读入,读入后立即查询;该块没有,则读入下一块;该块有,则不用读入下一块),然后逐一查找A的FCB中是否有同名的文件Dm;找到Dm后,就可以知道它的起始块号和所占用的块数ceb862a06f7540a5821df878df946eba.png

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

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

①根目录已经在内存中,因此查询根目录不需要访存

②OPEN系统调用:Dm存放在目录A的FCB的第三个块中,因此,需要读入5、6、7块磁盘,磁盘读写以块为单位故需要访存三次(不同策略下OPEN系统所需要的读磁盘次数不同:①一次性将目标目录的所有FCB全部读入        ②每读入一个物理块的FCB就查询,这个磁盘块上没有目标FCB才读入下一个物理块,这样能有效减少读磁盘操作)

③READ系统调用:将Dm的两个块读入内存,需要2次读磁盘

4.FCB确定起始块的位置,FAT文件分配表确定后续块的位置

5.例:OPEN(/C/F/G),READ

①查找根目录下的目录文件C的起始块号 → 9c2bc9bc9d6a2443690055ea5a9e4bd28.png②将9号块入读内存,查找目录文件F的起始块号 → 14

3916c1fec55347079975d9827402b3e6.png③将14号块读入内存,查找文件G的起始块号 → G的文件大小和起始块号

34661da4999c4d818b8d2788d5c464d8.png

④根据FAT文件分配表、G的文件大小和起始块号 → G的每一个块

相关文章
|
2天前
|
存储 算法 安全
|
2天前
|
缓存 算法 Linux
[操作系统] 文件管理
[操作系统] 文件管理
|
5月前
|
存储 数据库 数据安全/隐私保护
【王道考研操作系统】—文件的基本操作
【王道考研操作系统】—文件的基本操作
|
7月前
|
存储 算法 固态存储
操作系统之文件管理
文件管理初识 文件的属性 文件内部的数据如何组织起来? 文件之间应该如何组织起来? 操作系统应该向上提供哪些功能? 从上往下看,文件应该如何存放在外存? 其他需要由操作系统实现的文件管理功能 最后总结一下: 文件的逻辑结构 、 这里说一下随机访问和顺序访问: 随机访问(Random Access)是计算机存储介质的一种访问方式。它指的是存储介质可以以任意的、不连续的方式访问存储的每个地址。也就是说,随机访问允许直接访问存储介质的任意位置,不需要从开头逐个访问到需要的地址。 与随机访问相对的是顺序访问(Sequential Access),它要求从存
45 0
|
9月前
|
存储 安全 Unix
第七章 文件管理【操作系统】2
第七章 文件管理【操作系统】2
140 1
|
9月前
|
存储 Unix 文件存储
第七章 文件管理【操作系统】1
第七章 文件管理【操作系统】1
117 0
|
9月前
临界资源和共享资源——王道考研操作系统
临界资源和共享资源——王道考研操作系统
157 0
|
9月前
|
算法 Java
操作系统 课程设计 -- 模拟简易的文件管理
操作系统 课程设计 -- 模拟简易的文件管理
105 0
|
10月前
|
算法 调度
02323操作系统大题题型总结
02323操作系统大题题型总结
|
2天前
|
存储 Linux C语言
Linux:冯·诺依曼结构 & OS管理机制
Linux:冯·诺依曼结构 & OS管理机制
10 0