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

正文內(nèi)容

嵌入式linux應用開發(fā)-內(nèi)核分析-閱讀頁

2025-01-23 03:37本頁面
  

【正文】 struct page *prev。 /* 指向 bitmap */ }。 ? 所有單個空閑頁幀組成的鏈表掛到 free_area數(shù)組的第 0項后面。 操作函數(shù) ? 分配內(nèi)存塊由 __get_free_pages()函數(shù)和宏定義 __get_free_page()執(zhí)行 ? 釋放內(nèi)存塊可以調(diào)用 free_pages()函數(shù)執(zhí)行。 ? 當分配長度是 2i頁幀的塊時,從 free_area數(shù)組的第 i條鏈表開始搜索,找不到再搜索第 i+1條鏈表,以此類推。 ? 若找到的空閑塊長大于需求的塊長,則將空閑塊一分為二,前半部分插入free_area中前一條鏈表,取后半部分。 ? bitmap表也相應調(diào)整。 釋放算法 ? 回收空閑塊時, change_bit()函數(shù)根據(jù) bitmap表的對應組,判斷回收塊的前后鄰居是否也為空。 ? 此判斷是個遞歸過程,直至找不到空閑鄰居為止。 交換空間 ? 兩種交換空間: ? 一種用整個塊設(shè)備,如硬盤的一個分區(qū),稱作交換設(shè)備,效率較高; ? 另一種用文件系統(tǒng)中固定長度的文件,稱作交換文件,效率較低。 虛擬內(nèi)存模型 mm_struct vm_area_struct file page task_struct 頁表 物理內(nèi)存 后援文件(包括交換區(qū),設(shè)備) inode 交換空間的格式 ? 前 4096字節(jié)是一個以字符串 “ SWAP_SPACE‖結(jié)尾的位圖。 ? 第 4096字節(jié)之后則是真正存放換出頁面的空間。 啟用交換空間 int sys_swapon(const char * swapfile, int swapflags)。該參數(shù)中,SWAP_FLAG_PREFER( 0X8000)必須置位,SWAP_FLAG_PRIO_MASK(0X7FFF)指定一個正的優(yōu)先數(shù)。 每注冊一個交換空間,就在 swap_info表中填一項swap_info_struct結(jié)構(gòu) 25 struct swap_info_struct swap_info[MAX_SWAPFILES]。 /* 如果 SWP_USED位置位,則被占用。 */ 51 kdev_t swap_device。 /* 對于此設(shè)備的互斥鎖 */ 53 struct dentry * swap_file。 55 unsigned short * swap_map。 /*交換空間中的第一個沒有被任何進程使用的交換頁在 swap_map數(shù)組中的下標 */ 57 unsigned int highest_bit。 /*上次從當前的 cluster中成功分配的交換頁面的后繼頁面在 swap_map數(shù)組中的下標 */ 59 unsigned int cluster_nr。 /*交換空間的優(yōu)先級。 /* 表示該交換空間尚有多少空閑空間可供保存進程換出的物理頁 */ 62 unsigned long max。 /*指向下一項交換空間的的指針 */ 64 }。 /* head of priorityordered swapfile list */ 155 int next。 23 struct swap_list_t swap_list = {1, 1}。 交換空間的工作 ? kswapd進程換出頁面時,調(diào)用 try_to_swap_out() 測試頁面的年齡。該地址寫入進程頁表中那個原來描述換出物理頁面的頁表項,替換了其中的頁幀地址。 ? 反過來,當缺頁中斷發(fā)生時,缺頁中斷服務程序可以根據(jù)產(chǎn)生缺頁的地址(由 CR2寄存器給出),找到描述該頁面的頁表項。然后,經(jīng)一系列函數(shù)調(diào)用后,讀入該頁面。 ? kswapd是一特殊的進程,稱內(nèi)核態(tài)線程( kernel thread)。它是沒有虛擬存儲空間的進程,它只運行在內(nèi)核態(tài),直接使用物理地址空間。 ? kswapd的作用超越了字面上的描述。 請求調(diào)頁 ? 一旦一個可執(zhí)行鏡像映射到了一個進程的虛擬內(nèi)存中,它就可以開始執(zhí)行了。 ? 頁面錯誤將會描述頁面錯誤發(fā)生時的虛擬內(nèi)存地址和存取內(nèi)存操作的類型。 缺頁中斷服務程序為 do_page_fault() set_trap_gate(14, amp。 /* arch/i386/kernel/ */ ENTRY(page_fault) /* arch/i386/kernel/ */ pushl $SYMBOL_NAME(do_page_fault) jmp error_code /* 異常中斷服務程序的統(tǒng)一入口 */ 中斷服務流程 ? 根據(jù)控制寄存器 CR2傳遞的缺頁地址,找到用來表示出現(xiàn)缺頁的虛擬存儲區(qū)的 vm_area_struct結(jié)構(gòu)。 ? 接著檢測缺頁時訪問模式是否合法。 ? 如果 Linux認為此頁面錯誤是合法的,它將處理此頁面錯誤。它靠檢查出錯頁面的頁面表來區(qū)分:如果頁面表的入口是無效的,但非空,說明頁面在交換文件中。 頁面置換 ? 當一個進程需要把一個虛擬內(nèi)存頁面裝入到物理內(nèi)存而又沒有空閑的物理內(nèi)存時,操作系統(tǒng)必須將一個現(xiàn)在不用的頁面從物理內(nèi)存中扔掉以便為將要裝入的虛擬內(nèi)存頁騰出空間。 頁面換出 ? 如果將要扔掉的物理內(nèi)存頁一直沒有被改寫過,則操作系統(tǒng)將不保存此內(nèi)存頁,而只是簡單地將它扔掉。 ? 但是,如果此頁面已經(jīng)被修改過,操作系統(tǒng)就需要把頁面的內(nèi)容保存起來。當它們從內(nèi)存中移走時,將會被保存到一個特殊的交換文件中。 ? TLB ? Page Cache ? 頁面高速緩存 :它的作用是加快對磁盤中的文件的存取 ? Swap Cache ? 交換高速緩存:它只保存那些被修改過的頁面。這樣,該頁面就可以簡單地扔掉,節(jié)省了大量的系統(tǒng)操作。 ? 頁面高速緩存由 page_hash_table組成, page_hash_table 是一個包含指向 mem_map_t結(jié)構(gòu)指針的數(shù)組。如果頁面在高速緩存中,則將一個指向 mem_map_t的指針返回給頁面錯誤處理程序。 ? 如果可能, L i n u x系統(tǒng)將會提前讀取文件中的下一個頁面,這樣,如果文件是順序執(zhí)行的,那么下一個頁面就已經(jīng)在內(nèi)存中了。不用的頁面將被移出高速緩存。這些緩沖區(qū)大小固定(例如 512 字節(jié)),包括從塊設(shè)備讀出的數(shù)據(jù)或者要寫到塊設(shè)備的數(shù)據(jù)。 ? 塊設(shè)備只能通過緩沖區(qū)高速緩存存取。 ? 參見 fs/ Slab分配器 ? 單單分配頁面的分配器肯定是不能滿足要求的。 ? 需要新的內(nèi)存區(qū)域時,內(nèi)核從伙伴系統(tǒng)申請頁面,把它們劃分成一個個區(qū)域,取一個來滿足需求;如果某個頁面中的內(nèi)存區(qū)域都釋放了,頁面就交回到伙伴系統(tǒng)。比如需要初始化的數(shù)據(jù)結(jié)構(gòu),釋放后可以暫存著,再分配時就不必初始化了。 ? 對內(nèi)存的請求可以按照請求頻率來分類,頻繁使用的類型使用專門的緩存,很少使用的可以使用類似 2的冪次的通用緩存。 ? 緩存一定數(shù)量的對象可以減少對 buddy系統(tǒng)的調(diào)用,從而節(jié)省時間并減少由此引起的高速緩存污染。 ? slab最大的分配空間是一個頁面的大小 4096 ? 在 CPU的 cache中,為了提高傳輸效率,地址都是以 word大小進行傳遞的。 Slab with color col and alignment aln pagelevel allocatorinodecachefilecachesk_buffcachetask_structcacheactiveinodesactivesk_buffactivefilesactiveprocesseskmem_cache_create() kmem_cache_destroy()kmem_cache_free()kmem_cache_alloc()Linux kernel memory allocator architectureback endfront endLinux文件管理 Linux支持的常見的文件系統(tǒng)類型 ? Linux自身提供的缺省文件系統(tǒng): ext2fs(一般根文件系統(tǒng) /使用此文件系統(tǒng));新增的自身提供的文件系統(tǒng): ext3fs、 ReiserFS、 IBM JFS等 ? 其它 UNIX使用的文件系統(tǒng): minix,ext,xiafs等 ? DOS/Windows使用的文件系統(tǒng): FAT12,FAT16,FAT32,VFAT,NTFS(只讀) ? HPFS( OS/2使用、只讀)、 HFS( Macintosh使用、只讀);AFFS(Amiga); System V,Coherent,Xenix; CDROM( ISO 9660) ? UMSDOS( UNIXlike FS on MSDOS); NFS(網(wǎng)絡(luò)文件系統(tǒng));SMBFS( Windows共享文件系統(tǒng))、 NCPFS( Novell Netware共享文件系統(tǒng)) ? /proc(用于內(nèi)核和進程信息) Linux 專用文件系統(tǒng) ? Minix 是 Linux 的第一個文件系統(tǒng),有局限,性能比較差。 ? Linux也在系統(tǒng)內(nèi)核和文件系統(tǒng)之間提供了一種叫做虛擬文件系統(tǒng) VFS( virtual file system)的標準接口。 Linux 文件系統(tǒng)的所有細節(jié)都通過軟件進行轉(zhuǎn)換,所以所有的文件系統(tǒng)對于 Linux 核心的其余部分和系統(tǒng)中運行的程序顯得一樣。 (在系統(tǒng)啟動操作系統(tǒng)初始化自身時 ) ? 真實的文件系統(tǒng)自身建立在內(nèi)核中或者是作為可加載的模塊。 ? 當一個塊設(shè)備文件系統(tǒng)安裝的時候,(包括 root 文件系統(tǒng)), VFS 必須讀取它的超級塊。 ? VFS 保存系統(tǒng)中安裝的文件系統(tǒng)的列表和它們的 VFS 超級塊列表。1 ? opening the same file twice – ? shares dentries ? opening same file via different hard links – ? shares inodes ? mounting same filesystem on different dirs – ? shares superblocks VFS 超級塊 ? 每一個安裝的文件系統(tǒng)都用 VFS 超級塊 ? mounted filesystem descriptor ? usually first block on disk (after boot block) ? copied into (similar) memory structure on mount ? distinction: disk superblock vs memory superblock ? dirty bit (s_dirt), copied to disk frequently ? important fields ? s_dev, s_bdev – device, devicedriver ? s_blocksize, s_maxbytes, s_type ? s_flags, s_magic, s_count, s_root, s_dquot ? s_dirty – dirty inodes for this filesystem ? s_op – superblock operations ? u – filesystem specific data ? 參見 include/linux/ VFS 超級塊包含的信息 ? Device 這是包含文件系統(tǒng)的塊設(shè)備的設(shè)備標識符。Covered inode指針指向文件系統(tǒng)安裝到的目錄的 inode 。 ? Superblock operations 指向一組本文件系統(tǒng)超級塊例程的指針。 ? 每一個 VFS inode 中的信息使用文件系統(tǒng)相關(guān)的例程從底層的文件系統(tǒng)中獲取。 ? 參見 include/linux/ The VFS Inode 包含的信息 ? device 存放這個文件的設(shè)備的設(shè)備標識符。 ? Mode 象 EXT2 一樣,這個域描述這個 VFS inode 代表的東西和對它的訪問權(quán)限。例程和文件系統(tǒng)相關(guān) ,執(zhí)行對于此 inode的操作 ? Count 系統(tǒng)組件當前使用這個 VFS inode 的數(shù)目。 ? Lock 這個域用于鎖定這個 VFS inode 。 ? Dirty 顯示這個 VFS inode 是否被寫過,如果這樣,底層的文件系統(tǒng)需要更新。 first is not real entry ? file deleted when link count goes to 0 ? restrictions ? can39。m a subdirectory) ? d_alias – other names (links) for the same object (inode)? ? d_lru – unused state linkage ? d_op – dentry operations (function pointer table
點擊復制文檔內(nèi)容
教學課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1