17嵌入式Linux操作系統(tǒng).ppt_第1頁
17嵌入式Linux操作系統(tǒng).ppt_第2頁
17嵌入式Linux操作系統(tǒng).ppt_第3頁
17嵌入式Linux操作系統(tǒng).ppt_第4頁
17嵌入式Linux操作系統(tǒng).ppt_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

嵌入式Linux操作系統(tǒng) 陳虎tommychen74 主要內(nèi)容 任務(wù)調(diào)度存儲管理中斷系統(tǒng)驅(qū)動程序多線程程序設(shè)計 Linux的歷史 Linux操作系統(tǒng)是UNIX操作系統(tǒng)的一種克隆系統(tǒng) 它誕生于1991年的10月5日 這是第一次正式向外公布的時間 現(xiàn)已成為今天世界上使用最多的一種UNIX類操作系統(tǒng) 并且使用人數(shù)還在迅猛增長 Linux操作系統(tǒng)的誕生 發(fā)展和成長過程始終依賴著以下五個重要支柱 UNIX操作系統(tǒng) MINIX操作系統(tǒng) GNU計劃 POSIX標準和Internet網(wǎng)絡(luò) 進程狀態(tài) 運行態(tài) 正在使用CPU運行的狀態(tài)可運行態(tài) 進程已分配到除CPU外所需要的其它資源 等待態(tài) 正在等待某個事件或某個資源時所處的狀態(tài) 處于可中斷等待態(tài)的進程可以由信號解除其等待態(tài) 處于不可中斷等待態(tài)的進程 一般是直接或間接等待硬件條件 它只能用特定的方式來解除 暫停態(tài) 進程需要接受某種特殊處理而暫時停止運行所處的狀態(tài) 例如 正在接受調(diào)試的進程就處于這種狀態(tài) 僵死態(tài) 進程的運行已經(jīng)結(jié)束 但它所占的資源還未釋放 優(yōu)先級策略 系統(tǒng)中所有進程的優(yōu)先級在 0 MAX PRIO 1 之間 數(shù)值越低優(yōu)先級越高 實時進程的優(yōu)先級范圍在 0 MAX RT PRIO 1 優(yōu)先級從創(chuàng)建之初便已確定 不會改變 非實時進程的優(yōu)先級在 MAX RT PRIO MAX PRIO 之間 優(yōu)先級分為靜態(tài)和動態(tài)兩方面 靜態(tài)優(yōu)先級在進程產(chǎn)生的時候確定 static prio MAX RT PRIO nice 20動態(tài)優(yōu)先級在運行時隨著進程狀態(tài)而動態(tài)變化 調(diào)度策略 相同優(yōu)先級的實時進程的調(diào)度策略有兩種 SCHED RR 時間片輪轉(zhuǎn) 在運行了指定的時間片后會被搶占并重新調(diào)度SCHED FIFO 先入先出方式 每一個可以運行的實時進程按照它在調(diào)度隊列中的固定順序運行非實時進程的調(diào)度策略SCHED OTHER 以時間片輪轉(zhuǎn)為基礎(chǔ) 根據(jù)每個進程的情況進行一定的優(yōu)化使得進程調(diào)度可以公平有效而又不損失響應(yīng)時間 調(diào)度程序Schedule voidschedule void if 存在中斷下半部分服務(wù)請求 調(diào)用do bottom half來運行中斷處理的后半截 if 當前進程是時間片輪轉(zhuǎn)的實時進程 根據(jù)當前進程的狀態(tài)進行相應(yīng)處理 while 遍歷整個可運行態(tài)的隊列 if 當前位置的進程可以被調(diào)度 調(diào)用goodness來計算當前位置進程的權(quán)值 if 返回的權(quán)值大于以前保存的最大權(quán)值 保存這個權(quán)值以及進程 使用switch to宏來切換當前進程和選中進程的上下文 進程調(diào)度的時機 增加一個新進程進程狀態(tài)轉(zhuǎn)換系統(tǒng)調(diào)用執(zhí)行完畢返回用戶態(tài)中斷處理完畢返回到用戶態(tài)當前進程的時間片使用完畢 Linux的存儲器管理 虛擬存儲管理 省略 內(nèi)存分配策略伙伴系統(tǒng)算法Slab分配器 伙伴系統(tǒng) 每個空間按照尺寸為2U大小的塊如果申請空間的尺寸s滿足2U 1 s 2U 則分配整個塊通過不斷對分大內(nèi)存塊來獲得小內(nèi)存塊 并盡可能合并空閑塊 當一個內(nèi)存塊被對分后 每一部分成為對方的伙伴 Linux中的伙伴系統(tǒng) 所有頁面分成10組不同大小的頁塊 每組中的塊大小分別是1 2 4 8 512個頁面 分別通過一個free area struct結(jié)構(gòu)管理將10個free area struct結(jié)構(gòu)組成一個free area 數(shù)組 若所請求的頁面數(shù)目不是2的冪次方 則按稍大于此數(shù)目的2的冪次方在頁塊組中查找空閑頁塊 如果對應(yīng)的頁塊鏈表中沒有空閑頁塊 則在更大的頁塊鏈表中查找 釋放頁面時 伙伴系統(tǒng)會將頁面插入到對應(yīng)的頁面鏈表中 并且檢查新插入的頁面能否和原有的頁塊組合構(gòu)成一個更大的頁塊 如果有兩個塊的大小相同且這兩個塊的物理地址連續(xù) 則合并成一個新頁塊并加入到對應(yīng)的頁塊鏈表中 并迭代此過程直到不能合并為止 Slab 如果每次都從伙伴系統(tǒng)中按頁框為單位分配和釋放內(nèi)存塊 不僅造成大量的內(nèi)碎片 而且嚴重影響系統(tǒng)的運行性能 Slab分配器通過預(yù)先分配一塊內(nèi)存區(qū)域當作緩沖區(qū) 當要求分配對象時 就直接從緩沖區(qū)中返回 釋放對象時Slab分配器只是將對象歸還到緩沖區(qū)以供下次分配時使用 這樣就可以避免頻繁地調(diào)用伙伴系統(tǒng)的申請和釋放操作 從而加快申請和釋放對象的時間 Linux中的Slab分配器 三層基本結(jié)構(gòu)緩存 cache Slab對象 object Linux中斷處理流程 確定該次中斷的來源 保存現(xiàn)場 把中斷發(fā)生前所有寄存器的內(nèi)容都保存在堆棧中 do IRQ 函數(shù)根據(jù)中斷號 然后進行中斷處理 irq exit 函數(shù)執(zhí)行軟中斷 Linux的基本數(shù)據(jù)結(jié)構(gòu) 中斷描述符 structirqdesc unsignedintnomask 1 IRQdoesnotmaskinIRQ unsignedintenabled 1 IRQiscurrentlyenabled unsignedinttriggered 1 IRQhasoccurred unsignedintprobing 1 IRQinuseforaprobe unsignedintprobe ok 1 IRQcanbeusedforprobe unsignedintvalid 1 IRQclaimable unsignedintnoautoenable 1 don tautomaticallyenableIRQ unsignedintunused 25 void mask ack unsignedintirq MaskandacknowledgeIRQ void mask unsignedintirq MaskIRQ void unmask unsignedintirq UnmaskIRQ structirqaction action IRQlockdetection structirqdescirq desc NR IRQS 中斷描述符表 中斷處理相應(yīng)結(jié)構(gòu) structirqaction void handler int void structpt regs unsignedlongflags unsignedlongmask constchar name void dev id structirqaction next do IRQ asmlinkagevoiddo IRQ intirq structpt regs regs structirqdesc desc structirqaction action intcpu if irq NR IRQS gotobad irq desc irq desc irq spin lock do IRQ action desc action if action intstatus 0 遍歷所有的中斷相應(yīng)塊 并執(zhí)行相應(yīng)程序do status action flags action handler irq action dev id regs action action next while action 軟中斷 if softirq pending cpu do softirq return bad irq irq err count 1 printk KERN ERR IRQ spuriousinterrupt d n irq return 驅(qū)動程序申請中斷 intrequest irq unsignedintirq void handler int void structpt regs unsignedlongirq flags constchar devname void dev id irq 要申請的中斷號 handler 中斷處理函數(shù)指針 irq flags 中斷管理掩碼 devname 設(shè)備名稱 dev id 設(shè)備相關(guān)的私用存儲區(qū) 用于標示自身 申請中斷的實現(xiàn) intrequest irq unsignedintirq void handler int void structpt regs unsignedlongirq flags constchar devname void dev id unsignedlongretval structirqaction action action structirqaction kmalloc sizeof structirqaction GFP KERNEL if action return ENOMEM action handler handler action flags irq flags action mask 0 action name devname action next NULL action dev id dev id retval setup arm irq irq action if retval kfree action returnretval 釋放中斷 voidfree irq unsignedintirq void dev id irq 中斷號dev id 中斷處理程序標示 釋放中斷的實現(xiàn) voidfree irq unsignedintirq void dev id structirqaction action p unsignedlongflags if irq NR IRQS irq desc irq valid 錯誤處理return spin lock irqsave 中斷處理程序 voidhandler intirq void dev id structpt regs regs irq 中斷號dev id 驅(qū)動程序標示regs 上下文寄存器現(xiàn)場 軟中斷 tasklet 小任務(wù) 和下半部分 為什么要引入軟中斷 延遲任務(wù) 在上述硬件中斷的處理過程中 需要關(guān)閉中斷 如果中斷處理程序的處理過于復(fù)雜 則導(dǎo)致不能及時響應(yīng)中斷 將比較簡單的任務(wù)放到硬件中斷處理過程 把復(fù)雜的操作放到軟中斷操作過程 提高內(nèi)核的響應(yīng)中斷速度 軟中斷可以被硬件中斷所打斷 軟中斷 tasklet 小任務(wù) 和下半部分 軟中斷 tasklet 下半部分 軟中斷 系統(tǒng)中固定有4種軟中斷軟中斷存放在一個softirq vec數(shù)組中 數(shù)據(jù)類型為softirq action softirq action包含了軟中斷函數(shù)指針和相關(guān)數(shù)據(jù)結(jié)構(gòu) 軟中斷調(diào)用的時機 通過調(diào)用softirq pending 判斷是否有軟中斷如果有軟中斷則執(zhí)行do softirq 判斷的時機包括 do IRQ 完成了中斷處理程序smp apic timer interrupt完成本地時鐘中斷當一個特定的ksoftirqd內(nèi)核線程被喚醒 tasklet 建立在HI SOFTIRQ和TASKLET SOFIRQ的軟中斷之上tasklet存放在tasklet vec和tasklet hi vec數(shù)組中 每個tasklet的數(shù)據(jù)結(jié)構(gòu)包括 next tasklet的鏈表指針 state 狀態(tài) count 鎖計數(shù)器func 函數(shù)指針data 無符號函數(shù) 作為tasklet的函數(shù)輸入 如何使用tasklet 分配一個tasklet struct數(shù)據(jù)結(jié)構(gòu)通過tasklet init 初始化它通過tasklet schedule 調(diào)度運行它 一般是硬中斷處理程序 通過tasklet disable 禁止一個tasklet 例子 tasklet初始化voidshort do tasklet unsignedlong DECLARE TASKLET sho

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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

提交評論