【Linux系统】文件系统(1)——磁盘的基本知识

前言

文件系统是Linux系统的核心,在Linux系统中,一切皆文件。对于开发者而言,编程过程当中一般用到的是文件IO。在open函数打开文件,read函数读取文件的过程底层原理如何?本文件系统系列文章主要尝试针对的是这部份内容进行深刻的讲解。编程

文件最终是存储在磁盘上,文件的存取,最终是读写磁盘。所以,在本文章中,将主要介绍磁盘的一些基础知识。架构

硬盘的物理结构

硬盘结构概述

clipboard.png

其中:函数

  • 每一个盘片有两面,两面均可以存储数据。
  • 每一个盘面都有一个磁头,用于存取数据。
  • 全部磁头都是固定的,一块儿作物理移动。可是每次只有一个磁头执行存取数据的任务,选择使用哪一个磁头是由系统控制的。磁头间的切换很是迅速,而磁头摆动寻道则比较慢。
  • 磁头摆动,找到要读取数据所在的磁道;盘片经过转动,将数据“送到”磁头下。

磁头数、磁道、柱面、扇区

clipboard.png

  • 磁头数: 每一个盘面都有一个磁头,所以磁头数 = 盘面数
  • 磁道: 上以盘片轴心为圆心,不一样半径的同心圆称为磁道,磁道不是真正肉眼可看见的一道一道“坑”,而是被磁盘上被磁化的区域,磁道之间有必定的间隙,以避免磁道之间磁介质相互影响。
  • 扇区: 每一个磁道被等分为若干个弧段(扇区),每一个扇区能够存放512个字节的数据。扇区是磁盘驱动器向磁盘读写数据的最小单元。
  • 柱面: 不一样盘片半径相同的磁道组成的一个“柱面”。

CHS编号

所谓硬盘的CHS,即Cylinder(柱面)、Head(磁头)、Sector(扇区)。每一个柱面、磁头、扇区都有本身的编号。spa

磁道编号规则

  • 磁头编号: 从上到下,分别为磁头0号,磁头1号......
  • 柱面编号: 最外圈的柱面编号为0,往里依次递增1,2,3.....

扇区编号规则

每一个磁道均可以被分为若干个扇区,假设有18个扇区,编号依次为1,... 18。这里的1...18在一个磁道中是惟一的,但不一样磁道之间会重复。所以,要肯定一个扇区在硬盘(多个盘片)中的具体位置,则须要结合柱面号/磁头号/扇区号来肯定——绝对扇区编号,或者是为整个硬盘的全部扇区分配一个惟一的编号——DOS扇区编号(也称为相对扇区编号或逻辑扇区编号)。操作系统

  • 绝对扇区:柱面号/磁头号/扇区号惟一肯定。
  • DOS(Disk Operating System)扇区(逻辑扇区): 磁盘操做系统为了管理方便,会将柱面号/磁头号/扇区号肯定的扇区编号转换为易于管理和计算的单一数字编号,称为相对扇区编号或逻辑扇区编号。DOS扇区编号是从柱面0/磁头0/扇区1开始的,编号为0,依次递增,即柱面0/磁头0/扇区18的DOS扇区编号为18;柱面0/磁头1/扇区1的DOS扇区编号为19...。每一个分区的第一个扇区的逻辑扇区编号为0。

经过CHS计算硬盘容量

硬盘存储容量=磁头数×柱面数×每一个磁道扇区数×每一个扇区字节数指针

磁盘存储划分

第一个扇区存储的数据

硬盘的第一个扇区(逻辑编号为0)能够说是整个硬盘最重要扇区了,它主要存储两大信息:code

  • 主引导分区(Master Boot Record,MBR): 存放引导加载程序,大小为446字节。
  • 分区表(partition table): 记录整块硬盘分区的状态,占64字节。

硬盘分区

分区的最小单位为柱面(Cylinder),也就是说,分区其实就是指定从第几个柱面到第几个柱面属于哪一个区。图片

假设硬盘有400个柱面,平均分为4个区(C、D、E、F盘),则第四个分区F的柱面范围是第301号到第400号柱面。ip

分区表中,记录的就是就是每一个分区的起始柱面号和结束柱面号。由于分区表只有64字节,所以最多只能容纳4个分区的记录(硬盘默认),要想分更多的去,则须要经过扩展分区来建立逻辑分区开发

开机流程

  1. 加载BIOS: BIOS(Base Input Output System,基本输入输出系统,读作/'baious/)是硬件厂商写入到主板ROM里的一个程序,电脑开机时,会最早执行BIOS。开机后,进入BIOS界面,以下:

    clipboard.png

  2. MBR: BIOS在执行的过程当中,会根据用户设置(即在BIOS的Boot界面选择的优先启动项,U盘/硬盘/光驱),若是硬盘的优先级最高,则计算机会从硬盘的第一个扇区的MBR中的读取引导加载程序(Boot Loader)。和BIOS同样,主引导分区MBR是硬件自己会支持的东西。
  3. 引导加载程序:引导加载程序(Boot Loader)是用于读取操做系统内核文件的一个小软件,不一样的操做系统有各自的引导加载程序。每一个分区均可以有本身的文件系统,有本身的引导扇区,在启动的过程当中,用户能够选择是直接加载引导程序所在分区的操做系统,仍是将引导加载功能交给各分区引导扇区中的加载程序。boot loader的功能主要有:

    • 提供菜单:让用户选择不一样的开机选项,是多重引导的重要功能。
    • 载入内核文件:直接指向可开机的程序区段,开始操做系统。
    • 转交其余loader: 将引导加载功能转交给其余loader负责。
  4. 操做系统内核文件:最后,引导加载程序加载操做系统的内核文件,启动操做系统!

要点

  1. 每一个分区都有本身的引导扇区(boot sector)。
  2. 实际可开机的操做系统内核文件是存放在各个分区内的,如在C盘安装Windows系统,在D盘安装Linux操做系统。
  3. 引导加载程序(boot loader)只会认识本身所在分区内的可开机内核文件,以及其余boot loader(至关于一个指针,指向其余loader)。
  4. loader能够直接指向或者间接地讲管理权交给其余loader。
  5. 一点经验:若是要安装多系统,最好先安装Windows,后安装Linux。由于Windows会强制覆盖MBS,也就是说,若是你先装Linux再装Windows,MBR中就只有Windows的相关选项(Linux的被覆盖掉了)。而Linux则不会强制覆盖MBR,你能够选择将Linux的引导程序安装在MBR或者其所在分区的引导扇区中;你也能够在Linux的引导程序中设置Windows的开机选项。

磁盘存储数据的形式

磁盘以二进制的形式存储数据。咱们平时编程过程当中读写文件模式可能有文本形式/二进制形式,文件也有文本文件、音频文件、图片文件...等各类不一样类型的文件,但这些文件在磁盘上都是以二进制的方式存储。

能够想像一下,二进制中的0,对应磁盘上的一个“凹”点,1对应磁盘上的一个“凸”点。(只是形象比喻,不是真的凹凸)。

总结

至此,硬盘(机械硬盘)的基本结构和一些核心的概念已了解的差很少了,也了解了开机过程当中须要用到硬盘的地方。文件的存取,最终会落在硬盘的读写上。在后面的文章中,将逐渐自底向上介绍架构在磁盘之上的Linux操做系统的文件系统的一些理论性知识。

相关文章
相关标签/搜索