[TEAP早期試讀]《30天寫出你的作業系統》 - 挑戰多工
圖靈社群按: 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%的處理能力消耗在任務切換上,基本上就可以忽略不計了。
相關文章
- [TEAP早期試讀]基於WebSocket的聯機作圖例子Web
- [TEAP早期試讀]《深入淺出CoffeeScript》譯者序
- [TEAP早期試讀]《敏捷武士》推薦序敏捷
- [TEAP早期試讀]《深入淺出CoffeeScript》CoffeeScript中的OOPOOP
- [TEAP早期試讀]HTML5與JSONHTMLJSON
- [TEAP早期試讀]敏捷武士之敏捷簡介敏捷
- [TEAP早期試讀]《程式設計師的數學》- 前言程式設計師
- [TEAP早期試讀]資料庫和敏捷開發資料庫敏捷
- [TEAP早期試讀]《深入淺出CoffeeScript》CoffeeScript與Node.jsNode.js
- [TEAP早期試讀]《Linux/Unix設計思想》之: 大教堂?多怪異Linux
- 30萬+,中興國產作業系統突出重圍,挑戰windows作業系統Windows
- [TEAP早期試讀]NoSQL資料庫的基礎知識SQL資料庫
- [TEAP早期試讀]《MongoDB in Action》——為什麼選擇MongoDB?MongoDB
- [TEAP早期試讀]真正的好處:客戶端批量處理客戶端
- [TEAP早期試讀]Linux: 一個人加上一百萬人的智慧Linux
- [TEAP早期試讀]《深入淺出CoffeeScript》集合與迭代節選和若干問題
- [TEAP早期試讀]Android開發實現後臺下載Android
- [TEAP早期試讀]《程式設計師的數學》- 邏輯工具卡諾圖程式設計師
- 讀懂《30天自制作業系統》的捷徑作業系統
- 作業系統思考 第八章 多工作業系統
- 由《30天自制作業系統》引發的漫畫創作作業系統
- 中國能不能寫出作業系統?作業系統
- 雲原生時代下,作業系統生態的挑戰與機遇作業系統
- [TEAP早期試讀]在資料庫中使用PL/SQL實現業務邏輯的優勢資料庫SQL
- 自己動手寫作業系統(第一天)作業系統
- 作業系統實驗——讀者寫者模型(寫優先)作業系統模型
- 實戰多種Linux作業系統共存(轉)Linux作業系統
- 釋出在《30天自制作業系統》之前的幫助閱讀貼作業系統
- 30天自制作業系統:第三天作業系統
- 30天自制作業系統 For Linux作業系統Linux
- Linux作業系統的嵌入式領域面臨新挑戰(轉)Linux作業系統
- 那些用JavaScript寫的作業系統JavaScript作業系統
- 談談作業系統的多程式作業系統
- 挑戰系統 / 進入區域挑戰怪物
- 《作業系統30天》-合川秀實-學習日誌day11作業系統
- 作業系統寫題總結作業系統
- 蘋果釋出最新測試版iOS 8.3作業系統蘋果iOS作業系統
- 作業系統:多執行緒作業系統執行緒