在了解开机启动流程之前,还是得先了解一些磁盘的基本知识。磁盘主要由盘片,机械手臂,磁头,主轴马达构成。盘片就是存储数据的物理单位了。然后盘片上我们可以分成扇区(sector)和柱面(cylinder),每个扇区sector为512Bytes。如下图所示:

磁盘在分区完成之后,每个分区(文件系统)都有一个启动扇区(boot sector),而开机时用到的则是整个磁盘的第一个扇区,这个扇区非常主要,构成如下:

(1)主引导分区(MBR)master boot record;446Bytes;系统安装时在在此区域安装引导加载程序即BootLoader

(2)分区表(partion table);64Bytes;记录整块磁盘的分区状态;

要了解启动流程,还有两个不得不说的概念,那就是BIOS和CMOS。CMOS是记录各项硬件参数并且嵌入在主板上的存储器,BIOS是开机执行的第一个程序,用它来确认硬件设备的启动顺序,然后在对应的硬件设备中找到引导程序。

好了,下面分阶段介绍开机的启动流程。

第一阶段:BIOS

上电之后,BIOS是计算机执行的第一个程序,计算机首先进行硬件自检,如果出现错误,则发出不同的蜂鸣声。自检完毕后,BIOS要把控制权交给下一阶段的引导程序,但如何转交呢。由于下一阶段的引导程序是放在磁盘分区的boot sector(引导扇区)里面,所以BIOS会根据预先设定好的次序的优先去找到某个硬件设备分区(就是平常我们说的从U盘,硬盘,光盘cd等)的引导扇区。

第二阶段:主引导记录

它可以告诉计算机去哪里找到系统。除此之外,MBR还包含有其他信息。分布如下:

(1)0-445 ,共446Bytes, 调用操作系统的机器码;

(2)446-509,共64Bytes,分区表信息;

(3)510-511,共2Bytes,主引导记录签名(0x55,0xAA);

这里面的第1点和第3点都比较清晰了,唯独第2点还需在深究一下,分区表信息里面包含了什么内容呢?具体如下6部分

(1)0, 0x80,代表该分区是激活分区,4个分区里面只能有一个激活分区;

(2)1-3, 主分区第一个扇区的物理位置(柱面,磁头,扇区号等);

(3)4,主分区类型;

(4)5-7,主分区最后一个扇区的物理位置;

(5)8-11,主分区第一个扇区的逻辑地址;

(6)12-15,主分区的总扇区数;

扇区总数为32bits,也就是说如果每个扇区的大小为512Bytes,那么每个分区的大小最大为2的32次方字节,即2TB。

到此为止,计算机已经找到引导程序了。

第三阶段:硬盘启动

这里又分为以下3种情况。

(1)卷引导记录

这一种方式启动最为简单,在四个分区里面只有一个是被激活的,找到激活分区的第一个扇区(Volume Boot Record:VBR),然后通过引导程序加载系统内核启动系统即可;

(2)扩展分区记录

由于现在硬盘越来越大,4个分区还已经不够支持,因此规定有且仅有一个主分区可以定义为扩展分区,在扩展分区中再进行逻辑扩展,即逻辑分区。而引导记录则位于该扩展扇区的第一个扇区,称为扩展引导记录(extend Boot Record:EBR)。在这个扇区中,也有一个分区表,不过这个分区表只有两项分区信息。这样计算机根据第二项分区信息找到下一个逻辑分区,然后在下一个逻辑分区的第一个扇区里面做同样的事情找到第三个逻辑分区,循环下去直至找到自己的逻辑分区就是最后一个逻辑分区了。

(3)启动管理器

这个的作用主要是安装多个操作系统,找到主引导记录不是把控制权交给某一个分区而是交给已经安装好的“启动管理器”BootLoader,由用户选择某个操作系统。Grub则是Linux环境最流行的启动管理器了。

