• 为了保证你在浏览本网站时有着更好的体验,建议使用类似Chrome、Firefox之类的浏览器~~
    • 如果你喜欢本站的内容何不Ctrl+D收藏一下呢,与大家一起分享各种编程知识~
    • 本网站研究机器学习、计算机视觉、模式识别~当然不局限于此,生命在于折腾,何不年轻时多折腾一下

Linux系统启动流程简介

Linux admin 3年前 (2016-07-11) 988次浏览 0个评论 扫描二维码

53ffe43d28129

开机自检,MBR 引导,读取硬盘 0 柱面 0 磁道 1 扇区的前 446 字节,加载 grub 菜单,在 grub 菜单里面加载 kernel,启动 init 进程,init 是 Linux 系统启动时第一个启动的进程,init 读取 inittab 文件,先执行/etc/rc.d/rc.sysinit 初始化脚本(设置主机名,加载 inittab,设置网卡和一些 PCI 设备),根据 inittab 设置的级别执行相对应的脚本,如果是 3 模式则指向/etc/rc3.d 下面的脚本以及程序,执行 rc.local,最后启动 mingetty 进程,进入登陆界面。

1.开机自检

开机之后,检查 BIOS 设置,硬件自检,如 CPU、硬盘、内存、时间日期和启动顺序等设置。

2.读取 MBR 主引导

读取 BIOS 设置启动顺序中的第一个,如果第一个扇区的前面 512 个字的最后字节是 ox55 和 oxAA,那么设个设备就可以启动,如果不是就启动启动顺序中设置的下一个设备。主引导的主要作用就是告诉计算机应该在硬盘的那个位置寻找操作系统,主引导分为三部分:

1) 第 1-446 字节:调用操作系统的机器码

2) 第 447-510 字节:分区表(Partition table)

3) 第 511-512 字节:主引导记录签名(0x55 和 0xAA)

3.Grub

初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核做好一切准备。系统读取内存中的 grub 配置信息(一般为 menu.lst 或 grub.lst),并依照此配置信息来启动不同的操作系统。

4.加载 kernel

根据 Grub 设定的内核映像所在路径,然后内存读取并进行解压,系统将解压后的内核放在内存当中,并调用 start_kernel()函数来启动一些列的初始化函数并初始化各种设备。

5.init 经常根据 inittab 决定运行级别

Init 进程是 Linux 系统进程的所有起点,它的 PID 是 1,然后它会根据/etc/inittab 来决定运行级别

1
2
3
4
5
6
7
8
9
10
11
12
[root@localhost ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 19356 1524 ? Ss 14:05 0:00 /sbin/init
root 2 0.0 0.0 0 0 ? S 14:05 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 14:05 0:00 [migration/0]
root 4 0.0 0.0 0 0 ? S 14:05 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S 14:05 0:00 [stopper/0]
root 6 0.0 0.0 0 0 ? S 14:05 0:00 [watchdog/0]
root 7 0.1 0.0 0 0 ? S 14:05 0:05 [events/0]
root 8 0.0 0.0 0 0 ? S 14:05 0:00 [cgroup]
root 9 0.0 0.0 0 0 ? S 14:05 0:00 [khelper]
root 10 0.0 0.0 0 0 ? S 14:05 0:00 [netns]

Linux 七种运行级别(0-6)

a) 0 关机
b) 1 单用户模式(也就是维护模式)
c) 2 无 NFS 网络支持的多用户模式
d) 3 文半多用户模式
e) 4 预留
f) 5 X Window 多用户图形化模式
g) 6 重启

6.init 进程执行 rc.sysinit

rc.sysinit 是由 init 执行的第一个脚本,它主要完成一些系统初始化的工作,比如设置 PATH,网卡,设置主机名,加载 PCI 设备等等。

7.启动内核模块

根据/etc/modules.conf 文件或/etc/modules.d 目录下面的文件来装在内核模块的。

8.执行不同运行级别脚本

根据不同的运行级别执行不同的级别脚本,如果我启动的是 3 模式,那么我就会执行 rc3.d 里面的脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@localhost rc.d]# ll
total 60
drwxr-xr-x. 2 root root 4096 Dec 31 15:39 init.d
-rwxr-xr-x. 1 root root 2617 Oct 16 22:53 rc
drwxr-xr-x. 2 root root 4096 Dec 31 15:39 rc0.d
drwxr-xr-x. 2 root root 4096 Dec 31 15:39 rc1.d
drwxr-xr-x. 2 root root 4096 Dec 31 15:39 rc2.d
drwxr-xr-x. 2 root root 4096 Dec 31 15:39 rc3.d
drwxr-xr-x. 2 root root 4096 Dec 31 15:39 rc4.d
drwxr-xr-x. 2 root root 4096 Dec 31 15:39 rc5.d
drwxr-xr-x. 2 root root 4096 Dec 31 15:39 rc6.d
-rwxr-xr-x. 1 root root 220 Oct 16 22:53 rc.local
-rwxr-xr-x. 1 root root 19914 Oct 16 22:53 rc.sysinit

9.执行/eyc/rc.d/rc.local

初始化的最后一个脚本,用户可以设置在初始化之后登陆之前执行的命令,列如我要在开机之后清空/tmp 文件夹里面的文件:

1
2
3
4
5
6
7
8
[root@localhost ~]# vim /etc/rc.d/rc.local
#!/bin/sh
#
# 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.
touch /var/lock/subsys/local
rm -rf /tmp/*

10.执行/etc/login

/etc/login 是来判断用户的账号密码是否正确,如果正确就初始化用户的环境变量。


Deeplearn, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明Linux 系统启动流程简介
喜欢 (0)
admin
关于作者:
互联网行业码农一枚/业余铲屎官/数码影音爱好者/二次元

您必须 登录 才能发表评论!