規(guī)律,世界的運(yùn)轉(zhuǎn)遵循著一定的規(guī)則。比如地球圍繞著太陽(yáng)轉(zhuǎn),月球圍繞著地球轉(zhuǎn)。我們無(wú)法理解月球?yàn)槭裁唇性虑颍蚨鳦PU也是如此,他為什么用的是這個(gè)名詞而不是別的,這些是一些約定俗成的東西。我們只需要理解他所代表的意義,沒(méi)有必須深究其在表面上的意義。
我們?cè)谟?jì)算機(jī)給予了節(jié)拍的概念,也就是說(shuō)在計(jì)算機(jī)運(yùn)行的時(shí)候也在以某個(gè)頻率運(yùn)行著操作系統(tǒng),如在早期的Linux內(nèi)核中,是以100Hz為節(jié)拍的。而隨后的內(nèi)核有些則改用1000Hz的定時(shí)器。而這些就像我們生活中的秒一樣都是人為規(guī)定的。我們可以更改內(nèi)核中的CPU節(jié)拍,同時(shí)我們也可以人為地定義這個(gè)世界的1分鐘可以是30秒,而不是60秒。這些都是人為發(fā)明和創(chuàng)造的,就如同我們稱(chēng)呼太陽(yáng)為太陽(yáng)一樣。而計(jì)算機(jī)也是將我們所熟知的世界的規(guī)律帶入計(jì)算機(jī)世界中。
定時(shí)器中斷也是相當(dāng)有趣的一個(gè)設(shè)計(jì),我們?cè)谑褂貌僮飨到y(tǒng)的時(shí)候無(wú)法察覺(jué)到定時(shí)器的設(shè)計(jì),每秒都發(fā)生了一定數(shù)量的中斷。而中斷的意義是使得硬件得以與處理器進(jìn)行通信,而中斷也是多任務(wù)設(shè)計(jì)的一個(gè)利器。當(dāng)然,我們還不知道這個(gè)世界是不是有中斷如此有趣的設(shè)計(jì)。
但是,我們也可以將這些重新構(gòu)造,也就是在C++等語(yǔ)言中的重構(gòu)。在初等數(shù)學(xué)中1+1=2,然而你可以將“+”號(hào)重新定義,這里的”+”就不是加法、ADD了。你就是我們可以重新定義1+1=3,而”+”這是一個(gè)符號(hào)。通常,當(dāng)然我們認(rèn)為是加號(hào)。當(dāng)然了,你也可以認(rèn)為是其它已知事實(shí)。這些只是人為定義和發(fā)明的,而我們將這些已知的規(guī)律帶入了計(jì)算機(jī)世界,而使這些更為簡(jiǎn)單。所以,我們可以將計(jì)算機(jī)定義為人類(lèi)世界的延伸。故,我們可以用已知的已經(jīng)熟知的這個(gè)世界的規(guī)律來(lái)理解計(jì)算機(jī)操作系統(tǒng)。
計(jì)算機(jī)操作系統(tǒng)是以基于管理計(jì)算機(jī)及其他配件為基礎(chǔ)的軟件,也就是一個(gè)管理工具,操作系統(tǒng)內(nèi)核管理著計(jì)算機(jī)本身及其應(yīng)用程序,同時(shí)為其它程序提供系統(tǒng)服務(wù),操作系統(tǒng)控制著計(jì)算機(jī)的所有資源。計(jì)算機(jī)本身有著極其復(fù)雜的硬件結(jié)構(gòu),無(wú)論是直接用RISC、還是MIPS等來(lái)操縱系統(tǒng)都是極為復(fù)雜的工作。同時(shí)在這些機(jī)器語(yǔ)言中有著數(shù)量不少的指令,可以用作數(shù)據(jù)傳輸、運(yùn)算等操作。當(dāng)然除了這些之外還有內(nèi)存地址操作等等。因而操作系統(tǒng)的職責(zé)之一就是將所有這些復(fù)雜性的事物隱藏下來(lái),同時(shí)為程序員提供一套更加方便的指令。(比如說(shuō),在unix shell中我們可以通過(guò)rm –rf *來(lái)刪除某個(gè)目錄的所有文件,然而這是相當(dāng)危險(xiǎn)的。在類(lèi)unix系統(tǒng)中,一般都認(rèn)為用戶知自己的操作會(huì)帶來(lái)什么后果。)同時(shí),我們也可以基于操作系統(tǒng)來(lái)開(kāi)發(fā)應(yīng)用程序,比如C++、Python等高級(jí)語(yǔ)言也是基于操作系統(tǒng)層次上而言的。
我們可以將這一切類(lèi)比,如同地球本身一樣,為其它生態(tài)提供了載體,而這一切又是以操作系統(tǒng)為核心。當(dāng)我們需要建設(shè)房屋的時(shí)候我們直接買(mǎi)來(lái)的是磚、玻璃等等,而不會(huì)去選擇去買(mǎi)土,然后再用來(lái)燒磚。建設(shè)的時(shí)候,就好比是程序設(shè)計(jì)。首先我們要分析好我們的需要,為這房屋多大,什么樣子的。因而,在多數(shù)語(yǔ)言中一般會(huì)要求你事先了解你所要設(shè)計(jì)的程序架構(gòu)等等,也就是自頂向下的編程。(也存在某些例外,比如Lisp)。這些都已經(jīng)是基于類(lèi)似于我們操作系統(tǒng)層次上的操作。
而這一切如同我們所生活的環(huán)境一樣。我們所需的一切都是基于地球。以建筑為例,我們?cè)诮ㄔO(shè)的同時(shí),就如同應(yīng)用程序一樣,一切都是基于系統(tǒng)所提供的資源。如房屋、木材等,而這都是利用周?chē)馁Y源所構(gòu)成的。而資源都是有限,盡管我們?cè)诋?dāng)前認(rèn)為有些資源是無(wú)限的,然而,我們也會(huì)發(fā)現(xiàn)這一切是有限的。
開(kāi)發(fā)PC程序時(shí),通常不會(huì)去限制對(duì)資源(如內(nèi)存等)的使用,除在某些特定的開(kāi)發(fā)領(lǐng)域如嵌入式、游戲編程等。在我們所生活的環(huán)境中,我們會(huì)遇到這樣或者那樣的災(zāi)難,而這些都是不可預(yù)料的,正如系統(tǒng)中的BUG一樣。就當(dāng)我們對(duì)自然規(guī)律不斷掌握的同時(shí),我們也會(huì)遇到這樣或者那樣無(wú)法解決的問(wèn)題,而映射在WINDOWS系統(tǒng)中比如藍(lán)屏,或者在單片機(jī)中遇到的溢出等等。我們還無(wú)法遇知問(wèn)題出在哪里。因而,如同自然規(guī)律一樣,軟件中的BUG也是存在的,隨著開(kāi)發(fā)的進(jìn)行,數(shù)量會(huì)減少,但是還是存在的。就好比是數(shù)學(xué)領(lǐng)域人們?cè)谟?jì)算最大的質(zhì)數(shù)一樣,軟件中的BUG也是那個(gè)質(zhì)數(shù)。雖然你在此時(shí)認(rèn)為BUG已經(jīng)被消除了,然而它還是存在的,只不過(guò)不知道它在何處罷了。
從沒(méi)有操作系統(tǒng)到簡(jiǎn)單的批處理系統(tǒng),就有如地球的的誕生一樣。而批處理簡(jiǎn)單就像第一個(gè)細(xì)胞的誕生那樣有著重要的意義,你可以將之類(lèi)比為今天的人的大腦和操作系統(tǒng)的關(guān)系,今天的操作系統(tǒng)當(dāng)然還不比人的智能,然而意義上也可以是相當(dāng)?shù)。我們可以發(fā)現(xiàn),這有著如此的相似之處。
一個(gè)又一個(gè)的人類(lèi)好比是計(jì)算機(jī)中一個(gè)個(gè)簡(jiǎn)單的線程,每個(gè)人都是獨(dú)立的的有著自己的思想,行動(dòng)等等,然而有這么幾群人為著一個(gè)共同的目標(biāo)為努力著,這就構(gòu)成了操作系統(tǒng)中的進(jìn)程。一個(gè)進(jìn)程可以由N多個(gè)線程構(gòu)成,當(dāng)然這只是理論值。我們暫且將之類(lèi)比為一家公司,一個(gè)進(jìn)程如同一家公司一樣,它有N多個(gè)員工,也就是線程。而當(dāng)一家公司不斷擴(kuò)大的時(shí)候,就可能觸犯邊界,也就是法律給予的邊境。每個(gè)系統(tǒng)本身也給予了程序一定的資源使用范圍。當(dāng)一個(gè)程序占用了過(guò)多的系統(tǒng)的資源的時(shí)候,操作系統(tǒng)就開(kāi)發(fā)干涉這個(gè)程序的行為。就像壟斷法所規(guī)定的公司應(yīng)當(dāng)如何如何一樣,如果你觸發(fā)了這個(gè)邊界,那么你可能如同美孚石油一樣被拆分,而這一切也是相當(dāng)?shù)挠腥さ摹?/p>
當(dāng)我們?cè)谝粋(gè)團(tuán)隊(duì)里面工作的時(shí)候,有時(shí)候幾個(gè)人同時(shí)做一件事的,也有可能在同一時(shí)間段內(nèi)由不同的人來(lái)做同一件事了。而我們的核心就是完成某個(gè)任務(wù),聽(tīng)起來(lái)是不是很像操作系統(tǒng)的任務(wù)的運(yùn)行。而我們?cè)谧鲞@個(gè)任務(wù)的時(shí)候可以得到團(tuán)隊(duì)最好的資源和人力,那么這就是搶占式(Preemptive),因?yàn)槲覀兛梢詢?yōu)先獲得系統(tǒng)資源。當(dāng)然了,同一團(tuán)隊(duì)中如果去搶別人的資源可能是不好的行為,當(dāng)然了其它線程也可以做出讓步(yielding)。因而一個(gè)內(nèi)核調(diào)配器的設(shè)計(jì)在整個(gè)操作系統(tǒng)中是極為重要的。會(huì)影響系統(tǒng)資源的利用,及多進(jìn)程的并發(fā)效果。基于搶占式多任務(wù)(Preemptive multitasking)設(shè)計(jì)的linux內(nèi)核中,進(jìn)程在被搶占之前能夠運(yùn)行的時(shí)候是預(yù)先設(shè)置好的,而且有一個(gè)專(zhuān)門(mén)的名字,叫進(jìn)程的時(shí)間片(timeslice)。
當(dāng)然了一個(gè)操作系統(tǒng)中可能會(huì)有不同的高度程序,就像我們?cè)趫?zhí)行一個(gè)任務(wù)的時(shí)候會(huì)有不同的方法一樣。在Solaris中,有多個(gè)調(diào)度程序可以并發(fā)操作。Solaris提供表驅(qū)動(dòng)的、隨用量減少的分時(shí)調(diào)度程序(TS);為窗口系統(tǒng)優(yōu)化的交互高度程序(IA);基于共享的調(diào)度程序(FSS);固定優(yōu)先級(jí)的調(diào)度程序(FX)及實(shí)時(shí)的固定優(yōu)先級(jí)的調(diào)度程序(RT)。
一個(gè)操作系統(tǒng)中,也包含文件系統(tǒng),而你可以將之類(lèi)比為什么呢,地球。。。。我們所用的軟件將依賴于文件系統(tǒng),隨著開(kāi)發(fā)的不斷進(jìn)行,這還在相當(dāng)長(zhǎng)的時(shí)間還是一樣的。你會(huì)發(fā)現(xiàn),我們生活在地球上,我們所工作、生活的地方也是在地球上的。而這一切都是有限的,因?yàn)橘Y源從來(lái)都是有限的。取之不盡用之不竭那只是鬼話,一種相當(dāng)激進(jìn)的自我安慰。
因而將操作系統(tǒng)形像為我們所居住的環(huán)境,你會(huì)發(fā)現(xiàn)這一切是如此的簡(jiǎn)單。在生態(tài)中,一切都是對(duì)象,無(wú)論是人類(lèi)還是其它什么的,他們之間有著共同的屬性,比如,人和猴子一樣都有四肢。而這之間又有著如此多的區(qū)別,就以人類(lèi)而論,男人和女人之間又有著這么多的區(qū)別,他們這又是人類(lèi)。又有大腦,等等。你又能加以從性方面加以區(qū)別。
人的思考就有如系統(tǒng)一樣,在不斷地進(jìn)行判斷,馮體系的操作系統(tǒng)是如此只有真和假,而人的大腦也是如此吧,只不過(guò)加以了一個(gè)又個(gè)復(fù)雜的編程,就如計(jì)算機(jī)誕生之時(shí),人們會(huì)驚嘆其的偉大和神奇,而人的大腦也如同其一樣復(fù)雜,編程的一個(gè)又一個(gè)的終點(diǎn)就是BIN,二進(jìn)制。而就是1和0構(gòu)成了這個(gè)復(fù)雜的世界。而我們所生活的世界就是由這個(gè),那個(gè)化學(xué)元素構(gòu)成的,而你又會(huì)發(fā)現(xiàn)這一個(gè)又一個(gè)神奇的事物的構(gòu)成究其底是什么呢H,也就是所謂的氫。我們所生活的世界到最后也就是由氫構(gòu)成的,就如同計(jì)算機(jī)世界的1一樣,有著神奇的功能,而0呢,有趣的是你會(huì)發(fā)現(xiàn)0是什么也沒(méi)有,正如同物理學(xué)家告訴你真空的存在一樣,0就是這個(gè)世界的真空。
因而,你可以將計(jì)算機(jī)操作系統(tǒng)等等理解為這個(gè)世界,一切都是如此的有趣,有著如此多的相似之處而。更有趣的是人的大腦吧,就像早期的操作系統(tǒng)沒(méi)有多任務(wù)屬性一樣。而人的大腦同上也是一個(gè)神奇的多任務(wù)操作系統(tǒng),當(dāng)然了你可能會(huì)說(shuō)人的大腦無(wú)法同一時(shí)間處理兩件事,而操作系統(tǒng)可以嗎?答案是不可以的。一個(gè)時(shí)間片我們只能考慮這件事,然而一天呢,我們可以想這件事或者那件事。因而,操作系統(tǒng)的多任務(wù)也是如此的。在一段時(shí)間內(nèi)做那件事,在那一個(gè)時(shí)間內(nèi)做另外一件事。盡管相互之間有著如此多的區(qū)別,當(dāng)然了。有的系統(tǒng),可能不是基于時(shí)間片的。
你可以將法律類(lèi)比為操作系統(tǒng)的一個(gè)個(gè)策略、管理單元等等。而這一切都是為了操作系統(tǒng)有著更好的開(kāi)發(fā)環(huán)境,或者說(shuō)這是為了讓人與人和平的相處下來(lái),而不至于發(fā)生矛盾。當(dāng)發(fā)生問(wèn)題的時(shí)候,就有了規(guī)范有了解決方案,這就是系統(tǒng)存在的意義,如同國(guó)家對(duì)于人民的意義一樣。這個(gè)國(guó)家可能會(huì)有病毒,你可以將之稱(chēng)之為造反。病毒就如同義軍一樣,要么你平息了他,要么,你被他“平息”了。但是一個(gè)新的操作系統(tǒng)不會(huì)因此而誕生,這也是兩者間的區(qū)別。
虛擬世界和現(xiàn)實(shí)世界不可能都是盡處相同的。我們無(wú)法將此一一對(duì)應(yīng),當(dāng)然了,我們可以將現(xiàn)實(shí)世界中的設(shè)計(jì)帶入計(jì)算機(jī)操作系統(tǒng)設(shè)計(jì)之中。
參考書(shū)目包括但不限于以下文獻(xiàn):
《Solaris內(nèi)核結(jié)(第二版)》Richard McDougall Jim Mauro著,機(jī)械工業(yè)出版社,2007;
《Linux內(nèi)核設(shè)計(jì)與實(shí)現(xiàn)(第二版)》Robert Love 著, 機(jī)械工業(yè)出版社,2009;