1
A
回答
4
我覺得地址空間指segment。
在真實模式下(intel的XT和286)段只是一種使程序獨立於內存空間的方法。當一個程序被編譯時,地址(可變參數,標籤 - 函數)被硬編碼到一個程序中。 - 這樣就很難同時加載兩個程序,因爲它們都希望使用相同的地址。
我們需要使用相對地址而不是絕對個。相對和物理地址之間的分辨率是相對於段進行的。如果從段0x200
開始加載一個程序,並且從0x600
開始加載另一個程序,則它們可以自由使用相同的地址(例如0x41
),因爲這將相對於它們各自的段。在我們的情況下(實模式),段0x200
將被轉換爲物理地址0x2000
(通過將其乘以0x10
),並且在添加相對地址後,生成的物理地址將爲0x2041
。
有很多可以使用的段。數據操作默認是相對於程序的數據段(保存在CPU的DS
寄存器中)並且代碼操作是相對於代碼段(保存在CS
寄存器中)進行的。使用堆棧段(SS
寄存器)將堆棧地址解析爲物理地址。
但是在實模式下,您可以自由使用這些段,您可以訪問其他程序的段或輸入任意值,這些值將被解析爲任意物理地址。
在保護模式下,整個概念發生了變化。細分受衆羣不再擁有地址。他們持有選擇器。它們只能引用表中保存真實基地址的元素。該表還包含限制,因此您不能再尋址任何物理地址,只能在由操作系統提供給您的程序的內存部分內。這引入了進程對內存塊所有權的概念。
我認爲這已經足夠了,請隨時閱讀Wikipedia或其他好消息。這個話題很有文獻記載。
相關問題
- 1. 爲什麼內核說在進程地址空間?
- 2. 在Linux用戶空間進程中,vsyscall頁面的地址是什麼?
- 3. 用戶進程的有效地址空間是什麼? (OS X和Linux)
- 4. 進程的內存地址空間
- 5. 地址空間庫或進程
- 6. 虛擬地址系統上的進程地址空間
- 7. Linux進程虛擬地址空間的地址範圍
- 8. TCP Buffer是否在進程內存的地址空間?
- 9. 什麼是插入+進入網址,而不是例如空間
- 10. linux內核的內核地址空間的佈局是什麼?
- 11. 爲什麼這行不會被複制到子進程的地址空間中?
- 12. 爲什麼我們需要在RAM中鎖定進程的地址空間?
- 13. 什麼是地址空間佈局隨機化
- 14. 爲什麼子進程和父進程的變量的地址是相同
- 15. 虛擬內存是否總是爲進程提供更大的地址空間?
- 16. 使用Rails/Mongoid進行地理空間查詢的最佳教程是什麼?
- 17. 多線程相同的地址空間
- 18. 線程在別人的地址空間
- 19. 處理虛擬地址空間和內核地址空間?怎麼樣?
- 20. 圖形卡內存和進程的虛擬地址空間
- 21. DLL在進程地址空間中使用的頁面
- 22. 什麼是IP地址':: 1'?
- 23. 什麼是標籤地址?
- 24. 關於進程修改和地址空間
- 25. 進程地址空間和虛擬內存
- 26. 是否有私有MAC地址空間?
- 27. 多線程虛擬地址空間?
- 28. 線程返回到壞空間地址
- 29. 是整個過程的虛擬地址空間分割成頁
- 30. 在32位爲什麼地址空間限制爲2^31?