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 正是他認為有效的手段之一。

del.icio.us:OSX Ditching Microkernel? digg:OSX Ditching Microkernel? spurl:OSX Ditching Microkernel? newsvine:OSX Ditching Microkernel? furl:OSX Ditching Microkernel? Y!:OSX Ditching Microkernel? 黑米共享書籤:OSX Ditching Microkernel? 推推王:OSX Ditching Microkernel?
Login Restarts X
Posted on May 19th, 2006 at 11:14 by fr3@K

加了非常簡單的~/.xsession之後,一login,X就重起。Log裡面也沒錯誤訊息,看起來像是SCIM起始到一半就被砍掉的樣子。還是暫時先把~/.xsession刪了。調查中…

del.icio.us:Login Restarts X digg:Login Restarts X spurl:Login Restarts X newsvine:Login Restarts X furl:Login Restarts X Y!:Login Restarts X 黑米共享書籤:Login Restarts X 推推王:Login Restarts X
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 的,只是這個過程也未免太久了吧!?

del.icio.us:MSN 帳號轉移 digg:MSN 帳號轉移 spurl:MSN 帳號轉移 newsvine:MSN 帳號轉移 furl:MSN 帳號轉移 Y!:MSN 帳號轉移 黑米共享書籤:MSN 帳號轉移 推推王:MSN 帳號轉移
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.

del.icio.us:SSH Port Forwarding Basics digg:SSH Port Forwarding Basics spurl:SSH Port Forwarding Basics newsvine:SSH Port Forwarding Basics furl:SSH Port Forwarding Basics Y!:SSH Port Forwarding Basics 黑米共享書籤:SSH Port Forwarding Basics 推推王:SSH Port Forwarding Basics
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

特別感謝好心的蘇珊。

del.icio.us:Home Sick? digg:Home Sick? spurl:Home Sick? newsvine:Home Sick? furl:Home Sick? Y!:Home Sick? 黑米共享書籤:Home Sick? 推推王:Home Sick?
公司兩三事
Posted on May 15th, 2006 at 4:11 by fr3@K

我們公司是一個很特別的地方。在我過去的經驗,通常工作與私生活的分隔是很明顯的。我說的分隔明顯並不是說不把公事帶回家之類的,而是說你會清楚知道那些事情是公事那些是私事,那些人是同事那些是朋友。

在這,生活很大一部分跟公司關係密切,有的長官像老大哥一樣指點照顧你,許多同事也跟你是私人的朋友。這樣微妙的關係很有趣,造就了公司特異的文化。超出同事情誼的親密常看得到不說,還會出現所謂`基層員工’因為私事對一級主管大呼小叫的場景。

del.icio.us:公司兩三事 digg:公司兩三事 spurl:公司兩三事 newsvine:公司兩三事 furl:公司兩三事 Y!:公司兩三事 黑米共享書籤:公司兩三事 推推王:公司兩三事
神奇的問題
Posted on May 11th, 2006 at 19:12 by fr3@K

上一篇 post 提到的神奇問題是這樣子的,我把 SVN server 從主機 A 轉到換到主機 B。Transfer 完成後我把 SVN server 的 domain name 指到主機 B。數小時後,等 DNS 完成更新,我試著在我手提電腦上對 working copy 做update,結果是無法 connect 至 server。

查找 DNS record 正確無誤,但 ping 不到,心涼了一半。把 browser 打開,卻能正常連上在主機 B 上的管理網頁。連到幾台我常用的主機做 checkout 也一切 正常,就是只有在我手提電腦用 SVN 連不上。斷斷續續的搞了兩天,最後才終於發現原來是因為在這邊,主機 B 的 IP 被 block 住了。

在這邊,IP 被 block 不是新鮮事,但被 block 的對象多是因為 host 所謂的`敏感’資訊,以新聞類網站居多。處於這樣的環境,免不了用境外的 proxy 換取 web browsing 的自由。而這`剛好’讓我能用瀏覽器,卻無法用 SVN 來 access 同一台主機。

主機 B 的 IP 會被 block 的原因對我來說是個謎,畢竟只不過是一台 host SVN 的主機,那來的敏感資訊?不管了,知道原因後把 ~/.subversion/servers 檔案手動改一改,讓 SVN 也走 proxy 才解決了這困擾我兩天的問題。

del.icio.us:神奇的問題 digg:神奇的問題 spurl:神奇的問題 newsvine:神奇的問題 furl:神奇的問題 Y!:神奇的問題 黑米共享書籤:神奇的問題 推推王:神奇的問題
Version Control with Subversion
Posted on May 11th, 2006 at 12:38 by fr3@K

兩年前,因為工作被強迫用了 Subversion (SVN)。很快的,我就成為了 SVN 的愛用者,也漸漸地把 CVS 甩了。原因不是因為 SVN 比 CVS 強大,主要是因為喜歡 SVN 的一個特性 - commit 是 transactional,每次 commit 都是一個 revision [1]。

許多 SVN 的只用者都知道這本可說是 SVN 聖經的書 - Version Control with Subversion,也可能有不少人也知道這本書有 on-line free 的版本。今天為了解決一個神奇的問題,google 雖沒讓我找到線索,卻意外找到疑似初稿的中文翻譯。跳著看了幾小段,品質挺不錯,看英文慢的朋友可以參考一下。

[1] SVN 的 revision 是一個序號,每次 commit 就加一。一個 SVN revision 可說是等同於一個 CVS tag,只不過這個 tag 是個自動產生的號碼,不是由使用者決定的。不過還是有 workaround 可以使 SVN 產生與 CVS tag 功能上相仿的產物 - 不往前走的 branch。

[Update: May 18, 2006]
又意外撞到線上簡體版本,而且還蠻 up-to-date。

del.icio.us:Version Control with Subversion digg:Version Control with Subversion spurl:Version Control with Subversion newsvine:Version Control with Subversion furl:Version Control with Subversion Y!:Version Control with Subversion 黑米共享書籤:Version Control with Subversion 推推王:Version Control with Subversion
Is your Singleton Broken?
Posted on May 5th, 2006 at 21:44 by fr3@K

Singleton 是 C++ 程式設計裡,最古老的問題之一。典型的 (狹義的) singleton 是用一個 class 的 static member function 封裝,稱為 singleton pattern。The Gang of Four (GoF) 在 Design Patterns 討論並提出第一個 (在某種程度上似乎) 令人滿意的 singleton 解答,這個 pattern 幾乎是一夕之間聲名大噪,成為 (可能是) 最廣為人知的 pattern。不論在 GoF 之前與之後,許多人 (其中不乏大師級人物) 提出了不同的 singleton pattern,要解決的問題主要是:

  • 確保某單一 instance 的存在
  • 提供單一介面 (接口) 以存取該 instance
  • 確保該 instance 能被正確建構與解構 (虛構)
  • 確保該 instance 的有正確的生存週期

這裡的討論會把範圍放大,不只 singleton pattern,還要含括廣義的 singleton,也就是 - global 變數 (以下除非特別註明,singleton 指的是廣義的 singleton)。
(more…)

del.icio.us:Is your Singleton Broken? digg:Is your Singleton Broken? spurl:Is your Singleton Broken? newsvine:Is your Singleton Broken? furl:Is your Singleton Broken? Y!:Is your Singleton Broken? 黑米共享書籤:Is your Singleton Broken? 推推王:Is your Singleton Broken?