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

正文內(nèi)容

嵌入式linux應(yīng)用開發(fā)-內(nèi)核分析-在線瀏覽

2025-02-25 03:37本頁(yè)面
  

【正文】 troys 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的用戶地址空間分布 ? 進(jìn)程描述符中的 struct mm_struct *mm用來管理已分配給該進(jìn)程的線性地址空間 ? 每一個(gè)連續(xù)的線性地址區(qū)間由一個(gè) vm_area_struct管理,簡(jiǎn)稱 vma ? mm中的 vma按地址排序由線性鏈表連接起來,當(dāng) vma的數(shù)量相當(dāng)大的時(shí)候啟用 avl樹,與線性鏈表同時(shí)管理 vma以提高訪問效率 ? 隨著 vma的動(dòng)態(tài)改變, vma之間存在歸并和拆分等操作 ? 分配 vma并不立即分配頁(yè)幀 虛存段 (VMA)的組織和管理 ?VMA:vitual memory area 一個(gè) vma段是某個(gè)進(jìn)程的一段連續(xù)的虛存空間;在這段虛存里的所有單元擁有相同的特征。 ? 內(nèi)核態(tài)虛擬空間從 3GB到 3GB+4M的一段(也就是進(jìn)程頁(yè)目錄第 768項(xiàng)所管轄的范圍),被映射到物理空間 0到 4M段。 ? 所有進(jìn)程從 3GB到 4GB的虛擬空間都是一樣的,有同樣的頁(yè)目錄項(xiàng),同樣的頁(yè)表,對(duì)應(yīng)到同樣的物理內(nèi)存段。 ? 從 0到 3GB的虛擬內(nèi)存地址是用戶空間,用戶進(jìn)程可以直接對(duì)其進(jìn)行訪問。 ? 內(nèi)核告訴 MMU如何為每個(gè)進(jìn)程把某邏輯頁(yè)面映射到某特定物理頁(yè)面,而 MMU在進(jìn)程提出內(nèi)存請(qǐng)求時(shí)完成實(shí)際的轉(zhuǎn)換工作。地址空間有兩種: ? 物理地址空間 ? 邏輯地址空間,也被稱為虛擬地址空間 ? 在邏輯地址和物理地址之間相互轉(zhuǎn)換的工作是由內(nèi)核和硬件內(nèi)存管理單元( MMU—memory management unit)共同完成的。 Linux就是用這些 Makefile的配合來完成對(duì)內(nèi)核的管理。然后 init進(jìn)程調(diào)入/sbin/init可執(zhí)行體 進(jìn)程管理 ? kernel目錄 ? :調(diào)度程序, schedule函數(shù) ? 進(jìn)程控制: (do_fork()) ? 模塊化: ? 其它: 內(nèi)存管理 ? mm目錄 ? 分頁(yè)和置換 ? swap ? ? ? (kswapd找置換頁(yè)的守護(hù)進(jìn)程 ) ? 分配和釋放 ? ? ? 、釋放 vmalloc,vremap,vfree ? 內(nèi)存映射 ? ? : do_mmap,do_munmap,sys_brk fs目錄及文件系統(tǒng) ? ( Exec) ? ,取消注冊(cè) (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ū)動(dòng)程序: ? drivers/char字符設(shè)備 ? ? drivers/block塊設(shè)備 ? ? ? drivers/sound聲卡 ? drivers/網(wǎng)絡(luò) 更改系統(tǒng)核心 ? 變更系統(tǒng)核心的方法 ? 直接修改核心源代碼,然后重新編譯 ? 應(yīng)用內(nèi)核模塊 ? 直接修改源代碼 ? Linux源代碼就是一個(gè)大型的軟件系統(tǒng),其各文件及目錄等由 Makefile組織起來,所以 Makefile用來控制這一系統(tǒng) 內(nèi)核重編譯 ? 內(nèi)核的配置:選擇哪些模塊要編譯進(jìn)內(nèi)核,那些不編譯進(jìn)去 ? 方法 ? 在源代碼中 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下進(jìn)行內(nèi)核配置時(shí)敲入 make config(xconfig,menuconfig),在Makefile中存在這些目標(biāo) ? 其功能為列出配置選項(xiàng),根據(jù)用戶輸入的 y或 n來設(shè)置相應(yīng)的宏 ? 可以是否選擇支持網(wǎng)絡(luò),支持哪些設(shè)備,支持哪些文件系統(tǒng)等 開始編譯 ? 準(zhǔn)備工作 ? make clean:清除前一次編譯時(shí)生成的中間文件 ? make dep:確定文件間的依賴關(guān)系 ? 開始編譯 ? make zImage:產(chǎn)生內(nèi)核映像文件 ? make bzImage:如果是大內(nèi)核 ? 模塊支持 ? make modules ? Make modules_install ? 編譯完成后,會(huì)在 /usr/src/linux/arch/i386/boot下產(chǎn)生新的內(nèi)核映像文件 用新內(nèi)核重新啟動(dòng) ? 將內(nèi)核映像文件拷貝到 /boot下且起名為 zImage ? 修改 /etc/ ? 添加: image=/boot/zImage ? label=new ? 運(yùn)行 lilo命令,是這一設(shè)置生效 ? 重新啟動(dòng),并在 lilo處敲入 new即可 內(nèi)核 Makefile的分析 ? 內(nèi)核源代碼分布到各個(gè)目錄中,如 kernel,mm中。嵌入式 Linux應(yīng)用開發(fā) 第三章 Linux 內(nèi)核原理與移植初步 ? Linux的核心代碼結(jié)構(gòu) ? Linux存儲(chǔ)管理 ? Linux文件管理 ? Linux設(shè)備管理 ? Linux的模塊機(jī)制 內(nèi)核源代碼的物理分布( 1/2) ? 內(nèi)核裝入(引導(dǎo)之前) ? 引導(dǎo)扇內(nèi)容: arch/i386/boot/ ? 緊隨其后的內(nèi)容: arch/i386/boot/。負(fù)責(zé)全部?jī)?nèi)核的讀入及部分硬件初始化 ? 同時(shí)還有 arch/i386/boot/ ? ,進(jìn)入保護(hù)模式,并用arch/i386/boot/pressed/ depress_kernel來解壓縮內(nèi)核 ? 然后加上 arch/i386/kernel/,并從此處開始,然后調(diào)用函數(shù) start_kernel(在 /init/) 內(nèi)核源代碼的物理分布( 2/2) ? 內(nèi)核引導(dǎo)以初始化 ? Start_kernel(init/)完成大量的初始化工作,包括各種數(shù)據(jù)結(jié)構(gòu)的初始化,創(chuàng)建 init進(jìn)程( 1號(hào)進(jìn)程),而 start_kernel函數(shù)本身以 0號(hào)任務(wù)(空閑任務(wù))形式繼續(xù),完成用 cpu_idle調(diào)用 idle的無限循環(huán) ? init進(jìn)程創(chuàng)建內(nèi)核級(jí)進(jìn)程: bdflush(fs/ )和kswapd(mm/ ),進(jìn)程號(hào)為 2, 3。一般在每個(gè)目錄下都有Makefile。 ? 從 zImage開始逐層自己分析 ? 留作練習(xí) Linux內(nèi)存管理 地址空間 ? 地址空間( address space)是一段表示內(nèi)存位置的地址范圍。 ? MMU是被集成進(jìn)現(xiàn)代的 CPU里的,它們都是同一塊 CPU芯片內(nèi)的一個(gè)部分。 地址空間的轉(zhuǎn)換 ? 邏輯地址 ? 機(jī)器指令的尋址空間,與體系結(jié)構(gòu)相關(guān) ? 線性地址 (虛擬地址) ? 物理地址 LINUX的虛擬地址劃分 ? 每一個(gè)用戶進(jìn)程都可以訪問 4GB的線性虛擬內(nèi)存空間。 ? 從 3GB到 4GB的虛擬內(nèi)存地址為核心態(tài)空間,存放僅供核心態(tài)訪問的代碼和數(shù)據(jù),用戶態(tài)進(jìn)程不可訪問。 LINUX以此方式讓內(nèi)核態(tài)進(jìn)程共享代碼段和數(shù)據(jù)段。因此,進(jìn)程處于核心態(tài)時(shí),只要通過訪問虛擬空間 3GB到 3GB+4M段,偏移地址 0到 4M,即訪問了物理空間 0到 4M段。例如:屬于同一進(jìn)程,相同的訪問權(quán)限,同時(shí)被鎖定( locked),同時(shí)受保護(hù)( protected),等等。屬于同一進(jìn)程的vma段通過 vm_next指針連接,組成鏈表。 struct mm_struct結(jié)構(gòu)的成員 struct vm_area_struct * mmap 表示進(jìn)程的 vma鏈表的表頭。AVL樹是一個(gè)平衡二叉樹結(jié)構(gòu),因此這種方法在 VMA數(shù)量巨大時(shí)查找效率十分高。每一個(gè)頁(yè)面有一個(gè)唯一的頁(yè)面號(hào),叫做 PFN(page frame number)。 線性地址到物理地址的映射 (1/2) 線性地址到物理地址的映射 (2/2) 存在位 讀寫位 用戶態(tài) /核心態(tài)訪問位 表示是否采用寫透方式 表示是否啟用高速緩存 訪問位 已寫標(biāo)志位 頁(yè)大小, 4K(0)或4M(1),只適用于頁(yè)目錄表項(xiàng) 頁(yè)目錄表項(xiàng)和頁(yè)表項(xiàng) TLBs ? 轉(zhuǎn)換后備緩存( Translation Lookaside Buffers: TLBs) ? 如果簡(jiǎn)單的執(zhí)行從邏輯地址到物理地址的轉(zhuǎn)換過程,在跟蹤指針鏈時(shí)將會(huì)需要幾個(gè)內(nèi)存引用。 ? 為了減少這種開銷,最近被執(zhí)行過的地址轉(zhuǎn)換結(jié)果將被存儲(chǔ)在 MMU的轉(zhuǎn)換后備緩存( translation lookaside buffers: TLBs)內(nèi)。 ? LINUX對(duì)物理內(nèi)存的管理通過 mem_map表描述 (mm/)。 ? 它本身是關(guān)于 struct page mem_map_t (linux/)的數(shù)組,每項(xiàng)mem_map_t對(duì)應(yīng)一個(gè)關(guān)于核心態(tài)、用戶態(tài)代碼和數(shù)據(jù)等的頁(yè)幀。 136 struct address_space *mapping。 /* 若該頁(yè)幀的內(nèi)容是文件,則 index指出文件的 inode和偏移位置 */ 138 struct page *next_hash。 /* 指明目前使用該頁(yè)面的用戶數(shù)。 /* atomic flags, some possibly updated asynchronously */ 141 struct list_head lru。 /* 頁(yè)幀的年齡,越小越先換出 */ 143 wait_queue_head_t wait。 145 struct buffer_head * buffers。 /* nonNULL if kmapped */ 147 struct zone_struct *zone。 空閑內(nèi)存的組織 空閑頁(yè)面的組織 page page page page pagefreearea(0)freearea(1)freearea(n1)page page pageinodeinodemem_mapo n e b i t f o r 1p a g eo n e b i t f o r 2p a g e so n e b i t f o r 4p a g e s. . .. . . . .. .n e x tp r e vm a pn e x tp r e vm a pn e x tp r e vm a p. . .1 p a g e 1 p a g e2 p a g e s 2 p a g e s4 p a g e s 4 p a g e sb i t m a p f r e a _ a r e abitmap 表 ? 在物理內(nèi)存低端,緊跟 mem_map表的 bitmap表以位圖方式記錄了所有物理內(nèi)存的空閑狀況。 ? 與一般性位圖不同的是, bitmap表分割成 NR_MEM_LISTS組 (缺省值 6)。 ? 接著是第 1組,初始化時(shí)設(shè)定了長(zhǎng)度為: ? (end_memstart_mem) / PAGE_SIZE/21+3 ,每位表示連續(xù) 21個(gè)頁(yè)幀的空閑狀況,置位表示其中 1頁(yè)或 2頁(yè)已被占用。 ? 例如對(duì)第 5組,某個(gè) bit所對(duì)應(yīng)的連續(xù) 32頁(yè)幀中只要有一個(gè)被占用,此位即置 1,只有當(dāng)所有 32頁(yè)幀全部回收后才清 0。 free_area數(shù)組由NR_MEM_LISTS個(gè) free_area_struct結(jié)構(gòu)類型的數(shù)組元素構(gòu)成,每個(gè)元素均作為一條空閑塊鏈表的表頭。 /* 此結(jié)構(gòu)的 next,prev指針與 struct page匹配 */
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1