Linux系统启动引导过程

近期发现自己在仅仅是掌握上有几个比較硬的伤:

  • 一、知识体系碎片,比方Linux,这学点那学点,结果没有成体系,串不起来;

  • 二、记忆时间短暂,非常多的内容学了就忘,最后的结果是遇见一个知识点就能想起来自己的确学过。可是如今记不起来了。

  • 三、理解程度浅显,比方说今天要整理关于Linux引导的内容,之前大体是知道的,不能称之为理解,我觉得在学着一个知识点的时候至少要能系统有条理地讲出来,而不是有个模模糊糊的大体认识。

个别名词解释

1.BIOS(Basic Input Output System):基本输入输出系统。事实上。它是一组固化到计算机内主板上一个ROM芯片上的程序。它保存着计算机最重要的基本输入输出的程序、开机后自检程序和系统自启动程序。它可从CMOS中读写系统设置的具体信息。

2.MBR(Master Boot Record):主引导记录。硬盘的0柱面、0磁头、1扇区称为主引导扇区(也叫主引导记录MBR)。

MBR是不属于不论什么一个操作系统。也不能用操作系统提供的磁盘操作命令来读取它,但能够通过命令来改动和重写。

3.GRUB(GRand Unified Bootloader):GNU GRUB是一个来自GNU项目的多操作系统启动程序。

GRUB是多启动规范的实现,它同意用户能够在计算机内同一时候拥有多个操作系统,并在计算机启动时选择希望执行的操作系统。GRUB可用于选择操作系统分区上的不同内核。也可用于向这些内核传递启动參数。

Linux引导过程预览

从按下电源键后执行的操作:

Created with Raphaël 2.1.0按下电源键载入BIOS读取MBRBoot LoaderBoot Loader用户层init根据inittab文件来设定执行等级init进程执行rc.sysinit启动内核模块执行不同执行级别的脚本程序执行/etc/rc.d/rc.local执行/bin/login程序。进入登录状态开机完毕

具体分析引导过程

第一步、载入BIOS

BIOS的功能由两部分组成,各自是POST码和Runtime服务。POST阶段完毕后它将从存储器中被清除。而Runtime服务会被一直保留。用于目标操作系统的启动。BIOS两个阶段所做的具体工作例如以下:

  1. 步骤1:上电自检POST(Power-on self test),主要负责检測系统外围关键设备(如:CPU、内存、显卡、I/O、键盘鼠标等)是否正常。比如。最常见的是内存松动的情况。BIOS自检阶段会报错,系统就无法启动起来。

  2. 步骤2:步骤1成功后。便会执行一段小程序用来枚举本地设备并对其初始化。这一步主要是根据我们在BIOS中设置的系统启动顺序来搜索用于启动系统的驱动器。如硬盘、光盘、U盘、软盘和网络等。我们以硬盘启动为例。BIOS此时去读取硬盘驱动器的第一个扇区(MBR,512字节)。然后执行里面的代码。

    实际上这里BIOS并不关心启动设备第一个扇区中是什么内容。它仅仅是负责读取该扇区内容、并执行。

    至此,BIOS的任务就完毕了。此后将系统启动的控制权移交到MBR部分的代码。

第二步、读取MBR

系统找到BIOS所指定的硬盘的MBR后,就会将其拷贝到0×7c00地址所在的物理内存中。事实上被拷贝到物理内存的内容就是Boot Loader,而具体到你的电脑,那就是lilo或者grub了。

补充:

一个扇区的硬盘主引导记录MBR由4个部分组成。

  1. 主引导程序(偏移地址0000H–0088H),它负责从活动分区中装载,并执行系统引导程序。

  2. 出错信息数据区,偏移地址0089H–00E1H为出错信息,00E2H–01BDH全为0字节。

  3. 分区表(DPT,Disk Partition Table)含4个分区项,偏移地址01BEH–01FDH,每一个分区表项长16个字节,共64字节为分区项1、分区项2、分区项3、分区项4。

  4. 结束标志字,偏移地址01FE–01FF的2个字节值为结束标志0xAA55或0x55AA,称为“魔数”(magic number)。假设该标志错误系统就不能启动。

