Linux操作系统启动流程

系统 Linux
计算机读取内存映像,当屏幕输出“OK,booting the kernel”。系统将内核放置在内存中,并调用 start_kernel()函数来启动一系列的初始化函数并初始化各种设备,完成Linux核心环境的建立。

[[381474]]

前言

在上一章节,我们学习了与操作系统启动相关的几个概念,今天,一起探讨操作系统的启动流程。

注:本文是之前学习Linux时的学习笔记,部分内容参考书籍《曝光:Linux企业运维实战》,在此感谢吴光科老师和京峰教育的优质教学。

Linux操作系统启动流程

本文以 CentOS 系列为例,为大家详解Linux操作系统启动流程。

02 CentOS 6 启动流程

  • 1、加载BIOS

当计算机打开电源后,首先是BIOS开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动。

  • 2、读取MBR

加载完BIOS信息后,计算机将会查找BIOS所指定的硬盘,读取该磁盘的MBR存储记录信息,引导系统启动。

  • 3、GRUB引导

选择启动的内核/进行单用户模式重置密码

  • 4、 加载Kernel

计算机读取内存映像,当屏幕输出“OK,booting the kernel”。系统将内核放置在内存中,并调用 start_kernel()函数来启动一系列的初始化函数并初始化各种设备,完成Linux核心环境的建立。

  • 5、设定系统运行级别

内核加载完毕,将启动第一个守护进程 init,然后通过读取该进程读取/etc/inittab文件,设定inittab运行等级。

  1. Linux 常见运行级别如下: 
  2. 1、 0:关机模式 
  3. 2、 1:单用户模式 
  4. 3、 2:无网络支持的多用户模式 
  5. 4、 3:字符界面多用户模式 
  6. 5、 4:保留,未使用 
  7. 6、 5:图形界面多用户模式 
  8. 7、 6:重新引导系统,重启模式 
  • 6、 加载rc.sysinit(系统初始化)

读取完运行级别,系统将执行第一个用户层文件/etc/rc.d/rc.sysinit,该文件功能包括:设定PATH运行变更、设定网络配置、启动swap分区、设定/proc、系统函数、配置SELinux等。

  • 7、加载内核模块

读取/etc/modules.conf文件及/etc/modules.d目录下的文件夹来加载系统内核模块。该模块文件,可以后期添加或者修改及删除。

  • 8、启动运行级别程序

根据第5步读取到的运行级别,操作系统会运行rc0.d到rc6.d中相应的脚本程序,来完成相应的初始化工作和启动相应的服务。

  • 9、读取 rc.local文件

操作系统启动完相应服务后,会读取执行/etc/rc.d/rc.local文件,可以将需要开机启动的任务加入到该文件末尾,系统会逐行去执行并启动相应命令。如下图所示:

  • 10、执行/bin/login程序

执行/bin/login程序,启动到系统登录界面,如下图所示,输入用户名、密码即可登录Linux操作系统。至此该操作系统完整启动流程完毕。

03 CentOS 7 启动流程

CentOS 7 和CentOS 6 启动流程差不多,只不过到init程序时候,改为了systemd。

CentOS 7 引导顺序:

  1. UEFi或BIOS初始化,运行POST开机自检
  2. 选择启动设备
  3. 引导装载程序, centos7是grub2
  4. 加载装载程序的配置文件:/etc/grub.d/、/etc/default/grub、/boot/grub2/grub.cfg
  5. 加载内核选项
  6. 加载initramfs初始化伪文件系统
  7. 内核初始化,centos7使用systemd代替init
  8. 执行initrd.target所有单元,包括挂载/etc/fstab
  9. 从initramfs根文件系统切换到磁盘根目录
  10. systemd执行默认target配置,配置文件/etc/systemd/system/default.target
  11. systemd执行sysinit.target初始化系统及basic.target准备操作系统
  12. systemd启动multi-user.target下的本机与服务器服务
  13. systemd执行multi-user.target下的/etc/rc.d/rc.local
  14. Systemd执行multi-user.target下的getty.target及登录服务
  15. systemd执行graphical需要的服务

下图是我在网上看到的,总结很详细,分享给大家。仅供学习,若存在版权问题,请联系处理。谢谢

本文转载自微信公众号「开源Linux」,可以通过以下二维码关注。转载本文请联系开源Linux公众号。

 

责任编辑:武晓燕 来源: 开源Linux
相关推荐

2010-04-20 17:24:42

Unix操作系统

2010-04-15 18:39:56

Unix操作系统

2009-08-11 09:03:45

Windows 7系统启动

2017-03-03 09:10:41

2009-11-09 16:01:36

路由器操作系统

2009-12-03 10:00:46

Linux系统启动

2010-03-02 15:45:57

Linux系统启动过程

2010-03-02 16:13:50

Linux系统启动过程

2019-06-20 10:56:28

CentOS系统启动

2009-02-17 16:07:29

Linux操作系统内核启动参数

2009-12-09 17:25:19

Linux操作系统

2021-09-22 08:51:34

Android

2018-12-06 09:00:06

LinuxWindows双系统

2010-01-12 13:47:18

Linux grub

2018-03-13 13:00:03

Linux运维启动分析

2010-03-02 16:51:59

Linux操作系统

2010-04-23 16:16:26

IBM AIX

2020-12-29 16:39:01

Linux代码命令

2018-10-18 14:06:15

Linux系统过程

2021-06-21 06:40:41

FreeDOS操作系统
点赞
收藏

51CTO技术栈公众号