2009/05/29

[摘錄] UNIX 記憶體管理

摘錄自: Unix 系統管理 Essential System Administration 2/e, by Æleen Frisch. Copyright 1998 O'Reilly Media Inc., 957-98213-4-8. 第七章。


  • 要使系統執行順暢,記憶體不但要足夠應付大工作,還要能讓數量龐大的日常小工作能夠同時進行。

  • swapping: 置換, 是把整個行程寫入磁碟中,再將其記憶體釋出。當要繼續執行被置換完畢(swapped-out)的行程時,必須將其重新載入記憶體。

  • pagging: 切頁, 是將行程記憶體內容的某些節區(單位為 page)搬到磁碟上,以釋放部分記憶體給需要的行程使用。

  • page fault: 切頁錯誤, 是指當行程要使用記憶體某部分的內容時,該部分的內容尚未由磁碟讀出並置於記憶體中。

  • 在虛擬記憶體系統上,除非記憶體嚴重不足,否則很少會進做置換的動作。

  • 虛擬記憶體的原理是「並非所有記憶體都會同時使用」,因此系統內部可以把虛擬位址對應到實體記憶體位址;當行程要用到目前不在記憶體內程式碼和資料時,kernel 會把需要的部分從磁碟上載入記憶體(即進行切頁動作),可能還會把該行程其他不需使用的 page 置換掉。

  • 若系統實體記憶體不足以讓所有執行中的行程使用時,切頁就會有問題。在這種情形下,kernel 會動態分配記憶體:若某行程要讀進一個新 page,但沒有可用或可重複使用的 page 時,作業系統會從其他行程偷來一個 page 以供使用。被偷的 page 叫做被切出(page out),其內容會被寫在磁碟上的切頁區。若某行程再度需要該 page,其內容會被切回來(page in),通常會強迫使用其他的 page 空間。在這種情況下,CPU 會花很多時間在處理切頁錯誤上,因此會讓行程執行的很沒有效率。最嚴重的狀況稱之為「thrashing」,系統所有的時間都在處理虛擬記憶體,而不會進行任何實際的工作。



僅節錄個人覺得重要之處,全文請參見原書。

2009/05/19

TeamViewer Portable 使用教學 for 被控端(client 端)

TeamViewer 是很好用的一套遠端連線軟體,官方有提供 Portable 免安裝的版本,下載後不用安裝就可以執行,而且使用時也毋須到官網上註冊,非常方便。(注意:商業用途還是要花錢買版權喔!)

Step 1. 從官方網站下載 TeamViewer Portable 版(免安裝版)。


Step 2. 將下載回來的檔案解壓縮後,執行 TeamViewer.exe。


Step 3. 執行之後,畫面左側的 ID 和 Password 各會出現一串數字,將這兩組數字告訴處理人員,他就能遠端登入。


Step 4. 如果出現 Windows 防火牆警告,請點選「解除封鎖」讓 TeamViewer 能夠穿透防火牆。

2009/05/18

http 與 https 間的 session

由於在加密傳輸的 https:// 網頁中,引入未加密傳輸的 http:// 網頁內容,會出現「安全性資訊」警告。因此在 https:// 網站裡,最好不要引入 http:// 的內容,以免造成使用者不便。

但在目前這個充斥著各種 API 與 Widget 的網路環境中,難免會遇到要在 https:// 網頁中引入 http:// 的狀況。在這種情境下,最好的方式是只在有需要加密傳輸的頁面使用 https://,一般較不重要的頁面仍然使用 http://,降低使用者不便。

而在此種狀況下,最大的問題出在 session 是否能在 https:// 與 http:// 間相互傳遞。因為使用者不會希望在 http:// 登入之後,頁面切換到 https:// 又要再登入一次。幸好,如果是同一台網站伺服器,只要是相同的域名,http:// 與 https:// 互相轉換時會共用相同的 session。

2009/05/17

PHP 設定時區

因為代管主機位在國外,因此需要設定 PHP 執行時的時區

// PHP4
putenv('TZ=Asia/Taipei');

// PHP5
date_default_timezone_set('Asia/Taipei');

// PHP4 && PHP5
if (funcion_exists('date_default_timezone_set')) {
date_default_timezone_set('Asia/Taipei');
}
else {
putenv('TZ=Asia/Taipei');
}


時區識別字 (timezone identifier) 請參考: List of Supported Timezones

2009/05/10

進入 single-user mode 與 修改 root 密碼

由於 Mac OS 是以 UNIX 為基礎去開發的,因此修改 root 密碼如同其他 UNIX-based 的作業系統,只要進入 single-user mode 就可以了。

進入 single-user mode

依據官網上的說明,只要在開機時,按下 Command (Apple) 鍵以及 S 鍵,便可進入 single-user mode。

但如果按下之後出現的是 boot 畫面(下圖一),此時只要輸入 -s (下圖二)一樣可以進入 single-user mode(下圖三)。

圖一


圖二


圖三


修改 root 密碼

進入 single-user mode 之後,如果要修改檔案,必須先將檔案系統掛載起來。
輸入以下指令:

/sbin/mount -uw /



接著輸入:

passwd root


會出現 Changing password fort root. 以及 New password: 字樣,提示使用者現在要修改的是 root 的密碼,並請輸入新密碼。如果不想修改,可以按下 Command + c 跳開。
輸入新密碼之後,會出現 Retype new password: 字樣,請使用者再次輸入新密碼。如果輸入的密碼和第一次輸入時一模一樣的話,便完成 root 的密碼修改。


最後輸入 reboot 讓系統重新開機。

2009/05/06

TDK 16GB 隨身碟入手

最近想玩 Ubuntu Live USB,擔心 8GB 隨身碟容量不夠用,直接買了兩隻 16GB 隨身碟來玩玩看。



TDK 這款在 Mobile01 上的評價還不錯,C/P 值頗高,以下是開箱照以及簡單的測試數據:

2009/05/05

調整 NFS server 數量

NFS Server 預設啟動是開啟四台 server(FreeBSD 預設啟動參數是 -n 4),如果需要將 server 數提高,則需先關閉 NFS Server 再重新啟動。

Step 1. 先查看目前的 NFS server 數量,順便找出 master nfsd 的 PID:
ps aux | grep nfsd

root 614 1.2 0.0 2512 788 ?? S 31Mar09 308:28.23 nfsd: server (nfsd)
root 613 0.0 0.0 2680 1052 ?? Is 31Mar09 0:00.03 nfsd: master (nfsd)
root 615 0.0 0.0 2512 788 ?? I 31Mar09 10:45.56 nfsd: server (nfsd)
root 616 0.0 0.0 2512 788 ?? I 31Mar09 0:29.99 nfsd: server (nfsd)
root 617 0.0 0.0 2512 788 ?? I 31Mar09 0:07.06 nfsd: server (nfsd)

(此例中 master nfsd 的 PID 是 613。)

Step 2. 關閉 nfsd(man nfsd 有提到關閉的方式,重點是這段文字 If you have to kill nfsd just do a ''kill -USR1 < PID of master nfsd>''):

kill -USR1 613

(613 是 ps aux | grep nfsd 的輸出結果中,有 nfsd: master 字樣的 PID。)

Step 3. 一次開啟 8 個 server:

nfsd -u -t -n 8