Linux开机启动(bootstrap)
计算机开机是⼀个神秘的过程。我们只是按了开机键,就看到屏幕上的进度条或者⼀⾏⾏的输出,直到我们到达登录界⾯。然⽽,计算机开机⼜是个异常脆弱的过程,我们满⼼期望的登录界⾯可能并不会出现,⽽是⼀个命令⾏或者错误信息。了解计算机开机过程有助于我们修复开机可能出现的问题。
最初始阶段
当我们打开计算机电源,计算机会⾃动从主板的BIOS(Basic Input/Output System)读取其中所存储的程序。这⼀程序通常知道⼀些直接连接在主板上的硬件(硬盘,⽹络接⼝,键盘,串⼝,并⼝)。现在⼤部分的BIOS允许你从软盘、光盘或者硬盘中选择⼀个来启动计算机。
下⼀步,计算机将从你所选择的存储设备中读取起始的512个字节(bytes)。如果我们从光盘启动的话,那么计算机就会读取光盘最开始的512个字节。这512个字节叫做主引导记录MBR (master boot record)。MBR会告诉电脑从该设备的某⼀个分区(partition)来装载引导加载程序(boot loader)。引导加载程序储存有操作系统(OS)的相关信息,⽐如操作系统名称,操作系统内核 (内核)所在位置等。常⽤的引导加载程序有GRUB和LILO。
随后,引导加载程序会帮助我们加载内核(kernel)。内核实际上是⼀个⽤来操作计算机的程序,它是计算机
操作系统的内核,主要的任务是管理计算机的硬件资源,充当软件和硬件的接⼝。操作系统上的任何操作都要通过内核传达给硬件。Windows和Linux各⾃有⾃⼰内核。狭义的操作系统就是指内核,⼴义的操作系统包括内核以及内核之上的各种应⽤。
(Linus Torvalds与其说是Linux之⽗,不如说是Linux 内核之⽗。他依然负责Linux 内核的开发和维护。⾄于Ubuntu, Red Hat, 它们都是基于相同的内核之上,囊括了不同的应⽤和界⾯构成的⼀个更加完整的操作系统版本。)
linux怎么读取光盘文件实际上,我们可以在多个分区安装引导加载程序,每个引导加载程序对应不同的操作系统,在读取MBR的时候选择我们想要启动的引导加载程序。这就是多操作系统的原理。
⼩结:BIOS -> MBR -> 引导加载程序 -> 内核
内核
如果我们加载的是Linux内核,Linux内核开始⼯作。内核会⾸先预留⾃⼰运⾏所需的内存空间,然后通过驱动程序(driver)检测计算机硬件。这样,操作系统就可以知道⾃⼰有哪些硬件可⽤。随后,内核会启动⼀个init进程。它是Linux系统中的1号进程(Linux系统没有0号进程)。到此,内核就完成了在计算机启动阶段的⼯作,交接给init来管理。
⼩结: 内核 -> init process
init process
(根据boot loader的选项,Linux此时可以进⼊单⽤户模式(single user mode)。在此模式下,初始脚本还没有开始执⾏,我们可以检测并修复计算机可能存在的错误)
随后,init会运⾏⼀系列的初始脚本(startup scripts),这些脚本是Linux中常见的shell scripts。这些脚本执⾏如下功能:
设置计算机名称,时区,检测⽂件系统,挂载硬盘,清空临时⽂件,设置⽹络……
当这些初始脚本,操作系统已经完全准备好了,只是,还没有⼈可以登录。init会给出登录(login)对话框,或者是图形化的登录界⾯。
输⼊⽤户名(⽐如说vamei)和密码,DONE!
在此后的过程中,你将以⽤户(user)vamei的⾝份操作电脑。此外,根据你创建⽤户时的设定,Linux还会将你归到某个组(group)中,⽐如可以是stupid组,或者是vamei组。
所以你将是⽤户vamei,同时是vamei组的组员。(注意,组vamei和⽤户vamei只是重名⽽已,就好想你可以叫Dell, 同时还是Dell公司的⽼板⼀样。你完全也可以是⽤户vamei,同时为stupid组的组员)
总结
BIOS -> MBR -> 引导加载程序 -> 内核 -> init process -> login ⽤户,组。
欢迎阅读系列⽂章
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论