OSX Ditching Microkernel?
Posted on May 30th, 2006 at 14:14 by fr3@K
OSX 為了要讓 M$ Windows 軟體以 native 方式跑在 OSX 的 Intel 版本上 (類似 WINE 的作法?),能在執行速度取得較佳的效能,可能會放棄現行 Microkernel [1] 架構,轉而採用 Monolithic Kernel [1]。
前 一陣子,在網路上看了許多 Microkernel vs. Monolithic Kernel 的文章。Linux 可說是 Monolithic Kernel 的代表陣營,而 Andrew S. Tanenbaum 為 Microkernel 扛大旗 [2]。兩種架構互有優劣,Monolithic Kernel 最主要的優勢為執行速度。而 Microkernel 則是 stability 與 security。
典型的 Microkernel 負責的事情很少,只有低階 processe 管理與 scheduling、IPC、interrupt、基本的記憶體管理,以及少數其他東西。其他的 service,如 filesystem、driver 等等,各自跑在不同的 process,透過 message pipe 與kernel 或其他 service 溝通。Monolithic Kernel 的作法完全相反,除了 user application 之外的程式,幾乎都跑在 kernel space (同一個process)。
溝通 (或說訊息分享) 容易以及高效,自然成為跑在同一個 process 的明顯優點 - 一個 module 不需要複製資料,或經過 message pipe,就可以直接把指向資料所在的指標丟給另一個module。但是`容易以及高效’卻不能簡單地與`好’劃上等號。
想像一下兩種 module 互動的狀況。跑在同一個 process 就類似於在一個team中一起工作的兩個人,坐在相鄰的位子做事情。理想狀況 下,甲可以好聲好氣地跟乙說我需要你幫忙弄某某事情,然後乙做完了再回報甲。如果甲今天心情不好 (就像一個寫得不好的 driver),由於沒有保護,他可能也可以把乙痛打一頓。而跑在不同的 process 比較像是去銀行辦事,在顧客跟行員中間有塊防彈玻璃,雖然這樣做事麻煩些,說話也要透過麥克風。但如果某個人走進來要搶劫,卻不是那麼容易得逞。更別提同 一個 process 一旦掛了整個 process 就 全掛了,想要 recover 回來,即使不是不可能也會是非常困難。
如果 OSX 真為了拼效能,選擇從 Microkernel 轉換為 Monolithic Kernel。雖然可能可以在與 Windows 對決速度時,得到較亮眼的數字成績。在今天這個硬體速度被 Moore’s Law 主宰的世界,只怕是往後退了一大步。
ps. 對現行 OSX 核心有興趣可以看看 Operating System Concepts 的這篇附錄 (PDF格式)。
[1] 不同人與組織對 Microkernel 與 Monolithic Kernel 的評價常呈現兩極化,因此故意沒提供連結。強烈建議有興趣請自行 google,多看看不同的觀點。
[2] 其實他真正提倡的是 reliable and secured OS,而 Microkernel 正是他認為有效的手段之一。
MSN 帳號轉移
Posted on May 18th, 2006 at 18:27 by fr3@K
註冊了自己的 domain 也付錢買了 hosting package,開始慢慢把聯絡人轉移到自己 domain 下的 email 帳號,其中一步就是要用新的 M$ passport。這時我才發現原來 M$ passport 註冊的 email 是可以改的,並且`號稱’會替你把 M$N messenger 上的聯絡人自動轉移過去。
Email 改了之後,M$N 上的聯絡人應該是都還在,不過轉移似乎不是很完全。聯絡人看起來沒少,我也能看到這些人的暱稱,只是全部呈現 offline 狀態。我猜朋友看我大概也是 offline 吧。
Google 一下,發現更改 M$ passport 註冊 email 帳號的人,有些很順利,也有人遇到跟我一樣的問題。部份遇到問題的人等一兩天就恢復正常,其他的則不知道是不是等得不耐煩了,就把聯絡人全部重新加入一遍。
最近要是老沒看到我上線,應該就是 M$N 在考驗我的耐性,叫我等待這有不知道何時才會完成的轉移。
[Update: May 19, 2006]
Ok, after more than two (or three?) days of waiting, I gave up.
唉~ 是我搞不定嗎?還好聯絡人都沒弄丟,試了把聯絡人加回來,也試過請同事把我加回去,neither worked. 又被 M$ 唬爛了。
我只好用`另一個 ‘新的 email 再申請一個 M$N (M$ passport),慢慢把聯絡人加回來。如果有個叫 fr3@K 的怪人加你,可能就是我吧,嘿嘿~
[Update: May 19, 2006, 13:30]
怪,早上抓了個同事來試,互加結果還是 offline,可是這同事下午卻變成 online 了。
我再跟別人試試看。
[Update: May 19, 2006, 15:00]
目前研究的結果是,我的聯絡人要用我改過的 email 重新把我加回去才行。加了後會出現兩個`我’ (理論上是同一個 M$N 帳號) ,而且還不能把我原來的帳號砍掉。加完後要重新 login,兩個帳號就會變成 (merge?) 一個帳號。這比申請新的 M$N 帳號還麻煩多了咧。用新的帳號我還可以直接把舊的聯絡人加進去等對方接受,可是用轉換過的帳號重新加入聯絡人卻是完全沒作用。
[Update: June 5, 2006]
終於,有幾個除了 M$N 之外無法聯絡到的朋友又出現了。這應該表示 M$ 號稱的自動轉移是 work 的,只是這個過程也未免太久了吧!?
SSH Port Forwarding Basics
Posted on May 18th, 2006 at 4:06 by fr3@K
Intro
SSH port forwarding 也稱為 SSH tunneling. 這個功能可把連到一個 ssh session 其中一端某個 port 的 TCP connection, 透過加密的 channel,forward 到 session 的另外一端的指定端口. 將開啟 port forwarding 的 ssh session 結束掉, port forwarding 也跟著結束.
Local to Remote Port Forwarding
下面的 command 會建立一個從 firedrake (我的電腦) 連到 fsfoundry.org 的 ssh session. 並且在 firedrake 的 localhost 的 port 8080 等待 incoming connection. 當有 connection 連進來, 該 connection 就會被 forward 到 fsfoundry.org 的 localhost port 3128:
firedrake$ ssh fsfoundry.org -L 8080:localhost:3128
Remote to Local Port Forwarding
相反地, 下面的 command 會建立一個從 firedrake 連到 fsfoundry.org 的 ssh session. 並且在 fsfoundry.org 的 localhost 的 port 3128 等待 incoming connection. 當有 connection 連進來, 該 connection 就會被 forward 到 firedrake 的 localhost port 8080:
firedrake$ ssh fsfoundry.org -R 8080:localhost:3128
X11 Forwarding
建立一個連到 fsfoundry.org 的 ssh session. 這個 session 會把在其 session 內開的 X11 application forward 回到 firedrake 的 X Server.
firedrake$ ssh -X fsfoundry.org
比較舊版的 OpenSSH 用的是 -Y 而不是 -X.
Home Sick?
Posted on May 17th, 2006 at 1:25 by fr3@K
從低溫零下六度到最近的高溫26度,這一次在北京停留快滿三個月了。
不只我,跟我住一起的兩個台北來的同事身體也幾乎從來沒好過。
不是特別想家,但還是累了,要回去休息一陣子了。
[Update: May 18th, 2006]
呵呵~ 回程機位定好了,下週一,五月二十二號:
- 北京 –> 香港 08:00~11:25 CA101
- 香港 –> 台北 13:25~15:05 CI680
特別感謝好心的蘇珊。