簡單地說:保護模式與真實模式的根本區別在於CPU定址方式上的不同: 儘管兩者對應的記憶體地址均為"段地址:偏移量"形式,但在保護模式下,"段地址"代表的值已不再是真實模式中段的起始基準地址了;對於CS、DS、ES、SS暫存器,在真實模式下,這些暫存器的值左移4位, 再加上偏移量,即得到物理地址,而在保護模式下,這些暫存器的值為"段選擇符",它實際上是一個查全域性描述符表(G DT)或區域性描述符表(LDT)的索引,據此在GDT或LDT找到對應的段描述符,從而獲得段的基址及型別等資訊,再根據偏移量,才能得到線性地址。如果作業系統沒有采用分頁機制,那麼得到的線性地址即為物理地址,否則,線性地址需要進一步經過分頁機制才能得到物理地址。詳細地說: 8086體系的CPU一開始是20根地址線, 定址暫存器是16位, 16位的暫存器可以訪問64K的地址空間, 如果程式要想訪問大於64K的記憶體, 就要把記憶體分段, 每段64K, 用段地址+偏移量的方法來訪問. 後來386CPU出來之後, 採用了32條地址線, 地址暫存器也擴為32位, 這樣就可以不用分段了, 直接用一個地址暫存器來線性訪問4G的記憶體了. 這就叫平面模式. 為了和16位的軟體保持相容, 386的線性記憶體訪問功能只在一種叫"保護模式"的狀態上使用, 在這種狀態下, 一切程式都可以用線性地址(不分段)訪問自己所擁有的4G的記憶體空間, 但是不能訪問其他程式的空間. 如果有程式要訪問不該訪問的記憶體(一般只有病毒才會這麼作), 就會出系統錯誤, CPU就用中斷通知OS, 這樣的程序會被OS發現, 並殺死, 不會影響其他程式. 在windows裡常見的系統錯誤"某某記憶體不能讀寫"就是這種問題, 這都不是windows的問題, 而是一些破程式的問題. 在這種情況下, 實際是CPU和OS一起保護了程式的記憶體, 因此叫做保護模式. 實際上記憶體是不可能有4個G的, 而且是每個程式都要有4G的空間. 為了為每個程式都提供4G記憶體, 386及以後的CPU採用"頁"的方式來管理記憶體, 把記憶體分為一個個的頁, 頁的物理地址與每個程式虛擬的4G線性地址用一個表格儲存. 程式用線性地址訪問記憶體. 如果這個記憶體還沒有用過, 就找一個記憶體頁來假裝涉及的線性記憶體段. 如果這個記憶體長期不用, 作業系統就把記憶體頁存到硬碟上去, 就叫虛存交換檔案. 如果這個記憶體所在的頁已經分配過, 但是沒有在實存裡, 那麼CPU就出現一個缺頁中斷, 由作業系統把硬碟交換檔案裡的頁內資料讀出來, 在實存中找一塊寫進去, 修改頁地址和線性地址的對應表格, 然後請程式繼續執行. 386可以假裝自己是一個16位的CPU, 用16位的分段方式工作, 和保護模式相對的, 這種模式就叫做真實模式. 開機時按F8應該可以出來吧! 如果還不行我就不清楚了。
簡單地說:保護模式與真實模式的根本區別在於CPU定址方式上的不同: 儘管兩者對應的記憶體地址均為"段地址:偏移量"形式,但在保護模式下,"段地址"代表的值已不再是真實模式中段的起始基準地址了;對於CS、DS、ES、SS暫存器,在真實模式下,這些暫存器的值左移4位, 再加上偏移量,即得到物理地址,而在保護模式下,這些暫存器的值為"段選擇符",它實際上是一個查全域性描述符表(G DT)或區域性描述符表(LDT)的索引,據此在GDT或LDT找到對應的段描述符,從而獲得段的基址及型別等資訊,再根據偏移量,才能得到線性地址。如果作業系統沒有采用分頁機制,那麼得到的線性地址即為物理地址,否則,線性地址需要進一步經過分頁機制才能得到物理地址。詳細地說: 8086體系的CPU一開始是20根地址線, 定址暫存器是16位, 16位的暫存器可以訪問64K的地址空間, 如果程式要想訪問大於64K的記憶體, 就要把記憶體分段, 每段64K, 用段地址+偏移量的方法來訪問. 後來386CPU出來之後, 採用了32條地址線, 地址暫存器也擴為32位, 這樣就可以不用分段了, 直接用一個地址暫存器來線性訪問4G的記憶體了. 這就叫平面模式. 為了和16位的軟體保持相容, 386的線性記憶體訪問功能只在一種叫"保護模式"的狀態上使用, 在這種狀態下, 一切程式都可以用線性地址(不分段)訪問自己所擁有的4G的記憶體空間, 但是不能訪問其他程式的空間. 如果有程式要訪問不該訪問的記憶體(一般只有病毒才會這麼作), 就會出系統錯誤, CPU就用中斷通知OS, 這樣的程序會被OS發現, 並殺死, 不會影響其他程式. 在windows裡常見的系統錯誤"某某記憶體不能讀寫"就是這種問題, 這都不是windows的問題, 而是一些破程式的問題. 在這種情況下, 實際是CPU和OS一起保護了程式的記憶體, 因此叫做保護模式. 實際上記憶體是不可能有4個G的, 而且是每個程式都要有4G的空間. 為了為每個程式都提供4G記憶體, 386及以後的CPU採用"頁"的方式來管理記憶體, 把記憶體分為一個個的頁, 頁的物理地址與每個程式虛擬的4G線性地址用一個表格儲存. 程式用線性地址訪問記憶體. 如果這個記憶體還沒有用過, 就找一個記憶體頁來假裝涉及的線性記憶體段. 如果這個記憶體長期不用, 作業系統就把記憶體頁存到硬碟上去, 就叫虛存交換檔案. 如果這個記憶體所在的頁已經分配過, 但是沒有在實存裡, 那麼CPU就出現一個缺頁中斷, 由作業系統把硬碟交換檔案裡的頁內資料讀出來, 在實存中找一塊寫進去, 修改頁地址和線性地址的對應表格, 然後請程式繼續執行. 386可以假裝自己是一個16位的CPU, 用16位的分段方式工作, 和保護模式相對的, 這種模式就叫做真實模式. 開機時按F8應該可以出來吧! 如果還不行我就不清楚了。