linux內核數據結構框架,《深入理解Linux內核》條目式筆記 _2

 2023-10-07 阅读 30 评论 0

摘要:? 下面25條描述主要從整體上介紹內存的相關概念,如各種地址格式, 及分段、分頁機制。 26. 虛擬內存(virtual memory)是硬件內存管理單元(MMU)和應用程序內存請求的一個邏輯層。具有如下作用:a. 支持多個進程并發執行;b. 可以運行內存需求量大于物

? 下面25條描述主要從整體上介紹內存的相關概念,如各種地址格式, 及分段、分頁機制。

26. 虛擬內存(virtual memory)是硬件內存管理單元(MMU)和應用程序內存請求的一個邏輯層。具有如下作用:a. 支持多個進程并發執行;b. 可以運行內存需求量大于物理內存上限的應用程序;c.進程可以執行只有部分代碼在內存中的應用程序;d. 所有進程可以共享一個庫或者應用程序的內存鏡像(memory image);e. 應用程序可以再定址(relocatable),可以放置在物理內存的任意位置;f. 程序員可以編寫機器無關代碼,無需考慮物理內存組織的問題。
27. 虛擬地址空間(virtual address space)是內存子系統的要素。內核和MMU一起把進程使用的虛擬地址轉化 為物理內存地址。現代的CPU可以已經包含了完成此工作的硬件單元。
28. 可用的RAM通常被分割為4KB或者8KB的頁幀(page frames),并使用頁表(Page Tables)來描述虛擬地址和物理地址的對應關系。
29. 隨機訪問內存(RAM)通常被分為兩部分, 一小部分用于存儲內核鏡像(內核代碼和內核靜態數據結構),其余地給虛擬內存系統(virtual memory system)通過以下三種方式進行使用: a. 用于內核請求的緩沖區、描述符和其它動態內核數據結構;b. 用于進程請求的通用內存區域和文件映射內存;c. 通過caches從硬盤和其它帶緩沖區設備獲得更好的性能。
30. 當可用內存的某些關鍵閥值到達時, 頁幀回收算法會被調用,從而釋放額外的內存。
31. 內存碎片(memory fragmention)是虛擬內存系統必須解決的問題。內核通常強制使用連續的內存區域,所以即使多個內存碎片的總和大于內核的內存請求, 內存分配也可能失敗。
32. 內核內存分配器(Kernel Memory Allocator)應該具有如下特征:a. 速度快;b. 最小化地浪費內存;c. 盡可能減少內存碎片;d. 兼容其它內存管理子系統(具有從這些系統借用和釋放頁幀的能力)。
33. 常見的KMA包括: Resource map allocator, Power-of-two free lists, McKusick-Karels allocator, Buddy System, Mach's Zone allocator, Dynix allocator, Solaris's Slab allocator。 Linux的KMA是在buddy system上面使用Slab allocator。
34. 當一個進程通過exec()執行一個程序時, 內核會給該進程提供一定的虛擬地址空間, 該空間用于以下用途:a. 程序的可執行代碼;b. 程序的初始化數據;c. 程序未初始化的數據 ;d. 初始程序堆棧(如用戶態棧User Mode Stack);e. 所需共享庫的可執行代碼和數據;f. 堆(程序動態請求的內存)。
35. 請求調頁(demand paging)是近代Uinx操作系統采取的內存分配策略。通過這種策略, 進程 可以在沒有頁在物理內存的情況下執行程序 。 當進程訪問這樣的頁時, MMU會產生一個異常, 異常處理函數會找到有效的內存區域并分配一個頁,同時進行初始化。malloc()、brk()系統調用 也是類似的工作方式。
36. 帶復制寫(Copy On Write)也是虛擬地址空間所允許的內存分配策略。 如在創建一個新的進程時(fork), 內存只是把父進程的頁幀賦給子進各一的地址空間, 但相應的權限被標記為只讀, 當子進程試圖修改父進程頁幀的內容時, 會拋出一個異常, 異常處理函數會為子進程分配新的頁幀并用父進程的頁幀初始化它。
37. 為了解決磁盤和其它塊設備訪問速度慢的問題, 一部分可用的物理內存被用作cache。sync()用于磁盤同步(即寫及時寫回臟的緩沖dirty buffers)。
38. 設備驅動(device drivers)是內存和I/O設備交互的橋梁。設備驅動由控制一個或多個設備的數據結構和功能控制函數組成。
39. 內核提供特定的接口跟設備驅動交互,這種方法的好處在于:a. 與具體設備相關的代碼可以封裝在一個模塊中;b.通過內核提供給驅動的接口,而不必了解內核源代碼,設備 廠商就可以添加新的設備;c. 內核通過相同的接口處理所有的設備;d. 設備驅動可以動態地加載和卸載。
40. 用戶態的程序是這樣操作硬件設備的:需要操作硬件設備的用戶態程序通過內核提供的文件系統調用(read, write,etc.)操作/dev下的文件, 這些文件對應的就是具體的設備的驅動接口, 內核會把相應的文件操作轉化為針對該設備的具體的操作。
41. 在80 x 86微處理器中,需要區分三種類型的內存地址:a. 邏輯地址(Logical address);b. 線性地址(Linear address);c. 物理地址(Physical address)。
42. 邏輯地址, 通常包含在機器語言指令中,用于指明操作數或者 指令的地址。每個邏輯地址由段(segment)和偏移量(offset)組成。
43. 線性地址,即前面所說的虛擬地址(virtual address), 一個32位的無符號整數可以用于4GB(約4,294,967,296個內存單元)的內存尋址。用十六進制數表示的范圍為0x00000000到0xffffffff。
44. 物理地址,用于在內存芯片中定位內存單元。對應于從微處理器(microprocessor)的管腳(pins)地址發送到內存總線(memory bus)的電子信號。 物理地址通常用一個32位或者36位的無符號整數表示。
45. 邏輯地址到物理地址的轉換過程:首先是內存管理單元(MMU)通過一個段單元(segmentation unit)的硬件元件把邏輯地址轉化為線性地址, 接著由頁單元(paging unit)的硬件元件把線性地址轉化為物理地址。
46. 內存仲裁器(memory arbiter)是位于總線和各個 內存芯片之間的硬件元件,它的作用是控制內存芯片的訪問。 當內存芯片空閑時,它授權一個對該內存的訪問請求,而當內存芯片繁忙時, 它延遲對該內存芯片的訪問請求。
47. 在多處理器系統中, 所有的CPU通常共享相同的內存, 各個CPU對內存的并發訪問通過內存仲裁器協調完成;在單處理器系統中, CPU和DMA(Direct Memory Access)對內存的并發訪問也由內存仲裁器協調完成。
48. 實模式(real mode)和保護模式(protected mode)是Intel 微處理器從80286模式開始的用于執行地址轉化的兩種 不同的方式。實模式的存在是為了兼容以前老的模式和允許操作系統自舉(bootstrap)。
49. 一個邏輯地址由兩部分組成: 段標志符(segment identifier)和用于指明段內相對地址的偏移量(offset)
50. 段標志符,也叫做段選擇子(Segment Selector),對應一個16位的域;常見的格式為:第0位和第1位對應請求優先級別(RPL, Request Privilege Level),第2位對應表指示器(Table Indicator), 第3位到第15位對應索引index

? 后續會介紹硬件中的段是如何組織的。

linux內核數據結構框架。轉載于:https://www.cnblogs.com/quiet/archive/2012/03/27/2419205.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/124308.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息