MINIX,以前研讀的OS。果然是很具教學性。後來才知道 Linux 和這個也大有關係。
我也不知道為甚麼microkernel真的會比較好,其實我覺得凡是有好處就必定有壞處。
microkernel,monolithic都一樣。
大概寫了一下,其中一部分...
對micro-kernel 系統而言,有可能會造成system crach 的東西,都在kernelspace以外。以MINIX3為例,除了clock外,所有的driver都是存在userspace。看完後,覺得還是一樣,programmer常常面對"follow architecure,走遠路?還是走已知的捷徑?"的抉擇。
所以當一個有bug的driver當機時,影響的只是一個driver。kernel 依然可以正常運行。
當你把那個driver的bug解除後,可以再啟動那個driver,系統恢復正常。
也就是說,在driver down到restart 之間,kernel都還是正常的。同樣的,你也可以抽換/升級任意的driver,不需要restart system。
當然,在microkernel 中也可能有bug,導致kernel crash,以MINIX 3為例,他的kernel 有大約3800 行的code,有bug存在的空間。
然而Andy Tanebaum 和他的MINIX 3team認為這樣的大小還是很有可能可以做到bug-free,讓他更接近一個可以永久運行的系統。
和 linux 2.6 的程式大小比起來(約600萬行)。MINIX 3 的kernel 應該更容易做到bug-free。
microkernel的另一個好處是簡潔,系統所有的driver,filesystem,unction ,,都是分離,在自己所屬的userspace中執行,所以各部系統可以做得相當local化。也就是可以做得比較簡傑。這樣也比較容易維護(對個別driver, function 而言)。
這樣在local level上,microkernel 比較容易維護,但是以global 來看,就比較麻煩了。
以Global的觀點來看,microkernel比較複雜,同時也代表microkernel的overhead比較多。
因為各個function,driver都是各自獨立的,他們之間要溝通比較不容易,所以合作起來需要比較多的手續。
這也就是Linux當初認為microkernel比較不合適的原因。因為在90年代,computer的能力不強,常常需要可慮一些可以增進performance的方法。
沒有留言:
張貼留言