邏輯位址------(分段單元)---->線性位址--------(分頁單元)------->實體地址
二. 硬體分段
實模式: 啟動開始階段處於實模式,其無分段機制(主要是為了與早期處理器模型相相容)
保護模式: 有分段機制 。 可通過cr0暫存器中的pe標誌位進行觀察。
段標示符(即段選擇符)、段描述符(8位元組)、附加的非程式設計的暫存器(6個,用於快速訪問段描述符),gdt/ldt,段的訪問流程
其中gdt是每個cpu乙個副本(副本中除各自的tss不一致外,其它內容完全一樣),而ldt:使用者態下很少使用。
三. linux中的分段
分段可以為乙個程序配備不同的線性位址,而分頁可以把同一線性位址對映到不同的實體地址。與分段相比linux更傾向於使用分頁機制因為
<1>. 當所有程序共享相同暫存器值時(也就是它們共享同樣一組線性位址時),記憶體管理比較簡單
<2>. 因某些體系結構對分段機制支援有限,linux為了擁有更好的移植性故而很少用分段機制。
四. 硬體中的分頁
目錄,頁表,偏移量 每個活動的程序都有其各自的頁目錄。具體分頁過程不再詳述。。
快取器硬體快取記憶體器:利用區域性性原理減少處理器向主存中讀取資料的時間,每個處理器都有乙個單獨的硬體快取記憶體。
後援快取器(tlb):用於加快線性位址與實體地址間的轉換,每個處理器都有自己的tlb,當cpu的cr3暫存器被修改時本地的tlb會全部失效(因為cr3中含有頁表目錄基址,其改變會裝入新的一組頁表,而tlb指向的時舊資料)。
五. linux中的分頁
每個程序都擁有自己的頁全域性目錄和自己的頁表集。
六. 物理記憶體布局 (待解決。。。。。。。。。。。。。。。。。此部分沒看懂)
七. 擴充套件知識 : 常用的暫存器與 除錯暫存器
<1>常用的暫存器(x86)
32位通用暫存器(8):eax、ebx、,ecx、edx、ebp、esp、esi、edi
16位段暫存器(6):cs、ds、es、fs、gs、ss
32位除錯暫存器(8): cr0--cr8
32位標誌暫存器(1):flags
32位程式計數器(1):eip
48位的全域性段描述符暫存器(1):gdtr
48位的中斷描述符暫存器(1):idtr
任務狀態段暫存器(1):tr--->指向當前的任務狀態段(tss,每個cpu都擁有自己的任務狀態段)
<2>. 8個32位除錯暫存器(主要在於前4個)
cr0: 處理器工作方式的控制位pe(保護允許位)、是否允許分頁的控制位pg(頁允許標誌位),還有其它的如浮點運算控制標誌位等
cr1: 保留
cr3: 其高20位用來儲存頁目錄表基址(每個程序都有自己的全域性頁目錄和頁表集),因而也成pdbr
cr4: 擴充套件頁標誌位(pse),pae擴充套件標誌位(pae)
cr5: 保留
cr6: 斷點暫存器
cr7:控制標誌暫存器
深入理解Linux核心 核心同步
核心基本的同步機制 搶占核心的主要特點 乙個在核心態執行的程序,可能在執行核心函式期間被另外乙個程序取代。核心搶占 linux 2.6允許使用者在編譯核心的時候配置十分啟用 程序臨界區 每個程序中訪問臨界資源 一次僅允許乙個程序使用的共享資源 的那段 稱為臨界區。優化屏障 保證編譯程式不會混淆放在原...
深入理解linux核心手記
linux的段式管理是對應於程式結構的,是一種自然的想法,linux共有6個段暫存器,其中有3個專門的段暫存器 cs 段暫存器 ss 程式棧段暫存器 ds 資料段暫存器 程式需要6個段 bss 存放未初始化資料,只有名稱和大小 段 資料段 存放已初始化資料 棧段,堆段。段式管理段缺點 相比喻頁式管理...
深入理解Linux核心3
unix核心提供了應用程式可以執行的環境,因此,核心必須實現一組服務及相應的介面。應用程式使用這些介面而不會跟硬體資源直接互動。啟用核心例程的幾種方式 核心恢復乙個程序執行時,用程序描述符中的合適字段裝載cpu暫存器 等待狀態可能會有很多,有程序描述符佇列實現 自旋鎖 檢查訊號量耗時多,對於時間較短...