Linux操作系統(tǒng)內(nèi)核原理_第1頁(yè)
Linux操作系統(tǒng)內(nèi)核原理_第2頁(yè)
Linux操作系統(tǒng)內(nèi)核原理_第3頁(yè)
Linux操作系統(tǒng)內(nèi)核原理_第4頁(yè)
Linux操作系統(tǒng)內(nèi)核原理_第5頁(yè)
已閱讀5頁(yè),還剩23頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、linux內(nèi)核基礎(chǔ)第一事業(yè)部王 風(fēng)內(nèi)容 進(jìn)程管理 內(nèi)存管理 虛擬文件系統(tǒng)了解linux內(nèi)核核心功能的基本原理結(jié)構(gòu),引導(dǎo)源碼閱讀linux系統(tǒng)結(jié)構(gòu)計(jì)算機(jī)硬件體系結(jié)構(gòu)相關(guān)代碼進(jìn)程管理內(nèi)存管理文件系統(tǒng)模塊模塊接口設(shè)備驅(qū)動(dòng)驅(qū)動(dòng)接口系統(tǒng)調(diào)用應(yīng)用程序標(biāo)準(zhǔn)函數(shù)庫(kù)kernellinux系統(tǒng)執(zhí)行框架地址空間內(nèi)核功能函數(shù)內(nèi)核線程1內(nèi)核線程2內(nèi)核線程3內(nèi)核線程4內(nèi)核線程5內(nèi)核線程n進(jìn)程1進(jìn)程2進(jìn)程3進(jìn)程n用戶態(tài)內(nèi)核態(tài)進(jìn)程和線程的區(qū)別 線程是系統(tǒng)最小的執(zhí)行流單位,一個(gè)線程就是一個(gè)執(zhí)行過(guò)程執(zhí)行過(guò)程,是任務(wù)調(diào)度的基本單位。 進(jìn)程是線程和資源的容器容器,一個(gè)以上的線程組成一個(gè)進(jìn)程,在同一個(gè)進(jìn)程中的線程共享進(jìn)程資源。資源線程

2、1線程2線程nlinux內(nèi)核進(jìn)程和線程表示 linux現(xiàn)行內(nèi)核淡化了進(jìn)程和線程的關(guān)系,原則上不區(qū)分進(jìn)程和線程。 在linux內(nèi)核中使用(struct task_struct)表示一個(gè)任務(wù)(linux中稱為進(jìn)程,也可以稱為線程) 多個(gè) task_struct 共享資源和進(jìn)程空間,實(shí)際就構(gòu)成了一個(gè)進(jìn)程(線程組),這些task_struct實(shí)際就是這個(gè)進(jìn)程的線程,通常在linux書(shū)上將task_struct直接就稱為一個(gè)進(jìn)程。linux內(nèi)核進(jìn)程和線程表示taskstaskstaskstaskstasks進(jìn)程1進(jìn)程2進(jìn)程3創(chuàng)建進(jìn)程有幾個(gè)函數(shù)fork exec clonestruct list_head

3、 *group_leaderstruct list_head thread_grouplinux進(jìn)程組織關(guān)系init子進(jìn)程1子進(jìn)程2子進(jìn)程3子進(jìn)程4子進(jìn)程5子進(jìn)程6父進(jìn)程children子進(jìn)程slibing子進(jìn)程slibing子進(jìn)程slibing通過(guò)pstree命令可以顯示出進(jìn)程樹(shù)比較windows進(jìn)程線程管理 windows進(jìn)程使用kprocess表示進(jìn)程對(duì)象,能夠通過(guò)句柄單獨(dú)操作進(jìn)程對(duì)象 線程是通過(guò)ethread線程塊來(lái)表示,多個(gè)線程塊鏈接到kprocess的執(zhí)行體線程塊鏈表頭上。(結(jié)構(gòu)如下圖)kprocessethreadethreadethread任務(wù)調(diào)度 在多任務(wù)系統(tǒng)中,任務(wù)調(diào)度很重

