無法支援多工(程式設計師多個程式可能指定執行的實體地址一樣)
程式的安全性無法得到保證(使用者程式可以改寫系統空間或者其他使用者的程式內容)
實模式將整個物理記憶體看成分段的區域,程式**和使用者程式沒有區別對待,而且每乙個指標都是指向「實在」的實體地址。這樣一來,使用者程式的乙個指標如果指向了系統程式區域或其他使用者程式區域,並且改變了值,那麼對於這個被修改的系統程式或使用者程式,其後果很可能是災難性的。為了克服這種低劣的記憶體管理方式,處理器廠商開發出保護模式。這樣,物理記憶體位址不能直接被程式訪問,程式內部的位址(虛擬位址)要由作業系統轉化為實體地址去訪問,程式對此一無所知。
在保護模式下,全部32條位址線有效,可定址高達4g位元組的實體地址空間;擴充的儲存器分段管理機制和可選的儲存器分頁管理機制,不僅為儲存器共享和保護提供了硬體支援,而且為實現虛擬儲存器提供了硬體支援。支援多工,能夠快速地進行任務切換和保護任務環境。4個特權級和完善的特權檢查機制,既能實現資源共享又能保證**和資料的安全和保密及任務的隔離;支援虛擬8086方式,便於執行8086程式。
從80386開始,cpu有三種工作方式:實模式,保護模式和虛擬8086模式。只有在剛剛啟動的時候是實模式,到linux作業系統執行起來以後就執行在保護模式。虛擬8086模式是執行在保護模式中的實模式,為了在32位保護模式下執行純16位程式。它不是乙個真正的cpu模式,還屬於保護模式。cpu啟動環境為16位實模式,之後可以切換到保護模式。但從保護模式無法切換回實模式。
1)實模式的定址方式與工作原理
8086是16位的cpu,只能訪問位址在1m以下的記憶體成為常規記憶體,我們把位址在1m以上的記憶體成為擴充套件記憶體。實模式有著16位的暫存器/16位資料匯流排/20位位址匯流排。乙個位址有段和偏移兩部分組成,實體地址的計算公式為: ph
ysic
alad
dres
s=se
gmen
t∗16+
offs
et通過上述分段技術,能夠表示的最大記憶體為:
ffffh : ffffh1m多餘出來的部分被稱作高階記憶體區hma。但8086/8088只有20位位址線,只能夠訪問1m位址範圍的資料,所以如果訪問100000h~10ffefh之間的記憶體(大於1m空間),必須有第21根位址線來參與定址(8086/8088沒有)。因此,當程式設計師給出超過1m(100000h-10ffefh)的位址時,因為邏輯上正常,系統並不認為其訪問越界而產生異常,而是自動從0開始計算,也就是說系統計算實際位址的時候是按照對1m求模的方式進行的,這種技術成為wrap-around對於80286或以上的cpu通過a20gate來控制a20位址線。技術發展到了80286,雖然系統的位址匯流排由原來的20根發展為24根,這樣能夠訪問的記憶體可以達到2^24=16m,但是intel在設計80286時提出的目標是向下相容,所以在實模式下,系統所表現的行為應該和8086/8088所表現的完全一樣,也就是說,在實模式下,80386以及後續系列應該和8086/8088完全相容仍然使用a20位址線。所以說80286晶元存在乙個bug:它開設a20位址線。如果程式設計師訪問100000h-10ffefh之間的記憶體,系統將實際訪問這塊記憶體(沒有wrap-around技術),而不是像8086、8088一樣從0開始。我們來看一幅圖:= ffff0h(左移)+ ffffh
= 10ffefh
= 1m + 64k - 16bytes
為了解決上述相容性問題,ibm使用鍵盤控制器上剩餘的一些輸出線來管理第21根位址線(從0開始數是第20根)的有效性,被稱為a20gate;
如果a20gate被開啟,則當程式設計師給出100000h-10ffefh之間的位址的時候,系統將真正訪問這塊記憶體區域;
如果a20gate被禁止,則當程式設計師給出100000h-10ffef之間的位址的時候,系統仍然使用8086/8088的方式即取模方式(8086**)。絕大多數ibmpc相容機預設的a20gate都是被禁止的。現在許多新型pc上存在直接通過bios功能呼叫來公職a20gate的功能。
上面的記憶體訪問模式都是實模式,在80286以及更高系列的pc中,即使a20gate被開啟,在實模式下所能夠訪問的記憶體最大也只能為10ffefh,儘管他們的位址匯流排所能夠訪問的能力都大大超過這個限制。
嗯,為了能夠訪問10ffefh以上的記憶體,則必須進入保護模式。
2)保護模式定址
從80386開始,進入32位cpu時代,有32位位址匯流排。但是,位址並沒有用暫存器直接指定,仍然採用「段+偏移」的模式。雖然段值仍由原來的16位cs/ds等暫存器指定,但此時這些暫存器中存放的不再是段基址,而是乙個索引:從這個索引,可以找到乙個表項,裡面存放了段基址等很多屬性,這個表項稱為段描述符,這個表就成為gdt。
實模式下面段的大小是固定的64k,而保護模式則不是固定的。關於段基址,實模式下,第16位是0;保護模式下堅持4k對齊,就是說第12b是0。(??,沒搞懂這句話意思,應該是後12位為0)
實模式下在cs/ds等暫存器中,保護模式在段描述符中,而要取得段描述符號,又需要取得cs等中的段選擇符。
實模式和保護模式
實模式 即實位址訪問模式 它是intel公司80286及以後的x86 80386,80486和80586等 相容處理器 cpu 的一種操作模式。實模式被特殊定義為20位位址記憶體可訪問空間上,這就意味著它的容量是2的20次冪 1m 的可訪問記憶體空間 物理記憶體和bios rom 軟體可通過這些位址...
實模式和保護模式
從80386開始,cpu有三種工作模式 實模式 保護模式和虛擬8086模式。80286開始的cpu引入保護模式,實際上,實模式概念是在保護模式推出之後為了區別保護模式之前的8086cpu工作模式才有的,在8086時代cpu工作模式只有一種,自然沒有實模式之說。實模式有著先天的缺陷 下文詳述 但出於向...
實模式與保護模式
實模式與保護模式 1.實模式,又叫實位址模式,cpu完全按照8086的實際定址方法訪問從00000h fffffh 1mb大小 的位址範圍的記憶體,在這種模式下,cpu只能做單任務執行 定址公式為 實體地址 左移4位的段位址 偏移位址,即 實體地址是由16位的段位址和16位的段內偏移位址組成的。2....