揭秘linux系统启动流程,面试官问起来再也不怕了

简介: 揭秘linux系统启动流程,面试官问起来再也不怕了

image.png一台linux系统的电脑,从按下开关到登录到系统上整个过程,经历了什么,这是我们这次要讨论的问题。

其实一共有四个阶段

  1. BIOS启动引导阶段
  2. GRUB启动引导阶段;
  3. 内核阶段;
  4. init初始化阶段。


1. BIOS启动引导阶段


在通电的瞬间,ROM只读芯片中的开机程序被触发,这个程序开始监测各个硬件的健康状态,监测通过才进行下一步。


这个只读开机程序就叫做"基本输入输出系統"(Basic Input/Output System),简称为BIOS。


健康检查的过程叫做"硬件自检"(Power-On Self-Test),缩写为POST。


上个世纪70年代初,“只读内存”(read-only memory,缩写为ROM)发明,开机程序被刷入ROM芯片,计算机通电后,第一件事就是读取它。这块芯片里的程序就叫做"基本输入输出系統"(Basic Input/Output System),简称为BIOS。

BIOS主要干了些什么呢?


硬件自检


系统上电开机后,BIOS程序首先检查,计算机硬件(如:CPU、内存、显卡、I/O、键盘鼠标等)能否满足运行的基本条件,这叫做"硬件自检"(Power-On Self-Test),缩写为POST。


寻找启动设备


当硬件检测通过后,BIOS把控制权转交给下一阶段的启动程序。

下一阶段的启动程序放在哪个设备上呢?

BIOS已经设置好了启动顺序表,如图


aHR0cHM6Ly9jb2RpbmczbWluLm9zcy1hY2NlbGVyYXRlLmFsaXl1bmNzLmNvbS9jb2RpbmczbWluLzIwMjAvMDIvMjUvMkUwNjhCQUE0RjRCNDU2MzhBRkRBNUVBMTkzMTRCNkMuanBn.png


按照这个顺序,扫描是否有这些设备插入(比如硬盘、U盘等),如果有而且这些设备也是启动设备,那就把控制权交出去。


那么我们是怎么知道他是个启动设备?以及操作系统的位置在哪呢?


引导启动的两个阶段

MBR


BIOS按照"启动顺序",把控制权转交给排在第一位的储存设备。


这时,计算机读取该设备的0柱面0磁道1扇区,也就是读取最前面的512个字节。


如果这512个字节的最后两个字节是0x55和0xAA(主引导记录签名),表明这个设备就是启动设备。


如果不是,表明设备不能用于启动,控制权于是被转交给"启动顺序"中的下一个设备。


这最前面的512个字节,就叫做"主引导记录"(Master boot record,缩写为MBR)。


MBR里面存储了系统预启动信息、分区表和主引导记录签名。


MBR上有一个指针,存了下一个引导程序的位置,CPU到该指针所指向的地址读取Boot Loader(引导加载程序)。


Boot Loader(引导加载程序)


对应于Linux系统,就是GRUB,它本身可以看作一个小型操作系统,内置了简单的文件系统,可以读取分区。


所以 grub 启动之后首先用到/boot目录,读取/boot/grub/grub.conf显示启动菜单。


aHR0cHM6Ly9jb2RpbmczbWluLm9zcy1hY2NlbGVyYXRlLmFsaXl1bmNzLmNvbS9jb2RpbmczbWluLzIwMjAvMDIvMjUvNTE3Q0I0MTE3OEYyNEY5NzlGMEUxRDg1QjgxQzlEREUuanBn.png


所以GRUB系统的具体作用是

A.提供一块硬盘上所有安装的系统的选择菜单;

B.载入操作linux系统内核,移交控制权给内核;

C.将控制权移交给其他系统的boot loader


也就是说在grub启动,在屏幕上呈现出操作系统的选择菜单,如果你并没有选择linux,而是选择了windows那么grub就会把控制权交给ntldr,进而启动windows操作系统。


内核阶段


在启动菜单选择了内核以后,GRUB会负责解压和装载内核镜像,并且将initrd装载到内存中,最后GRUB初始化内核启动代码,完成之后后续的引导权,被移交给内核。


简单介绍下initrd,initrd是一个被压缩过的小型根目录,这个目录中包含了启动阶段中必须的驱动模块,可执行文件和启动脚本。


操作系统的核心是放在文件系统中的,要想正确加载核心就必须提前识别文件系统。核心文件一般会放在/boot/vmlinuz。


在系统启动的控制权移交给kernel后,Kernel会立即初始化系统中各设备并做相关配置工作,其中包括CPU、I/O、存储设备等。


配置过程中进行设备驱动加载的时候,一部分设备的驱动编入Linux Kernel中,Kernel会调用这部分驱动初始化相关设备;另外有一部分设备驱动并没有编入Kernel,而是作为模块形式放在initrd中。


initrd是一种基于内存的文件系统,启动过程中,系统在访问真正的根文件系统时,会先访问initrd文件系统。


将initrd中的内容打开来看,会发现有bin、dev、etc、lib、proc、sys、sysroot、init等文件(包含目录)。


initrd中的内容释放到rootfs(根文件系统)中后,Kernel会执行其中的init文件。


这个时候内核的控制权移交给init文件处理。


驱动加载后,会创建一个根设备,然后将根文件系统以只读的方式挂载。


