2014年10月26日 星期日

Memory Addressing-1 Address Binding:Compile Time、Load time、Execution Time

Compile Time
assembly code

.BASE 0x1000
.START
PUSH AX
MOVE AX, 3
MULT AX, 7
MOVE (0x1018), AX
CALL print, (0x1018)
POP AX
.END
.SPACE (4)

#在硬碟中的情況
PUSH AX
MOVE AX, 3
MULT AX, 7
MOVE (0x1018), AX
CALL print, (0x1018)
POP AX

#Memory中的內容

要改變記憶體位置就得重新compile

Load Time
assembly code

.START
PUSH AX
MOVE AX, 3
MULT AX, 7
MOVE (.BS+0x18), AX
CALL print, (.BS+0x18)
POP AX
.END
.SPACE (4)

#在硬碟中的情況
PUSH AX
MOVE AX, 3
MULT AX, 7
MOVE (0x2018), AX
CALL print, (0x2018)
POP AX

#Memory中的內容

要改變記憶體位置要重開程式

Execution Time
assembly code

.START
PUSH AX
MOVE AX, 3
MULT AX, 7
MOVE (0x18), AX
CALL print, (0x18)
POP AX
.END
.SPACE (4)

#在硬碟中的情況
PUSH AX
MOVE AX, 3
MULT AX, 7
MOVE (0x18), AX
CALL print, (0x18)
POP AX

#Memory中的內容

不論在實體記憶體中的哪個部分都沒問題,會透過MMU把虛擬的位置轉成實體


Logical Address、Physical Address
在Compile Time和Load Time:Logical Address=Physical Address
在Execution Time:Logical Address!=Physical Address

疑問:如果MMU可以吃超過32個bit,整個OS是不是能調度超過4GB呢?

沒有留言:

張貼留言