一、預備知識
在深入分析Linux內核啟動流程之前,需要先了解一些預備知識。
1. Linux的引導程序通常被稱為boot loader,其中最常用的boot loader是GRUB(Grand Unified Bootloader)。在系統啟動時,BIOS會先讀取啟動盤上的MBR(Master Boot Record)並將控制權傳遞給該MBR,MBR再加載boot loader,boot loader再加載內核。
2. Linux內核引導的參數可以通過boot loader來設置。例如,可以通過在GRUB的配置文件中指定boot loader選項來為內核引導指定參數。
3. Linux內核支持模塊化,內核啟動時只加載必需的模塊,其他模塊可以在需要時動態加載。
二、內核啟動流程
Linux內核啟動過程分為6個主要步驟:
1. 引導啟動加載
當計算機啟動時,操作系統內核被加載並運行。在Linux系統中,引導程序通常是GRUB。
GRUB的主要任務是加載內核並啟動系統。GRUB會查找內核文件並加載,然後將控制權傳遞給內核。
/boot/grub/grub.cfg文件示例:
menuentry 'Ubuntu' {
set root=(hd0,msdos1)
linux /vmlinuz-4.15.0-20-generic root=/dev/sda1
initrd /initrd.img-4.15.0-20-generic
}
在上述示例中,指定了Linux內核文件和root分區。initrd指定該系統使用哪個ramdisk文件。
2. 內核初始化
當內核啟動時,系統會進行以下操作:
1. 初始化虛擬內存和物理內存管理。
2. 掃描PCI總線上所有的設備,為它們分配I/O地址和中斷向量,並為它們建立虛擬文件系統中的設備節點。
3. 初始化文件系統。在Linux系統中,系統文件就是一種特殊的文件,也需要通過文件系統進行管理。
4. 初始化網絡和TCP/IP協議棧。
3. 運行init程序
當內核初始化完成後,會運行init程序。init程序是所有Linux進程的祖先進程。
init程序會讀取/etc/inittab文件,並按照該文件中指定的運行級別來啟動對應級別的應用程序。例如,如果運行級別為3,則會啟動多個系統級別的服務程序,包括系統日誌服務等。
4. 運行系統服務
在啟動時,Linux系統會啟動多個系統級別的服務程序。這些服務程序在運行級別中定義,通常包括網絡、文件、打印、安全等服務。
這些服務程序設置了許多參數和環境變量。例如,網絡服務程序設置了IP地址和路由表。
5. 運行用戶空間程序
當系統級別的服務程序初始化完成後,會啟動用戶級別的服務程序和應用程序。用戶級別的服務程序包括SSH服務、Web服務等,應用程序包括文本編輯器、郵件客戶端等。
6. 登錄系統
當所有用戶級別的服務程序和應用程序啟動完成後,系統處於就緒狀態,可以等待用戶登錄。
用戶登錄可通過字符終端或圖形界面完成。Linux系統支持多用戶登錄,每個用戶都有自己的配置文件和環境變量。
三、總結
本文簡要介紹了Linux內核啟動的流程。在這個過程中,大量的細節需要被處理,例如內存管理和文件系統安裝。Linux系統支持多種運行級別,可保證在不同的環境下配置所需的服務,適用於各種不同類型的用戶。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/198355.html