文件系统永远在外存中,存储大量数据。
文件能够原地改写,即能够读出一块,并修改,再写回。
外存和内存的传输的最小单位为block。
磁盘是随机存储器。
文件系统设计也是分层设计思想。从最底层开始讲起。
(1)I/O控制层,包括设备驱动程序(翻译高层命令控制硬件控制器)+中断处理程序。
(2)基本文件系统:发送高层命令给设备驱动程序用以对磁盘进行读写。
(3)文件组织模块:从逻辑块-->物理块,给基本文件系统使用。
(4)逻辑文件系统:管理元数据。元数据就是一些文件属性+文件名。
分层设计在计算机网络里也有提到,TCP/IP协议等。好处当然是能够清晰的划分各自的功能。
linux文件系统:ext3,4.
windows文件系统:FAT,NTFS.
一个文件系统包括:
(1)引导控制块(boot control block)是一个卷的第一块,如果该卷没有操作系统,则为空。
(2)卷控制块:卷的详细信息包括有多少块可以用、块大小等。
(3)目录:文件名+FCB(inode 索引节点)。
FCB在另一篇博客中已经讲到,包括一些文件的属性但是不包括文件名。
FCB==inode==Master File Table
内存中有一些信息是在文件系统被mount的时候加载进去的,比如目录,整个系统的打开文件表、单个进程的打开文件表。
文件系统被mount时可能就已经把所有FCB都分配好了,存在pool中。
UNIX中目录和文件是一起处理的,windows中目录和文件有不同的系统调用。
比如open一个新的文件,则创建一个FCB,在单个进程打开文件表,系统打开文件表等中适当加入记录,并返回一个句柄。
UNIX中称为文件描述符,windows中称为文件句柄。
一个磁盘能有多个分区,如果一个分区没有文件系统,则称为生的。
引导区如果有多个操作系统和多个文件系统,则通过启动加载器能够定位一个操作系统。
根分区包括操作系统和系统文件,在引导时导入内存。
当装入文件系统时,可以自动或手动装入。当装入文件系统时,操作系统需要判定是否有效,如果有效,则在装入表中填入文件系统的类型。
为了在不同文件系统中无缝移动,引入了VFS。
(1)VFS把文件系统的接口和具体实现分开。
(2)在NFS中,也要有一个唯一标识远程文件的标识符,因此vnode类似inode,保存远程文件属性。
因此通过vnode还是inode能区分本地和远程文件,再是通过特定文件类型来区分文件,因此我们可以正确的调用特定的操作。
VFS定义的4个主要对象类型:
(1)inode object。单独的文件。
(2)file object。打开的文件。
(3)superblock object。整个文件系统。
(4)dentry object。单独的目录条目。
对于每个对象类型都有一系列的操作。
目录实现有很多种,
(1)线性列表。
存储文件名和指向FCB的线性链表。
可以使用软件缓存来存储最近使用过的目录。
(2)哈希表。
给定一个文件名,通过哈希函数,快速找到指定目录。
缺点:哈希函数及哈希值都是预先给定,不能灵活变换。
解决方案:动态哈希即可扩展哈希、线性哈希等。或者使用溢出桶。
文件分配空间方法:
一、连续分配。
每个文件都是连续分配。分配时遵循首次适应方法。
目录是由(文件名,开始位置,长度)组成。
优点:直接访问。
缺点:
(1)外部碎片。
(2)确定文件大小。
解决方法:
(1)对于外部碎片,重新打包即把所有文件系统都复制到磁带上,清空整个磁盘,并重新分配连续空间。
(2)对于无法确定文件大小,则重新分配孔,但是费时;或者使用扩展连续空间。那么目录就是(文件名,开始位置,块数,第二个开始位置)组成。
二、链接分配。
目录为(文件名,文件起始指针,文件结尾指针)组成。
文件由链表组成。
优点:分配时只要有空闲块即可。没有外部碎片。
缺点:
(1)顺序访问而不能随机访问。
(2)指针需要空间。
(3)内部碎片。
(4)可靠性问题。因为由指针链接,只要有一个指针丢失,则文件就崩溃。
解决方法:
对于指针占用空间问题,需要利用更少的指针,则引入了cluster(簇),即一个簇由多个块组成。但是会加剧内部碎片问题。
对于可靠性,我们可以用FAT(文件分配表),目录为(文件名,开始块)组成。先在FAT找到指定块,再指向块的具体位置。
采用FAT会导致磁头寻道时间过长。
三、索引分配。
把所有索引放在一起,可以支持直接访问。
但是索引可能会在一个块不够存放,因此有了几种方法:
(1)链接方案:通过将索引块链接起来。
(2)多层索引。
(3)组合方案。例如Unix中的inode,在inode中有15个指针存在文件中,头12个指针为直接块。其他三个为间接索引块。第一个为一级间接块。依次类推,第三个为三级间接块。
如果文件不大,则可以直接访问。
对于空闲空间,我们也需要维护一个空闲空间链表。下面介绍几种方法实现。
(1)位向量。
通过已分配的块记为0,未分配的块记为1,则只需要简单的位运算就能得出第一个空闲块或者连续空闲块大小等结论。
缺点:所占空间太大。
(2)链表。
空闲空间通过链表连起来,第一个空闲块的地址缓存在内存中。
缺点:效率不高。
(3)组。
将n个空闲块的地址存在第一个空闲块中。
(4)计数。
空闲空间表中每个条目记录(起始,长度)的记录。
分享到:
相关推荐
在操作系统实验报告“文件管理”部分,我们关注的是如何为Unix/Linux系统设计一个简单的二级文件系统。这个实验旨在让学生深入理解文件系统的内部运作机制及其功能实现。以下是该实验涉及的关键知识点: 1. 文件...
本实验是在操作系统课程背景下进行的设计性实验,目的是为了加深学生对于文件系统内部功能及其实现的理解。通过模拟一个简单的文件系统并实现基本的文件管理操作,帮助学习者掌握文件系统的工作原理。 #### 实验...
操作系统实验:文件系统的模拟 在计算机科学中,操作系统(OS)是管理计算机硬件与软件资源的核心软件,其中文件系统是其重要组成部分。本实验旨在通过编程实现一个简单的文件系统模拟,帮助学生深入理解文件系统的...
操作系统课程设计的目标是让学生深入理解和掌握操作系统的基本原理与实现方法,尤其关注文件系统的运作。在这个设计中,学生被要求模拟构建一个针对Linux系统的二级文件系统,以实现一系列基本的文件操作,包括用户...
在《操作系统》课程设计中,项目的目标是为Linux操作系统设计并实现一个简易的二级文件系统。该文件系统将采用Java语言进行开发,并且包含用户界面,以便用户能够进行直观的操作。 #### 二、核心功能模块详解 该...
操作系统是计算机科学中的核心课程,它管理并控制计算机硬件资源,为...操作系统总结_引论.jpg和操作系统总结_引论.xmind文件可能包含了更详细的操作系统概念图和思维导图,可以辅助学习者进一步掌握和巩固这些知识。
在这个模拟文件系统的设计中,主要目标是实现一个类似于真实操作系统中的文件管理系统,允许用户进行一系列文件操作,并确保系统安全性和稳定性。 首先,系统提供了用户注册和登录功能,这是任何具有用户交互性的...
使用文件来模拟外存,进行数据结构设计和操作算法的设计,实现一个文件系统并实现基本的文件操作(为了简便文件系统,不考虑文件共享,文件系统安全以及管道文件与设备文件等特殊内容)。要求: 1、对程序的每一部分...
根据给定的文件信息,我们可以总结出以下关于操作系统文件管理的知识点: ### 一、操作系统文件管理系统概述 在操作系统中,文件管理系统是负责管理和组织计算机文件的重要组成部分。它提供了用户与存储设备之间的...
本实验报告将详细讨论在操作系统环境下设计并实现文件复制的过程,涵盖的知识点包括文件系统、进程管理、内存管理以及I/O操作。 首先,文件复制是操作系统中最基本的功能之一。在实验中,我们需要理解文件在操作...
操作系统是计算机科学的基础课程之一,它管理着计算机的硬件资源,并为用户提供服务。在这个课程设计中,我们将聚焦于两个核心主题:多线程的实现和内存模拟文件系统。这两个概念在现代操作系统中扮演着至关重要的...
操作系统课程设计的目标是通过模拟文件系统的实现,深入理解操作系统中文件系统的理论知识,掌握操作系统结构、实现机理和各种典型算法,并了解操作系统的发展动向和趋势。通过本设计,学生将掌握操作系统的原理及...
### 杭电简单文件系统的实现报告 ...此外,通过实现多级目录结构和一系列文件操作命令,学生还将学习到文件系统的基本操作流程和技术实现细节,这对于理解现代操作系统中的文件管理系统具有重要意义。
操作系统中的多级文件...总结来说,多级文件系统是操作系统中不可或缺的一部分,它提供了一种有效管理和组织大量文件的方法。通过课程设计,学生可以亲身体验和理解这一关键概念,从而更好地掌握操作系统的工作原理。
### 四川大学操作系统复习资料总结 #### 操作系统概览与重要概念 在操作系统学习过程中,理解操作系统的基本原理及核心功能是至关重要的。操作系统作为计算机硬件与用户之间的桥梁,其设计目标主要包括方便性、...
操作系统课设通常旨在让学生深入理解操作系统的核心概念,尤其是与存储管理相关的部分,如磁盘文件系统。...通过模拟磁盘文件系统,你可以更好地领悟到操作系统在管理硬件资源时的复杂性和巧妙之处。
操作系统课程设计报告的主题是建立基于磁盘存储设备的FAT(File Allocation Table)文件系统,这一任务对于物联网专业的学生来说,旨在深入理解和实践文件系统的核心概念。文件系统是操作系统的重要组成部分,它负责...
在Linux环境下,C语言编程经常被用于实现对文件系统的交互,因为C语言提供了丰富的系统调用接口,可以直接访问操作系统内核服务。 **设计目的与任务** 设计一个Linux下的文件操作程序的主要目的是让开发者更深入地...
1. 熟悉 WindowsXP 的文件系统。 2. 掌握资源管理器的使用方法。 3. 熟练掌握在 WindowsXP 资源管理器下,对文件(夹)的选择、新建、移动、复制、删除、重命名的操作方法。 实验内容: 1. 启动资源管理器并利用...
从给定的代码片段和描述来看,这是一段模拟文件系统设计的C语言代码,主要涉及到了文件系统的基本结构和一些关键的操作。下面将详细解析这段代码...对于深入学习操作系统和文件系统的设计与实现,这是一个很好的起点。