版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、嵌入式LINUX操作系統(tǒng)開(kāi)發(fā) 體系結(jié)構(gòu)概覽 進(jìn)程與調(diào)度管理 內(nèi)存管理 文件系統(tǒng) 系統(tǒng)調(diào)用第1頁(yè)/共39頁(yè)體系結(jié)構(gòu)概覽第2頁(yè)/共39頁(yè)體系結(jié)構(gòu)概覽 內(nèi)核的功能 進(jìn)程控制(process management) 內(nèi)存管理(Memory management) 文件系統(tǒng)管理(Filesystem management) 設(shè)備驅(qū)動(dòng)程序(Device control) 網(wǎng)絡(luò)(Networking)第3頁(yè)/共39頁(yè)內(nèi)核層次 內(nèi)核在系統(tǒng)中的位置 用戶(hù)進(jìn)程 系統(tǒng)調(diào)用接口 內(nèi)核 硬件 什么是Linux內(nèi)核? 從程序員的角度 從用戶(hù)的角度第4頁(yè)/共39頁(yè)系統(tǒng)調(diào)用 內(nèi)核提供的一套C語(yǔ)言函數(shù)庫(kù)稱(chēng)為系統(tǒng)調(diào)用 應(yīng)用程序使
2、用系統(tǒng)調(diào)用完成編程任務(wù) 系統(tǒng)調(diào)用分類(lèi) 進(jìn)程管理 進(jìn)程間通信(IPC) 文件系統(tǒng)管理 網(wǎng)絡(luò)編程(Socket)第5頁(yè)/共39頁(yè)Linux結(jié)構(gòu)第6頁(yè)/共39頁(yè)Linux進(jìn)程管理 Linux是一個(gè)多任務(wù)多用戶(hù)操作系統(tǒng) 一個(gè)任務(wù)(task)就是一個(gè)進(jìn)程(process) 每一個(gè)進(jìn)程都具有一定的功能和權(quán)限,它們都運(yùn)行在各自獨(dú)立的虛擬地址空間。 在Linux中,進(jìn)程是系統(tǒng)資源分配的基本單位,也是使用CPU運(yùn)行的基本調(diào)度單位。 第7頁(yè)/共39頁(yè) Linux進(jìn)程概述 程序映像 存放在磁盤(pán)上的可執(zhí)行文件的代碼和數(shù)據(jù)的集合稱(chēng)為可執(zhí)行映象(Executable Image),即程序 當(dāng)一個(gè)程序(可執(zhí)行映象)裝入系統(tǒng)
3、中運(yùn)行時(shí),它就形成了一個(gè)進(jìn)程 進(jìn)程映像 進(jìn)程是由正文段(text)、用戶(hù)數(shù)據(jù)段(user segment)和系統(tǒng)數(shù)據(jù)段(system segment)組成的一個(gè)動(dòng)態(tài)實(shí)體。 正文段中存放著進(jìn)程要執(zhí)行的指令代碼,具有只讀的屬性, 用戶(hù)數(shù)據(jù)段是進(jìn)程在運(yùn)行過(guò)程中處理數(shù)據(jù)的集合,它們是進(jìn)程直接進(jìn)行操作的所有數(shù)據(jù), 以及進(jìn)程使用的進(jìn)程堆棧。 系統(tǒng)數(shù)據(jù)段存放著進(jìn)程的控制信息。其中包括進(jìn)程控制塊PCB。第8頁(yè)/共39頁(yè)進(jìn)程控制塊PCB 進(jìn)程控制塊PCB是名字為task_struct的數(shù)據(jù)結(jié)構(gòu),稱(chēng)為任務(wù)結(jié)構(gòu)體 任務(wù)結(jié)構(gòu)體中容納了一個(gè)進(jìn)程的所有信息,是系統(tǒng)對(duì)進(jìn)程進(jìn)行管理和控制的有效手段,是系統(tǒng)實(shí)現(xiàn)進(jìn)程調(diào)度的主要依
4、據(jù) 當(dāng)一個(gè)進(jìn)程被創(chuàng)建時(shí),系統(tǒng)就為該進(jìn)程建立一個(gè)task_struct任務(wù)結(jié)構(gòu)體。當(dāng)進(jìn)程運(yùn)行結(jié)束時(shí),系統(tǒng)撤消該進(jìn)程的任務(wù)結(jié)構(gòu)體 Linux在內(nèi)存空間中開(kāi)辟了一個(gè)專(zhuān)門(mén)的區(qū)域存放所有進(jìn)程的任務(wù)結(jié)構(gòu)體,在操作系統(tǒng)的內(nèi)核空間設(shè)置了一個(gè)task數(shù)組,該數(shù)組的每一個(gè)元素是一個(gè)指向任務(wù)結(jié)構(gòu)體的指針,所以task數(shù)組又稱(chēng)為task向量。 進(jìn)程的任務(wù)結(jié)構(gòu)體是進(jìn)程存在的唯一標(biāo)志,調(diào)度程序維護(hù)current指針,它指向當(dāng)前正在運(yùn)行的進(jìn)程。第9頁(yè)/共39頁(yè)Linux調(diào)度分析 Linux進(jìn)程的狀態(tài)變化第10頁(yè)/共39頁(yè)進(jìn)程狀態(tài) 運(yùn)行態(tài):進(jìn)程正在使用CPU運(yùn)行的狀態(tài)。處于運(yùn)行態(tài)的進(jìn)程又稱(chēng)為當(dāng)前進(jìn)程(current proc
5、ess) 可運(yùn)行態(tài):進(jìn)程已分配到除CPU外所需要的其它資源,等待系統(tǒng)把CPU分配給它之后即可投入運(yùn)行 等待態(tài):又稱(chēng)睡眠態(tài),它是進(jìn)程正在等待某個(gè)事件或某個(gè)資源時(shí)所處的狀態(tài)。 等待態(tài)進(jìn)一步分為可中斷的等待態(tài)和不可中斷的等待態(tài)。處于可中斷等待態(tài)的進(jìn)程可以由信號(hào)(signal)解除其等待態(tài)。處于不可中斷等待態(tài)的進(jìn)程,一般是直接或間接等待硬件條件。 它只能用特定的方式來(lái)解除,例如使用喚醒函數(shù)wake_up()等 暫停態(tài):進(jìn)程需要接受某種特殊處理而暫時(shí)停止運(yùn)行所處的狀態(tài)。通常進(jìn)程在接受到外部進(jìn)程的某個(gè)信號(hào)進(jìn)入暫停態(tài),例如,正在接受調(diào)試的進(jìn)程就處于這種狀態(tài)。 僵死態(tài):進(jìn)程的運(yùn)行已經(jīng)結(jié)束,但它的任務(wù)結(jié)構(gòu)體仍在
6、系統(tǒng)中。第11頁(yè)/共39頁(yè)核心態(tài)和用戶(hù)態(tài) Linux的進(jìn)程處理機(jī)上運(yùn)行時(shí),處理機(jī)提供了兩種不同的的執(zhí)行狀態(tài),核心態(tài)(kernel mode)和用戶(hù)態(tài)(user mode)。 核心態(tài)又稱(chēng)系統(tǒng)態(tài),它具有較高的特權(quán),能執(zhí)行所有的機(jī)器指令,包括由操作系統(tǒng)執(zhí)行的特權(quán)指令,能訪(fǎng)問(wèn)所有的寄存器和存儲(chǔ)區(qū)域,能直接控制所有的系統(tǒng)資源。 Linux在執(zhí)行內(nèi)核程序時(shí)是處于核心態(tài)下。 用戶(hù)態(tài)是進(jìn)程的普通執(zhí)行狀態(tài),在用戶(hù)態(tài)下進(jìn)程具有較低的特權(quán), 只能執(zhí)行規(guī)定的機(jī)器指令,不能執(zhí)行特權(quán)指令。進(jìn)程在用戶(hù)態(tài)下只能訪(fǎng)問(wèn)進(jìn)程的存儲(chǔ)空間。在用戶(hù)態(tài)下進(jìn)程不能與系統(tǒng)硬件相互作用,不能訪(fǎng)問(wèn)系統(tǒng)資源。第12頁(yè)/共39頁(yè)Linux進(jìn)程調(diào)度方式
7、 Linux系統(tǒng)采用搶占調(diào)度方式,又稱(chēng)可剝奪調(diào)度方式。采用這種調(diào)度方式時(shí),對(duì)于當(dāng)前運(yùn)行的進(jìn)程而言,當(dāng)有更緊急的進(jìn)程到來(lái)時(shí),系統(tǒng)將剝奪當(dāng)前進(jìn)程使用處理機(jī)的權(quán)利,立即停止它在處理機(jī)上的運(yùn)行,而把處理機(jī)分配給那個(gè)更緊急的進(jìn)程。 Linux采用時(shí)間片輪轉(zhuǎn)法。對(duì)某個(gè)運(yùn)行中的進(jìn)程,當(dāng)它的時(shí)間片用完時(shí),系統(tǒng)將停止它的運(yùn)行并把處理機(jī)分配給其它進(jìn)程。第13頁(yè)/共39頁(yè)Linux進(jìn)程調(diào)度方法 Linux進(jìn)程調(diào)度采用動(dòng)態(tài)優(yōu)先級(jí)法,調(diào)度對(duì)象是可運(yùn)行隊(duì)列, 可運(yùn)行隊(duì)列中優(yōu)先級(jí)大的進(jìn)程首先得到CPU投入運(yùn)行。 進(jìn)程在運(yùn)行中,counter的代表進(jìn)程的動(dòng)態(tài)優(yōu)先級(jí)。 Linux采取了加權(quán)的方法來(lái)保證實(shí)時(shí)進(jìn)程優(yōu)先于普通進(jìn)程。第
8、14頁(yè)/共39頁(yè)進(jìn)程調(diào)度時(shí)機(jī) 時(shí)機(jī)1進(jìn)程狀態(tài)發(fā)生變化時(shí)。 處于運(yùn)行態(tài)下的進(jìn)程要等待某種資源, 運(yùn)行態(tài)下的進(jìn)程在程序執(zhí)行完畢后,一般通過(guò)調(diào)用內(nèi)核函數(shù)do_exit()終止運(yùn)行并轉(zhuǎn)入僵死態(tài)。 處于等待態(tài)的進(jìn)程被喚醒后,將加入到可運(yùn)行隊(duì)列中時(shí)。 進(jìn)程從運(yùn)行態(tài)轉(zhuǎn)入暫停態(tài)時(shí)。 進(jìn)程從暫停態(tài)成為可運(yùn)行態(tài)時(shí)。 時(shí)機(jī)2當(dāng)前進(jìn)程時(shí)間片用完時(shí)。 時(shí)機(jī)3進(jìn)程從系統(tǒng)調(diào)用返回到用戶(hù)態(tài)時(shí)。 時(shí)機(jī)4中斷處理后,進(jìn)程返回到用戶(hù)態(tài)時(shí)。第15頁(yè)/共39頁(yè)Linux內(nèi)存管理模式 MMU內(nèi)存管理 MMU是內(nèi)存管理單元 內(nèi)存的管理單位是頁(yè)(page),通常是4K或8K 虛擬地址與物理地址 物理地址可以位于RAM/FLASH/DISK
9、經(jīng)過(guò)MMU,虛擬地址可以轉(zhuǎn)化成物理地址 MMU可以在轉(zhuǎn)換過(guò)程中檢查權(quán)限,以保護(hù)內(nèi)存不受非法訪(fǎng)問(wèn) 如果沒(méi)有MMU,進(jìn)程與內(nèi)核之間無(wú)法隔離和保護(hù),系統(tǒng)容易崩潰16第16頁(yè)/共39頁(yè)Linux的三級(jí)目錄 Linux采用三級(jí)目錄底層MMU支持實(shí)現(xiàn)存儲(chǔ)管理,可以適應(yīng)64/32位CPU 三級(jí)目錄是頁(yè)面目錄、中間目錄和頁(yè)表第17頁(yè)/共39頁(yè)進(jìn)程空間和內(nèi)核空間 進(jìn)程名義上有4G的空間 實(shí)際上只有3G屬于進(jìn)程本身 虛擬系統(tǒng)空間占據(jù)高位1G第18頁(yè)/共39頁(yè)Linux內(nèi)核啟動(dòng)分析 搭建開(kāi)發(fā)環(huán)境 宿主機(jī)和目標(biāo)機(jī) 交叉編譯 編譯引導(dǎo)程序(u-boot或者vivi) 編譯內(nèi)核(mizi linux) 編譯根文件系統(tǒng) 使
10、用JTAG將編譯好的映像寫(xiě)入目標(biāo)板 可以寫(xiě)入到Nor Flash當(dāng)中 可以寫(xiě)入到Nand Flash當(dāng)中第19頁(yè)/共39頁(yè)Linux內(nèi)核啟動(dòng)分析 上電 CPU根據(jù)設(shè)置讀取Flash中的Bootloader Bootloader作兩段式加載 Bootload將控制權(quán)移交給內(nèi)核 Bootloader事先檢測(cè)硬件參數(shù),例如物理地址 Bootloader加載壓縮的內(nèi)核映像 內(nèi)核自解壓 內(nèi)核將自身定位到正確的物理地址第20頁(yè)/共39頁(yè)內(nèi)核啟動(dòng)流程 執(zhí)行init初始化進(jìn)程 啟動(dòng)一個(gè)shell 執(zhí)行啟動(dòng)腳本文件 顯示登錄提示符等待登錄第21頁(yè)/共39頁(yè)嵌入式LINUX操作系統(tǒng)內(nèi)核 選擇內(nèi)核 內(nèi)核配置 編譯內(nèi)
11、核 安裝內(nèi)核第22頁(yè)/共39頁(yè) Linux內(nèi)核源碼 內(nèi)核目錄結(jié)構(gòu): /usr/src/Linux-* /arch(重點(diǎn)) /drivers /fs /include /init /ipc /kernel /mm /net第23頁(yè)/共39頁(yè)內(nèi)核配置 進(jìn)入到內(nèi)核源代碼目錄 cd /usr/src/linux-2.* make config make xconfig make menuconfig make第24頁(yè)/共39頁(yè)編譯生成的文件 vmlinux 未壓縮的Linux內(nèi)核 varch/boot/zImage 經(jīng)zlib壓縮后的Linux內(nèi)核 varch/boot/bzImage 經(jīng)zlib壓縮
12、后的Linux內(nèi)核,b是指big,壓縮狠 /boot/vmlinuz- 經(jīng)zlib壓縮后的Linux內(nèi)核第25頁(yè)/共39頁(yè)編譯生成的文件 v/boot/System.map- 內(nèi)核符號(hào)地址 /boot/initrd-.img ramdisk,要掛載的根文件系統(tǒng) /lib/modules/ 模塊 vmodules.dep 模塊依賴(lài)文件第26頁(yè)/共39頁(yè)裁剪Linux 目的是創(chuàng)建嵌入式Linux 嵌入式硬件資源有限,所以要裁剪軟件 裁剪的對(duì)象包括: Linux內(nèi)核 庫(kù) 守護(hù)進(jìn)程 GUI第27頁(yè)/共39頁(yè)裁剪Linux 選擇合適的文件系統(tǒng) ext2,ext3,jffs2 模塊機(jī)制 網(wǎng)絡(luò)協(xié)議 無(wú)用的驅(qū)
13、動(dòng)程序 調(diào)試信息 裁剪的技術(shù)要求 能省就省,能小就小,能快就快第28頁(yè)/共39頁(yè)安裝內(nèi)核 移植相關(guān)的文件 相關(guān)文件和目錄 arch/arm/config.in arch/arm/Makefile arch/arm/boot/Makefile arch/arm/mach-s3c2410/* include/asm-arm/arch-s3c2410/* arch/arm/tools/mach-types arch/arm/boot/compressed/head-s3c2410.S arch/arm/boot/compressed/Makefile第29頁(yè)/共39頁(yè)嵌入式Linux內(nèi)核調(diào)試 Pri
14、ntk() Oops消息 /proc文件系統(tǒng) Kgdb 追蹤工具(strace,ltt,gprof,gcov,memwatch) 第30頁(yè)/共39頁(yè)Linux調(diào)試工具 Linux系統(tǒng)察看和調(diào)參 /proc文件系統(tǒng) 用戶(hù)空間工具: 內(nèi)存工具:MEMWATCH 和 YAMD strace GNU 調(diào)試器(gdb) 內(nèi)核工具: 內(nèi)核源代碼級(jí)調(diào)試器(kgdb) 內(nèi)建內(nèi)核調(diào)試器(kdb) Oops第31頁(yè)/共39頁(yè)/proc文件系統(tǒng) /proc內(nèi)存文件系統(tǒng),記錄系統(tǒng)相關(guān)信息 可以直接使用cat得到相關(guān)信息 也可以編程通過(guò)文件方式得到相關(guān)信息第32頁(yè)/共39頁(yè)通過(guò)/proc獲取進(jìn)程信息 找到相關(guān)進(jìn)程號(hào) 找到相關(guān)/proc子目錄 獲取特定參數(shù)第33頁(yè)/共39頁(yè)通過(guò)/proc獲取硬件信息 找到相關(guān)硬件標(biāo)識(shí) 在/proc中找
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 底基層施工方案
- 小區(qū)圍擋施工方案
- 大臨施工方案
- 增強(qiáng)現(xiàn)實(shí)與人工智能協(xié)同的模擬訓(xùn)練-深度研究
- 互聯(lián)網(wǎng)平臺(tái)競(jìng)爭(zhēng)態(tài)勢(shì)分析-深度研究
- 企業(yè)文化創(chuàng)新與績(jī)效關(guān)系-深度研究
- 堆山施工方案
- 太陽(yáng)能光伏組件回收技術(shù)-深度研究
- 指令寄存器容錯(cuò)設(shè)計(jì)方法-深度研究
- 分布式能源系統(tǒng)的功率預(yù)測(cè)技術(shù)-深度研究
- 二零二五年度無(wú)人駕駛車(chē)輛測(cè)試合同免責(zé)協(xié)議書(shū)
- 2025年湖北華中科技大學(xué)招聘實(shí)驗(yàn)技術(shù)人員52名歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 高三日語(yǔ)一輪復(fù)習(xí)助詞「と」的用法課件
- 毛渣采購(gòu)合同范例
- 2023中華護(hù)理學(xué)會(huì)團(tuán)體標(biāo)準(zhǔn)-注射相關(guān)感染預(yù)防與控制
- 五年級(jí)上冊(cè)小數(shù)遞等式計(jì)算200道及答案
- 2024年廣東高考政治真題考點(diǎn)分布匯 總- 高考政治一輪復(fù)習(xí)
- 燃?xì)夤艿滥甓葯z驗(yàn)報(bào)告
- GB/T 44052-2024液壓傳動(dòng)過(guò)濾器性能特性的標(biāo)識(shí)
- 國(guó)際市場(chǎng)營(yíng)銷(xiāo)環(huán)境案例分析
- 滑雪指導(dǎo)員理論考試復(fù)習(xí)題庫(kù)(含答案)
評(píng)論
0/150
提交評(píng)論