




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
嵌入式操作系統(tǒng)原理
嵌入式操作系統(tǒng)原理1嵌入式LINUX操作系統(tǒng)開發(fā)體系結(jié)構(gòu)概覽進(jìn)程與調(diào)度管理內(nèi)存管理文件系統(tǒng)系統(tǒng)調(diào)用嵌入式LINUX操作系統(tǒng)開發(fā)體系結(jié)構(gòu)概覽2體系結(jié)構(gòu)概覽體系結(jié)構(gòu)概覽3體系結(jié)構(gòu)概覽內(nèi)核的功能進(jìn)程控制(processmanagement)內(nèi)存管理(Memorymanagement)文件系統(tǒng)管理(Filesystemmanagement)設(shè)備驅(qū)動(dòng)程序(Devicecontrol)網(wǎng)絡(luò)(Networking)體系結(jié)構(gòu)概覽內(nèi)核的功能4內(nèi)核層次內(nèi)核在系統(tǒng)中的位置用戶進(jìn)程系統(tǒng)調(diào)用接口內(nèi)核硬件什么是Linux內(nèi)核?從程序員的角度從用戶的角度內(nèi)核層次內(nèi)核在系統(tǒng)中的位置5系統(tǒng)調(diào)用內(nèi)核提供的一套C語言函數(shù)庫稱為系統(tǒng)調(diào)用應(yīng)用程序使用系統(tǒng)調(diào)用完成編程任務(wù)系統(tǒng)調(diào)用分類進(jìn)程管理進(jìn)程間通信(IPC)文件系統(tǒng)管理網(wǎng)絡(luò)編程(Socket)系統(tǒng)調(diào)用內(nèi)核提供的一套C語言函數(shù)庫稱為系統(tǒng)調(diào)用6Linux結(jié)構(gòu)Linux結(jié)構(gòu)7Linux進(jìn)程管理Linux是一個(gè)多任務(wù)多用戶操作系統(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)度單位。Linux進(jìn)程管理Linux是一個(gè)多任務(wù)多用戶操作系統(tǒng)8Linux進(jìn)程概述程序映像存放在磁盤上的可執(zhí)行文件的代碼和數(shù)據(jù)的集合稱為可執(zhí)行映象(ExecutableImage),即程序當(dāng)一個(gè)程序(可執(zhí)行映象)裝入系統(tǒng)中運(yùn)行時(shí),它就形成了一個(gè)進(jìn)程進(jìn)程映像進(jìn)程是由正文段(text)、用戶數(shù)據(jù)段(usersegment)和系統(tǒng)數(shù)據(jù)段(systemsegment)組成的一個(gè)動(dòng)態(tài)實(shí)體。正文段中存放著進(jìn)程要執(zhí)行的指令代碼,具有只讀的屬性,用戶數(shù)據(jù)段是進(jìn)程在運(yùn)行過程中處理數(shù)據(jù)的集合,它們是進(jìn)程直接進(jìn)行操作的所有數(shù)據(jù),以及進(jìn)程使用的進(jìn)程堆棧。系統(tǒng)數(shù)據(jù)段存放著進(jìn)程的控制信息。其中包括進(jìn)程控制塊PCB。Linux進(jìn)程概述程序映像9進(jìn)程控制塊PCB進(jìn)程控制塊PCB是名字為task_struct的數(shù)據(jù)結(jié)構(gòu),稱為任務(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)度的主要依據(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)存空間中開辟了一個(gè)專門的區(qū)域存放所有進(jìn)程的任務(wù)結(jié)構(gòu)體,在操作系統(tǒng)的內(nèi)核空間設(shè)置了一個(gè)task數(shù)組,該數(shù)組的每一個(gè)元素是一個(gè)指向任務(wù)結(jié)構(gòu)體的指針,所以task數(shù)組又稱為task向量。進(jìn)程的任務(wù)結(jié)構(gòu)體是進(jìn)程存在的唯一標(biāo)志,調(diào)度程序維護(hù)current指針,它指向當(dāng)前正在運(yùn)行的進(jìn)程。
進(jìn)程控制塊PCB進(jìn)程控制塊PCB是名字為task_struc10Linux調(diào)度分析Linux進(jìn)程的狀態(tài)變化Linux調(diào)度分析Linux進(jìn)程的狀態(tài)變化11進(jìn)程狀態(tài)運(yùn)行態(tài):進(jìn)程正在使用CPU運(yùn)行的狀態(tài)。處于運(yùn)行態(tài)的進(jìn)程又稱為當(dāng)前進(jìn)程(currentprocess)可運(yùn)行態(tài):進(jìn)程已分配到除CPU外所需要的其它資源,等待系統(tǒng)把CPU分配給它之后即可投入運(yùn)行等待態(tài):又稱睡眠態(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)程,一般是直接或間接等待硬件條件。它只能用特定的方式來解除,例如使用喚醒函數(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)體仍在系統(tǒng)中。進(jìn)程狀態(tài)運(yùn)行態(tài):進(jìn)程正在使用CPU運(yùn)行的狀態(tài)。處于運(yùn)行態(tài)的進(jìn)12核心態(tài)和用戶態(tài)Linux的進(jìn)程處理機(jī)上運(yùn)行時(shí),處理機(jī)提供了兩種不同的的執(zhí)行狀態(tài),核心態(tài)(kernelmode)和用戶態(tài)(usermode)。核心態(tài)又稱系統(tǒng)態(tài),它具有較高的特權(quán),能執(zhí)行所有的機(jī)器指令,包括由操作系統(tǒng)執(zhí)行的特權(quán)指令,能訪問所有的寄存器和存儲(chǔ)區(qū)域,能直接控制所有的系統(tǒng)資源。Linux在執(zhí)行內(nèi)核程序時(shí)是處于核心態(tài)下。用戶態(tài)是進(jìn)程的普通執(zhí)行狀態(tài),在用戶態(tài)下進(jìn)程具有較低的特權(quán),只能執(zhí)行規(guī)定的機(jī)器指令,不能執(zhí)行特權(quán)指令。進(jìn)程在用戶態(tài)下只能訪問進(jìn)程的存儲(chǔ)空間。在用戶態(tài)下進(jìn)程不能與系統(tǒng)硬件相互作用,不能訪問系統(tǒng)資源。核心態(tài)和用戶態(tài)Linux的進(jìn)程處理機(jī)上運(yùn)行時(shí),處理機(jī)提供了兩13Linux進(jìn)程調(diào)度方式Linux系統(tǒng)采用搶占調(diào)度方式,又稱可剝奪調(diào)度方式。采用這種調(diào)度方式時(shí),對(duì)于當(dāng)前運(yùn)行的進(jìn)程而言,當(dāng)有更緊急的進(jìn)程到來時(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)程。Linux進(jìn)程調(diào)度方式Linux系統(tǒng)采用搶占調(diào)度方式,又稱可14Linux進(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)的方法來保證實(shí)時(shí)進(jìn)程優(yōu)先于普通進(jìn)程。Linux進(jìn)程調(diào)度方法Linux進(jìn)程調(diào)度采用動(dòng)態(tài)優(yōu)先級(jí)法,調(diào)15進(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í)行完畢后,一般通過調(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)用返回到用戶態(tài)時(shí)。時(shí)機(jī)4.中斷處理后,進(jìn)程返回到用戶態(tài)時(shí)。進(jìn)程調(diào)度時(shí)機(jī)時(shí)機(jī)1.進(jìn)程狀態(tài)發(fā)生變化時(shí)。16Linux內(nèi)存管理模式MMU內(nèi)存管理MMU是內(nèi)存管理單元內(nèi)存的管理單位是頁(page),通常是4K或8K虛擬地址與物理地址物理地址可以位于RAM/FLASH/DISK經(jīng)過MMU,虛擬地址可以轉(zhuǎn)化成物理地址MMU可以在轉(zhuǎn)換過程中檢查權(quán)限,以保護(hù)內(nèi)存不受非法訪問如果沒有MMU,進(jìn)程與內(nèi)核之間無法隔離和保護(hù),系統(tǒng)容易崩潰17Linux內(nèi)存管理模式MMU內(nèi)存管理17Linux的三級(jí)目錄Linux采用三級(jí)目錄+底層MMU支持實(shí)現(xiàn)存儲(chǔ)管理,可以適應(yīng)64/32位CPU三級(jí)目錄是頁面目錄、中間目錄和頁表Linux的三級(jí)目錄Linux采用三級(jí)目錄+底層MMU支持實(shí)18進(jìn)程空間和內(nèi)核空間進(jìn)程名義上有4G的空間實(shí)際上只有3G屬于進(jìn)程本身虛擬系統(tǒng)空間占據(jù)高位1G進(jìn)程空間和內(nèi)核空間進(jìn)程名義上有4G的空間19Linux內(nèi)核啟動(dòng)分析搭建開發(fā)環(huán)境宿主機(jī)和目標(biāo)機(jī)交叉編譯編譯引導(dǎo)程序(u-boot或者vivi)編譯內(nèi)核(mizilinux)編譯根文件系統(tǒng)使用JTAG將編譯好的映像寫入目標(biāo)板可以寫入到NorFlash當(dāng)中可以寫入到NandFlash當(dāng)中Linux內(nèi)核啟動(dòng)分析搭建開發(fā)環(huán)境20Linux內(nèi)核啟動(dòng)分析上電CPU根據(jù)設(shè)置讀取Flash中的BootloaderBootloader作兩段式加載Bootload將控制權(quán)移交給內(nèi)核Bootloader事先檢測(cè)硬件參數(shù),例如物理地址Bootloader加載壓縮的內(nèi)核映像內(nèi)核自解壓內(nèi)核將自身定位到正確的物理地址Linux內(nèi)核啟動(dòng)分析上電21內(nèi)核啟動(dòng)流程執(zhí)行init初始化進(jìn)程啟動(dòng)一個(gè)shell執(zhí)行啟動(dòng)腳本文件顯示登錄提示符等待登錄內(nèi)核啟動(dòng)流程執(zhí)行init初始化進(jìn)程22嵌入式LINUX操作系統(tǒng)內(nèi)核選擇內(nèi)核內(nèi)核配置編譯內(nèi)核安裝內(nèi)核嵌入式LINUX操作系統(tǒng)內(nèi)核選擇內(nèi)核23Linux內(nèi)核源碼內(nèi)核目錄結(jié)構(gòu):/usr/src/Linux-***/arch(重點(diǎn))/drivers/fs/include/init/ipc/kernel/mm/netLinux內(nèi)核源碼內(nèi)核目錄結(jié)構(gòu):24內(nèi)核配置進(jìn)入到內(nèi)核源代碼目錄cd/usr/src/linux-2.***makeconfigmakexconfigmakemenuconfigmake內(nèi)核配置進(jìn)入到內(nèi)核源代碼目錄25編譯生成的文件vmlinux未壓縮的Linux內(nèi)核varch/<arch>/boot/zImage經(jīng)zlib壓縮后的Linux內(nèi)核varch/<arch>/boot/bzImage經(jīng)zlib壓縮后的Linux內(nèi)核,b是指big,壓縮狠/boot/vmlinuz-<version>經(jīng)zlib壓縮后的Linux內(nèi)核編譯生成的文件vmlinux26編譯生成的文件v/boot/System.map-<version>內(nèi)核符號(hào)地址/boot/initrd-<version>.imgramdisk,要掛載的根文件系統(tǒng)/lib/modules/<version>模塊vmodules.dep模塊依賴文件編譯生成的文件v/boot/System.map-<vers27裁剪Linux目的是創(chuàng)建嵌入式Linux嵌入式硬件資源有限,所以要裁剪軟件裁剪的對(duì)象包括:Linux內(nèi)核庫守護(hù)進(jìn)程GUI裁剪Linux目的是創(chuàng)建嵌入式Linux28裁剪Linux選擇合適的文件系統(tǒng)ext2,ext3,jffs2模塊機(jī)制網(wǎng)絡(luò)協(xié)議無用的驅(qū)動(dòng)程序調(diào)試信息裁剪的技術(shù)要求能省就省,能小就小,能快就快裁剪Linux選擇合適的文件系統(tǒng)29安裝內(nèi)核移植相關(guān)的文件相關(guān)文件和目錄arch/arm/config.inarch/arm/Makefilearch/arm/boot/Makefilearch/arm/mach-s3c2410/*include/asm-arm/arch-s3c2410/*arch/arm/tools/mach-typesarch/arm/boot/compressed/head-s3c2410.Sarch/arm/boot/compressed/Makefile安裝內(nèi)核移植相關(guān)的文件30嵌入式Linux內(nèi)核調(diào)試Printk()Oops消息/proc文件系統(tǒng)Kgdb追蹤工具(strace,ltt,gprof,gcov,memwatch)嵌入式Linux內(nèi)核調(diào)試Printk()31Linux調(diào)試工具Linux系統(tǒng)察看和調(diào)參/proc文件系統(tǒng)用戶空間工具:內(nèi)存工具:MEMWATCH和YAMDstraceGNU調(diào)試器(gdb)內(nèi)核工具:內(nèi)核源代碼級(jí)調(diào)試器(kgdb)內(nèi)建內(nèi)核調(diào)試器(kdb)OopsLinux調(diào)試工具Linux系統(tǒng)察看和調(diào)參32/proc文件系統(tǒng)/proc內(nèi)存文件系統(tǒng),記錄系統(tǒng)相關(guān)信息可以直接使用cat得到相關(guān)信息也可以編程通過文件方式得到相關(guān)信息/proc文件系統(tǒng)/proc內(nèi)存文件系統(tǒng),記錄系統(tǒng)相關(guān)信息33通過/proc獲取進(jìn)程信息找到相關(guān)進(jìn)程號(hào)找到相關(guān)/proc子目錄獲取特定參數(shù)通過/proc獲取進(jìn)程信息找到相關(guān)進(jìn)程號(hào)34通過/proc獲取硬件信息找到相關(guān)硬件標(biāo)識(shí)在/proc中找到相關(guān)硬件目錄查找特定硬件信息通過/proc獲取硬件信息找到相關(guān)硬件標(biāo)識(shí)35通過/proc獲取內(nèi)核信息內(nèi)核信息一般存放于/proc/sys可以讀取相關(guān)內(nèi)核信息也可以修改內(nèi)核參數(shù)來對(duì)內(nèi)核調(diào)優(yōu)修改內(nèi)核一定要慎重!通過/proc獲取內(nèi)核信息內(nèi)核信息一般存放于/proc/sy36/proc獲取文件系統(tǒng)信息獲取文件系統(tǒng)信息獲取分區(qū)信息獲取文件鎖定信息/proc獲取文件系統(tǒng)信息獲取文件系統(tǒng)信息37/proc獲取系統(tǒng)狀態(tài)信息獲取系統(tǒng)時(shí)間/proc獲取系統(tǒng)狀態(tài)信息獲取系統(tǒng)時(shí)間38謝謝大家問題建議反饋后續(xù)資源謝謝大家問題39嵌入式操作系統(tǒng)原理
嵌入式操作系統(tǒng)原理40嵌入式LINUX操作系統(tǒng)開發(fā)體系結(jié)構(gòu)概覽進(jìn)程與調(diào)度管理內(nèi)存管理文件系統(tǒng)系統(tǒng)調(diào)用嵌入式LINUX操作系統(tǒng)開發(fā)體系結(jié)構(gòu)概覽41體系結(jié)構(gòu)概覽體系結(jié)構(gòu)概覽42體系結(jié)構(gòu)概覽內(nèi)核的功能進(jìn)程控制(processmanagement)內(nèi)存管理(Memorymanagement)文件系統(tǒng)管理(Filesystemmanagement)設(shè)備驅(qū)動(dòng)程序(Devicecontrol)網(wǎng)絡(luò)(Networking)體系結(jié)構(gòu)概覽內(nèi)核的功能43內(nèi)核層次內(nèi)核在系統(tǒng)中的位置用戶進(jìn)程系統(tǒng)調(diào)用接口內(nèi)核硬件什么是Linux內(nèi)核?從程序員的角度從用戶的角度內(nèi)核層次內(nèi)核在系統(tǒng)中的位置44系統(tǒng)調(diào)用內(nèi)核提供的一套C語言函數(shù)庫稱為系統(tǒng)調(diào)用應(yīng)用程序使用系統(tǒng)調(diào)用完成編程任務(wù)系統(tǒng)調(diào)用分類進(jìn)程管理進(jìn)程間通信(IPC)文件系統(tǒng)管理網(wǎng)絡(luò)編程(Socket)系統(tǒng)調(diào)用內(nèi)核提供的一套C語言函數(shù)庫稱為系統(tǒng)調(diào)用45Linux結(jié)構(gòu)Linux結(jié)構(gòu)46Linux進(jìn)程管理Linux是一個(gè)多任務(wù)多用戶操作系統(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)度單位。Linux進(jìn)程管理Linux是一個(gè)多任務(wù)多用戶操作系統(tǒng)47Linux進(jìn)程概述程序映像存放在磁盤上的可執(zhí)行文件的代碼和數(shù)據(jù)的集合稱為可執(zhí)行映象(ExecutableImage),即程序當(dāng)一個(gè)程序(可執(zhí)行映象)裝入系統(tǒng)中運(yùn)行時(shí),它就形成了一個(gè)進(jìn)程進(jìn)程映像進(jìn)程是由正文段(text)、用戶數(shù)據(jù)段(usersegment)和系統(tǒng)數(shù)據(jù)段(systemsegment)組成的一個(gè)動(dòng)態(tài)實(shí)體。正文段中存放著進(jìn)程要執(zhí)行的指令代碼,具有只讀的屬性,用戶數(shù)據(jù)段是進(jìn)程在運(yùn)行過程中處理數(shù)據(jù)的集合,它們是進(jìn)程直接進(jìn)行操作的所有數(shù)據(jù),以及進(jìn)程使用的進(jìn)程堆棧。系統(tǒng)數(shù)據(jù)段存放著進(jìn)程的控制信息。其中包括進(jìn)程控制塊PCB。Linux進(jìn)程概述程序映像48進(jìn)程控制塊PCB進(jìn)程控制塊PCB是名字為task_struct的數(shù)據(jù)結(jié)構(gòu),稱為任務(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)度的主要依據(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)存空間中開辟了一個(gè)專門的區(qū)域存放所有進(jìn)程的任務(wù)結(jié)構(gòu)體,在操作系統(tǒng)的內(nèi)核空間設(shè)置了一個(gè)task數(shù)組,該數(shù)組的每一個(gè)元素是一個(gè)指向任務(wù)結(jié)構(gòu)體的指針,所以task數(shù)組又稱為task向量。進(jìn)程的任務(wù)結(jié)構(gòu)體是進(jìn)程存在的唯一標(biāo)志,調(diào)度程序維護(hù)current指針,它指向當(dāng)前正在運(yùn)行的進(jìn)程。
進(jìn)程控制塊PCB進(jìn)程控制塊PCB是名字為task_struc49Linux調(diào)度分析Linux進(jìn)程的狀態(tài)變化Linux調(diào)度分析Linux進(jìn)程的狀態(tài)變化50進(jìn)程狀態(tài)運(yùn)行態(tài):進(jìn)程正在使用CPU運(yùn)行的狀態(tài)。處于運(yùn)行態(tài)的進(jìn)程又稱為當(dāng)前進(jìn)程(currentprocess)可運(yùn)行態(tài):進(jìn)程已分配到除CPU外所需要的其它資源,等待系統(tǒng)把CPU分配給它之后即可投入運(yùn)行等待態(tài):又稱睡眠態(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)程,一般是直接或間接等待硬件條件。它只能用特定的方式來解除,例如使用喚醒函數(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)體仍在系統(tǒng)中。進(jìn)程狀態(tài)運(yùn)行態(tài):進(jìn)程正在使用CPU運(yùn)行的狀態(tài)。處于運(yùn)行態(tài)的進(jìn)51核心態(tài)和用戶態(tài)Linux的進(jìn)程處理機(jī)上運(yùn)行時(shí),處理機(jī)提供了兩種不同的的執(zhí)行狀態(tài),核心態(tài)(kernelmode)和用戶態(tài)(usermode)。核心態(tài)又稱系統(tǒng)態(tài),它具有較高的特權(quán),能執(zhí)行所有的機(jī)器指令,包括由操作系統(tǒng)執(zhí)行的特權(quán)指令,能訪問所有的寄存器和存儲(chǔ)區(qū)域,能直接控制所有的系統(tǒng)資源。Linux在執(zhí)行內(nèi)核程序時(shí)是處于核心態(tài)下。用戶態(tài)是進(jìn)程的普通執(zhí)行狀態(tài),在用戶態(tài)下進(jìn)程具有較低的特權(quán),只能執(zhí)行規(guī)定的機(jī)器指令,不能執(zhí)行特權(quán)指令。進(jìn)程在用戶態(tài)下只能訪問進(jìn)程的存儲(chǔ)空間。在用戶態(tài)下進(jìn)程不能與系統(tǒng)硬件相互作用,不能訪問系統(tǒng)資源。核心態(tài)和用戶態(tài)Linux的進(jìn)程處理機(jī)上運(yùn)行時(shí),處理機(jī)提供了兩52Linux進(jìn)程調(diào)度方式Linux系統(tǒng)采用搶占調(diào)度方式,又稱可剝奪調(diào)度方式。采用這種調(diào)度方式時(shí),對(duì)于當(dāng)前運(yùn)行的進(jìn)程而言,當(dāng)有更緊急的進(jìn)程到來時(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)程。Linux進(jìn)程調(diào)度方式Linux系統(tǒng)采用搶占調(diào)度方式,又稱可53Linux進(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)的方法來保證實(shí)時(shí)進(jìn)程優(yōu)先于普通進(jìn)程。Linux進(jìn)程調(diào)度方法Linux進(jìn)程調(diào)度采用動(dòng)態(tài)優(yōu)先級(jí)法,調(diào)54進(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í)行完畢后,一般通過調(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)用返回到用戶態(tài)時(shí)。時(shí)機(jī)4.中斷處理后,進(jìn)程返回到用戶態(tài)時(shí)。進(jìn)程調(diào)度時(shí)機(jī)時(shí)機(jī)1.進(jìn)程狀態(tài)發(fā)生變化時(shí)。55Linux內(nèi)存管理模式MMU內(nèi)存管理MMU是內(nèi)存管理單元內(nèi)存的管理單位是頁(page),通常是4K或8K虛擬地址與物理地址物理地址可以位于RAM/FLASH/DISK經(jīng)過MMU,虛擬地址可以轉(zhuǎn)化成物理地址MMU可以在轉(zhuǎn)換過程中檢查權(quán)限,以保護(hù)內(nèi)存不受非法訪問如果沒有MMU,進(jìn)程與內(nèi)核之間無法隔離和保護(hù),系統(tǒng)容易崩潰56Linux內(nèi)存管理模式MMU內(nèi)存管理56Linux的三級(jí)目錄Linux采用三級(jí)目錄+底層MMU支持實(shí)現(xiàn)存儲(chǔ)管理,可以適應(yīng)64/32位CPU三級(jí)目錄是頁面目錄、中間目錄和頁表Linux的三級(jí)目錄Linux采用三級(jí)目錄+底層MMU支持實(shí)57進(jìn)程空間和內(nèi)核空間進(jìn)程名義上有4G的空間實(shí)際上只有3G屬于進(jìn)程本身虛擬系統(tǒng)空間占據(jù)高位1G進(jìn)程空間和內(nèi)核空間進(jìn)程名義上有4G的空間58Linux內(nèi)核啟動(dòng)分析搭建開發(fā)環(huán)境宿主機(jī)和目標(biāo)機(jī)交叉編譯編譯引導(dǎo)程序(u-boot或者vivi)編譯內(nèi)核(mizilinux)編譯根文件系統(tǒng)使用JTAG將編譯好的映像寫入目標(biāo)板可以寫入到NorFlash當(dāng)中可以寫入到NandFlash當(dāng)中Linux內(nèi)核啟動(dòng)分析搭建開發(fā)環(huán)境59Linux內(nèi)核啟動(dòng)分析上電CPU根據(jù)設(shè)置讀取Flash中的BootloaderBootloader作兩段式加載Bootload將控制權(quán)移交給內(nèi)核Bootloader事先檢測(cè)硬件參數(shù),例如物理地址Bootloader加載壓縮的內(nèi)核映像內(nèi)核自解壓內(nèi)核將自身定位到正確的物理地址Linux內(nèi)核啟動(dòng)分析上電60內(nèi)核啟動(dòng)流程執(zhí)行init初始化進(jìn)程啟動(dòng)一個(gè)shell執(zhí)行啟動(dòng)腳本文件顯示登錄提示符等待登錄內(nèi)核啟動(dòng)流程執(zhí)行init初始化進(jìn)程61嵌入式LINUX操作系統(tǒng)內(nèi)核選擇內(nèi)核內(nèi)核配置編譯內(nèi)核安裝內(nèi)核嵌入式LINUX操作系統(tǒng)內(nèi)核選擇內(nèi)核62Linux內(nèi)核源碼內(nèi)核目錄結(jié)構(gòu):/usr/src/Linux-***/arch(重點(diǎn))/drivers/fs/include/init/ipc/kernel/mm/netLinux內(nèi)核源碼內(nèi)核目錄結(jié)構(gòu):63內(nèi)核配置進(jìn)入到內(nèi)核源代碼目錄cd/usr/src/linux-2.***makeconfigmakexconfigmakemenuconfigmake內(nèi)核配置進(jìn)入到內(nèi)核源代碼目錄64編譯生成的文件vmlinux未壓縮的Linux內(nèi)核varch/<arch>/boot/zImage經(jīng)zlib壓縮后的Linux內(nèi)核varch/<arch>/boot/bzImage經(jīng)zlib壓縮后的Linux內(nèi)核,b是指big,壓縮狠/boot/vmlinuz-<version>經(jīng)zlib壓縮后的Linux內(nèi)核編譯生成的文件vmlinux65編譯生成的文件v/boot/System.map-<version>內(nèi)核符號(hào)地址/boot/initrd-<version>.imgramdisk,要掛載的根文件系統(tǒng)/lib/modules/<version>模塊vmodules.dep模塊依賴文件編譯生成的文件v/boot/System.map-<vers66裁剪Linux目的是創(chuàng)建嵌入式Linux嵌入式硬件資源有限,所以要裁剪軟件裁剪的對(duì)象包括:Linux內(nèi)核庫守護(hù)進(jìn)程GUI裁剪Linux目的是創(chuàng)建嵌入式Linux67裁剪Linux選擇合適的文件系統(tǒng)ext2,ext3,jffs2模塊機(jī)制網(wǎng)絡(luò)協(xié)議無用的驅(qū)動(dòng)程序調(diào)試信息裁剪的技術(shù)要
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度房地產(chǎn)項(xiàng)目增資入股投資協(xié)議
- 二零二五年度辦公室文員聘用與企業(yè)文化融合協(xié)議
- 二零二五年度新能源汽車碰撞責(zé)任免除合同
- 2025年度現(xiàn)代農(nóng)業(yè)病蟲害防治藥害賠償協(xié)議書
- 二零二五年度勞動(dòng)局標(biāo)準(zhǔn)合同:養(yǎng)老服務(wù)業(yè)員工就業(yè)保障協(xié)議范本
- 2025年度賬戶變更補(bǔ)充服務(wù)協(xié)議
- 高性能計(jì)算中心設(shè)備采購及安裝合同
- 企業(yè)辦公室裝飾設(shè)計(jì)與施工服務(wù)合同
- 教育培訓(xùn)行業(yè)線上課程開發(fā)與運(yùn)營(yíng)計(jì)劃書
- 電氣設(shè)備安裝工程施工合同新
- 祥康健康快車王晗老師講座收集驗(yàn)方
- 禮儀與教化 課件-2023-2024學(xué)年高中美術(shù)湘美版(2019)美術(shù)鑒賞
- 新生兒早期基本保健課件
- 采礦學(xué)課程設(shè)計(jì)硯北煤礦新井設(shè)計(jì)全套圖紙
- 第19章-城市設(shè)計(jì)課件
- 人事管理管理制度
- 大型儲(chǔ)罐計(jì)算書
- 2022-2023學(xué)年廣東省廣州市荔灣區(qū)統(tǒng)考初三第一次??紨?shù)學(xué)試題含解析
- 針對(duì)本項(xiàng)目售后服務(wù)方案
- 2022年桂林電子科技大學(xué)高等學(xué)歷繼續(xù)教育學(xué)士學(xué)位英語考試真
- 新人教版七至九年級(jí)英語單詞表 漢譯英(含音標(biāo))
評(píng)論
0/150
提交評(píng)論