2015年2月7日 星期六

2014年10月26日 星期日

Dynamic Loading、Static Linking、Dynamic Linking

Dynamic Loading:可在執行階段遇到需要的程式碼再load,好處是error handling的code不用被全部塞在memory裡面
Static Linking:沒什麼特別,假設好幾個程式都include stdio.h,就會有好幾份程式碼分布在記憶體當中,很冗
Dynamic Linking:假設好幾個程式都include stdio.h,只load一份,大家共用。程式內指向Lib的部分稱為stub,當作出對Library的要求,會檢查這個Library有沒有被loaded在memory中,如果沒有就load,Windows下常見的Dll(Dynamic link library)檔就是這個

Dynamic Loading無法解決Static Linking重複code的問題!Loadin和Linking分清楚

疑問:寫好的程式第一次執行總是慢很多跟這個有沒有關聯?

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呢?

萬惡的馬賽克


Magic!

寫程式時我們總想著我們有一坨資料,要經過什麼程序再讓使用者access。
這理所當然的事在使用者的眼中卻是一團黑盒子─Magic!

2014年10月25日 星期六

Virtualization雜談之雲端化

一堆電腦堆在一起,過去會先想到Cluster(叢集),現在或許會先想到Cloud?

過去為了加速程式的進行,將多台電腦平行分配處理一隻program,這是叢集。如果買了很多電腦很快地跑出結果,電腦們可能就閒置在那裡發呆,等於浪費資本成本,如果用很少電腦跑,會花費許多時間成本。

如果能夠租用電腦,program跑出結果就還回去,用多少算多少,這就是雲端的IaaS(Infrastructure as a Service)。

IaaS現在能提供哪些服務呢?


  1. 最基本當然是選租用多少CPU、多少RAM、多少Storage、網路
  2. 開好多台VM,大家的system都一樣,那麼memory裡的資料有很多都是重複的,讓一台電腦上的VM們共用重複的資料,有效利用memory
  3. 進階一點:一天中的尖峰時間,平常租用的效能不夠力,可以動態增加更多的效能
  4. 穩定性:
    1. VMware High Availablity
      • 一台實體機器無預警跳掉,可以自動把在這台實體機器上的VM們轉移到別的實體機器上自動重啟(有off line)
    2. VMware Fault Tolerance
      • 開兩台VM在不同的實體電腦上,一台當另外一台的影子,當其中一台有硬體上的問題時,可以立刻切換過去,達成no offline
      • 切換過去之後,可以立刻對整個VM做image,透過網路傳到另外一台電腦,然後再次建置一台影子VM

Swap

Normal
temp=*a; *a=*b; *b=temp;
Advance
*a=*a+*b; *b=*a-*b; *a=*a-*b;
Magic
*a=*a^*b; *b=*a^*b; *a=*a^*b;