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

下載本文檔

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

文檔簡介

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

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

3、 *group_leaderstruct list_head thread_grouplinux進程組織關(guān)系init子進程1子進程2子進程3子進程4子進程5子進程6父進程children子進程slibing子進程slibing子進程slibing通過pstree命令可以顯示出進程樹比較windows進程線程管理 windows進程使用kprocess表示進程對象,能夠通過句柄單獨操作進程對象 線程是通過ethread線程塊來表示,多個線程塊鏈接到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)先級的調(diào)度,ucos-ii上就是這種,誰的優(yōu)先級高就誰占有cpu 還有基于時間片的,一個任務(wù)執(zhí)行時間結(jié)束的就執(zhí)行下一個 調(diào)度過程中斷或異常進入關(guān)中斷執(zhí)行區(qū)保存中斷前所有的寄存器的內(nèi)容到sp原則上是保存程序使用的所有寄存器a0-a4v0-v1epc將當前的sp保存到任務(wù)結(jié)構(gòu)體上任務(wù)狀態(tài)段tss任務(wù)上下文通過調(diào)度器策略算法求得下一個要執(zhí)行的任務(wù)從任務(wù)結(jié)構(gòu)體上取下sp指針從sp上恢復所有的寄存器的內(nèi)容打開中斷并返回恢復的位置執(zhí)行進程切換 對于多進程系統(tǒng),任務(wù)調(diào)度的過程中伴隨進程切換,從真實的一個進程切換到另外一個不共享資源的進程

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

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

7、nux進程空間使用虛擬存儲空間方式管理的(通過mmu部件將離散的物理地址拼接成連續(xù)的虛擬地址空間)(uclinux除外) linux內(nèi)核使用伙伴管理頁式內(nèi)存 并在伙伴的基礎(chǔ)上發(fā)展了slab/slob/slub算法,用于內(nèi)核小內(nèi)存的分配,以彌補頁式分配浪費內(nèi)存的不足linux進程虛存空間劃分操作系統(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頁目錄表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ū)進程虛存空間分頁式內(nèi)存管理 linux系統(tǒng)中使用了同時用于64位和32位系統(tǒng)的通用分頁模型。 模型中使用四級頁表,32位系統(tǒng)只使用pgd和pte兩項頁全局目錄pgd 頁上級目錄pud 頁中級目錄pmd頁表pte

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

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

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

溫馨提示

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

評論

0/150

提交評論