【Linux导论】Linux引导流程(The Boot Process)

原文

LFS101x.2 Introduction to Linux (Linux Foundation)

Chapter 03: Linux Structure and Installation - Section 2: The Boot Process


引导流程 - (The Boot Process)

你是否想过,在你按下电源开关直至Linux登陆提示出现时,后台到底发生了哪些事?

Linux的引导过程是系统初始化的过程。它包含了第一次打开计算机直至用户界面完全运作之间的一切。

一旦你开始使用Linux,你会发现,深入理解系统的引导流程,可以帮助你快速诊断故障,同时也可以帮助你调整计算机性能以满足你的要求。

1.BIOS - The First Step

启动一台基于x86的Linux系统包含很多步骤。当计算机开机后,基本输入输出系统(Basic Input/Output System,BIOS)会初始化硬件,例如显示屏、键盘等等,并且测试主存储器。这个步骤被称为上电自检(Power On Self Test,POST)。

BIOS软件被存储在主板的一块ROM芯片中。在这个步骤之后,剩余的引导流程将会交给操作系统完成。

2.Master Boot Records (MBR) and Boot Loader

一旦完成上电自检(POST),系统的控制权由BIOS转给引导加载程序(boot loader)。引导加载程序通常存储在系统的其中一个硬盘中,要么在启动扇区(boot sector,对于传统的BIOS/MBR系统)中,要么在EFI分区(EFI partition,对于最近标准的可扩展固件接口,或称为EFI/UEFI系统)中。到这个阶段,机器还不能访问任何大规模存储设备。然后,日期、时间等信息,以及重要的外围设备从CMOS(一项基于电池供电的存储技术,保证系统掉电后仍可以记录日期和时间)中加载至系统。

有许多种适用于Linux的引导加载程序;最常见的是GRUB(用于统一引导加载程序)和ISOLINUX(用于从移动设备中启动)。大多数的Linux引导程序可以提供一个用户界面,用于选择Linux的可选引导项,甚至可以选择其他已安装的操作系统。当引导Linux之时,引导加载程序负责加载内核镜像(kernel image)以及初始RAM磁盘(initial RAM disk,包含一些关键文件和启动系统所需的驱动程序)到内存中。


3.Boot Loader in Action

引导加载程序包含两个不同的阶段:

The First Stage

对于使用BIOS/MBR方式的系统,引导加载程序存放在硬盘的第一个扇区,也被成为主引导记录(Master Boot Record,MBR)。MBR的大小仅仅512字节。在这个阶段,引导加载程序检查分区表,并找到一个可引导分区。一旦它找到了可引导分区,它将搜索第二阶段的引导加载程序,例如GRUB,并且将它加载到随机存储器(Random Access Memory,RAM)中。

对于使用EFI/UEFI方式的系统,UEFI固件读取引导管理器(Boot Manager)数据,以决定哪个UEFI应用启动且从哪启动(从哪个磁盘和分区可以找到EFI分区)。然后这个固件启动这个UEFI应用,例如GRUB,这个UEFI应用被定义为固件引导管理器的引导入口。这个过程更为复杂,但是比以往MBR方式更为灵活。

The Second Stage

第二阶段的引导加载程序位于 /boot 目录下。一个显示画面会出现,让我们选择引导哪个操作系统(Operating System,OS)。在选择完OS之后,引导加载程序加载选定操作系统的内核到RAM,然后将控制权交给它。

引导程序加载了选定的内核镜像(如果是Linux)并将控制权给它之后。内核几乎总是被压缩的,所以它的第一件事就是解压内核文件。然后,它会检查并分析系统硬件,并初始化内核中存在的所有硬件设备驱动。


4.Linux Kernel

引导程序将内核和一个基于RAM的初始文件系统(initramfs)加载到内存,使得initramfs可以被内核直接使用。

当内核在RAM中加载完毕,它会立刻初始化并配置计算机内存,同时也配置所有的系统硬件。这包括所有的处理器、I/O子系统、存储设备等等。内核同时也加载一些必要的用户空间程序。

5.初始RAM磁盘

initramfs文件系统镜像包含程序文件和二进制文件,这些文件可以完成挂载root文件系统所需的所有操作。比如,给所需的文件系统提供内核功能,给大容量存储控制器提供设备驱动udev(为用户设备),这些驱动负责找出哪些设备可用,定位这些设备正常工作所需的驱动,并且加载它们。当找到root文件系统之后,检测是否有错,并挂载文件系统。

挂载(mount)程序会指示操作系统,文件系统已经可用,并将文件系统全局层次的一个特定点与之关联,这个点称为挂载点(themount point)。如果操作成功,initramfs将会从RAM中清除,然后root文件系统下(/sbin/init)的init程序将会执行。

init程序处理挂载和跳转到最终实际的root文件系统。如果在大容量存储器可以访问之前,需要一些特殊的硬件驱动,这些驱动必须包含在initramfs镜像中。


6./sbin/init 和服务

一旦内核设置完所有的硬件并挂载root文件系统,内核执行 /sbin/init程序。然后,这变成了初始化进程,然后开始其他进程以使得系统运转。大多数系统上的进程,追其来源,都来自与init;例外的是内核进程,内核进程直接由内核启动,管理操作系统的内部细节。

