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