【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.pswp.cn/news/458859.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458859.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458859.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

String類 寫出類的成員函數實現

*************************************************** 更多精彩,歡迎進入:http://shop115376623.taobao.com *************************************************** 已知String類定義如下: class String { public: String(const char *str …

android 管理類,android 線程管理類

1. 延時任務以及取消延時的應用場景:實時搜索,文字內容變化時候不發送請求,當停止變化指定時間后再發送請求2. 使用方法:// 回到主線程MainThreadHelper.runOnUIthread(new Runnable() {Overridepublic void run() {// pushActivi…

計算一行文本的高度

計算一行文本的高度 說明 有時候我們需要知道指定的幾行文本的高度,此工具用于解決此種問題。 源碼 // // NSStringLabelWidthAndHeight.h // ZiPeiYi // // Created by YouXianMing on 15/12/9. // Copyright © 2015年 YouXianMing. All rights reserved.…

python筆記-python編程優化:常用原則和技術介紹

本人翻譯自《Exper Python Programming》 Premature optimization is the root of all evil in programming -Donald Knuth 優化的三原則 讓它跑起來先一個非常常見的錯誤就是在編寫代碼之初我們就開始對代碼進行優化。讓人傷心的是這通常做的都是無用功,很多軟…

C++成員函數重載、覆蓋和隱藏的區別

*************************************************** 更多精彩&#xff0c;歡迎進入&#xff1a;http://shop115376623.taobao.com *************************************************** C成員函數重載、覆蓋和隱藏的區別class Base{public:void Walk(int x){ cout <<…

用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…

Android4.2.2的Stagefright維護編解碼器的數據流

這里是他們自己的源代碼閱讀點滴總結屬性&#xff0c;轉請注明出處&#xff0c;謝謝。歡迎和大家分享。qq:1037701636 email:gzzaigcn2012gmail.comAndroid源代碼版本號Version&#xff1a;4.2.2; 硬件平臺 全志A31前沿&#xff1a;在前面的博文中&#xff0c;基本提到的是stag…

PHP的安裝

PHP的環境也是諸多服務器軟件的必要因素之一&#xff0c;它是一個HTML內嵌式語言&#xff0c;在服務器端執行。由于PHP的開源高效化平臺&#xff0c;所以搭建一個php環境是一個運維工程師必備的能力。現在lamp也有類似lnmp.org那種一鍵安裝包&#xff0c;地址是http://yumlamp.…

android 橫向鋪滿,Android開發全程記錄(八)——設置ImageView顯示的圖片鋪滿全屏(適應魅族等不常見屏幕比例)...

為適應不同屏幕的手機&#xff0c;ImageView顯示的圖片可能不鋪滿屏幕&#xff0c;如果定高的話&#xff0c;兩邊可能會出現空白。魅族手機就會有這種情況&#xff0c;在其他手機里顯示正常&#xff0c;在魅族手機里顯示&#xff0c;圖片左右兩邊會出現空白&#xff0c;為解決這…

tihs 關鍵字

//this關鍵詞/*調用類中的屬性 調用類中的方法或構造方法 調用當前對象&#xff0c;調用自己的方法&#xff0c;可以省略。 */ //http://blog.sina.com.cn/s/blog_71f6c1980100wtj4.html//this指當前對象自己public class Google{String s"hello";public Google(Stri…

良好的編程習慣

*************************************************** 更多精彩&#xff0c;歡迎進入&#xff1a;http://shop115376623.taobao.com *************************************************** 良好的編程習慣良好的習慣對于人的成長是非常重要的&#xff0c;良好的編程習慣對于我…

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;他開發了…

C語言的數組名和對數組名取地址

*************************************************** 更多精彩&#xff0c;歡迎進入&#xff1a;http://shop115376623.taobao.com *************************************************** 相信不少的C語言初學者都知道&#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;如果由…

大小端模式的快速判斷方法

*************************************************** 更多精彩&#xff0c;歡迎進入&#xff1a;http://shop115376623.taobao.com *************************************************** 大小端的問題剖析&#xff1a; 嵌 入式系統開發者應該對Little-endian和Big-endian模…

【RAC】How to Proceed from Failed 11gR2 CRS Installation

Applies to: [ID 942166.1] Oracle Server – Enterprise Edition – Version: 11.2.0.1 to 11.2.0.2 – Release: 11.2 to 11.2 Generic UNIX Generic Linux Goal This goal of this note is to provide steps to proceed from failed 11gR2 Grid Infrastructure installat…