原文:linux开机与服务启动详解以后如有变动,更新原文。打开。对此无话可说。加载BIOS,自检,获取引导设备BIOS(BasicInput/OutputSystem的缩写,中文:BasicInputOutputSystem),是IBMPC兼容系统上的行业标准固件接口。[1].BIOS这个词第一次出现是在1975年的CP/M操作系统中。BIOS是个人计算机启动时加载的第一个软件。BIOS用于在计算机开机时进行系统各部分的自检(PowerOnSelfTest),并载入引导程序(IPL)或存储在主存中的操作系统。此外,BIOS还向操作系统提供了一些系统参数。BIOS隐藏了对系统硬件的更改,程序使用BIOS功能而不是直接控制硬件。现代操作系统忽略了BIOS提供的抽象层,直接控制硬件组件。以上内容摘自维基百科。BIOS(基本输入输出系统)是一种已经成为行业标准的软件。通常,它在主板上运行。上电后会先启动这个软件,根据设置获取各种硬件信息(主要存放在COMS中),进行自检,启动设备(即设备系统所在的位置,通常是磁盘、USB等)将被读取。也可以使用磁盘)来读取和执行第一引导设备中的加载程序。读取引导设备后,需要启动引导加载程序(BootLoader,因为每个操作系统的内核文件和格式不同,所以需要一个加载程序。处理各种操作系统的加载,gurp,spfdisk等。)加载操作系统和内核文件。所有操作系统的BootLoader都放在引导设备(磁盘)的第一个扇区,即MBR(MasterBootRecord,主引导分区),通过INT13中断函数可以读取BOIS。通过BootLoader读取内核文件后,加载驱动,读取内核文件(一般在/boot下,如图),linux会将内核文件压入内存,使用内核函数测试驱动各个A各种硬件(存储设备、cpu、网卡、声卡)。此时,操作系统根据自身需求重新检测硬件,开始接管BIOS。内核调用init(/sbin/init)进程。可以看到这个进程的pid为1。init最重要的作用是准备软件执行环境,比如:系统主机名、网络设置、语言、文件系统格式等,还有其他服务启动.所有的操作都会通过init的默认配置文件/etc/inittab来规划(有些操作系统不用这个文件,比如ubuntu)。而/etc/inittab(有的操作系??统把各种配置分开)可以设置运行级别(执行级别)。部分操作系统(centos7/ubuntu)将init替换为systemd,功能大致相同,但做了很多优化和修改。执行级别0:系统关机状态,系统默认执行级别不能设置为0,否则无法正常启动执行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登录NFSservice)执行级别3:完全多用户状态(带NFS),登录后进入控制台命令行模式,一般vps和云服务器运行在该级别执行级别4:系统未使用,保留执行级别5:X11Console,登录后,进入图形GUI模式。通常,桌面系统运行在这一层。执行级别6:系统正常关机重启。默认执行级别不能设置为6,否则无法正常启动。什么是运行级别?就是通过设置运行级别来规定系统使用不同的服务来启动。例如,运行级别设置为3,系统将启动命令行模式。runlevel命令可以查看当前的运行级别。init命令可以切换当前系统的模式,比如init0会关机,init6会重启。修改配置文件/etc/inittab,设置默认执行级别。下次启动后,会直接在某个执行级别启动,但切记不要设置0和6。init进程处理系统初始化。此时操作系统中只有init进程,它的pid为1,后面的所有进程都是init启动的,所以所有进程都是init的子进程。init会先搭建系统的基本环境,主要使用脚本/etc/rc.d/rc.sysinit来进行系统初始化的各种操作。例如设置时间、磁盘、文件系统、字体等启动系统服务(/etc/rc.d/rc)系统初始化完成后,整个操作系统的核心功能已经正常,但是对于用户正常使用,必须启动一些服务。这个时候需要根据执行级别执行相应的脚本来启动服务器。一般在/etc/rc.d目录下有各种级别的配置,/etc/rc*.d/就是脚本的映射。用户自定义引导程序(/etc/rc.d/rc.local)启动完成各种服务后,就意味着整个系统的功能可以正常使用了。如果用户想完成其他操作,可以在/etc/rc.d/rc.local中创建脚本或编写命令并执行,这样脚本或命令会在开机后执行。为什么不直接放到启动级别的目录下,然后修改启动脚本呢?第一种是因为在服务启动之前,某些功能或命令无法使用。二是麻烦。当然,如果用户写的程序想以系统服务方式启动,也可以放在里面。加载终端或桌面环境并启动各种服务后,会加载终端或界面并等待用户登录,即出现登录界面/登录提示。整个流程梳理后如下图所示
