目录
文件系统简介
1. 文件系统类型
2. 文件系统结构
3. 文件系统的主要功能
4. 文件系统的使用
5. 文件系统的维护
6. 注意事项
简单举例
机械硬盘
物理结构介绍编辑
CHS寻址
逻辑结构介绍
LBA寻址法
文件系统与磁盘管理
Boot Block
Data block
inode block
Block Bitmap
Inode Bitmap
Group Descriptor Table(GDT)
超级块super block
总结
如何理解目录
以下是inode结构内部包含的文件信息
补充
文件系统简介
文件系统是计算机系统中用于存储和管理文件及目录(文件夹)的数据结构。它是操作系统的重要组成部分,负责在存储设备(如硬盘、固态硬盘、光盘等)上组织数据,并确保用户和应用程序能够有效地访问这些数据。
以下是对文件系统的一些基本概念的介绍,适合初学者理解:
1. 文件系统类型
- FAT (File Allocation Table): 早期文件系统,简单易用,但管理大容量存储不太高效。
- NTFS (New Technology File System): Windows系统常用的文件系统,支持更大的文件大小和更复杂的权限管理。
- EXT (Extended File System): Linux系统中使用的一系列文件系统,如EXT3、EXT4等,EXT4是目前最常用的一种。
- APFS (Apple File System): Apple为macOS、iOS等系统设计的文件系统,优化了闪存存储的性能。
- HFS+ (Hierarchical File System Plus): 早期macOS系统使用的文件系统。
2. 文件系统结构
- 根目录: 文件系统的起点,所有的文件和目录都直接或间接在根目录下。
- 目录(文件夹): 用于组织文件,可以包含文件和其他目录。
- 文件: 存储数据的基本单元,可以是文本、图片、程序等。
3. 文件系统的主要功能
- 存储管理: 管理磁盘空间,记录哪些空间被占用,哪些可用。
- 文件管理: 创建、删除、重命名、移动文件和目录。
- 权限管理: 控制用户和应用程序对文件和目录的访问权限。
- 元数据管理: 存储文件的创建时间、修改时间、大小、类型等元数据。
4. 文件系统的使用
- 格式化: 在使用存储设备之前,通常需要格式化来创建文件系统。
- 挂载: 将文件系统关联到操作系统的文件树中,使得文件可以被访问。
- 访问控制: 设置文件和目录的访问权限,保证数据安全。
5. 文件系统的维护
- 磁盘检查: 定期检查磁盘错误,防止数据丢失。
- 碎片整理: 对于使用FAT或NTFS等文件系统的磁盘,定期进行碎片整理可以提高性能。
- 备份: 定期备份文件系统中的重要数据,以防不测。
6. 注意事项
- 数据丢失: 不正确的操作可能导致数据丢失,因此在进行重要操作前应确保了解后果。
- 兼容性: 不同操作系统支持的文件系统可能不同,需要注意文件系统的兼容性问题。
了解文件系统对于计算机用户来说非常重要,它不仅关系到数据如何存储,还直接影响到系统的稳定性和性能。对于初学者来说,最重要的是理解文件系统的基本概念和如何安全地管理文件和文件夹。
简单举例
机械硬盘
在我们装载在笔记本的硬盘大部分都是固态硬盘ssd,但是在实际开发中,更多还是使用固态用品(便宜、容量大),作文文件的存储介质,有必要好好介绍一下固态硬盘
固态硬盘是计算机自带的唯一的机械设备,也是一个外设。
物理结构介绍
固态硬盘HDD最主要的就是磁头与磁盘,磁盘是用来存储数据的。
存储数据的最小操作单元是512byte(哪怕你只想用1bite,那也得把512字节全部加载到内存)
磁盘存储数据的区域是由一个个同心圆构成,这些相同半径的同心圆(即磁道)称之为柱面
磁盘被访问的基本单元是扇区---512byte
磁头左右摆动目的就是定位磁道或柱面。这就是定位扇区的过程。由于是机械设备,所以性能要比ssd要差。
CHS寻址
想要读取磁道的信息,需要经过几步定位:磁头定位(确定扇面)----磁道定位----扇区定位。
CHS即这三个要素的首字母。
逻辑结构介绍
物理上磁盘是圆的,但是磁盘我们在理解时(逻辑上) 可以像磁带一样去延展开,变成线性结构。
磁盘的逻辑线性结构
每一段都有无数个扇区
因此整个磁盘就可以被抽象成一个以扇区为基本单位的数组(集合)
由于数组的下标是唯一的,因此我们可以根据下标去反推在哪个扇面,哪个磁道,哪个扇区
每个柱面的磁道数目是一致的(只需要控制好密度即可)。但是现在的技术已经能做到扇区的长度一致了。
OS是可以控制硬盘的,但是如何管理硬盘?就是靠这样的线性结构!
LBA寻址法
对于OS而言,就可以进行这样抽象过的逻辑结构去管理磁盘
在OS中,对应的地址称为LBA地址(logic block address)逻辑地址。
文件系统与磁盘管理
磁盘是一个巨大的存储介质,假设一个磁盘800G,那么就需要分区管理
磁盘太大:磁盘分区
OS去管理磁盘的时候:先描述后组织。对于800G的硬盘只需要定义一个结构,内部包含起始与结束。定义一个数组包含5个元素即可。
当然。这200G(一个分区)还是太大,应该继续分层管理分成10G、5G(block group0, block group 1)等小区域
这个东西就叫做文件系统。
Boot Block
Boot Block(引导块)是存储设备上的一部分,通常位于设备的起始位置,它的主要作用是在计算机启动过程中加载操作系统。
- Boot Block通常包含引导加载程序(Boot Loader),这是计算机启动时运行的第一个软件。
- 引导加载程序负责初始化硬件、检查系统配置,并将控制权传递给操作系统的内核。
- 在启动过程中,引导块会检测可用的启动介质,如硬盘、光盘、USB驱动器等。
- Boot Block可能会包含启动配置数据,如启动菜单、默认启动设备选择等。
Boot Block是确保计算机能够成功启动的关键部分,如果Boot Block损坏或配置错误,可能会导致系统无法启动。
Data block
存放文件内容的区域,以块的形式呈现,最常见的大小4KB----文件系统的块大小
inode block
存放某个文件的属性信息。一个文件对应一个inode。
在linux中,文件的属性与数据是分开存放的。
-li的i就是inode码的意思
OS不关心名称,只关心文件编号。linux标识文件用的是inode码。
如何将属性和数据块联系起来呢
每个数据块都在data blocks中有自己的编号,这个blocks数组就记录了数据块(单位4KB)的编号。可以去查找内容
索引的指示着在data block的那一块区域
索引分级,分为一级到多级索引(存在多级映射)
0-11块为一级索引存放文件内容的存储位置
12-13为二级索引。通过二级索引在data blocks中找到的存储块存在着一级索引。
Block Bitmap
采用位图的结构用来揭示,哪些data blocks的单元被使用,哪些没有被使用。
所以删除文件时,只需要位图制成0并取消索引即可,不需要去释放块空间。对属性和内容没有任何关系。这就是为什么下载慢删除快的原因。
Inode Bitmap
inode位图用来管理inode结构有没有被合法使用(伪删除)
Group Descriptor Table(GDT)
组描述符表,描述的是整个分组的使用情况、使用信息。
超级块super block
保存整个文件系统的基本信息,不会在每个分组都存在。
格式化:
每一个分区使用之前,都必须提前将文件系统的某些属性信息提前设置到对应的分区中,方便我们后续使用分区。
总结
如何理解目录
inode表示文件的所有属性,文件名不属于inode内的属性。
那我们怎么将文件名与inode关联起来呢?
文件 = 内容+属性
对于一个目录而言,也存在自己的内容。文件的内容就是内部文件的inode与内部文件名的映射。
因此,在一个目录内部无法使用相同的文件名:防止出现映射错误
没有w就意味着的无法将文件名与inode的对应信息进行关系的映射。
目录可以将文件名与inode编号进行映射,那么目录的inode如何确定呢?
根目录/名称与inode是确定的,可以确定根目录在哪里,通过路径就能找到对应的目录
以下是inode结构内部包含的文件信息
文件类型:例如可执行文件、块特殊文件等。
权限:如读、写权限等。
所有者:文件的所有者。
组:文件所属的组。
文件大小:文件的大小。
文件访问、更改和修改时间:Linux/Unix系统不存储文件创建时间,但会记录文件的访问、更改和修改时间。
文件删除时间:文件被删除的时间。
链接数:文件的软链接和硬链接数量。
扩展属性:例如“仅追加”属性,或者“无人可删除文件”属性,包括root用户也不能删除(不可变属性)。
访问控制列表(ACLs):控制文件访问的列表
补充
OS如何管理内存
内存与磁盘的数据交互的固定单位4kb的原因
1.提高硬件IO效率
减少IO次数,减少磁盘等待,空间换时间---硬件
2.提高软件执行效率
根据局部性原则,存在预加载机制,提升软件运行的效率。
OS管理内存时,先描述,后组织,只需要将内存单元处理成一个数组即可
struct page mem_array[10000]
其中struct page内部存在着内存page页的必要属性信息。
我们要访问一个内存时,先找到这个4kb对应的page,就能在OS找到对应的页框,去找到合适的物理内存。
其实所有申请内存的动作,都是在访问内存page数组。
补充2:linux中,我们在进程中打开的每一个文件,都有自己独立的文件页缓冲区和inode属性
数据写入到磁盘:三次拷贝。C缓冲区、文件缓冲区、磁盘,每次写入都要一次拷贝。