2011-06-01 58 views
4

我在讀高爾文的操作系統書。在內存管理的地址綁定中,它講述了3種類型的地址綁定。編譯時間,加載時間,執行時間。關於執行時地址綁定:「物理地址是在執行時計算的。」但我的問題是,這些物理地址的計算是爲了將內存的基地址加載到內存中。要首先執行該過程,必須將其加載到內存中。爲此,它需要一些物理內存地址。那麼在執行時如何計算這些地址呢?我很困惑。在執行時如何在OS中完成地址綁定?

有些人可以提供解釋。

由於

回答

13

你的想法是正確的。加載時間與運行時綁定的區別在於,在運行時,每次有內存查找時,它都會經過一個「基本寄存器」的「重定位寄存器」,然後添加一個偏移量。

在加載時綁定它做同樣的事情,但隨後的查找不需要評估此寄存器。地址在第一次被拉入內存時被設置。因此,如果基地址發生變化,您需要重新加載整個過程以修復所有可重定位地址。

在運行時,您可以在物理內存中移動進程,無需擔心重新加載它以修復映射,因爲每次訪問內存時都會映射它。

加載時綁定導致匹配邏輯/物理地址,但運行時導致不同的邏輯/物理地址。

我希望這對你更清楚。我剛剛開始學習內存管理:)

0

當它說,實際的基地址在執行時產生這意味着,在RAM(物理地址)的地址在執行時從使用MMU虛擬地址確定。這整個地址轉換是即時完成的。爲了執行該過程,必須知道起始虛擬地址。當進程運行時,其虛擬頁表被加載到MMU中,然後MMU快速計算物理地址(在RAM中)並且執行繼續,MMU從頁表中生成物理地址。考慮閱讀Tanenbaum的現代操作系統。我發現它更好。

0

執行時間地址綁定通常只適用於程序中的變量,並且是腳本的最常見的綁定形式,它不會被編譯。在這種情況下,程序會在處理腳本中的指令期間第一次遇到變量時,爲程序中的變量請求內存空間。內存將被分配給該變量,直到程序序列結束,或者除非腳本中的特定指令釋放綁定到變量的內存地址。