网站栏目建设方案,电子商务他们的代表网站,快递公司网站怎么做,移动应用开发公司网站模板目录
一.文件系统的层次结构
1.用户接口#xff1a;
2.文件目录系统#xff1a;
3.存取控制模块#xff1a;
4.逻辑文件系统与文件信息缓冲区#xff1a;
5.物理文件系统#xff1a;
二.文件系统的全局结构
1.文件系统在外存中的结构
#xff08;1#xff09;物…目录
一.文件系统的层次结构
1.用户接口
2.文件目录系统
3.存取控制模块
4.逻辑文件系统与文件信息缓冲区
5.物理文件系统
二.文件系统的全局结构
1.文件系统在外存中的结构
1物理格式化
2逻辑格式化
2.文件系统在内存中的结构
1用户区
•文件描述符
2内核区
•目录的缓存
•系统打开文件表
•进程(用户)打开文件表
三.虚拟文件系统
四.文件系统挂载 一.文件系统的层次结构
用户系统的层次结构如下图所示下面一 一介绍 1.用户接口
文件系统需要向上层的用户提供一些简单易用的功能接口。这层就是用于处理用户发出的系统调用请求(Read、Write、Open、Close 等系统调用)。 2.文件目录系统
用户是通过文件路径来访问文件的因此这一层需妄根据用户给出的文件路径找到相应的FCB或索引结点。所有和目录、目录项相关的管理工作都在本层完成如:管理活跃的文件目录表、管理打开文件表等。 3.存取控制模块
为了保证文件数据的安全还需要验证用户是否有访问权限。这一层主要完成了文件保护相关功能。 4.逻辑文件系统与文件信息缓冲区
用户指明想要访问文件记录号这一层需要将记录号转换为对应的逻辑地址。如果采用索引文件的逻辑结构那么会为文件的各个记录建立一个索引表那么为了查询这些记录对应的逻辑地址就需要查询文件的索引表在查询文件的索引表之前就需要将索引表放到文件信息缓冲区中。 5.物理文件系统
这一层需要把上一层提供的文件逻辑地址转换为实际的物理地址。物理文件系统又分为辅助分配模块和设备管理模块
辅助分配模块负责文件存储空间的管理即负责分配和回收存储空间。
设备管理模块直接与硬件交互负责和硬件直接相关的一些管理工作。如:分配设备、分配设备缓冲区、磁盘调度、启动设备、释放设备等。
用一个例子来辅助记忆文件系统的层次结构 假设某用户请求删除文件“D:/工作目录/学生信息.xlsx的最后100条记录 1.用户需要通过操作系统提供的接口发出上述请求----用户接口 2.由于用户提供的是文件的存放路径因此需要操作系统一层一层地查找目录找到对应的目录项----文件目录系统 3.不同的用户对文件有不同的操作权限因此为了保证安全需要检查用户是否有访问权限----存取控制模块(存取控制验证层) 4.验证了用户的访问权限之后需要把用户提供的“记录号”转变为对应的逻辑地址----逻辑文件系统与文件信息缓冲区 5.知道了目标记录对应的逻辑地址后还需要转换成实际的物理地址---物理文件系统 6.要删除这条记录必定要对磁盘设备发出请求----设备管理程序模块 7.删除这些记录后会有一些盘块空闲因此要将这些空闲盘块回收----辅助分配模块 二.文件系统的全局结构
1.文件系统在外存中的结构
1物理格式化
物理格式化即低级格式化----划分扇区检测坏扇区并用备用扇区替换坏扇区。坏扇区对操作系统是透明的操作系统不知道坏扇区的存在。 2逻辑格式化
逻辑格式化后磁盘分区(分卷Volume)完成各分区的文件系统初始化注:逻辑格式化后灰色部分就有实际数据了白色部分还没有数据。
每个磁盘的大小范围都由分区表记录每个分区可以建立独立的文件系统例如下图中C盘中建立了UNIX文件系统 引导块负责开机时初始化操作系统。 超级块负责快速找到若干个空闲磁盘块。 空闲空间管理如位示图判断某一磁盘块是否空闲。 i结点区i表示索引结点每个文件都有一个与之对应的索引结点每个索引结点都放在i结点区这个区域就是超大的数组数组的每一个元素都代表一个索引结点。 由于索引结点在这片区域连续存放并且每一个索引结点大小都相同所以我们可以通过索引结点的下标找到特定的索引结点。 根目录完成逻辑格式化后根目录会被建立以根目录出发在其下建立新文件。 2.文件系统在内存中的结构
1用户区
•文件描述符
通过文件描述符用户可以对文件进行相应操作。
2内核区
•目录的缓存
最近访问的目录的数据会被暂时缓存在内存中例如最近查找了下图中的目录M那么就需要将目录M读入主存接下来如果又想访问目录M就不需要从外存读入直接在目录缓存寻找那么就能加快目录检索速度。
•系统打开文件表
整个系统只有一张记录了整个系统存放的所有文件。
•进程(用户)打开文件表
每个进程都有一个打开文件表这个打开文件表被保存在每个进程的PCB中。记录了每个进程当前打开了哪些文件。 我们来看一下当用户想要对某文件进行相应操作内存和外存如何配合工作 例如我们现在想要打开目录M中的文件A ① open(..../M/A,只读)根据路径一级一级读入目录 ② 找到目标文件的FCB复制到系统打开文件表同时将其“打开计数”设为1 ③ 在进程打开文件表中新建一个条目记录打开方式并不会记录A文件的FCB只会通过索引指向系统打开文件表对应的条目进而得到FCB ④ 接下来返回文件描述符通过这一文件描述符就可以对文件A进行打开操作 如果想要对文件A进行读操作系统调用就只需要传入文件描述符fd同时指明要读多少字节读的范围read(fd,xxx,xxx)接着找到对应的进程打开文件表根据索引信息找到系统打开文件表通过系统打开文件表找到文件A对应的FCB操作系统就可以确定文件A在外存中的存放位置。如下图所示 三.虚拟文件系统
不同的外存对应的文件系统类型可能不同在不同的文件系统中开发者定义的同一操作的函数接口可能并不相同对于普通文件系统而言若用户想要从文件系统打开某一文件那么需要根据文件系统不同调用不同函数接口操作困难。所以引入一个统一的函数接口很有必要这就引入了虚拟文件系统。 虚拟文件系统
① 向上层用户进程提供统一标准的系统调用接口屏蔽底层具体文件系统的实现差异。用户进程在打开文件时只需要根据虚拟文件系统指定的标准调用函数接口即可。 那么虚拟文件系统如何调用不同文件系统中的文件呢
② VFS要求下层的文件系统必须实现某些规定的函数功能如open/read/write。一个新的文件系统想要在某操作系统上被使用就必须满足该操作系统VFS的要求。如果不满足VFS的要求那么操作系统就不支持这一文件系统。 ③每打开一个文件VFS就在主存中新建一个vnode用统一的数据结构表示文件无论该文件存储在哪个文件系统。 不同文件系统的目录项格式是不一样的即不同的文件系统表示文件数据结构各不相同。打开文件后其在内存中的表示就不同。 例如VFS访问来自UFS文件系统的文件与FAT文件系统的文件时读入的文件信息不同这样虚拟文件系统在内存中就必须使用不同的数据结构来表示来自不同文件系统的文件。所以在虚拟文件系统中使用open打开文件系统调用后虚拟文件系统就会给这个文件在主存中新建vnodev结点这个v结点中包含文件的各种信息这样虚拟文件系统就可以用v结点数据结构表示任何一个文件系统的文件。 注vnode只存在于主存中而inode既会被调入主存也会在外存中存储。
例如如果将要访问的文件在UFS文件系统中找到文件的目录项后会把文件的inode从外存调入内存inode信息会被复制到内存的vnode中。
vnode中有一数据结构信息----函数功能指针
函数功能指针用于指向不同文件系统中的函数功能列表再执行具体函数 这样就能实现从上至下一层层的调用。
打开文件后创建vnode并将文件信息复制到vnode中vnode的功能指针指向具体文件系统的函数功能。 四.文件系统挂载
文件系统挂载(mounting)即文件系统安装/装载----如何将一个文件系统挂载到操作系统中? 文件系统挂载要做的事 ① 在VFS中注册新挂载的文件系统。内存中的挂载表(mount table) 包含每个文件系统的相关信息包括文件系统类型、容量大小等。 ②新挂载的文件系统要向VFS提供一个函数地址列表 ③将新文件系统加到挂载点(mount point)也就是将新文件系统挂载在某个父目录下。例如 •在windows文件系统中若插入一个移动硬盘那么就会出现一个与C,D盘同级的目录例如下图U盘E: •而在linux文件系统中则会在系统根目录下建立一个Volumes文件夹在这目录下存放新挂载的文件系统这就是挂载点。 只有确定了新文件系统挂载的位置才可以访问新的文件系统。