作業系統學習筆記(二) 系統啟動流程

2021-09-22 05:48:23 字數 2005 閱讀 8160

上一節講解系統呼叫的過程中粗略的講了一下系統啟動的流程,然而實際上系統地啟動流程遠沒有那麼簡單,本節就稍微詳細地講解一下。但是實際上即使是這一節也無法十分詳細講解,只是讓我們對系統啟動的過程有乙個整體的認識而已。

首先是bios讀取引導程式的過程:系統加電後,cpu初始化,然後bios初始化硬體,然後查詢主引導記錄讀取主引導扇區**,這是由於現代計算機內通常不止有乙個分割槽,不同分區內可能有不同的作業系統,而我們需要知道我們要啟動的作業系統在哪個分區內(稱為活動分割槽),這就是通過讀取主引導記錄實現的。知道活動分割槽之後將活動分割槽引導扇區內的**讀取到記憶體並執行,引導扇區內的**讀取檔案系統的引導程式。這才是較為完整的讀取引導程式的過程。

那麼再詳細一點講,計算機上電後,首先是cpu初始化:cpu上電後,通過cs、ip兩個暫存器知道從0xffff0位址讀取第一條指令,這條指令是跳轉指令,跳轉到bios程式段。為什麼是0xffff0呢,這是因為cpu上電後會初始化cs:ip = 0xf000:fff0。並且cpu初始化後處於實模式,也就是16位系統,20位定址空間,是通過將cs左移4位與ip相加得到最終的位址因此指令指標pc = 16*cs+ip。20位定址空間自然意味著最大定址空間為2^20byte,即1m。

接下來是bios初始化:硬體自檢(rom等);檢測記憶體(ram)、顯示卡等關鍵部件是否存在,存在的話工作狀態是否正常;查詢並執行顯示卡等介面卡的bios(顯示卡等擁有自己的bios韌體),對裝置進行初始化;之後執行系統bios進行系統檢測,主要是為了檢測計算機有哪些即插即用裝置,比如硬碟、光碟機或者u盤;檢查完之後更新cmos中的擴充套件系統配置資料(escd)告知有哪些即插即用裝置;之後就可以按照指定的啟動順序從軟盤、硬碟或者光碟機啟動作業系統。

bios初始化完了,自然是要讀取主引導記錄。主引導記錄(mbr)的格式如下圖:啟動**限制為446位元組以內,用於檢查分割槽表的正確性、尋找活動分割槽並將活動分割槽引導程式載入到記憶體;還有64位元組用於儲存硬碟分割槽表,描述分割槽狀態和位置,最多表示4個分割槽,每個分割槽16位元組;還有乙個mbr結束標誌字(0x55aa),佔2位元組,只有有這個結束字才認為這條mbr是合法的mbr並執行啟動**。

當主引導記錄讀完並正確執行啟動**後,活動分割槽引導扇區的內容就被讀入記憶體,分割槽引導扇區格式如下圖:首先是跳轉指令,這條跳轉指令是與平台相關的,cpu不同則跳轉指令不同,跳轉至啟動**處;檔案捲頭結構則記錄檔案系統描述資訊;結束標誌也是0x55aa;啟動**則負責跳轉到引導程式,引導程式不儲存在引導扇區,而是儲存在磁碟中,只要在啟動**中記錄引導程式的位置即可。

活動分割槽引導扇區將引導程式讀入記憶體之後,引導程式的執行狀態如下圖:引導程式並不是直接讀取作業系統核心,而是從檔案系統中讀取啟動配置資訊;依據配置資訊(不同的核心有不同的配置資訊),確定啟動的核心或啟動引數(比如是安全模式啟動還是正常模式啟動);最後根據配置載入指定核心並轉到核心執行,此時將控制權轉移給了作業系統核心。

值的一提的是,以上所說為較早版本的系統啟動流程,隨著技術的發展,出現了uefi(unified extensible firmware inte***ce)統一可擴充套件韌體介面,這是bios的接任者。裡面有一些新的標準,比如mbr只能儲存4個分割槽的方式逐漸被淘汰,現在出現了gpt(globally unique identifier partition table)進行替代;uefi可以選擇啟用哪些韌體等。

Ubuntu 作業系統學習筆記之系統啟動詳解

執行引導程式 grub 載入核心 執行init runlevel bios,basic input output system,基本輸入輸出系統,存在於主機板的bios晶元上.計算機啟動首先執行bios 作用 1,硬體檢查 開機自檢 2,查詢可啟動裝置 可啟動裝置 具有引導程式,首512個位元組的最...

作業系統學習 01 x86系統啟動流程

在計算機系統加電時,執行bios啟動韌體,在cpu初始化完成之後,預設約定cs和eip的初始值 cs 段暫存器 eip 指令指標暫存器 由開發者手冊看出cs f000h eip 0000fff0,實際位址為base eip ffff0000h 0000fff0h fffffff0h這是bios的ep...

linux作業系統學習筆記(三)系統啟動及服務管理

啟動1.啟動bootmanager grub 2.載入系統核心,啟動init程序 init程序是系統根程序,所有系統程序都是它的子程序 3.init程序讀取 etc inittab檔案資訊,進入預設的執行級別,按順序執行具有不同優先順序的指令碼 一般 etc rcs.d 先執行,然後是其他的資料夾,...