linux系统下开机启动流程的更多相关文章

  1. Linux系统入门---开机启动流程

    目录 Linux系统入门---开机启动流程 一.centos6 二.systemd管理进程 1.查看级别 三.centos7实践案例: 1.案例1:centos7系统,单用户修改root密码 案例2: ...

  2. (转)CentOS 7系统详细开机启动流程和关机流程

    CentOS 7系统详细开机启动流程和关机流程 原文:http://blog.csdn.net/yuesichiu/article/details/51350654 名称 bootup - 系统启动流 ...

  3. 不同linux系统添加开机启动程序的命令

    see http://phpcj.org/blog/%E4%B8%8D%E5%90%8Clinux%E7%B3%BB%E7%BB%9F%E6%B7%BB%E5%8A%A0%E5%BC%80%E6%9C ...

  4. Linux系统的开机启动顺序

    Linux系统的开机启动顺序加载BIOS–>读取MBR–>Boot Loader–>加载内核–>用户层init一句inittab文件来设定系统运行的等级(一般3或者5,3是多用 ...

  5. Linux系统下,启动Tomcat有时报Address already in use

    一.Linux系统下,启动Tomcat有时报Address already in use<null>... 1.那是因为你的tomcat已经启动了tomcat自带的关闭脚本,有时候关闭看上 ...

  6. Linux系统下部署项目流程

    一.系统架构 linux系统 centOS 6.9 应用服务器:Tomcat /JDK 数据库服务器:MySQL 二.连接远程工具FinalShell 1.Centos 6: 启动服务:service ...

  7. Redis 在 LINUX 系统下 安装, 启动

    01, 下载  http://www.redis.cn/ ,  这里下再下来的是 redis-4.0.1.tar.gz 这个压缩包 02, 将压缩包放到 linux 系统中,  一般放在 usr/lo ...

  8. linux系统下memcached启动正常但程序无法连接的问题解决

    在虚拟机linux安装好memcached之后,试着用java程序连接一下memcached的服务端,但却出现了以下错误 com.schooner.MemCached.SchoonerSockIOPo ...

  9. linux系统增加开机启动服务/应用

    操作 在/etc/init.d下新建示例脚本文件(customize.sh),该脚本会启动zookeeper服务.内容如下: #!/bin/sh /usr/local/zookeeper-/bin/z ...

随机推荐

  1. 微信小程序 Echarts 异步数据更新

    微信小程序 Echarts 异步数据更新的练习,被坑了很多次,特作记录. 作者:罗兵 地址:https://www.cnblogs.com/hhh5460/p/9989805.html 0.效果图   ...

  2. Spring的单例模式底层实现学习笔记

    单例模式也属于创建型模式,所谓单例,顾名思义,所指的就是单个实例,也就是说要保证一个类仅有一个实例.单例模式有以下的特点:①单例类只能有一个实例②单例类必须自己创建自己的唯一实例③单例类必须给所有其他 ...

  3. Jmeter(十二)_打印时间戳

    Jmeter中提供了一种函数,可以打印时间戳,如下图 年: yyyy 月:MM 日:dd 时: HH 分: mm 秒:ss 关于时间戳的格式,可以自由组合定义,这里我写成这样 yyyy-MM-dd H ...

  4. Oracle中Clob类型处理解析 (转)

    转:原文:http://blog.csdn.net/pojianbing/article/details/2789426      最近利用NHibernate映射类型为Clob字段在插入数据时发现当 ...

  5. 1089. Insert or Merge (25)-判断插入排序还是归并排序

    判断插入排序很好判断,不是的话那就是归并排序了. 由于归并排序区间是2.4.8开始递增的,所以要判断给出的归并排序执行到哪一步,就要k从2开始枚举. 然后再对每个子区间进行一下sort即可. #inc ...

  6. 【MOOC EXP】Linux内核分析实验一报告

    程涵  原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000  [反汇编一个简单的C程序]   实验 ...

  7. Scalable Object Detection using Deep Neural Networks译文

    原文:https://arxiv.org/abs/1312.2249

  8. jquery实现点击复制到剪切板

    1.必须有先引入 jquery库 <script type="text/javascript" src="js/jquery.js"></sc ...

  9. JAVA面对对象(一)——封装

    1.封装思想:将对象的属性和行为封装起来的载体是类,类通常对客户隐藏其实现的细节 2.封装就是将属性私有化(private),并提供公共的方法(public)访问私有属性 3.通过封装,实现对属性数据 ...

  10. Linux命令(二十四) 磁盘管理命令(二) mkfs,mount

    一.格式化文件系统 mkfs 当完成硬盘分区以后要进行硬盘的格式化,mkfs系列对应的命令用于将硬盘格式化为指定格式的文件系统.mkfs 本身并不执行建立文件系统的工作,而是去调用相关的程序来执行.例 ...