主页 > tp钱包导入imtoken > linux启动过程
linux启动过程
一般来说,它包括以下五个阶段:
1.内核引导
2.运行初始化
3.系统初始化
4.建立终端
5.用户登录系统
内核引导
1、电脑开机后etc激活,BIOS会先进行自检,按照BIOS中设置的第一启动设备(一般为硬盘)启动。
2.然后读取第一个引导设备的MBR(Master Boot Record),在MBR中加载bootloader(bootloader,最多的是GRUB(GRand Unified Bootloader))
3. 根据boot loader的设置加载操作系统的内核。 这时内核会再次进行系统测试。 通常,内核的信息用于检测硬件,不一定是BIOS的自检信息。内核在检测硬件的同时,也通过加载动态模块来加载硬件驱动程序。
内核是现代操作系统的核心,直接负责管理硬件。
4.然后内核启动系统的第一个进程,即/sbin/init
运行初始化
init进程是系统中所有进程的起点。 您可以将其与系统中所有进程的祖先进行比较。 没有这个进程,系统中的任何进程都不会启动。
1、init程序首先需要读取配置文件/etc/inittab。 操作系统的默认运行级别由 /etc/inittab 配置文件确定。
注意:Ubuntu下没有/etc/inittab。 inittab 包已被 Upstart 包取代。 所有的配置信息都在/etc/event.d/目录下,inittab换成了/etc/event.d/; 在后续的更新中,/etc/even.d被/etc/init取代,配置文件变成了rc-sysinit.conf。
linux系统由七个运行级别组成(一般3和5比较常用):
运行级别0:系统处于关机状态。 系统默认运行级别不能设置为0,否则无法正常启动。
运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登录
运行级别 2:多用户状态(无 NFS)
运行级别3:完全多用户状态(带NFS),登录后进入控制台命令行模式
运行级别 4:系统未使用,保留
运行级别5:X11控制台,登录后进入图形GUI模式
运行级别 6:系统正常关闭并重新启动。 默认运行级别不能设置为6,否则无法正常启动
系统初始化
读取运行级别后,Linux系统会运行第一个用户级进程:/etc/rc.d/rc.sysinit
在init配置文件中有这么一行: si::sysinit:/etc/rc.d/rc.sysinit 它调用并执行/etc/rc.d/rc.sysinit,rc.sysinit是一个bash shell脚本,
它主要完成一些系统初始化工作,而rc.sysinit是一个重要的脚本,在每个运行级别都必须首先运行。
它主要完成以下任务:激活交换分区、检查磁盘、加载硬件模块以及其他需要优先处理的任务。
(设置PATH变量、设置网络配置、启动/swap分区、设置/proc、系统功能和Selinux等)
1.加载内核模块,读取/etc/modules.conf文件和/etc/modules.c目录下的文件加载系统的内核模块
2. 启动运行级别程序。 确定默认运行级别后,调用 /etc/init/rc.conf 配置文件。 通过/etc/init/rc.conf配置文件调用并执行/etc/rc.d/rc脚本,并传入runlevel参数。
3、在对应的运行级别目录/etc/rc[0-6].d/中运行脚本(每个运行级别在/etc目录下都有对应的子目录,d代表目录)。该目录下的脚本有按照设定的优先顺序依次启动和关闭
完成相应的初始化工作,启动相应的服务就是一些服务程序。 其中,以S开头的程序表示系统即将启动,以K开头的则表示停止服务。 S 和 K 之后的数字是起始序列号。
/etc/rcN.d目录下的每个文件都设置为链接文件而不是源文件,这样修改同一个程序的代码只需要修改一个文件,而不是每个目录下的文件。
4.最后执行/etc/rc.d/rc.local中的程序。
这是一个用户定义的启动程序。 在此脚本中编写需要开机自动运行的程序。 也就是说,当我在启动时有任何我想做的工作时,
直接写入/etc/rc.local,开机自动加载! 而不是等我们登录系统后才启动呢!
建立终端
rc执行完毕后,返回init。 此时基本的系统环境已经搭建完成etc激活,各种守护进程也已经启动。
init随后会打开6个终端供用户登录系统。 inittab 中的以下 6 行定义了 6 个终端:
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
从上面可以看出mingetty程序在2、3、4、5操作关卡都会运行在respawn模式下。 mingetty程序可以打开终端并设置模式。
同时会显示一个文字登录界面,也就是我们经常看到的登录界面。 在这个登录界面,会提示用户输入用户名。
用户输入的用户将作为参数传递给登录程序,以验证用户身份。
用户登录系统
一般来说,用户登录有以下三种方式:
(1)命令行登录
(2)ssh登录
(3) 界面登录
Linux的账号验证程序是login,login会收到mingetty传来的用户名作为用户名参数。
然后login会分析用户名:如果用户名不是root,并且/etc/nologin文件存在,login会输出nologin文件的内容,然后退出。
这通常用于防止非root用户在系统维护期间登录。 只有在 /etc/securetty 中注册的终端才允许 root 用户登录。如果这个文件不存在,
然后root用户可以在任意终端登录。 /etc/usertty 文件用于对用户进行额外的访问限制。 如果此文件不存在,则没有其他限制。
参考
Linux启动过程详解
Linux操作系统的启动过程简介
Linux系统启动过程