传统上,这个进程启动所使用的约定,可以追溯到System V UNIX时期,系统运行是通过一系列的运行等级(runlevel)和一系列启动/停止服务的脚本来完成的。每个运行等级支持运行系统的不同模式。在每个运行等级,个人服务可以设置开始运行,或者停止运行。更新的发行版本抛弃了System V约定,但是通常为了兼容性仍支持System V约定。

除了启动系统,init还要负责保持系统运行或完全关闭系统。它扮演了所有非内核进程“最终管理者”的角色。当必要时会在进程结束后清理它们,当用户需要登陆/登出时会重启用户登录服务。


7.Text-Mode Login

在引导进程接近结束之时,init启动了一系列文本模式登陆提示(通过一个叫做getty的程序)。这使得你能够输入自己的用户名,密码,并最终进入命令shell界面。

通常,这个命令shell叫做bash(the GNUBourne Again Shell),但是也存在很多其他高级的命令shell可用。shell会打印出一个文本提示,表明已经准备好接受命令;当用户输入命令并敲击Enter键之后,命令会被执行,然后另一个文本提示会在命令执行后显示。

就如你在Command Line Operations章节所学到的那样,运行命令shell的终端可以通过ALT加功能键(functionkey)访问。大多数发行版本从F1或者F2开始,开启6个文本终端和一个图形终端。如果图形终端也启动了,那么切换至文本终端需要按CTRL+ALT再加上相应的功能键(F1或者F7是GUI)。如你接下来将简要看到的,如果你在一个纯文本模式,想要打开或重启图形桌面,需要运行startx命令。


8.X Window System

通常,在Linux桌面系统中,加载X Window System是引导进程的最后一步。

一个叫做显示管理器(display manager)的服务会被提供,用于保持显示追踪,并加载X Server(之所以这么叫它,是因为它给应用程序提供图形服务,有时也称为X clients)。这个显示管理器也负责图形登陆,在用户登录后打开特定的桌面环境。

9.More About the X Window System

一个桌面环境包括会话管理器(session manager,启动并保持图形会话组件),窗口管理器(the window manager,控制窗口、窗口标题栏、控制栏的放置和移动)。

尽管可以被混合,通常一系列工具、会话管理器和窗口管理器是作为一个整体使用,一起提供一个无缝的桌面环境。

如果显示管理器并不是以默认的运行等级启动,你可以以一种不同的方式启动X:在登陆进入文本模式终端后,通过在命令行运行startx命令开启X



转载于:https://www.cnblogs.com/lixuebin/p/10814880.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/458859.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算一行文本的高度

计算一行文本的高度 说明 有时候我们需要知道指定的几行文本的高度,此工具用于解决此种问题。 源码 // // NSStringLabelWidthAndHeight.h // ZiPeiYi // // Created by YouXianMing on 15/12/9. // Copyright © 2015年 YouXianMing. All rights reserved.…

用fputc()函数以字符串形式写入字符到磁盘文件

2019独角兽企业重金招聘Python工程师标准>>> #include <stdio.h> #include <stdlib.h>int main(){FILE *fp;char ch;if((fpfopen("testfile", "a")) NULL){fprintf(stderr, "Error opening file.\n",fp);exit(1);}print…

android 浮动文字提示,Android实现自由拖动并显示文字的悬浮框

项目中需要实现一个状态显示的悬浮框&#xff0c;要求可以设置两种模式&#xff1a;拖动模式和不可拖动模式。实现效果图如下&#xff1a;实现步骤&#xff1a;1.首先要设置该悬浮框的基本属性&#xff1a;/*** 显示弹出框** param context*/SuppressWarnings("WrongConst…

PHP的安装

PHP的环境也是诸多服务器软件的必要因素之一&#xff0c;它是一个HTML内嵌式语言&#xff0c;在服务器端执行。由于PHP的开源高效化平台&#xff0c;所以搭建一个php环境是一个运维工程师必备的能力。现在lamp也有类似lnmp.org那种一键安装包&#xff0c;地址是http://yumlamp.…

ntfs for mac使用注意事项有哪些?

2019独角兽企业重金招聘Python工程师标准>>> mac的用户有很多&#xff0c;一些用户朋友会发现自己的电脑是无法读写ntfs驱动器的。而ntfs驱动器又是一种常用的驱动器。面对这种情况我们可以选择用NTFS for Mac软件来帮助我们&#xff0c;它可以读写ntfs驱动器&#…

android音乐播放器文章,Android复习09【内容提供者、音乐播放器】

目 录PersonCpPersonCp.javainsert()ContentObserver音乐播放器1、添加读写权限1.1、动态权限授予(调用封装好的方法)2、获取音乐文件(MainActivity.java)2、Music.java(实体类)申请访问SD卡的权限设置适配器下拉刷新PersonCpPersonCp.javapackage cn.wangzg.personcp;import a…

程序员的业余项目

