[TEAP早期試讀]《30天寫出你的作業系統》 - 挑戰多工

周自恆發表於2012-02-13

圖靈社群按: TEAP是什麼?TEAP是Turingbook Early Access Program的簡稱,即早期試讀,它公佈的是圖靈在途新書未經編輯的內容。一本書的翻譯週期約為3到6個月,如果在翻譯過程中,譯者就能與讀者進行溝通和交流,對整本書的翻譯品質是有幫助的。通過TEAP,讀者可以提前閱讀將來才能出版的內容,譯者也能收穫寶貴的反饋意見,改進翻譯,提高質量。

本書原名為「30日でできる! OS自作入門」,中文暫定名為《30天寫出你的作業系統》,本篇選自第15章。本書作者川合秀實(Hidemi Kawai)生於1975年,是一位以“輕量化”程式設計思想見長的“非主流”開發者。他領導開發的OSASK專案是一個開源的32位微型作業系統,OSASK並非以Linux等核心為基礎,而是完全從零開始開發,在一張軟盤的容量下實現了GUI、多工、多語言等高階特性,啟動時間只需1秒。本書的內容可以看成是作者以自己開發的OSASK為藍本,對從零開始開發一個作業系統所作的詳盡介紹,可以讓初學者在編寫自己的作業系統的過程中,瞭解作業系統背後的更多知識。本書以課題為主導,邊做邊玩,拋開晦澀難懂的語言,行文風格十分隨性,還充滿了各種歡樂的吐槽,值得一看。

15.1 挑戰多工

“話說,多工到底是啥呢?”我們今天的內容,就從這個問題開始吧。

多工,在英語中叫做“multitask”,顧名思義就是“多個任務”的意思。簡單地說,在Windows等作業系統中,多個應用程式同時執行的狀態(也就是同時開啟好幾個視窗的狀態),就叫做多工。

對於生活在現代社會的各位來說,這種多工簡直是理所當然的事情。比如你會一邊用音樂播放軟體聽音樂一邊寫郵件,郵件寫到一半忽然有點東西要查,便開啟Web瀏覽器上網搜尋,我想對於大家來說這些都是家常便飯了吧。可如果沒有多工的話會怎麼樣呢?想寫郵件的時候就必須關掉正在播放的音樂,要查東西的時候就必須先儲存寫到一半的郵件,然後才能開啟Web瀏覽器……光想象一下就會覺得太不方便了。

然而在從前,沒有多工反倒是普遍的情形(雖然那個時候大家不用電腦聽音樂,也沒有網際網路)。在那個年代,電腦只能同時執行1個程式,如果要同時執行多個程式的話,就得買好幾臺電腦才行。

就在那個時候,誕生了最初的多工作業系統,大家都覺得太了不起了。從現在開始,我們也要準備給“紙娃娃系統”(譯者注:本書中所開發的作業系統名稱)新增多工能力了。連這樣一個小不點作業系統都能夠實現多工,真是讓人不由得感嘆它生逢其時呀。

稍稍思考一下我們就會發現,多工這個東西還真是奇妙,它究竟是怎樣做到讓多個程式同時執行的呢?如果我們的電腦裡面裝了好多個CPU的話,同時執行多個程式也就順理成章了,但實際上就算我們只有一個CPU,照樣可以實現多工。

真要說穿的話,其實這些程式根本沒有在同時執行,不過它們看上去卻好像是在同時執行一樣:程式A執行一會兒,接下來程式B執行一會兒,再接下來輪到程式C,然後再回到程式A……如此反覆,有點像日本忍者的“分身術”呢(笑)。

多工的工作原理

時間軸
任務A
任務B
任務C
※1個CPU依靠反覆切換來執行3個任務
※由於切換速度很快,看上去好像在同時執行3個任務一樣

為了讓這種分身術看上去更完美,需要讓作業系統儘可能快地切換任務。如果每隔10秒才切換一次,那就連人眼都能察覺出來了,同時執行多個程式的戲碼也就穿幫了。再有,如果我們給程式C發出一個按鍵指令,正巧這個瞬間系統切換到了程式A的話,我們就不得不等上20秒,才能重新輪到程式C對按鍵指令作出反應。這實在是讓人抓狂啊(哭)。

在一般的作業系統中,這個切換的動作每隔0.01~0.03秒就會進行一次。當然,切換的速度越快,讓人覺得程式在同時執行的效果也就越好。不過,CPU進行程式切換(我們稱之為“任務切換”)這個動作,本身就需要消耗一定的時間,這個時間大約為0.0001秒左右,不同的CPU及作業系統所需的時間也有所不同。如果CPU以每隔0.0002秒的速度進行任務切換的話,該CPU處理能力的50%都要被任務切換本身所消耗掉。這意味著,如果同時執行2個程式,每個程式的速度就只有單獨執行時的1/4,這樣你會覺得開心嗎?如果變成這種結果,那還不如干脆別搞多工呢。

相比之下,即便是每隔0.001秒切換一次任務,單單在任務切換上面也要消耗CPU處理能力的10%。大概有人會想,10%也沒什麼大不了的吧?可如果你看看快10%的CPU賣多少錢,說不定你就會恍然大悟,“對啊,只要優化一下任務切換間隔,就相當於不花一分錢,換上了比現在更快的CPU嘛……”(笑),你也就明白了浪費10%也是很不值得的。正是因此,任務切換的間隔最短也就是0.01秒左右,這樣一來只有1%的處理能力消耗在任務切換上,基本上就可以忽略不計了。

相關文章