这步结束后释放未使用内存并执行switch root,转换到真正的根上面去,同时运行/sbin/init程序,开启系统的1号进程,此后系统启动的控制权移交给 init 进程。


当这些完成时,用户空间的第一个程序(init)开始执行,这样就开始顶层系统初始化开始了。


Init初始化阶段


在核心加载完成之后,系统就准备好了,等待程序的执行。整个linux系统中,第一个执行的程序就是“/sbin/init”。


执行系统初始化脚本(/etc/rc.d/rc.sysinit),对系统进行基本的配置,以读写方式挂载根文件系统及其它文件系统,到此系统基本算运行起来了;通过读取配置文件/etc/inittab确定启动后进入的运行级别,在选定运行级别后进入相应的“/etc/rc.d/rcX.d”目录中运行相应的服务内容,该目录下的内容全部都是以S或K开头的链接文件,这些链接文件都链接到“/etc/rc.d/init.d”目录下的各种shell脚本,通过执行这些shell脚本,完成了系统所有的启动任务,linux会启动终端或X-Window来等待用户登录。


QA


RAM与ROM都是半导体存储介质


RAM是随机存取存储器(random access memory),是计算机内部存储器中的一种,也是其中最重要的,计算机和手机中一般把其叫做(运行)内存,它的速度要比硬盘快得多,所以用运行程序在RAM中,而存放运行时不用的数据则在硬盘中,什么时候需要数据,便把数据从硬盘中拿到内存,但同时RAM断电会丢失数据,所以我们电脑如果断电了就会丢失原来正在运行的数据。所以,手机中的RAM和电脑中的RAM的概念是相同的,RAM即内存越大,能同时在内存中执行的程序就越多,性能一般是越好的。


ROM是只读存储器(Read-Only Memory),也是计算机内部存储器中的一种,而硬盘是外部存储器。早期的ROM因为技术不成熟所以无法擦写,出厂后就只能读数据,所以叫只读存储器,BIOS就是写在ROM中的。后来随着技术的发展,在ROM的基础上出现了新的半导体存储介质EPROM和EEPROM,这两种可擦写,这就不符合ROM的命名,但是由于是在ROM的技术上衍变出来的,所以延用了一部分原来的叫法,此时非易失的半导体存储介质开始得以广泛应用,被大量用于电脑主板的bios和嵌入式存储,而后来在这两种技术的发展上又发展出了NAND FLASH闪存。


硬盘分为两种,一种是机械硬盘(即磁盘HDD),一种是固态硬盘(SSD),磁盘和ROM没什么关系,但是固态硬盘就不一样了,固态硬盘用到的颗粒也是基于NAND FLASH技术,和u盘以及手机存储有点相似,所以说硬盘和ROM还是有关系的,固态硬盘是ROM技术发展的产物,但不能说ROM就是硬盘。

相关文章
|
3天前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
19 3
|
3天前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
16 2
|
3天前
|
安全 网络协议 Linux
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。通过掌握 ping 命令,读者可以轻松测试网络连通性、诊断网络问题并提升网络管理能力。
18 3
|
6天前
|
安全 Linux 数据安全/隐私保护
在 Linux 系统中,查找文件所有者是系统管理和安全审计的重要技能。
在 Linux 系统中,查找文件所有者是系统管理和安全审计的重要技能。本文介绍了使用 `ls -l` 和 `stat` 命令查找文件所有者的基本方法,以及通过文件路径、通配符和结合其他命令的高级技巧。还提供了实际案例分析和注意事项,帮助读者更好地掌握这一操作。
23 6
|
6天前
|
Linux
在 Linux 系统中,`find` 命令是一个强大的文件查找工具
在 Linux 系统中,`find` 命令是一个强大的文件查找工具。本文详细介绍了 `find` 命令的基本语法、常用选项和具体应用示例,帮助用户快速掌握如何根据文件名、类型、大小、修改时间等条件查找文件,并展示了如何结合逻辑运算符、正则表达式和排除特定目录等高级用法。
31 6
|
7天前
|
机器学习/深度学习 自然语言处理 Linux
Linux 中的机器学习:Whisper——自动语音识别系统
本文介绍了先进的自动语音识别系统 Whisper 在 Linux 环境中的应用。Whisper 基于深度学习和神经网络技术,支持多语言识别,具有高准确性和实时处理能力。文章详细讲解了在 Linux 中安装、配置和使用 Whisper 的步骤,以及其在语音助手、语音识别软件等领域的应用场景。
33 5
|
7天前
|
监控 网络协议 算法
Linux内核优化:提升系统性能与稳定性的策略####
本文深入探讨了Linux操作系统内核的优化策略,旨在通过一系列技术手段和最佳实践,显著提升系统的性能、响应速度及稳定性。文章首先概述了Linux内核的核心组件及其在系统中的作用,随后详细阐述了内存管理、进程调度、文件系统优化、网络栈调整及并发控制等关键领域的优化方法。通过实际案例分析,展示了这些优化措施如何有效减少延迟、提高吞吐量,并增强系统的整体健壮性。最终,文章强调了持续监控、定期更新及合理配置对于维持Linux系统长期高效运行的重要性。 ####
|
11天前
|
缓存 监控 Linux
|
14天前
|
Linux Shell 数据安全/隐私保护