10. linux 系统启动流程
POST-->BIOS(Boot Sequence)-->MBR(bootloader,446)-->Kernel-->initrd-->(ROOTFS)/sbin/init(/etc/inittab)
POST:Power On Self Test 简称POST,加电自检
BIOS自检-->从BIOS中读取启动顺序-->读取MBR中的bootloader-->加载内核-->读取伪根-->读取根文件中的init
Step1 :BIOS自检
步骤1:上电自检POST(Power-on self test),主要负责检测系统外围关键设备(如:CPU、内存、显卡、I/O、键盘鼠标等)是否正常。例如,最常见的是内存松动的情况,BIOS自检阶段会报错,系统就无法启动起来;
步骤2:步骤1成功后,便会执行一段小程序用来枚举本地设备并对其初始化。这一步主要是根据我们在BIOS中设置的系统启动顺序来搜索用于启动系统的驱动器,如硬盘、光盘、U盘、软盘和网络等。我们以硬盘启动为例,BIOS此时去读取硬盘驱动器的第一个扇区(MBR,512字节),然后执行里面的代码。实际上这里BIOS并不关心启动设备第一个扇区中是什么内容,它只是负责读取该扇区内容、并执行。
至此,BIOS的任务就完成了,此后将系统启动的控制权移交到MBR部分的代码。
Step 2: 系统引导
我们首先来了解一下MBR,它是Master Boot Record的缩写。硬盘的0柱面、0磁头、1扇区称为主引导扇区。它由三个部分组成,主引导程序(Bootloader)、 硬盘分区表DPT(Disk Partition table)和硬盘有效标志(55AA),其结构图如下所示:
磁盘分区表包含以下三部分:
1)、Partition ID (5:延申 82:Swap 83:Linux 8e:LVM fd:RAID)
2)、Partition起始磁柱
3)、Partition的磁柱数量
通常情况下,诸如lilo、grub这些常见的引导程序都直接安装在MBR中。我们以grub为例来分析这个引导过程。
grub引导也分为两个阶段stage1阶段和stage2阶段(有些较新的grub又定义了stage1.5阶段)。
Step 3:运行Grub,Grub最重要的功能就是根据配置文件加载kernel镜像
运行init
init 进程是系统所有进程的起点,你可以把它比拟成系统所有进程的老祖宗,没有这个进程,系统中任何进程都不会启动。
init 程序首先是需要读取配置文件 /etc/inittab。
运行级别
许多程序需要开机启动。它们在Windows叫做"服务"(service),在Linux就叫做"守护进程"(daemon)。
init进程的一大任务,就是去运行这些开机启动的程序。
但是,不同的场合需要启动不同的程序,比如用作服务器时,需要启动Apache,用作桌面就不需要。
Linux允许为不同的场合,分配不同的开机启动程序,这就叫做"运行级别"(runlevel)。也就是说,启动时根据"运行级别",确定要运行哪些程序。
Linux系统有7个运行级别(runlevel):
- 运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
- 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
- 运行级别2:多用户状态(没有NFS)
- 运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
- 运行级别4:系统未使用,保留
- 运行级别5:X11控制台,登陆后进入图形GUI模式
- 运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
Step 4:系统初始化
Linux 将根据/etc/inittab中定义的系统初始化配置si::sysini:/etc/rc.d/rc.sysinit执行/etc/rc.sysinit脚本,该脚本将会设置系统变量/网络配置。并启动swap,设定/proc,加载用户自定义模块。加载内核设置等。
Step 5:根据第三步读到的runlevel 值来启动对应的服务
如果值是3,就会运行/etc/rc3.d.如果值是5,就会运行/etc/rc5.d
Step 6 :运行/etc/rc.local
Step7:生成终端或X Windows 来等待用户登录
其中:
在运行启动脚本的时候,其中K代表就脚本关闭。S代表启动相关服务
参考:https://www.cnblogs.com/love3556/p/5908001.html
参考:https://www.runoob.com/linux/linux-system-boot.html
最新文章
- HTML5 Content Editable实践
- Android四大组件之Activity详解——传值和获取结果
- TFS(Taobao File System)安装方法
- Windows Server Backup备份Exchange2010
- Monkey Test
- html5 本地存储
- Java的多线程(上)
- notepad++和gcc搭建语言环境
- jquery.ajax异步发送请求的简单测试
- 转贴---Performance Counter(包含最全的Windows计数器解释)
- openstack-mitaka部署
- Android为TV端助力 关于Fragment你所需知道的一切!
- react 使用 react-loadable分包
- 【Qt】窗口居中显示
- 2017-2018-2 20155224『网络对抗技术』Exp7:网络欺诈防范
- Dynomite 安装配置
- 最全Android开发常用工具类
- 关于vim搜索/替换功能的两条配置
- SQLSERVER procedure 传入参数为DataTable类型 C#该怎么写
- HDU 1024 Max Sum Plus Plus(m个子段的最大子段和)
热门文章
- 注解处理器APT详解
- Linux之根目录说明
- 一文读懂网管协议 - SNMP,NETCONF,RESTCONF
- ElasticSearch DSL 查询
- io流+网络+线程池 实现简单的多客户端与服务器端通信
- Python爬虫系统学习(1)
- 184. 部门工资最高的员工 + join + in
- js导出execl 兼容ie Chrome Firefox各种主流浏览器(js export execl)
- ElasticSearch(ES)使用Nested结构存储KV及聚合查询
- Apache配置 5.访问日志不记录静态文件