4、要,調(diào)度策略決定了系統(tǒng)最終性能和功能。 任務(wù)調(diào)度有多種策略, 比如基于優(yōu)先級(jí)的調(diào)度,ucos-ii上就是這種,誰(shuí)的優(yōu)先級(jí)高就誰(shuí)占有cpu 還有基于時(shí)間片的,一個(gè)任務(wù)執(zhí)行時(shí)間結(jié)束的就執(zhí)行下一個(gè) 調(diào)度過(guò)程中斷或異常進(jìn)入關(guān)中斷執(zhí)行區(qū)保存中斷前所有的寄存器的內(nèi)容到sp原則上是保存程序使用的所有寄存器a0-a4v0-v1epc將當(dāng)前的sp保存到任務(wù)結(jié)構(gòu)體上任務(wù)狀態(tài)段tss任務(wù)上下文通過(guò)調(diào)度器策略算法求得下一個(gè)要執(zhí)行的任務(wù)從任務(wù)結(jié)構(gòu)體上取下sp指針從sp上恢復(fù)所有的寄存器的內(nèi)容打開(kāi)中斷并返回恢復(fù)的位置執(zhí)行進(jìn)程切換 對(duì)于多進(jìn)程系統(tǒng),任務(wù)調(diào)度的過(guò)程中伴隨進(jìn)程切換,從真實(shí)的一個(gè)進(jìn)程切換到另外一個(gè)不共享資源的進(jìn)程

5、,虛擬內(nèi)存地址映射表(pgd)必須進(jìn)行切換,還有其它資源數(shù)據(jù)也需要跟著切換。 進(jìn)程切換通常比較耗時(shí),效率很低,需要執(zhí)行切換tlb,回寫(xiě)cache等低效率操作。linux多線程機(jī)制 原子操作 自旋鎖 信號(hào)量 讀寫(xiě)鎖 互斥量線程a線程ba = ii = 0a = ii=1臨界區(qū)死鎖 所謂死鎖: 是指兩個(gè)或兩個(gè)以上的進(jìn)程在執(zhí)行過(guò)程中,因爭(zhēng)奪資源而造成的一種互相等待的現(xiàn)象;表現(xiàn)為程序假死,不再被調(diào)度。 避免死鎖有 銀行家算法獲取b資源獲取a資源獲取a資源獲取b資源任務(wù)a任務(wù)b優(yōu)先級(jí)反轉(zhuǎn) 高優(yōu)先級(jí)任務(wù)需要等待低優(yōu)先級(jí)任務(wù)釋放資源,而低優(yōu)先級(jí)任務(wù)又正在等待中等優(yōu)先級(jí)任務(wù)的現(xiàn)象叫做優(yōu)先級(jí)反轉(zhuǎn)。 此時(shí)高優(yōu)先級(jí)

6、任務(wù)和中等優(yōu)先級(jí)任務(wù)之間沒(méi)有任何共享資源但執(zhí)行順序卻發(fā)生了倒置,這種情況稱為優(yōu)先級(jí)反轉(zhuǎn),而高優(yōu)先級(jí)任務(wù)因?yàn)榈却蛢?yōu)先級(jí)任務(wù)釋放資源而阻塞的情況則不稱為優(yōu)先級(jí)反轉(zhuǎn) 優(yōu)先級(jí)反轉(zhuǎn)任務(wù)1任務(wù)2任務(wù)3獲取資源釋放資源獲取資源后果,任務(wù)1將一直等待任務(wù)2運(yùn)行完才能運(yùn)行,實(shí)時(shí)性差消除優(yōu)先級(jí)反轉(zhuǎn) 優(yōu)先級(jí)繼承策略:繼承現(xiàn)有被阻塞任務(wù)的最高優(yōu)先級(jí)作為其優(yōu)先級(jí),任務(wù)退出臨界區(qū),恢復(fù)初始優(yōu)先級(jí);linux內(nèi)核的實(shí)時(shí)互斥量就是使用這個(gè)策略。 優(yōu)先級(jí)天花板策略(封頂策略):指將申請(qǐng)(占有)某資源的任務(wù)的優(yōu)先級(jí)提升到可能訪問(wèn)該資源的所有任務(wù)中最高優(yōu)先級(jí)任務(wù)的優(yōu)先級(jí);ucos的互斥量就是使用這個(gè)策略。linux內(nèi)存管理 li

7、nux進(jìn)程空間使用虛擬存儲(chǔ)空間方式管理的(通過(guò)mmu部件將離散的物理地址拼接成連續(xù)的虛擬地址空間)(uclinux除外) linux內(nèi)核使用伙伴管理頁(yè)式內(nèi)存 并在伙伴的基礎(chǔ)上發(fā)展了slab/slob/slub算法,用于內(nèi)核小內(nèi)存的分配,以彌補(bǔ)頁(yè)式分配浪費(fèi)內(nèi)存的不足linux進(jìn)程虛存空間劃分操作系統(tǒng)內(nèi)核環(huán)境變量參數(shù)堆棧數(shù)據(jù)(bss)數(shù)據(jù)代碼4g3g00 xc00000000 x00000000_end_edata_etext內(nèi)核區(qū)用戶區(qū)linux內(nèi)存空間數(shù)據(jù)結(jié)構(gòu)表示mmcountmmappgd頁(yè)目錄表mm_structvm_startvm_endvm_opsvm_nextvm_startvm_e

