freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

嵌入式linux應用開發(fā)-內(nèi)核分析(已修改)

2025-01-20 03:37 本頁面
 

【正文】 嵌入式 Linux應用開發(fā) 第三章 Linux 內(nèi)核原理與移植初步 ? Linux的核心代碼結(jié)構(gòu) ? Linux存儲管理 ? Linux文件管理 ? Linux設(shè)備管理 ? Linux的模塊機制 內(nèi)核源代碼的物理分布( 1/2) ? 內(nèi)核裝入(引導之前) ? 引導扇內(nèi)容: arch/i386/boot/ ? 緊隨其后的內(nèi)容: arch/i386/boot/。負責全部內(nèi)核的讀入及部分硬件初始化 ? 同時還有 arch/i386/boot/ ? ,進入保護模式,并用arch/i386/boot/pressed/ depress_kernel來解壓縮內(nèi)核 ? 然后加上 arch/i386/kernel/,并從此處開始,然后調(diào)用函數(shù) start_kernel(在 /init/) 內(nèi)核源代碼的物理分布( 2/2) ? 內(nèi)核引導以初始化 ? Start_kernel(init/)完成大量的初始化工作,包括各種數(shù)據(jù)結(jié)構(gòu)的初始化,創(chuàng)建 init進程( 1號進程),而 start_kernel函數(shù)本身以 0號任務(空閑任務)形式繼續(xù),完成用 cpu_idle調(diào)用 idle的無限循環(huán) ? init進程創(chuàng)建內(nèi)核級進程: bdflush(fs/ )和kswapd(mm/ ),進程號為 2, 3。然后 init進程調(diào)入/sbin/init可執(zhí)行體 進程管理 ? kernel目錄 ? :調(diào)度程序, schedule函數(shù) ? 進程控制: (do_fork()) ? 模塊化: ? 其它: 內(nèi)存管理 ? mm目錄 ? 分頁和置換 ? swap ? ? ? (kswapd找置換頁的守護進程 ) ? 分配和釋放 ? ? ? 、釋放 vmalloc,vremap,vfree ? 內(nèi)存映射 ? ? : do_mmap,do_munmap,sys_brk fs目錄及文件系統(tǒng) ? ( Exec) ? ,取消注冊 (open,release) ? ? ,定義 VFS統(tǒng)一接口 ? ,讀寫 inode例程等 ? ? ? file結(jié)構(gòu)的分配和釋放, get_empty_filp被 open,pipe,socket調(diào)用 ? sys_open,sys_close,chown,chmod ? read,write ? , ioctl系統(tǒng)調(diào)用 其它 ? IPC: , , , ? 設(shè)備驅(qū)動程序: ? drivers/char字符設(shè)備 ? ? drivers/block塊設(shè)備 ? ? ? drivers/sound聲卡 ? drivers/網(wǎng)絡(luò) 更改系統(tǒng)核心 ? 變更系統(tǒng)核心的方法 ? 直接修改核心源代碼,然后重新編譯 ? 應用內(nèi)核模塊 ? 直接修改源代碼 ? Linux源代碼就是一個大型的軟件系統(tǒng),其各文件及目錄等由 Makefile組織起來,所以 Makefile用來控制這一系統(tǒng) 內(nèi)核重編譯 ? 內(nèi)核的配置:選擇哪些模塊要編譯進內(nèi)核,那些不編譯進去 ? 方法 ? 在源代碼中 ifdef CONFIG_MOD1 MOD1的代碼 endif ? 在 Makefile中 ifdef CONFIG_MOD1 OBJS=OBJS endif 內(nèi)核配置 ? 所謂內(nèi)核配置就是提供用戶接口,讓用戶來設(shè)置這些宏 echo MOD1[y/n]? read yesno if yesno==y CONFIG_MOD1=y endif ? 在 Linux下進行內(nèi)核配置時敲入 make config(xconfig,menuconfig),在Makefile中存在這些目標 ? 其功能為列出配置選項,根據(jù)用戶輸入的 y或 n來設(shè)置相應的宏 ? 可以是否選擇支持網(wǎng)絡(luò),支持哪些設(shè)備,支持哪些文件系統(tǒng)等 開始編譯 ? 準備工作 ? make clean:清除前一次編譯時生成的中間文件 ? make dep:確定文件間的依賴關(guān)系 ? 開始編譯 ? make zImage:產(chǎn)生內(nèi)核映像文件 ? make bzImage:如果是大內(nèi)核 ? 模塊支持 ? make modules ? Make modules_install ? 編譯完成后,會在 /usr/src/linux/arch/i386/boot下產(chǎn)生新的內(nèi)核映像文件 用新內(nèi)核重新啟動 ? 將內(nèi)核映像文件拷貝到 /boot下且起名為 zImage ? 修改 /etc/ ? 添加: image=/boot/zImage ? label=new ? 運行 lilo命令,是這一設(shè)置生效 ? 重新啟動,并在 lilo處敲入 new即可 內(nèi)核 Makefile的分析 ? 內(nèi)核源代碼分布到各個目錄中,如 kernel,mm中。一般在每個目錄下都有Makefile。 Linux就是用這些 Makefile的配合來完成對內(nèi)核的管理。 ? 從 zImage開始逐層自己分析 ? 留作練習 Linux內(nèi)存管理 地址空間 ? 地址空間( address space)是一段表示內(nèi)存位置的地址范圍。地址空間有兩種: ? 物理地址空間 ? 邏輯地址空間,也被稱為虛擬地址空間 ? 在邏輯地址和物理地址之間相互轉(zhuǎn)換的工作是由內(nèi)核和硬件內(nèi)存管理單元( MMU—memory management unit)共同完成的。 ? MMU是被集成進現(xiàn)代的 CPU里的,它們都是同一塊 CPU芯片內(nèi)的一個部分。 ? 內(nèi)核告訴 MMU如何為每個進程把某邏輯頁面映射到某特定物理頁面,而 MMU在進程提出內(nèi)存請求時完成實際的轉(zhuǎn)換工作。 地址空間的轉(zhuǎn)換 ? 邏輯地址 ? 機器指令的尋址空間,與體系結(jié)構(gòu)相關(guān) ? 線性地址 (虛擬地址) ? 物理地址 LINUX的虛擬地址劃分 ? 每一個用戶進程都可以訪問 4GB的線性虛擬內(nèi)存空間。 ? 從 0到 3GB的虛擬內(nèi)存地址是用戶空間,用戶進程可以直接對其進行訪問。 ? 從 3GB到 4GB的虛擬內(nèi)存地址為核心態(tài)空間,存放僅供核心態(tài)訪問的代碼和數(shù)據(jù),用戶態(tài)進程不可訪問。 ? 所有進程從 3GB到 4GB的虛擬空間都是一樣的,有同樣的頁目錄項,同樣的頁表,對應到同樣的物理內(nèi)存段。 LINUX以此方式讓內(nèi)核態(tài)進程共享代碼段和數(shù)據(jù)段。 ? 內(nèi)核態(tài)虛擬空間從 3GB到 3GB+4M的一段(也就是進程頁目錄第 768項所管轄的范圍),被映射到物理空間 0到 4M段。因此,進程處于核心態(tài)時,只要通過訪問虛擬空間 3GB到 3GB+4M段,偏移地址 0到 4M,即訪問了物理空間 0到 4M段。 Linux的線性地址空間分配 Linux的線性地址空間分布 Memory mapped region: Filemapping Shared libraries kernel code/data/stack Memory mapped region for shared libraries runtime heap (via malloc) program text (.text) initialized data (.data) uninitialized data (.bss) stack forbidden 0 %esp process VM brk 0xc0 physical memory same for each process processspecific data structures (page tables, task and mm structs) kernel VM .data .text p demandzero demandzero .data .text 與內(nèi)存區(qū)域相關(guān)的系統(tǒng)調(diào)用接口 System call Description brk( ), sbrk( ) Changes the heap size of the process execve( ) Loads a new executable file, thus changing the process address space _exit( ) Terminates the current process and destroys its address space fork( ) Creates a new process, and thus a new address space mmap( ) Creates a memory mapping for a file, thus enlarging the process address space munmap( ) Destroys a memory mapping for a file, thus contracting the process address space shmat( ) Attaches a shared memory region shmdt( ) Detaches a shared memory region 用戶地址空間管理-虛存段 VMA Linux的用戶地址空間分布 ? 進程描述符中的 struct mm_struct *mm用來管理已分配給該進程的線性地址空間 ? 每一個連續(xù)的線性地址區(qū)間由一個 vm_area_struct管理,簡稱 vma ? mm中的 vma按地址排序由線性鏈表連接起來,當 vma的數(shù)量相當大的時候啟用 avl樹,與線性鏈表同時管理 vma以提高訪問效率 ? 隨著 vma的動態(tài)改變, vma之間存在歸并和拆分等操作 ? 分配 vma并不立即分配頁幀 虛存段 (VMA)的組織和管理 ?VMA:vitual memory area 一個 vma段是某個進程的一段連續(xù)的虛存空間;在這段虛存里的所有單元擁有相同的特征。例如:屬于同一進程,相同的訪問權(quán)限,同時被鎖定( locked),同時受保護( protected),等等。 進程通常占用幾個 vma段,分別用于代碼段、數(shù)據(jù)段、堆棧段等。屬于同一進程的vma段通過 vm_next指針連接,組成鏈表。 對于一個給定的進程,兩個 VMAs決不會重疊,一個地址最多被一個 VMA所覆蓋;進程從未訪問過的的一個地址將不會在任何一個 VMA中。 struct mm_struct結(jié)構(gòu)的成員 struct vm_area_struct * mmap 表示進程的 vma鏈表的表頭。 vm_area_struct mm_struct頁表vm_area_structvm_area_structvm_area_structvm_area_struct代代代代代代代代代共享VMA鏈指針虛存段 (VMA)的組織和管理 ? 當一個進程有多于 avl_min_map_count數(shù)目的 VMA時,內(nèi)核也會創(chuàng)建一個AVL樹來存儲它們,此時仍然是使用 VMAs自己的指針對該樹進行管理。AVL樹是一個平衡二叉樹結(jié)構(gòu),因此這種方法在 VMA數(shù)量巨大時查找效率十分高。 AVL樹 vm _ a r e a _ s t r u c t ( 1 0 0 0 , 2 0 0 0 ) vm _ av l _ l e ft vm _ av l _ ri g h t ( 5 0 0 , 6 7 0 ) vm _ av l _ l e ft vm _ av l _ ri g h t ( 2 5 0 0 , 3 0 0 0 ) vm _ av l _ l e ft vm _ av l _ ri g h t ( 3 5 0 , 4 5 0 ) vm _ av l _ l e ft vm _ av l _ ri g h t ( 8 0 0 , 9 0 0 ) vm _ av l _ l e ft vm _ av l _ ri g h t? 物理映射區(qū)最大為 896M,如果實際物理內(nèi)存不足 896M,則該區(qū)與實際物理內(nèi)存大小相等 ? 兩個隔離區(qū)的作用是防止越界造成的致命損害 Linux的內(nèi)核地址空間分布 物理區(qū) 虛存區(qū) 8~ 16M 隔離區(qū) 8K隔 離區(qū) 高端映射區(qū) 固定映射區(qū) 保留區(qū) 線性地址 0xC0000000 ? 物理映射區(qū)最大為 896M,如果實際物理內(nèi)存不足 896M,則該區(qū)與實際物理內(nèi)存大小相等 ? 兩個隔離區(qū)的作用是防止越界造成的致命損害 Linux的內(nèi)核地址空間分布 物理區(qū) 虛存區(qū) 8~ 16M 隔離區(qū) 8K隔 離區(qū) 高端映射區(qū) 固定映射區(qū) 保留區(qū) 線性地址 0xC0000000 虛擬地址轉(zhuǎn)換 PGD PMD PTE Page Frame 1. 頁目錄索引
點擊復制文檔內(nèi)容
教學課件相關(guān)推薦
文庫吧 www.dybbs8.com
公安備案圖鄂ICP備17016276號-1