第三步、Boot Loader

Boot Loader 就是在操作系统内核执行之前执行的一段小程序。通过这段小程序。我们能够初始化硬件设备、建立内存空间的映射图。从而将系统的软硬件环境带到一个合适的状态,以便为终于调用操作系统内核做好一切准备。

Boot Loader有若干种,当中Grub、Lilo是常见的Loader。

系统读取内存中的grub配置信息(一般为menu.lst或grub.lst)。并按照此配置信息来启动不同的操作系统。

第四步、载入内核

根据grub设定的内核映像所在路径,系统读取内存映像,并进行解压缩操作。此时。屏幕通常会输出“Uncompressing Linux”的提示。

当解压缩内核完毕后,屏幕输出“OK, booting the kernel”。

系统将解压后的内核放置在内存之中,并调用start_kernel()函数来启动一系列的初始化函数并初始化各种设备,完毕Linux核心环境的建立。至此,Linux内核已经建立起来,基于Linux的程序应该能够正常执行。

第五步、用户层init根据inittab文件来设定执行等级

内核被载入后。第一个执行的程序便是/sbin/init,该文件会读取/etc/inittab文件,并根据此文件来进行初始化工作。

/etc/inittab文件最基本的作用就是设定Linux的执行等级,其设定形式是“:id:5:initdefault:”,这就表明Linux须要执行在等级5上。Linux的执行等级设定例如以下:

  • 0:关机
  • 1:单用户模式
  • 2:无网络支持的多用户模式
  • 3:有网络支持的多用户模式
  • 4:保留,未使用
  • 5:有网络支持有X-Window支持的多用户模式
  • 6:又一次引导系统,即重新启动

第六步、init进程执行rc.sysinit

在设定了执行等级后,Linux系统执行的第一个用户层文件就是/etc/rc.d/rc.sysinit脚本程序,它设定PATH、设定网络配置(/etc/sysconfig/network)、启动swap分区、设定/proc等等。

第七步、启动内核模块

具体是根据/etc/modules.conf文件或/etc/modules.d文件夹下的文件来装载内核模块。

第八步、执行不同执行级别的脚本程序

根据执行级别的不同,系统会执行rc0.d到rc6.d中的对应的脚本程序。来完毕对应的初始化工作和启动对应的服务。

第九步、执行/etc/rc.d/rc.local

你假设打开了此文件。里面有一句话。读过之后,你就会对此命令的作用一目了然:

This script will be executed after all the other init scripts.

You can put your own initialization stuff in here if you don’t

want to do the full Sys V style init stuff.

rc.local就是在一切初始化工作后,Linux留给用户进行个性化的地方。你能够把你想设置和启动的东西放到这里。

第十步、执行/bin/login程序。进入登录状态

此时,系统已经进入等待用户输入username和password状态,用户能够用自己的帐号登入系统

Linux学习笔记:系统启动引导过程的更多相关文章

  1. Linux 学习笔记 1 使用最小的系统,从分区安装系统开始

    我们常用的linux系统在安装过程中大多都省略了对系统进行分区的操作,以至于后期,不了解什么是分区以及分区当中最基本的一些概念, 我们不说最细的知识,只求了解这个过程,那直接步入正题,开始第一节的学习 ...

  2. Linux 学习笔记

    Linux学习笔记 请切换web视图查看,表格比较大,方法:视图>>web板式视图 博客园不能粘贴图片吗 http://wenku.baidu.com/view/bda1c3067fd53 ...

  3. Linux 学习笔记之超详细基础linux命令 Part 7

    Linux学习笔记之超详细基础linux命令 by:授客 QQ:1033553122 ---------------------------------接Part 6----------------- ...

  4. Linux学习笔记(4)磁盘分区(fdisk)、挂载与文件系统命令

    Linux学习笔记(4)磁盘分区(fdisk).挂载与文件系统命令 1.磁盘分区是怎么表示的? 1.1 对于IDE接口,第一主盘为hda,第1从盘为hdb,第1从盘的第1个分区为hdb1 1.2 对于 ...

  5. Linux学习笔记-林耐斯Notes-Linux就该这么学

    Linux学习笔记... 参考的优秀Linux网站: http://www.w3cschool.cn/linux/ http://www.linuxeye.com/ http://linux.vbir ...

  6. deepin linux学习笔记(四)进不去图形界面怎么办?

    目录 deepin linux学习笔记(四)进不去图形界面怎么办? 前言 更换成lxde桌面 进不去图形界面怎么办? 总结 deepin linux学习笔记(四)进不去图形界面怎么办? 前言 生命不息 ...

  7. deepin linux学习笔记

    目录 deepin linux学习笔记 前言 linux常用命令 ls 显示文件夹内容 cd 切换当前目录 pwd 查看当前工作目录 mkdir 新建文件夹 rm 删除文件或文件夹 mv 移动文件 c ...

  8. Linux 学习笔记之超详细基础linux命令 Part 13

    Linux学习笔记之超详细基础linux命令 by:授客 QQ:1033553122 ---------------------------------接Part 12---------------- ...

  9. Linux 学习笔记之超详细基础linux命令 Part 11

    Linux学习笔记之超详细基础linux命令 by:授客 QQ:1033553122 ---------------------------------接Part 10---------------- ...

