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

正文內(nèi)容

嵌入式linux應(yīng)用開發(fā)-內(nèi)核分析-wenkub.com

2025-01-05 03:37 本頁面
   

【正文】 first is not real entry ? file deleted when link count goes to 0 ? restrictions ? can39。 ? Lock 這個域用于鎖定這個 VFS inode 。 ? Mode 象 EXT2 一樣,這個域描述這個 VFS inode 代表的東西和對它的訪問權(quán)限。 ? 每一個 VFS inode 中的信息使用文件系統(tǒng)相關(guān)的例程從底層的文件系統(tǒng)中獲取。Covered inode指針指向文件系統(tǒng)安裝到的目錄的 inode 。 ? VFS 保存系統(tǒng)中安裝的文件系統(tǒng)的列表和它們的 VFS 超級塊列表。 (在系統(tǒng)啟動操作系統(tǒng)初始化自身時 ) ? 真實(shí)的文件系統(tǒng)自身建立在內(nèi)核中或者是作為可加載的模塊。 ? Linux也在系統(tǒng)內(nèi)核和文件系統(tǒng)之間提供了一種叫做虛擬文件系統(tǒng) VFS( virtual file system)的標(biāo)準(zhǔn)接口。 ? slab最大的分配空間是一個頁面的大小 4096 ? 在 CPU的 cache中,為了提高傳輸效率,地址都是以 word大小進(jìn)行傳遞的。 ? 對內(nèi)存的請求可以按照請求頻率來分類,頻繁使用的類型使用專門的緩存,很少使用的可以使用類似 2的冪次的通用緩存。 ? 需要新的內(nèi)存區(qū)域時,內(nèi)核從伙伴系統(tǒng)申請頁面,把它們劃分成一個個區(qū)域,取一個來滿足需求;如果某個頁面中的內(nèi)存區(qū)域都釋放了,頁面就交回到伙伴系統(tǒng)。 ? 塊設(shè)備只能通過緩沖區(qū)高速緩存存取。不用的頁面將被移出高速緩存。如果頁面在高速緩存中,則將一個指向 mem_map_t的指針返回給頁面錯誤處理程序。這樣,該頁面就可以簡單地扔掉,節(jié)省了大量的系統(tǒng)操作。當(dāng)它們從內(nèi)存中移走時,將會被保存到一個特殊的交換文件中。 頁面換出 ? 如果將要扔掉的物理內(nèi)存頁一直沒有被改寫過,則操作系統(tǒng)將不保存此內(nèi)存頁,而只是簡單地將它扔掉。它靠檢查出錯頁面的頁面表來區(qū)分:如果頁面表的入口是無效的,但非空,說明頁面在交換文件中。 ? 接著檢測缺頁時訪問模式是否合法。 缺頁中斷服務(wù)程序?yàn)?do_page_fault() set_trap_gate(14, amp。 請求調(diào)頁 ? 一旦一個可執(zhí)行鏡像映射到了一個進(jìn)程的虛擬內(nèi)存中,它就可以開始執(zhí)行了。它是沒有虛擬存儲空間的進(jìn)程,它只運(yùn)行在內(nèi)核態(tài),直接使用物理地址空間。然后,經(jīng)一系列函數(shù)調(diào)用后,讀入該頁面。該地址寫入進(jìn)程頁表中那個原來描述換出物理頁面的頁表項(xiàng),替換了其中的頁幀地址。 23 struct swap_list_t swap_list = {1, 1}。 /*指向下一項(xiàng)交換空間的的指針 */ 64 }。 /*交換空間的優(yōu)先級。 /*交換空間中的第一個沒有被任何進(jìn)程使用的交換頁在 swap_map數(shù)組中的下標(biāo) */ 57 unsigned int highest_bit。 /* 對于此設(shè)備的互斥鎖 */ 53 struct dentry * swap_file。 /* 如果 SWP_USED位置位,則被占用。該參數(shù)中,SWAP_FLAG_PREFER( 0X8000)必須置位,SWAP_FLAG_PRIO_MASK(0X7FFF)指定一個正的優(yōu)先數(shù)。 ? 第 4096字節(jié)之后則是真正存放換出頁面的空間。 交換空間 ? 兩種交換空間: ? 一種用整個塊設(shè)備,如硬盤的一個分區(qū),稱作交換設(shè)備,效率較高; ? 另一種用文件系統(tǒng)中固定長度的文件,稱作交換文件,效率較低。 釋放算法 ? 回收空閑塊時, change_bit()函數(shù)根據(jù) bitmap表的對應(yīng)組,判斷回收塊的前后鄰居是否也為空。 ? 若找到的空閑塊長大于需求的塊長,則將空閑塊一分為二,前半部分插入free_area中前一條鏈表,取后半部分。 操作函數(shù) ? 分配內(nèi)存塊由 __get_free_pages()函數(shù)和宏定義 __get_free_page()執(zhí)行 ? 釋放內(nèi)存塊可以調(diào)用 free_pages()函數(shù)執(zhí)行。 /* 指向 bitmap */ }。 free_area數(shù)組由NR_MEM_LISTS個 free_area_struct結(jié)構(gòu)類型的數(shù)組元素構(gòu)成,每個元素均作為一條空閑塊鏈表的表頭。 ? 接著是第 1組,初始化時設(shè)定了長度為: ? (end_memstart_mem) / PAGE_SIZE/21+3 ,每位表示連續(xù) 21個頁幀的空閑狀況,置位表示其中 1頁或 2頁已被占用。 空閑內(nèi)存的組織 空閑頁面的組織 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)存的空閑狀況。 145 struct buffer_head * buffers。 /* atomic flags, some possibly updated asynchronously */ 141 struct list_head lru。 /* 若該頁幀的內(nèi)容是文件,則 index指出文件的 inode和偏移位置 */ 138 struct page *next_hash。 ? 它本身是關(guān)于 struct page mem_map_t (linux/)的數(shù)組,每項(xiàng)mem_map_t對應(yīng)一個關(guān)于核心態(tài)、用戶態(tài)代碼和數(shù)據(jù)等的頁幀。 ? 為了減少這種開銷,最近被執(zhí)行過的地址轉(zhuǎn)換結(jié)果將被存儲在 MMU的轉(zhuǎn)換后備緩存( translation lookaside buffers: TLBs)內(nèi)。每一個頁面有一個唯一的頁面號,叫做 PFN(page frame number)。 struct mm_struct結(jié)構(gòu)的成員 struct vm_area_struct * mmap 表示進(jìn)程的 vma鏈表的表頭。例如:屬于同一進(jìn)程,相同的訪問權(quán)限,同時被鎖定( locked),同時受保護(hù)( protected),等等。 LINUX以此方式讓內(nèi)核態(tài)進(jìn)程共享代碼段和數(shù)據(jù)段。 地址空間的轉(zhuǎn)換 ? 邏輯地址 ? 機(jī)器指令的尋址空間,與體系結(jié)構(gòu)相關(guān) ? 線性地址 (虛擬地址) ? 物理地址 LINUX的虛擬地址劃分 ? 每一個用戶進(jìn)程都可以訪問 4GB的線性虛擬內(nèi)存空間。 ? 從 zImage開始逐層自己分析 ? 留作練習(xí) Linux內(nèi)存管理 地址空間 ? 地址空間( address space)是一段表示內(nèi)存位置的地址范圍。負(fù)責(zé)全部內(nèi)核的讀入及部分硬件初始化 ? 同時還有 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號進(jìn)程),而 start_kernel函數(shù)本身以 0號任務(wù)(空閑任務(wù))形式繼續(xù),完成用 cpu_idle調(diào)用 idle的無限循環(huán) ? init進(jìn)程創(chuàng)建內(nèi)核級進(jìn)程: bdflush(fs/ )和kswapd(mm/ ),進(jìn)程號為 2, 3。然后 init進(jìn)程調(diào)入/sbin/init可執(zhí)行體 進(jìn)程管理 ? kernel目錄 ? :調(diào)度程序, schedule函數(shù) ? 進(jìn)程控制: (do_fork()) ? 模塊化: ? 其它: 內(nèi)存管理 ? mm目錄 ? 分頁和置換 ? swap ? ? ? (kswapd找置換頁的守護(hù)進(jìn)程 ) ? 分配和釋放 ? ? ? 、釋放 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)核心的方法 ? 直接修改核心源代碼,然后重新編譯 ? 應(yīng)用內(nèi)核模塊 ? 直接修改源代碼 ? Linux源代碼就是一個大型的軟件系統(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)核配置時敲入 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:清除前一次編譯時生成的中間文件 ? 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 ? 運(yùn)行 lilo命令,是這一設(shè)置生效 ? 重新啟動,并在 lilo處敲入 new即可 內(nèi)核 Makefile的分析 ? 內(nèi)核源代碼分布到各個目錄中,如 kernel,mm中。地址空間有兩種: ? 物理地址空間 ? 邏輯地址空間,也被稱為虛擬地址空間 ? 在邏輯地址和物理地址之間相互轉(zhuǎn)換的工作是由內(nèi)核和硬件內(nèi)存管理單元( MMU—memory management unit)共同完成的。 ? 從 0到 3GB的虛擬內(nèi)存地址是用戶空間,用戶進(jìn)程可以直接對其進(jìn)行訪問。 ? 內(nèi)核態(tài)虛擬空間從 3GB到 3GB+4M的一段(也就是進(jìn)程頁目錄第 768項(xiàng)所管轄的范圍),被映射到物理空間 0到 4M段。 進(jìn)程通常占用幾個 vma段,分別用于代碼段、數(shù)據(jù)段、堆棧段等。 vm_area_struct mm_struct頁表vm_area_structvm_area_structvm_area_structvm_area_struct代代代代代代代
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1