linux啓動運行過程

一、linux系統開機啓動過程
1、開機自檢,加載BIOS;
2、讀取MRB;
3、Boot Loader Grub引導菜單;
4、加載kernel內核;
5、init進程根據inittab文件夾設定運行級別;
6、init進程執行rc.sysinit;
7、啓動內核模塊;
8、執行不同級別的腳本程序;
9、執行/etc/rc.d/rc.local;
10、執行/bin/login程序,啓動mingetty,進入登錄狀態。

二、詳細啓動過程
1、開機自檢,加載BIOS
當我們打開計算機電源時,隨後聽到滴的一聲,自檢開始,這個過程中主要是檢測我們計算機硬件,如CPU、內存、主板、顯卡、CMOS等設備是否正常。
2、讀取MRB
· BIOS自檢,首先會在一個Boot Sequence程序中搜索可以讓系統啓動的引導設備(例如選擇硬盤還是CD-ROM啓動等);
這時如果BIOS找不到引導的設備及相關程序的話,則會啓動失敗;如果順序找到相關的設備硬盤,那麼BIOS將把控制權移交給啓動設備的MBR(master boot recard)主引導記錄,大小爲512字節,存放預啓動信息、分區信息等。
3、Boot Loader Grub引導菜單
在MBR程序中找到其前446字節的Boot Loader,其是在操作系統內核運行前的一段小程序。通過這段小程序,我們可以初始化硬件設備、建立內存空間的映射圖,從而將系統的軟硬件帶到一個合適的狀態,以便爲最終調用操作系統內核做好一切準備。
Boot Loader有若干種,其中Grub、Lilo、spfdisk是常見的Loader
系統讀取內存的grub配置信息(一般爲menu.lst或grub.lst),並依照配置信息啓動不同的操作系統。
cat /etc/grub.conf或/boot/grub/grub.cfg
4、加載kernel內核
根據grub設定的內核映射所在路徑,系統讀取內存映像,並進行壓縮操作。此時,屏幕一般都輸出“Uncompressing linux”的提示。當解壓縮內核完成後,屏幕輸出“OK,Booting the kernel”。
系統將解壓後的內核置於內存之中,並調用start_kernel()函數來啓動一系列的初始化函數並初始化各種設備,完成linux核心環境的建立。linux內核建立起來,基於linux的程序可以正常運行。
start_kernel開始:
······內核完成的任務有:
硬件的特測
硬件驅動的初始化
掛載根文件系統
啓動Init進程
內核的功能:進程調度、內存管理、文件系統的管理、硬件驅動、網絡等。
內核自身初始化完成

5、init進程根據inittab文件夾設定運行級別
內核加載後,第一個運行的程序爲/sbin/init,該文件讀取/etc/inittab文件,並依舊此文件進行初始化工作。
/etc/inittab文件最主要的作用是設定linux的運行等級,其設定形式爲🆔5:initdefault,這就是表明Linux運行在等級5上,等級設定
cat /etc/inittab或/etc/init/rc-sysinit.conf
Linux的運行等級設定如下:

0:-halt  關機
1:-single user mode 單用戶模式
2:-Multi-user,without NFS無網絡支持的多用戶模式  類似於下面的run level3
3:-Full multi-user mode 有網絡支持的多用戶模式
4:-unused 保留,未使用
5:-X11  有網絡支持有X-Window支持的多用戶模式
6:- reboot 重新引導系統,即重啓

6、init進程執行rc.sysinit
在設定運行級別後,linux系統的第一個用戶層文件就是*/etc/rc/d/rc/sysinit*腳本程序,它的工作包括設定PATH、設定網絡配置(/etc/sysconfig/network)、啓動swap分區、設定/proc等等
7、啓動內核模塊
根據/etc/modules.conf文件或/etc/modules.d目錄下的文件裝載內核模塊。
8、執行不同級別的腳本程序
根據運行級別的不同,系統根據rc0.d到rc6.d相應的腳本程序,來完成相應的初始化工作和啓動的服務。
9、執行/etc/rc.d/rc.local
你如果打開了此文件,裏面有一句話,讀過之後,你就會對此命令的作用一目瞭然:
#This script will be executed after all the other init scripts.
#You can put your own initialization stuff in here if you don’t
#want to do the full Sys V style init stuff.

rc.local就是在一切初始化工作後,Linux留給用戶進行個性化的地方。你可以把你想設置和啓動的東西放到這裏。
10、執行/bin/login程序,啓動mingetty,進入登錄狀態。

總結:
理解操作系統開機引導和啓動過程對於配置操作系統和解決相關啓動問題是至關重要的。該文章陳述了 GRUB2 引導裝載程序開機引導裝載內核的過程和 systemd 初始化系統執行開機啓動操作系統的過程。
事實上,操作系統的啓動分爲兩個階段:引導和啓動。引導階段開始於打開電源開關,結束於內核初始化完成和 systemd 進程成功運行。啓動階段接管了剩餘工作,直到操作系統進入可操作狀態。
總體來說,Linux 的開機引導和啓動過程是相當容易理解,下文將分節對於不同步驟進行詳細說明。
BIOS 上電自檢(POST)
引導裝載程序 (GRUB2)
內核初始化
啓動 systemd,其是所有進程之父。

轉載至:https://blog.51cto.com/mrxiong2017/2084767
https://linux.cn/article-8807-1.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章