linux有5大模塊:1、進(jìn)程調(diào)度模塊,主要是對(duì)進(jìn)程用的處理機(jī)進(jìn)行管理和控制;2、進(jìn)程間通信模塊,主要用于控制不同進(jìn)程間在用戶(hù)空間的同步、數(shù)據(jù)共享和交換;3、內(nèi)存管理模塊,采用先進(jìn)的虛擬存儲(chǔ)機(jī)制,實(shí)現(xiàn)對(duì)多進(jìn)程的存儲(chǔ)管理;4、文件系統(tǒng)模塊等。
本教程操作環(huán)境:linux5.9.8系統(tǒng)、Dell G3電腦。
Linux 內(nèi)核包含有五大子模塊:進(jìn)程調(diào)度模塊、進(jìn)程間通信模塊、內(nèi)存管理模塊、文件系統(tǒng)模塊、網(wǎng)絡(luò)接口模塊。
一、進(jìn)程調(diào)度模塊
??Linux以進(jìn)程作為系統(tǒng)資源分配的基本單位,并采用動(dòng)態(tài)優(yōu)先級(jí)的進(jìn)程高級(jí)算法,保證各個(gè)進(jìn)程使用處理機(jī)的合理性。進(jìn)程調(diào)度模塊主要是對(duì)進(jìn)程使用的處理機(jī)進(jìn)行管理和控制。
【進(jìn)程創(chuàng)建】:
??在Linux環(huán)境編程時(shí),一般采用fork()/vfork()函數(shù)(fork 是 創(chuàng)建一個(gè)子進(jìn)程,并把父進(jìn)程的內(nèi)存數(shù)據(jù)copy到子進(jìn)程中;vfork是 創(chuàng)建一個(gè)子進(jìn)程,并和父進(jìn)程的內(nèi)存數(shù)據(jù)share一起用)來(lái)創(chuàng)建新的進(jìn)程,當(dāng)然,那是在用戶(hù)空間的函數(shù),它會(huì)調(diào)用內(nèi)核中的clone()系統(tǒng)調(diào)用,由clone()函數(shù)繼續(xù)調(diào)用do_fork()完成進(jìn)程的創(chuàng)建。
fork()/vfork()/_clone--->clone()--->do_fork()--->copy_process()
【進(jìn)程撤銷(xiāo)】:
??進(jìn)程終止后,需要通知內(nèi)核以便內(nèi)核釋放進(jìn)程所擁有的資源,包括內(nèi)存、打開(kāi)文件以及其他資源,如信號(hào)量。進(jìn)程終止的一般方式是調(diào)用exit()庫(kù)函數(shù),該函數(shù)釋放C函數(shù)庫(kù)所分配的資源,執(zhí)行編程者所注冊(cè)的每個(gè)函數(shù),并結(jié)束從系統(tǒng)回收進(jìn)程的那個(gè)系統(tǒng)調(diào)用。
【進(jìn)程切換】:
??進(jìn)程切換又稱(chēng)為任務(wù)切換、上下文切換。它是這樣一種行為,為了控制進(jìn)程的執(zhí)行,內(nèi)核掛起當(dāng)前在CPU上運(yùn)行的進(jìn)程,并恢復(fù)以前掛起的某個(gè)進(jìn)程的執(zhí)行。
??在本質(zhì)上,每個(gè)進(jìn)程切換由兩部分組成:
- 切換頁(yè)全局目錄以安裝一個(gè)新的地址空間;
- 切換內(nèi)核態(tài)堆棧和硬件上下文,因?yàn)橛布舷挛奶峁┝藘?nèi)核執(zhí)行新進(jìn)程所需要的所有信息,包括CPU寄存器,主要有switch_to()函數(shù)完成。
【進(jìn)程調(diào)度】:
??現(xiàn)代的Linux中,調(diào)度算法可以在固定時(shí)間內(nèi)(與可運(yùn)行進(jìn)程數(shù)量無(wú)關(guān))選中要運(yùn)行的進(jìn)程。首先,我們必須知道進(jìn)程可以分為實(shí)時(shí)進(jìn)程與普通進(jìn)程。每個(gè)LInux進(jìn)程總是按照如下的調(diào)度類(lèi)型被調(diào)度:先進(jìn)先出的實(shí)時(shí)進(jìn)程、時(shí)間片輪轉(zhuǎn)的實(shí)時(shí)進(jìn)程、普通的分時(shí)進(jìn)程。調(diào)度算法根據(jù)進(jìn)程是普通進(jìn)程還是實(shí)時(shí)進(jìn)程而有很大不同。
二、進(jìn)程間通信模塊
??進(jìn)程間通信主要用于控制不同進(jìn)程之間在用戶(hù)空間的同步、數(shù)據(jù)共享和交換。由于不同的用戶(hù)進(jìn)程擁有不同的進(jìn)程空間,因此進(jìn)程間的通信要借助于內(nèi)核的中轉(zhuǎn)來(lái)實(shí)現(xiàn)。一般情況下,當(dāng)一個(gè)進(jìn)程等待硬件操作完成時(shí),會(huì)被掛起。當(dāng)硬件操作完成,進(jìn)程被恢復(fù)執(zhí)行,而協(xié)調(diào)這個(gè)過(guò)程的就是進(jìn)程間的通信機(jī)制
??進(jìn)程間通信模塊保證了Linux支持多種進(jìn)程間通信機(jī)制,包括管道、命名管道、消息隊(duì)列、信號(hào)量和共享內(nèi)存等。
三、內(nèi)存管理模塊
??Linux的內(nèi)存管理模塊采用先進(jìn)的虛擬存儲(chǔ)機(jī)制,實(shí)現(xiàn)對(duì)多進(jìn)程的存儲(chǔ)管理。它提供了十分可靠的存儲(chǔ)保護(hù)措施,對(duì)進(jìn)程賦予不同的權(quán)限,用戶(hù)不能直接訪(fǎng)問(wèn)系統(tǒng)的程序和數(shù)據(jù),保證了系統(tǒng)的安全性。同時(shí),為每個(gè)用戶(hù)進(jìn)程分配一個(gè)相互獨(dú)立的虛擬地址空間。
四、文件系統(tǒng)模塊
??Linux 的文件系統(tǒng)模塊采用先進(jìn)的虛擬文件系統(tǒng)(VFS)技術(shù),屏蔽了各種文件系統(tǒng)的差別,為處理各種不同的文件系統(tǒng)提供了統(tǒng)一的接口,支持多種不同的物理文件系統(tǒng)達(dá)90多種。同時(shí),Linux把各種硬件設(shè)備看作一種特殊的文件來(lái)處理,用管理文件的方法管理設(shè)備,非常方便、有效。
五、網(wǎng)絡(luò)接口模塊
??Linux具有最強(qiáng)大的網(wǎng)絡(luò)功能。網(wǎng)絡(luò)接口模塊通過(guò)套接字(Socket)機(jī)制實(shí)現(xiàn)計(jì)算機(jī)之間的網(wǎng)絡(luò)通信,并采用網(wǎng)絡(luò)層次模型提供對(duì)多種網(wǎng)絡(luò)協(xié)議和網(wǎng)絡(luò)硬件設(shè)備的支持。
??網(wǎng)絡(luò)接口提供了對(duì)各種網(wǎng)絡(luò)標(biāo)準(zhǔn)的實(shí)現(xiàn)和各種網(wǎng)絡(luò)硬件的支持。網(wǎng)絡(luò)接口一般分為網(wǎng)絡(luò)協(xié)議和網(wǎng)絡(luò)驅(qū)動(dòng)程序。網(wǎng)絡(luò)協(xié)議部分負(fù)責(zé)實(shí)現(xiàn)每一種可能的網(wǎng)絡(luò)傳輸協(xié)議。網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序則主要負(fù)責(zé)與硬件設(shè)備進(jìn)行通信,每一種可能的網(wǎng)絡(luò)硬件設(shè)備都有相應(yīng)的設(shè)備驅(qū)動(dòng)程序