Linux学习笔记:系统启动引导过程
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引导过程预览
从按下电源键后执行的操作:
具体分析引导过程
第一步、载入BIOS
BIOS的功能由两部分组成,各自是POST码和Runtime服务。POST阶段完毕后它将从存储器中被清除。而Runtime服务会被一直保留。用于目标操作系统的启动。BIOS两个阶段所做的具体工作例如以下:
步骤1:上电自检POST(Power-on self test),主要负责检測系统外围关键设备(如:CPU、内存、显卡、I/O、键盘鼠标等)是否正常。比如。最常见的是内存松动的情况。BIOS自检阶段会报错,系统就无法启动起来。
步骤2:步骤1成功后。便会执行一段小程序用来枚举本地设备并对其初始化。这一步主要是根据我们在BIOS中设置的系统启动顺序来搜索用于启动系统的驱动器。如硬盘、光盘、U盘、软盘和网络等。我们以硬盘启动为例。BIOS此时去读取硬盘驱动器的第一个扇区(MBR,512字节)。然后执行里面的代码。
实际上这里BIOS并不关心启动设备第一个扇区中是什么内容。它仅仅是负责读取该扇区内容、并执行。
至此,BIOS的任务就完毕了。此后将系统启动的控制权移交到MBR部分的代码。
第二步、读取MBR
系统找到BIOS所指定的硬盘的MBR后,就会将其拷贝到0×7c00地址所在的物理内存中。事实上被拷贝到物理内存的内容就是Boot Loader,而具体到你的电脑,那就是lilo或者grub了。
补充:
一个扇区的硬盘主引导记录MBR由4个部分组成。
主引导程序(偏移地址0000H–0088H),它负责从活动分区中装载,并执行系统引导程序。
出错信息数据区,偏移地址0089H–00E1H为出错信息,00E2H–01BDH全为0字节。
分区表(DPT,Disk Partition Table)含4个分区项,偏移地址01BEH–01FDH,每一个分区表项长16个字节,共64字节为分区项1、分区项2、分区项3、分区项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学习笔记:系统启动引导过程的更多相关文章
- Linux 学习笔记 1 使用最小的系统,从分区安装系统开始
我们常用的linux系统在安装过程中大多都省略了对系统进行分区的操作,以至于后期,不了解什么是分区以及分区当中最基本的一些概念, 我们不说最细的知识,只求了解这个过程,那直接步入正题,开始第一节的学习 ...
- Linux 学习笔记
Linux学习笔记 请切换web视图查看,表格比较大,方法:视图>>web板式视图 博客园不能粘贴图片吗 http://wenku.baidu.com/view/bda1c3067fd53 ...
- Linux 学习笔记之超详细基础linux命令 Part 7
Linux学习笔记之超详细基础linux命令 by:授客 QQ:1033553122 ---------------------------------接Part 6----------------- ...
- Linux学习笔记(4)磁盘分区(fdisk)、挂载与文件系统命令
Linux学习笔记(4)磁盘分区(fdisk).挂载与文件系统命令 1.磁盘分区是怎么表示的? 1.1 对于IDE接口,第一主盘为hda,第1从盘为hdb,第1从盘的第1个分区为hdb1 1.2 对于 ...
- Linux学习笔记-林耐斯Notes-Linux就该这么学
Linux学习笔记... 参考的优秀Linux网站: http://www.w3cschool.cn/linux/ http://www.linuxeye.com/ http://linux.vbir ...
- deepin linux学习笔记(四)进不去图形界面怎么办?
目录 deepin linux学习笔记(四)进不去图形界面怎么办? 前言 更换成lxde桌面 进不去图形界面怎么办? 总结 deepin linux学习笔记(四)进不去图形界面怎么办? 前言 生命不息 ...
- deepin linux学习笔记
目录 deepin linux学习笔记 前言 linux常用命令 ls 显示文件夹内容 cd 切换当前目录 pwd 查看当前工作目录 mkdir 新建文件夹 rm 删除文件或文件夹 mv 移动文件 c ...
- Linux 学习笔记之超详细基础linux命令 Part 13
Linux学习笔记之超详细基础linux命令 by:授客 QQ:1033553122 ---------------------------------接Part 12---------------- ...
- Linux 学习笔记之超详细基础linux命令 Part 11
Linux学习笔记之超详细基础linux命令 by:授客 QQ:1033553122 ---------------------------------接Part 10---------------- ...
随机推荐
- 标量子查询SQL改写
一网友说下面sql跑的好慢,让我看看 sql代码: select er, cid, pid, tbl, zs, sy, (select count(sr.mobile_tele_no) from tb ...
- rc-local.service服务启动失败,导致rc.local中的开机启动服务不能启动
chmod +x /etc/rc.d/rc.local 打开/etc/rc.local文件,将启动非后台执行的指令的最后添加 &,以使相关指令后台运行,然后启动服务 systemctl ...
- 解决Can’t finish GitHub sharing process Successfully created project ‘GitHubDemo’ on GitHub
Can't finish GitHub sharing process Successfully created project 'KeyWordsFrameWork' on GitHu ...
- Java比较两个数组中的元素是否相同的最简单方法
import java.util.Arrays; public class Test { /** * Java比较两个数组中的元素是否相同 */ public static void main(Str ...
- maven+Hibernate+mysql环境搭建
项目结构图如下 一,首先是添加依赖pom.xml <?xml version="1.0" encoding="UTF-8"?> <projec ...
- python009 Python3 列表
Python3 列表序列是Python中最基本的数据结构.序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推.Python有6个序列的内置类型,但最常见的是 ...
- 76. Spring Boot完美解决(406)Could not find acceptable representation原因及解决方法
[原创文章] 使用Spring Boot的Web项目,处理/login请求的控制器方法(该方法会返回JSON格式的数据).此时如果访问localhost:8080/login.html, ...
- 使用using current logfile实现DG备库实时更新
DG1是主库,DG2是备库:运行在最大可用模式. 实验一:未使用using current logfile参数时,备库在最大可用模式下,不能实时同步备库的更新 -此时需要等待主库进行归档---侧面证明 ...
- NOIP2014D2T2寻找道路(Spfa)
洛谷传送门 这道题可以把边都反着存一遍,从终点开始深搜,然后把到不了的点 和它们所指向的点都去掉. 最后在剩余的点里跑一遍spfa就可以了. ——代码 #include <cstdio> ...
- 【01背包变形】Robberies HDU 2955
http://acm.hdu.edu.cn/showproblem.php?pid=2955 [题意] 有一个强盗要去几个银行偷盗,他既想多抢点钱,又想尽量不被抓到.已知各个银行 的金钱数和被抓的概率 ...