揭秘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就是硬盘。

相关文章
|
7天前
|
存储 缓存 监控
Linux缓存管理:如何安全地清理系统缓存
在Linux系统中,内存管理至关重要。本文详细介绍了如何安全地清理系统缓存,特别是通过使用`/proc/sys/vm/drop_caches`接口。内容包括清理缓存的原因、步骤、注意事项和最佳实践,帮助你在必要时优化系统性能。
120 78
|
11天前
|
Linux Shell 网络安全
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
本指南介绍如何利用 HTA 文件和 Metasploit 框架进行渗透测试。通过创建反向 shell、生成 HTA 文件、设置 HTTP 服务器和发送文件,最终实现对目标系统的控制。适用于教育目的,需合法授权。
44 9
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
|
1天前
|
算法 测试技术 持续交付
面试的流程,面试的重点
本文介绍了面试流程及各轮面试的重点。通常面试为1-5轮,首轮关注技术实力与项目经验,次轮深入考察技术细节,第三轮侧重项目协调、创新及价值观等软性问题,如职业规划和沟通能力。面试题分为开放型(如项目经验、解决问题思路)和非开放型(如技术细节、手撕算法),需提前准备。测试类问题涉及自动化测试、持续集成等实际应用。
|
7天前
|
存储 监控 Linux
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
56 13
|
1月前
|
Ubuntu Linux 网络安全
linux系统ubuntu中在命令行中打开图形界面的文件夹
在Ubuntu系统中,通过命令行打开图形界面的文件夹是一个高效且实用的操作。无论是使用Nautilus、Dolphin还是Thunar,都可以根据具体桌面环境选择合适的文件管理器。通过上述命令和方法,可以简化日常工作,提高效率。同时,解决权限问题和图形界面问题也能确保操作的顺利进行。掌握这些技巧,可以使Linux操作更加便捷和灵活。
32 3
|
7天前
|
Ubuntu Linux C++
Win10系统上直接使用linux子系统教程(仅需五步!超简单,快速上手)
本文介绍了如何在Windows 10上安装并使用Linux子系统。首先,通过应用商店安装Windows Terminal和Linux系统(如Ubuntu)。接着,在控制面板中启用“适用于Linux的Windows子系统”并重启电脑。最后,在Windows Terminal中选择安装的Linux系统即可开始使用。文中还提供了注意事项和进一步配置的链接。
25 0
|
18天前
|
存储 Oracle 安全
服务器数据恢复—LINUX系统删除/格式化的数据恢复流程
Linux操作系统是世界上流行的操作系统之一,被广泛用于服务器、个人电脑、移动设备和嵌入式系统。Linux系统下数据被误删除或者误格式化的问题非常普遍。下面北亚企安数据恢复工程师简单聊一下基于linux的文件系统(EXT2/EXT3/EXT4/Reiserfs/Xfs) 下删除或者格式化的数据恢复流程和可行性。
|
7月前
|
缓存 Linux 测试技术
安装【银河麒麟V10】linux系统--并挂载镜像
安装【银河麒麟V10】linux系统--并挂载镜像
2135 0
|
7月前
|
关系型数据库 MySQL Linux
卸载、下载、安装mysql(Linux系统centos7)
卸载、下载、安装mysql(Linux系统centos7)
254 0
|
2月前
|
Linux
手把手教会你安装Linux系统
手把手教会你安装Linux系统