天天看點

實位址模式和保護模式

一、邏輯位址和實體位址

  • 實體位址:加載到記憶體位址寄存器中的位址,記憶體單元真正的位址
  • 邏輯位址:CPU生成的位址。相當于目前程序資料段的位址(是偏移位址)

二、什麼是實位址模式

1、分段

        在程式裝入記憶體時并不是整塊裝入。因為一個程式包含了很多資料結構,不能一概而論。例如代碼是隻讀的,相對固定的;而資料則會随着程式的變化不斷發生變化。是以在程式裝入的時候是采用分段的方式,将不同的程式裝入不同的區域。那麼定位指令或資料就使用

<段号 : 偏移量>的方式。

       8086處理器中設定了CS(可執行代碼)、DS(資料)、SS(堆棧)和ES(其他)這四個段寄存器。每個段寄存器都是16位的,對應位址總線中的高16位。

2、實模式的尋址方式

        處理器8086有20根位址線,可以尋址1MB記憶體。但是,它内部的寄存器是16位的,如果按照原來的方式,把段寄存器的内容和偏移位址直接相加來形成實體位址的話,也智能得到16位的實體位址。是以如何用16位的CPU來通路20位的實體位址成為最大的問題。

        為什麼要提供20位的位址線?

       你可能會想,讓16位的CPU對應16位的位址線不就可以解決問題了嗎?但是,16位的實體位址隻能通路64k的記憶體,位址範圍是0000H~FFFFH,共65536個位元組,很顯然這個容量肯定是不能滿足需求的。而20位的實體位址就可以通路1MB的記憶體,位址範圍是0000H~FFFFFH。

       如何通過16位的段位址和16位的偏移位址來的到20位的實體位址呢?

       8086處理器在形成實體位址時,先将段寄存器的内容左移4位(相當于乘以2^4),形成20位的段位址,然後再同16位的偏移位址相加,得到20位的實體位址。

       舉例:

       對于邏輯位址:F000H : 052DH,處理器在形成實體位址時,先将段位址左移4位得到:F0000H,再加上偏移位址052DH,就可以得到20位的實體位址:F052DH。

3、實位址模式的缺陷

        在實模式中,将這個實體記憶體看成分段的區域,程式代碼和資料位于不同區域,系統程式和使用者程式沒有差別對待,而且每一個指針都是指向實在的實體位址。這樣以來使用者程式的一個指針如果指向了系統程式區域或其他使用者程序區域,并改變了值,那麼對于這個被修改的系統程式或使用者程序,容易造成軟體甚至系統崩潰。

三、什麼是保護模式

1、為什麼會出現保護模式

       采用"段 :偏移"模式,這樣的好處是所見即所得,程式員指定的位址就是實體位址,實體位址對程式員是可見的。但是這樣以來也會帶來以下問題:

  1. 無法支援多任務
  2. 程式的安全性無法得到保證

2、保護模式的技術支撐

        在保護模式下,全部32條位址線有效,即32位處理器配32位位址線,可尋址高達4G的實體位址空間。擴充的存儲器分段管理機制和可選的分頁管理機制,不僅為存儲器共享和保護提供了硬體支援,而且為實作虛拟存儲器提供了硬體支援,支援多任務,能夠進行快速地進行任務切換和保護任務環境。

3、保護模式的尋址方式和工作原理

其實在保護模式下位址的表示方式與實模式是一樣的,都是 段 :偏移,不過保護模式下的“段”和實模式顯得“段”作用完全不同。

  • 在實模式下:段值可以看作是位址的一部分,通過将段值左移4位就可以表示一塊實際實體記憶體。
  • 在保護模式下:段值還有由cs、ds等寄存器表示,但此時它僅僅變成了一個索引,這個索引指向了一個資料結構的表項GDT(或者LDT)這個表項中詳細定義了段的起始位址、界限、屬性等内容

4、GDT

       GDT的表項是描述段類型屬性的資料結構——段描述符。它的作用是用來提供段式存儲機制(這種機制由段寄存器和GDT中的描述符共同提供),GDT中的每一個段描述符都描述了一個記憶體段的基本屬性,如段基址、段界限、類型、DPL等等。每個段描述符在GDT中占8個位元組。

  • 在實位址模式下,段位址并非真正的實體位址,在計算實體位址時還要左移4位。
  • 在32位的保護模式下,段位址是32位的線性位址,如果未開啟分頁功能,該線性位址就是實體位址。
實位址模式和保護模式

段描述符

繼續閱讀