我們介紹一下CentOS操作系統的詳細啟動流程,了解這些啟動流程之后,我們可以實驗做一個小型的Linux。
1、Linux的組成
我們Linux操作系統主要內核和根文件系統來組成的,那么內核的主要功能分別有:進程管理、內存管理、網絡協議棧、文件系統、安全功能、驅動程序組成,那么部署內核的地方就叫核心文件那么核心文件稱之為bzimage,在/boot分區目錄下,名為vmlinuz-VERSION,它是一個可引導的、壓縮的一個內核,是開機時加載的重要的一環。它們的組成部分分為兩類,一類內核文件,一類時模塊文件,內個文件在/boot/vmlinuz-VERSION-realease
,而模塊文件在/lib/modules/VERSION-release
中,如果我們編譯安裝新的內核版本時,系統將會有多個目錄版本。
2、Linux的運行環境
在內核的運行的環境當中可分為兩個層次,一類是內核空間,一類是用戶空間,內核空間主要是內核代碼,運行時作為系統調用,而用戶空間主要是那些應用的空間,運行時可作為進程或線程。Linux的內核設計是單內核的設計,內核設計流派總的來說分為兩類,一個是單內核設計,而單內核的設計是把所有功能集成與同一個程序,另一類是微內核設計,就是將每種功能都由它的子功能來實現,其采用微內核的操作系統有:Windows和Solaris。
但是Linux內核又汲取了微內核的特性,其特性就是支持模塊化,意思就是在用戶編譯內核時,不必要把所有功能全部都打在一個內核文件中,我們可以把某個功能編譯成一個模塊放在那個路徑里中,等到我們需要時可以安裝,不
需要重新編譯,所以,Linux的內核支持模塊運行時動態裝載與卸載。
再說一下ramdisk,它是一個輔助性的文件,在CentOS 5中名字叫作Sysn init,配置文件在 /etc/inittab
,主要作用就是設置運行級別然后啟動第一個進程init,Sysv init早期在Unix上流傳下來的,不過由于啟動太慢,主要不是并行啟動,且還要緩沖,所以在CentOS
6中使用的Upstart,它是一個并行啟動的一個程序,早期用于ubuntu,后來用于CentOS上,它的啟動速度比CentOS快的很多,因為它的CentOS 5的initrd
在CentOS 6上換成了initramfs
由原來的模擬磁盤換成了模擬文件系統,這是一種提速機制,一旦轉換成文件系統的話就不需要進行緩沖了。
現在的CentOS 7中,采用了全新的一種啟動軟件,叫systemd,與之前的版本改變很大,管理起來也是全新的模式,不過啟動速度比5和6還要快,因為它只是檢測,檢測到在的話,就檢測下一個程序,并不讓這個程序啟動起來。
3、Linux的啟動流程
現在說一下CentOS的啟動流程,這里主要還是以6為主,且只使用PC架構。
3.1、POST加電自檢
第一步,在我們開機時,或者說我們插上電時,PC機會自我檢查一下它們的零件組成結構有沒有缺失,如果零件缺失那么我們的主機豈不是啟動不了啦?其實對于啟動PC來說每一步都挺重要的。那么有誰來管理?在我們的主板上有個CMOS斷電時那個紐扣電池來給它們供電保持運行,在CMOS中有個小型系統,叫做BIOS,叫基本輸出輸出系統,如果說對硬件設置或者說開啟支持虛擬化的話,就要進入這個小型系統設置,以上這些叫加電自檢
(POST)
。
3.2、Boot Sequence(啟動次序)
第二步就是它的啟動次序 (Boot Sequence)
按次序查找引導設備,第一個有引導程序的設備就在本次要用到的設備,其主要的程序是bootloader
,它是一個引導加載器,是安裝在U盤、硬盤上的第一個程序,那么我們操作系統在啟動時,通常都是靠bootloader來啟動的,在MBR
上占據446個字節,通常我們在安裝系統時,操作系統的引導啟動程序都寫進這個bootloader里,Windows和Linux都使用不同的引導程序,前者使用ntloader
,后者使用的時grub
,我們來講后者。
3.3、MBR
第三步MBR叫做主引導記錄,共有512個字節,位于第一個扇區上,這個扇區是不能更改的,其中446個字節是我們在安裝操作系統時寫的bootloader,64位是分區表,最后2位是驗證。
在我們安裝Linux時,安裝引導程序的叫grub,以下共分為三段:
1st_stage:主要寫進了bootloader
1.5_st_stage:讓1st_stage區識別2stage所在的系統分區(/boot/grub)
2_stage:放置在某個分區的路徑下(/boot/grub)
功能時提供一個菜單界面,允許用戶選擇不同的操作系統與內核,一旦選擇完成之后,內核就放在一個RAM中一個特定的空間里,展開與解壓之后將系統控制權移交給內核。
3.4、Kernel
第四步Kernel是Linux的核心,它是將硬件調用起來,并且驅動它們發揮它們的用處的一個程序,用戶在grub中選擇完成之后,內核就會開始自身初始化,然后探測可識別所有的硬件設備,之后我們借助ramdisk來進行加載驅動(ramdisk是一個輔助性的文件,它是一個在內存中的模擬根文件系統用來使內核初始化,這個文件可以沒有,不過前提是你的內核能夠直接驅動rootfs下的所有設備。),以只讀方式掛載根文件系統,等內核加載完成之后,系統就開始施行根切換。并且運行用戶空間中的第一個程序:/sbin/init。
3.5、init
我們都說上帝是不管這些個人間的那些俗物,就像內核一樣,它也并不管用戶空間里所運行的程序,所以就派出了一個大管家,叫做init,它是所有進程的父進程,并且就是內核初始化之后在用戶空間中運行的第一個程序,它的程序類型在各個版本上也有所不同,在CentOS 5 中叫sysv init,配置文件在/etc/inittab,在CentOS 6中使用的時Upstart,不過為了兼容CentOS 5,其配置文件也是在/etc/inittab中,不過和5不同的是,里面的內容已經很少了,真正的配置文件在 /etc/init/*.conf
,新版的CentOS 7使用的是使用的時systemd,就連父進程由原來的init改成了systemd,其配置文件在/usr/lib/systemd/system以及/etc/systemd/system里面有諸多文件,可需備份。我們是根據這個配置文件的默認運行級別在關閉某些服務,之后在開啟這個級別下的服務,啟動登陸終端,登陸成功之后運行CTL或者是GUI界面,這幅圖供參考。
原創文章,作者:劉 祥宇,如若轉載,請注明出處:http://www.www58058.com/62552