程序员的业余项目&#xff0c;我们也叫它 side project。 前几天&#xff0c;100offer 发起了一场活动叫 <寻找实干和坚持的技术力量>&#xff0c;他们是这么说的&#xff1a; 世界在被代码改变着&#xff0c;而我们在创造着代码。 仅仅是因为好玩&#xff0c;他开发了…

小米 android 8,小米华为们谁最良心?10大手机厂商安卓8.0升级情况盘点

3月8日&#xff0c;谷歌放出了首个安卓9.0开发者预览版的固件包&#xff0c;不出意外的话&#xff0c;它的正式版会在今年正式亮相。但对广大安卓用户来说&#xff0c;想要立刻用上最新系统并非易事。目前来说&#xff0c;安卓碎片化问题依然严重&#xff0c;我们不妨现实点&am…

窥探Swift之数组安全索引与数组切片

在Swift中的数组和字典中下标是非常常见的&#xff0c;数组可以通过索引下标进行元素的查询&#xff0c;字典可以通过键下标来获取相应的值。在使用数组时&#xff0c;一个常见的致命错误就是数组越界。如果在你的应用程序中数组越界了&#xff0c;那么对不起&#xff0c;如果由…

android tee,Android 9.0的新增安全特性与TEE

Android P&#xff0c;预计将于 2018 年第三季度发布最终版本。特别是Android8.0以来&#xff0c;安全性是Android版本变更的一个重要因素。从安全性增强方面来看&#xff0c;本次Android9.0版本主要有以下几个方面&#xff1a;统一的指纹身份验证对话框Android P 中&#xff0…

canny算子的理论分析

****************************************************************************************************************************************** 红&#xff1a;数字图像处理视频教程&#xff08;两部&#xff09; {中科院版36讲视频教程 电子科大版70讲视频教程&#x…

web框架-Struts开始

问题&#xff1a; 为什么有structs 作为一种框架&#xff08;frameset&#xff09;可以与传统的mvc进行比较&#xff1f; MVC是一种模式数据处理、显示和数据输入分开&#xff0c;来规范开发&#xff0c;但是却又并不规范。可以这样想&#xff1a;有三家公司&#xff0c;他们对…

接口自动化测试 返回html,接口自动化测试实战(更新完毕)

前言自动化没练习的项目怎么办&#xff1f;自动化已经成为测试的必备技能之一了&#xff0c;所以&#xff0c;很多想跳槽的测试朋友都在自学&#xff0c;特别是最实用的接口自动化&#xff0c;但是很多人因为没有可以练手的项目而苦恼&#xff0c;最终导致缺乏实战经验&#xf…

Opencv 图像增强算法 图像检测结果及代码

****************************************************************************************************************************************** 红&#xff1a;数字图像处理视频教程&#xff08;两部&#xff09; {中科院版36讲视频教程 电子科大版70讲视频教程&#x…

山寨“饿了么”应用中添加菜品数量按钮效果

山寨“饿了么”应用中添加菜品数量按钮效果 本人视频教程系类 iOS中CALayer的使用 最终效果&#xff1a; 山寨源头&#xff1a; 源码&#xff1a;&#xff08;此源码解决了重用问题&#xff0c;可以放心的放在cell中使用&#xff09; AddAndDeleteButton.h 与 AddAndDeleteBu…

html间数据传送,Express框架与html之间如何进行数据传递(示例代码)

关于Node.js 的Express框架介绍&#xff0c;推荐看菜鸟教程的Express框架&#xff0c;很适合入门&#xff0c;这里不再赘述&#xff0c;这里主要讲一下Express框架与html之间如何进行数据传递我采用的是JQuery的Ajax()向后台传参方式(url传参)1、Type属性为Get时&#xff1a;(1…

数字图像去噪典型算法及matlab实现

图像去噪是数字图像处理中的重要环节和步骤。去噪效果的好坏直接影响到后续的图像处理工作如图像分割、边缘检测等。图像信号在产生、传输过程中都可能会受到噪声的污染&#xff0c;一般数字图像系统中的常见噪声主要有&#xff1a;高斯噪声&#xff08;主要由阻性元器件内部产…

图像增强-图像锐化

图像锐化主要影响图像中的低频分量&#xff0c;不影响图像中的高频分量。 图像锐化的主要目的有两个&#xff1a; 1.增强图像边缘&#xff0c;使模糊的图像变得更加清晰&#xff0c;颜色变得鲜明突出&#xff0c;图像的质量有所改善&#xff0c;产生更适合人眼观察和识别的图像…

[译]git revert

git revert git revert用来撤销一个已经提交了的快照. 但不是从项目历史中移除这个commit, 而是生成一个新的commit, 老的commit还是保留在历史项目里面的. 这样做的好处是防止了项目丢失历史. 用法 git revert <commit>生成一个新的commit, 撤销老的<commit>的所有…

VMware桥接模式无法连网

2019独角兽企业重金招聘Python工程师标准>>> #VMware桥接模式无法连网 在VMware上装了个CentOS7&#xff0c;使用桥接模式连网&#xff0c;开始使用的时候没有问题&#xff0c;可以正常上网。最近打开的时候发现上不了网了&#xff0c; 使用ifconfig查看也没有分配到…