前言文件系统是Linux系统的核心。在Linux系统中,一切皆文件。对于开发者来说,在编程过程中通常会用到文件IO。在open函数中打开文件,而read函数读取文件的过程底层原理是什么?本文件系统系列文章主要试图对这部分内容进行深入的讲解。文件最终存储在磁盘上,文件访问最终也是对磁盘的读写。因此,在本文中,我将主要介绍磁盘的一些基础知识。硬盘的物理结构硬盘的结构简述:每个盘片有两个面,两面都可以存储数据。每个盘片都有一个用于访问数据的磁头。所有的头都是固定的,并且物理上一起移动。但是一次只有一个磁头执行访问数据的任务,使用哪个磁头的选择由系统控制。磁头之间的切换非常快,而磁头摆动寻道相对较慢。磁头摆动寻找要读取数据的磁道;盘片旋转以在磁头下“发送”数据。磁头数、磁道数、柱面数、扇区数磁头数:每个磁盘都有一个磁头,所以磁头数=面数。轨道:盘心为圆心,半径不同的同心圆称为轨道。磁道不是肉眼可见的“坑”,而是磁盘上的磁化区域。磁道之间有一定的间隙,以避免磁道之间磁介质的相互影响。扇区:每条磁道分为若干弧段(扇区),每个扇区可存储512字节的数据。扇区是磁盘驱动器读取和写入数据到磁盘的最小单位。Cylinder:由不同盘片上具有相同半径的磁道组成的“圆柱体”。CHS号硬盘的所谓CHS,即Cylinder(柱面)、Head(磁头)、Sector(扇区)。每个柱面、磁头和扇区都有自己的编号。磁道编号规则磁头号:从上到下分别为磁头0、磁头1……柱面号:最外层的柱面号为0,依次递增1、2、3。....SectorNumberingRules每个磁道可以分为若干个扇区,假设有18个扇区,编号为1,...18。这里1...18在一个磁道中是唯一的,但不同的磁道之间会重复轨道。因此,要确定一个扇区在硬盘(多个盘片)中的具体位置,需要结合柱面号/磁头号/扇区号来确定——绝对扇区号,或者整个硬盘的所有扇区分配一个唯一的number-DOS扇区号(也称为相对扇区号或逻辑扇区号)。绝对扇区:由柱面号/磁头号/扇区号唯一确定。DOS(DiskOperatingSystem)扇区(逻辑扇区):磁盘操作系统为了方便管理,会将由柱面号/磁头号/扇区号决定的扇区号转换成一个便于管理和计算的单一编号,称为相对扇区号或逻辑扇区号。DOS扇区号从0柱面/0磁头/1扇区开始,编号为0,依次递增,即0柱面/0磁头/18扇区的DOS扇区号为18;cylinder0/head1/扇区1的DOS扇区号为19....每个分区的第一个扇区的逻辑扇区号为0。硬盘容量由CHS计算硬盘存储容量=磁头数×磁头数柱面数×每磁道扇区数×每个扇区字节数磁盘存储将第一个扇区存储的数据划分硬盘的第一个扇区(逻辑号为0)可以说是整个硬盘最重要的扇区磁盘,主要存放两条信息:主引导分区(MasterBootRecord,MBR):存放引导加载程序,大小为446字节。分区表(partitiontable):记录整个硬盘分区的状态,占用64字节。硬盘分区分区的最小单位是柱面。也就是说,一个分区实际上是指定了哪个柱面属于哪个柱面的哪个区域。假设硬盘有400个柱面,均分为4个区(C、D、E、F盘),第四个分区F的柱面范围是从第301到第400柱面。在分区表中,记录的是每个分区的起始柱面号和结束柱面号。因为分区表只有64字节,最多只能保存4个分区的记录(硬盘默认)。如果要划分更多,则需要通过扩展分区来创建逻辑分区。引导过程加载BIOS:BIOS(BaseInputOutputSystem,读作/'baious/)是由硬件厂商写入主板ROM中的程序。当计算机开启时,BIOS将首先执行。开机后进入BIOS界面,如下:MBR:BIOS执行过程中,会根据用户的设置(即在BIOSBoot界面选择的优先启动项,U盘/硬盘/CD-ROM),如果硬盘的优先级最高,那么电脑就会从硬盘第一个扇区的MBR中读取引导装载程序(BootLoader)。与BIOS一样,主引导分区MBR是硬件本身支持的东西。引导装载程序:引导装载程序(BootLoader)是用来读取操作系统内核文件的小软件,不同的操作系统有自己的引导装载程序。每个分区都可以有自己的文件系统和引导扇区。在启动过程中,用户可以选择是直接加载引导程序所在分区的操作系统,还是将引导加载功能交给各分区的引导扇区。装载机在.bootloader的功能主要包括:提供菜单:让用户选择不同的启动选项,这是multi-boot的一个重要功能。加载内核文件:直接指向可以启动的程序段,启动操作系统。Transfertootherloader:将bootloading功能转移到其他loader。操作系统内核文件:最后,引导加载程序加载操作系统的内核文件,启动操作系统!重要每个分区都有自己的引导扇区(bootsector)。实际可启动的操作系统内核文件存放在各个分区中,如将Windows系统安装在C盘,将Linux操作系统安装在D盘。引导装载程序(bootloader)只知道自己分区中的可引导内核文件,以及其他引导装载程序(相当于指向其他装载程序的指针)。加载器可以直接指向或间接将管理权交给其他加载器。一点经验:如果要安装多个系统,最好先安装Windows,再安装Linux。因为Windows会强制覆盖MBS,也就是说如果先安装Linux再安装Windows,MBR中只有Windows相关的选项(Linux被覆盖)。但是,Linux不会强行覆盖MBR。您可以选择将Linux引导程序安装在MBR或所在分区的引导扇区;您还可以在Linux引导程序中设置Windows引导选项。磁盘存储数据的形式磁盘以二进制形式存储数据。在我们平时的编程过程中,读写文件的方式可能是文本形式/二进制形式,文件也有文本文件、音频文件、图片文件等各种类型的文件,但是这些文件都是在磁盘上的二进制形式。贮存。可以想象,二进制中的0对应着圆盘上的一个“凹”点,1对应着圆盘上的一个“凸”点。(只是一个形象的比喻,不是真正的肿块)。综上所述,硬盘(机械硬盘)的基本结构和一些核心概念了解的差不多了,开机过程中需要用到硬盘的地方也了解了。文件的访问最终会落在硬盘的读写上。在后面的文章中,我将从下往上逐步介绍构建在磁盘上的Linux操作系统的文件系统的一些理论知识。