随机推荐

  1. IP封包协议头/TCP协议头/TCP3次握手/TCP4次挥手/UDP协议头/ICMP协议头/HTTP协议(请求报文和响应报文)/IP地址/子网掩码(划分子网)/路由概念/MAC封包格式

    IP协议头IP包头格式: 1.版本号:4个bit,用来标识IP版本号.这个4位字段的值设置为二进制的0100表示IPv4,设置为0110表示IPv6.目前使用的IP协议版本号是4. 2.首部长度:4个 ...

  2. mysql多字段组合删除重复行

    DELETEFROM boll_paramWHERE id in ( SELECT a.id FROM ( SELECT id FROM boll_param WHERE (symbol, time_ ...

  3. windows 上使用virtualenv进行python多版本转换

    近期因为需要在python2.7和Python3.6上进行工作学习,可是笔记本只配置了python3.6环境. 所以打算使用virtualenv这个强大的工具进行多版本转换: 一.首先,默认已经配置好 ...

  4. 初次使用xUtils3

    由于初学Android,之前也没接触过xUtils2.X系列,所以xUtils3.X弄了很久还是一直报空指针异常,后来看了Sample找到问题所在,现在把xUtils3.X的使用写来供像我这样的小白参 ...

  5. Github 多账号配置

    1. 不同账户,生成不同密钥ssh-keygen -t rsa -f github1 -C "xxx@163.com"ssh-keygen -t rsa -f github2 -C ...

  6. Couchbase第一印象(架构特性)

    Couchbase第一印象(架构特性) 面向文档 保存的字节流总有一个 DOCUMENT ID(Object_ID) 高并发性,高灵活性,高拓展性,容错性好 面向文档的集群存储系统 每个文档用一个唯一 ...

  7. NOIP2014D2T2寻找道路(Spfa)

    洛谷传送门 这道题可以把边都反着存一遍,从终点开始深搜,然后把到不了的点 和它们所指向的点都去掉. 最后在剩余的点里跑一遍spfa就可以了. ——代码 #include <cstdio> ...

  8. POJ 2195 Going Home【最小费用流 二分图最优匹配】

    题目大意:一个n*m的地图,上面有一些人man(m)和数量相等的house(H) 图上的距离为曼哈顿距离 问所有人住进一所房子(当然一个人住一间咯)距离之和最短是多少? 思路:一个人一间房,明显是二分 ...

  9. 【DFS+剪枝】Square

    https://www.bnuoj.com/v3/contest_show.php?cid=9154#problem/J [题意] 给定n个木棍,问这些木棍能否围成一个正方形 [Accepted] # ...

  10. [NOIP2003] 提高组 洛谷P1038 神经网络

    题目背景 人工神经网络(Artificial Neural Network)是一种新兴的具有自我学习能力的计算系统,在模式识别.函数逼近及贷款风险评估等诸多领域有广泛的应用.对神经网络的研究一直是当今 ...