深入理解Linux核心個人小結2 記憶體定址

2021-06-09 00:08:37 字數 1449 閱讀 3663

邏輯位址------(分段單元)---->線性位址--------(分頁單元)------->實體地址

二.  硬體分段

實模式: 啟動開始階段處於實模式,其無分段機制(主要是為了與早期處理器模型相相容)

保護模式: 有分段機制 。  可通過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暫存器 等待狀態可能會有很多,有程序描述符佇列實現 自旋鎖 檢查訊號量耗時多,對於時間較短...