8、ndvm_opsvm_nextvm_area_structvm_area_structtask_structvm_startvm_endvm_opsvm_nextvm_area_structopenclosenopageswapinswaoutvm_operations_structopenclosenopageswapinswaoutvm_operations_struct虛存區(qū)虛存區(qū)進(jìn)程虛存空間分頁(yè)式內(nèi)存管理 linux系統(tǒng)中使用了同時(shí)用于64位和32位系統(tǒng)的通用分頁(yè)模型。 模型中使用四級(jí)頁(yè)表,32位系統(tǒng)只使用pgd和pte兩項(xiàng)頁(yè)全局目錄pgd 頁(yè)上級(jí)目錄pud 頁(yè)中級(jí)目錄pmd頁(yè)表pte

9、頁(yè)內(nèi)偏移線性地址 64位cr3頁(yè)框linux物理內(nèi)存管理 linux內(nèi)核為了適應(yīng)不同的硬件架構(gòu),對(duì)不同性能的內(nèi)存分成不同的節(jié)點(diǎn)(node),內(nèi)存模型如下圖:pg_data_t內(nèi)存節(jié)點(diǎn)node_zoneszone_normalzone_dmazone_highmemzonezone_mem_mapzone_mem_mappagepagepagepagepagepagezone_mem_mapzone_dmazone_normalzone_highmem16m896mpc i386物理頁(yè)面管理 物理頁(yè)面使用伙伴(buddy)算法進(jìn)行管理 算法核心是將頁(yè)面按 1,2,4,8,16,2i 個(gè)連續(xù)頁(yè)進(jìn)行

10、分割,放在11個(gè)鏈表上,i也就是通常所說(shuō)的order;order6order5order4order3order2order1order0free_area pagepagepagepagepagepage例如分配一個(gè)頁(yè)面,直接到order0上找,如果order0上沒(méi)有空閑頁(yè)面了,那么就到order1上找,(1)如果order1上有空閑塊,那么就將這個(gè)雙頁(yè)分成兩個(gè)單頁(yè),一個(gè)分配出去,一個(gè)掛到order0的鏈表上。(2)如果order1沒(méi)有空閑塊,就到order2上找,如果找到空閑塊,那么就將這塊分割為 2:1:1的頁(yè)面 2的頁(yè)面掛回order1,1的掛一個(gè)回order0,另外一個(gè)來(lái)分配orde

11、r2要申請(qǐng)一個(gè)order0的頁(yè)面order1order1order0 order1order0order0 order1slab分配器 因?yàn)榛赽uddy算法的內(nèi)存管理,只能精確到頁(yè)面大小,對(duì)于內(nèi)核中需要大量申請(qǐng)的小內(nèi)存塊,為了滿足這個(gè)需求,在buddy的基礎(chǔ)上增加了slab分配器cache_chainkmem_cachekmem_cachekmem_cacheslabs_fullslabs_partialslabs_emptyheadtailslabslabslabslabslabpagepagepagepagepageobjectobjectobjectlinux文件系統(tǒng)核心vfs vfs(虛擬文件系統(tǒng))為具體文件系統(tǒng)提供抽象出一組通用的接口來(lái)表示具體的文件系統(tǒng)。 萬(wàn)物皆文件,硬件設(shè)備也是文件 vfs包含下面幾種數(shù)據(jù)類型 file_system_type 文件系統(tǒng)類型 vfsmount 掛在點(diǎn)對(duì)象,也就是文件系統(tǒng)類型實(shí)例 super_block 超級(jí)塊,描述文件系統(tǒng)的控制信息、參數(shù)等 inode 索引節(jié)點(diǎn),保存文件的相關(guān)信息,是文件的元數(shù)據(jù) dentry 目錄項(xiàng),就是文件夾 file 文件對(duì)象 file_struct 打開(kāi)的文件對(duì)象vfs各數(shù)據(jù)對(duì)象之間的關(guān)系s_filessuper_

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論