內(nèi)核的忙碌生活 轉(zhuǎn)載
我,作為計算機的內(nèi)核,也就是人們眼中所謂的操作系統(tǒng),是不折不扣的幕后英雄!給大家說說都干了些什么,你們就知道我不是在吹牛了。
隨著散熱風(fēng)扇的嗡嗡聲響起,我的忙碌生活就開始了。BIOS大哥習(xí)慣做甩手掌柜,把里里外外掃一遍發(fā)現(xiàn)沒什么意外后,就通知CPU,省下的事情,照舊——找內(nèi)核。然后,睡大覺去了。
CPU是我們這兒的頂梁柱,腦子特好使,幾乎從來不犯錯誤。不過這位同志的缺點就是太缺乏主觀能動性,總是不斷的問我:“下一步干什么?下一步干什么?”,他不覺得煩,我就要不厭其煩的告訴他。
于是我開始搗鼓硬盤:“小樣,醒醒,把Shell給我”。硬盤這伙計懶,雖然記性沒話說,但就是磨嘰,找個東西要半天。對于我這個忙碌習(xí)慣了的人來說,實在受不了,所以我都是告訴他該找什么,然后該忙什么忙什么,反正找到了他會通知我(硬件中斷)。或者有時候干脆讓他和內(nèi)存自己嘀咕去(DMA)。不過大家在一起時間長了,彼此也就了解了,有些合作的技巧:比如說我經(jīng)常讓他找東西的時候多找點,相關(guān)的、用得到的,一股腦給我(預(yù)讀取),我都放到內(nèi)存里(磁盤緩存),省得他麻煩,也省的自己老著急。
內(nèi)存正好和硬盤正相反,反應(yīng)快是沒話說,但一歇班就全忘干凈了。于是還要硬盤一點點的告訴他,累。
幾位同事都準備好了,就開始干活。其實我是個演員,不對不對,是管理人員,而且只是個中層管理人員。所以上面還有幾個老板(內(nèi)核程序),還要伺候一大堆客戶(用戶程序)。
老板好說,所有領(lǐng)導(dǎo)的話都是對的(內(nèi)核總是假定內(nèi)核的程序沒有錯誤)、都是重要的、緊急的(內(nèi)核認為內(nèi)核的要求都是合理的,應(yīng)該盡快滿足的)。所以都應(yīng)該是盡量滿足。客戶的情況就復(fù)雜了,經(jīng)常會有客戶想干不能干的事情,而且客戶還可能會犯錯誤。這些都要進行協(xié)調(diào),能解決的就盡量解決,實在無可救藥的,也只能舍小家,為大家了。(殺進程)
不管是老板還是客戶,分配的任務(wù)也是五花八門:有的要求反應(yīng)快,比如Shell和文本編輯程序,但是通常任務(wù)不重,也就是顯示個字,存?zhèn)€盤啥的,我們管這叫交互式進程;也有任務(wù)重的,比如編譯程序,但是快點慢點都成,這叫批處理進程;還要得要求隔一段時間就想做點兒什么的,比如計劃任務(wù)啥的,算是實時進程。總之,根據(jù)不同的任務(wù)特點,也有不同的應(yīng)對辦法。但是這也要花心思,通過任務(wù)過去干過什么來確定他的特點,我們內(nèi)部管這叫“基于過去行為的啟發(fā)式算法”。
而我要做的事情就是盡可能地滿足所有人的要求!為了完成這個impossible mission,我努力學(xué)習(xí)、不斷總結(jié)經(jīng)驗教訓(xùn),掌握了以下辦法:
- 把任務(wù)切片。由于CPU同志從來不關(guān)心在做什么、也從來不知道下一步要做什么。所以我就讓他這個時間段干這個任務(wù),下個時間段干下個任務(wù)。這樣CPU同志就會分身術(shù)了!
- 把內(nèi)存分頁。一個字節(jié)一個字節(jié)分配內(nèi)存是會累死人的,而我的辦法是把把內(nèi)存分成4K、4K的一小塊,然后按塊分配。在此基礎(chǔ)上,我還會用4K到4M不同大小的段來分配內(nèi)存,以便解決內(nèi)存的碎片問題,這就是著名的“伙伴算法”。
- 學(xué)會偷懶。有很多事情不一定立刻要做,比如說有的任務(wù)要求在內(nèi)存里分配個地方,我的辦法是讓他覺得“貌似”已經(jīng)分配完了就可以了,至于真正開辟內(nèi)存空間,還是等他用到這塊空間的時候再說吧,一個小小的缺頁異常處理就可以搞定。
- 我還會能通過復(fù)雜的算法在固定的時間內(nèi)決定下一個要處理的任務(wù),這對付成百上千的任務(wù)時,效果相當好。
- ......
類似這樣的工作技巧太多太多了,哎呀,又一個中斷響了,我要去忙了,同志們再見!o(∩_∩)o...
posted on 2008-04-08 21:53 colen 閱讀(270) 評論(1) 編輯 收藏 引用 所屬分類: Kernel