2014/03/18

[Linux] 連續記憶體分配策略(Contiguous Memory Allocation)

作業系統的記憶體管理,可以分成採用連續記憶體分配(Contiguous Memory Allocation)和採用分頁(Paging)技術。採用連續記憶體分配,方法簡單且速度快速,但缺點在於容易產生剩餘的記憶體片段(Fragmentation),記憶體的使用效率並不好,為了解決此現象,因此採用記憶體分頁的方式,來提升記憶體的使用率。

而在連續記憶體分配,有三個最常見的演算法,最先適用(first-fit)、最佳適用(best-fit)和最不適用(worst-fit)。底下舉特考的例子為例:

(102調查局特考_計算機概論)
五、記憶體的配置策略(Storage Placement Strategies)是用以決定進來的程式或資料應置於記憶體的那一區域。其策略包含最不適用(worst-fit)、最佳適用(best-fit)和最先適用(first-fit)等。 
(一)請說明上述三種策略(最不適用、最佳適用和最先適用)在比較之下,各策略的優勢為何?(10分)
(二)若目前記憶體分區(memory partitions)狀況依序為 490 KB,190 KB,290 KB及550 KB,而記憶體空間需求依序為400 KB,220 KB,120 KB及450 KB。請分別描述在最不適用、最佳適用和最先適用三種不同策略下的記憶體配置情形。(10分)

2014/03/16

[Linux] fork()的使用介紹

整個作業系統(Operating System, OS)是為了分配有限的硬體資源給Program使用,然而OS也視為一個Program,放進CPU中執行,為了讓OS Kernel辨識每個Process,就會有所謂的行程辨識元(Process Identifier, PID),其中特別的是PID 0和1,0是Kernel用來Swap,交換分頁使用;而1則是初始化行程,也是Kernel建立的第一個Process,其他的Process基本上都是透過PID 1的init Process來產生。因此整個OS系統本身可以想像成一個Tree of Processes,root為init Process,亦為Parent Process,然後用fork()依序產生底下的Child Process,並回傳值0代表是Child Process。

[Linux] Program, Process and Thread之差異

  • Program: code程式
  • Process: 正在CPU執行的Program
  • Thread: 使用CPU的最小單元,較為輕巧的process,一個process可以產生多的threadCPU是配給thread使用。


Thread存在有以下的目的:
(1) Responsiveness: 允許程式可以在被I/O中斷時,能夠繼續執行,譬如Web瀏覽器,可以同時看影片及下載檔案
(2) Resource Sharing: thread分享同樣的memoryresource,而process只能透過shared memorymessage passing的方法來分享資料
(3) Economy: threadprocess輕巧,創建和context switch thread比創建一個process來的快速
(4) Scalability: 可以平行執行於多核心的平台。


總結來說,寫好的code稱作為Program,放到CPU中執行就變成Process,但Process可以使用多的Thread代表的CPU執行單元,來增加執行效率。

2014/03/01

[OpenSSL] RSA非對稱型加解密演算法

RSA為目前在電子商業網路上很常用的加解密演算法,其安全性依靠因數分解,因為對極大整數做因數分解是很困難且花時間的,一般都會採用RSA numbers來產生公鑰(Public Key)和私鑰(Private Key),目前大多採用1024bits2048bits

公鑰和私鑰的產生
1.      隨意選擇兩個大的質數pqp不等於q,計算N=p*q
2.      根據歐拉函式,求得r= φ(N) = φ(p)φ(q) = (p-1)*(q-1)
3.      選擇一個小於r的整數e,且與r互質。
4.      用以下公式計算d : d*e1 (mod(p-1)*(q-1))
5.      (N, e)為私鑰,(N, d)則為公鑰。