Linux启动代码详解:从开机到登录的完整流程 (linux启动代码)

作为一个开源的操作系统,Linux因其高度的可定制性和优秀的性能表现而备受欢迎。Linux的开机启动过程是其功能的基石。而想要深入了解Linux的开机过程,就需要理解它的启动代码。本文将会详细解析Linux的启动代码,介绍从开机到登录的完整流程。

一、BIOS

当计算机启动时,硬件会首先执行系统上的基本输入/输出系统(BIOS)。BIOS主要任务是初始化硬件并引导操作系统启动。BIOS包括ROM芯片,可以在操作系统及其驱动程序之前运行。

二、引导加载程序

BIOS执行后,会进入引导加载程序(bootloader)。引导加载程序会在硬盘上搜索并加载Linux内核,然后将内核文件从硬盘传送到内存中。

引导加载程序有很多种,大部分情况下是使用GRUB。GRUB(GRand Unified Bootloader)是一种常用的多操作系统引导管理器,支持在多种操作系统间切换。它位于硬盘的Master Boot Record(MBR)中,并维护一个称为GRUB Stage 1.5的小型文件系统。这个文件系统允许它找到并加载内核镜像文件和其他启动信息。

三、内核初始化

正如先前提到的,引导加载程序会将内核文件从硬盘传送到内存中。内核初始化然后开始,需要在系统中创建内核空间(内核数据结构和内核代码)并设置系统中的各种硬件。

内核的初始化包括以下步骤:

1. 内存管理初始化:内存管理初始化会创建内存管理结构,并在系统上保留必要的内存。

2. 进程初始化:初始化进程管理系统。

3. 初始化输入/输出子系统:键盘、鼠标、网络和其他输入/输出设备将被初始化。

4. 文件系统初始化:内核对文件系统进行初始化,此时可以对根文件系统进行挂载。

5. 设备驱动程序初始化:初始化各种硬件设备驱动程序。

6. 网络初始化:初始化网络子系统,包括设置网络接口和访问网络协议栈。

7. 初始化用户模式和用户模式程序:启动getty和login等程序。

四、用户模式初始化

用户模式初始化可以开始几秒钟后,在启动到这一步之前计算机是处于内核模式运行状态,除了Kernel Mode之外任何用户模式程序都没有运行。这时,内核将开启一个进程(init进程),进入用户模式。用户模式会加载Linux发行版的一些程序,并转移到之一条运行级别的配置脚本。

Linux中的6个运行级别:

0 – 关闭系统

1 – 单用户模式

2 – 基于文本的多用户模式

3 – 基于文本的多用户模式,与2不同之处在于支持多个网络服务。

4 – 系统级别没有任何规定。可以自由更改,不影响系统功能。

5 – 基于图形的多用户模式,类似于Windows下的GUI。

典型的系统只用到0-5级运行级别。在不同的运行级别,Linux内核会启动执行不同的用户空间程序,并关闭不需要的服务。

五、登录

用户启动提交用户名和密码后,系统会进行身份验证,如果身份验证成功,用户就会登录到系统。

在Linux启动流程中,BIOS、引导加载程序、内核初始化、用户模式初始化和登录过程都是不可或缺的环节。用户最终将会登录到一个完全初始化且运行良好的系统中,可以在其中尽情地进行其所有需要的操作。

本文详细解析了Linux启动代码的过程,并从技术层面细致地介绍了从开机到登录的完整流程。对于系统调试和管理人员来说,理解这些过程是非常有用和必要的。它们可以使操作系统管理员了解Linux内部故障排除和优化的工作方式,以及如何使其更高效、更灵活。

相关问题拓展阅读:

如何查看和停止Linux启动的服务

你好,

1. 查看Linux启动的服务

. 代码如下:

chkconfig –list 查询出所有当前运行的服务

chkconfig –list atd 查询atd服务的当前状态

2.停止所有服务或毁胡并且在下次系统启动时不再启动,如下余蔽所示:

. 代码如下:

chkconfig –levelsNetworkManager off

如果想查看当前处于运行状态的服务,用如下衫拦语句过滤即可

. 代码如下:

chkconfig –list |grep on

3.如果只是想当前的设置状态有效,在系统重启动后即不生效的话,可以用如下命令停止服务

. 代码如下:

service sshd stop

linux开机启动脚本

需要自己写一个脚本

脚本内容是

一个死循环,里面包含查询进程的命令ps,让后grep出你的进程

如果发现你的进程就认为启动成功,没发现就一直等待。

脚本例子,监控mysql

s_port=`netstat -na|grep “LISTEN”|grep “3306”|awk -F+ ‘{print $5}’`

if ; then

echo ” mysql is running “

echo $s_logfie

else

echo ” mysql is down try start ” > $s_logfie_err

$s_mysqldir/share/mysql/mysql.server restart –user=root

sleep 10

s_port=`netstat -na|grep “LISTEN”|grep “3306”|awk -F+ ‘{print $5}’`

if ;then

echo ” mysql start ok “

else

echo ” mysql start fail “

fi

fi

linux启动代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux启动代码,Linux启动代码详解:从开机到登录的完整流程,如何查看和停止Linux启动的服务,linux开机启动脚本的信息别忘了在本站进行查找喔。


数据运维技术 » Linux启动代码详解:从开机到登录的完整流程 (linux启动代码)