內存管理說明(分頁,分段,邏輯地址,物理地址和地址轉換方法)

電腦雜談  發布時間:2021-03-13 05:01:24  來源:網絡整理

本文的內容可從以下博客和書籍中引用:

#comments

《操作系統概念》第六版中文版,高等教育出版社,第9章,由鄭Koogen翻譯。

“操作系統概念”,第7版,高等教育出版社。

本文的許多部分都是根據我自己的理解編寫的。如果有錯誤,請指出并進行討論。

1.物理地址和邏輯地址

物理地址:加載到內存地址寄存器中的地址,即內存單元的實際地址。在前端總線上傳輸的內存地址都是物理內存地址,并且編號從0開始到可用物理內存的最高端。這些數字由北橋(Norbridge芯片)映射到實際的記憶棒。物理地址是最終在總線上使用的確定數字,無需轉換,沒有分頁并且沒有特權檢查(沒有轉換,沒有分頁,沒有特權檢查)。

邏輯地址:CPU生成的地址。邏輯地址在內部和通過編程使用,并且不是唯一的。例如,在進行C語言指針編程時,您可以讀取指針變量本身的值(&操作)。實際上,此值是邏輯地址,相對于當前進程的數據段的地址(偏移地址)。絕對物理地址是相關的。

為什么會有這兩種地址?

就個人而言,原因是邏輯地址分配更加靈活,可以被允許為非唯一的,并且看起來更加直觀。例如,在一段代碼中分配了一個數組,并且邏輯地址是連續的,但是在物理地址上,該數組已被占用。頁面可能分散,并且物理地址不連續,這對程序的可理解性。此內,然后使用哈希函數來完成從邏輯地址到虛擬地址的映射。由于虛擬地址較少,因此哈希函數將溢出,因此此處使用了鏈接。解決溢出。

通過哈希函數計算邏輯地址中的頁碼(下圖中的p),并計算虛擬地址中的頁碼。根據虛擬頁碼,可以在O(1)提供了一個寄存器GDTR來存儲GDT入口地址。在程序員將GDT設置到存儲器中的某個位置之后,可以通過LGDT指令將GDT入口地址加載到該寄存器中。從那時起,CPU將根據該寄存器的內容作為GDT條目訪問GDT。

除了GDT之外,還存在LDT(Local Descriptor Table),但與GDT不同的是,系統中可以有多個LDT,每個進程可以有自己的LDT。 LDT的內存地址在LDTR寄存器中。

上圖中的TI位用于指示此索引指向的段描述符是存儲在全局描述表中還是本地描述表中。 = 0表示使用GDT,= 1表示使用LDT。

RPL位(占2位)是保護信息位。我還沒有仔細了解這一點,所以我不會寫。

查找線性地址,并將偏移量添加到段描述符之后。轉換過程如下:

內存地址圖

在Intel 386環境中,將線性地址轉換為物理地址的過程類似于在第二個分頁內存管理中的分層分頁中將邏輯地址轉換為物理地址的方法。如下所示。

內存地址圖

Intel 80386地址轉換的如下:

內存地址圖

內存管理部分是操作系統的核心功能之一。這次整理出理論部分,一個是進行回顧,另一個是概述并為深入學習操作系統做準備。

本文中的圖片不是我的原創作品,主要來自文章開頭引用的博客文章和參考書中的圖片。如果有侵權行為,請指出,博客作者將盡快將其刪除。


本文來自電腦雜談,轉載請注明本文網址:
http://www.cvs5.com/a/shoujiruanjian/article-364143-1.html

    相關閱讀
    發表評論  請自覺遵守互聯網相關的政策法規,嚴禁發布、暴力、反動的言論

    • 宮部紅葉
      宮部紅葉

      因為真貨里本來就有質檢合格證嘛~對不對

    • 陳麗
      陳麗

      炒白菜

    熱點圖片
    拼命載入中...
    岛国动作片AV在线网站_亚洲精品欧美综合一区二区_2021年最新无码福利视频