在了解开机启动流程之前,还是得先了解一些磁盘的基本知识。磁盘主要由盘片,机械手臂,磁头,主轴马达构成。盘片就是存储数据的物理单位了。然后盘片上我们可以分成扇区(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. OFS环境,删除Resource 时出现错误失败,应该如何继续

    From the Windows failover cluster manager,select the group listener, stop it, and delete it.  Do the ...

  2. mysql基础(一)——表、索引、视图

    SQL语句不区分大小写 创建数据库 create database myData 删除数据库 drop database myData 创建表 create table company ( code ...

  3. dubbo见解

    调用关系说明 服务容器负责启动,加载,运行服务提供者. 服务提供者在启动时,向注册中心注册自己提供的服务. 服务消费者在启动时,向注册中心订阅自己所需的服务. 注册中心返回服务提供者地址列表给消费者, ...

  4. JavaScript快速入门-实战(例子)

    1.模拟bootstrap中的模态框 效果图:(点我后,弹出对话框,最下面的内容可以看到,但是有一定的透明度.) 思路分析: 整体分为三层,最底层(点我),中间透明层(实现透明效果),最顶层(最新内容 ...

  5. GitHub 新手教程 五,Git GUI 新手教程(2),Clone Existing Repository 克隆代码库

    1,注意: 网上大部分教程都是从“Create New Repository”讲起,这其实给我们新手埋了很大的一个坑.按照类似的教程,仅做到一半,各种错误窗口就会弹出来了,像什么:“非同一代码库”.“ ...

  6. Netty源码分析(前言, 概述及目录)

    Netty源码分析(完整版) 前言 前段时间公司准备改造redis的客户端, 原生的客户端是阻塞式链接, 并且链接池初始化的链接数并不高, 高并发场景会有获取不到连接的尴尬, 所以考虑了用netty长 ...

  7. Apache Ignite 学习笔记(二): Ignite Java Thin Client

    前一篇文章,我们介绍了如何安装部署Ignite集群,并且尝试了用REST和SQL客户端连接集群进行了缓存和数据库的操作.现在我们就来写点代码,用Ignite的Java thin client来连接集群 ...

  8. A - 摆仙果

    题目描述 Adrian, Bruno与Goran三人参加了仙界的宴会,宴会开始之前先准备了一些仙果供三人品尝,但是仙果的摆放有顺序要求,如果把仙果摆错了位置,仙果就会消失而无法品尝到. 由于三人是第一 ...

  9. 小学生都能写智能语音助手了,我这颗转战AI的心要何去何从?

    前言——我是不是老了 前天看了一个关于AI类的综艺节目我感觉整个人都不好了.这个综艺的名字叫<智造将来>上面那个小屁孩自己写了一个智能语音助手,这个小屁孩叫袁翊闳是2018年百度AI开发者 ...

  10. linux第七章笔记

    第七章 链接 链接是将各种代码和数据部分收集起来并组合成为一个单一文件的过程,这个文件可被加载(或拷贝)到存储器并执行.链接可以执行于编译时,也就是在源代码被翻译成机器代码时:也可以执行于加载时,也就 ...