前沿拓展:
導(dǎo)讀:這一篇聊**作系統(tǒng)。最近大家對(duì)“卡脖子”討論很多,首當(dāng)其沖是芯片,緊接著就是**作系統(tǒng)。**作系統(tǒng),英文名Operating System,所以也常簡(jiǎn)稱“OS”。**作系統(tǒng)很重要,計(jì)算機(jī)系的學(xué)生都知道,**作系統(tǒng)作為一門(mén)核心專業(yè)課,和數(shù)據(jù)庫(kù)、編譯原理合稱“三座大山”。
作者:木羊同學(xué)
來(lái)源:華章科技
01 **作系統(tǒng)都學(xué)些什么
**作系統(tǒng)的重要性當(dāng)然不止于此。如果深入研究你就會(huì)發(fā)現(xiàn),**作系統(tǒng)在整個(gè)計(jì)算機(jī)學(xué)科體系中處于一個(gè)十分關(guān)鍵的位置。計(jì)算機(jī)科學(xué)的學(xué)科方向多如牛毛,但總的來(lái)說(shuō)可以分成兩塊,硬件一塊,軟件一塊,這兩大塊都喜歡各玩各的,中間說(shuō)是隔著次元壁也一點(diǎn)不夸張。
但都在一個(gè)體系內(nèi),總要想個(gè)辦法來(lái)打破次元壁呀,這個(gè)重要的工作由誰(shuí)來(lái)做呢?就是**作系統(tǒng)。所以從體系架構(gòu)的角度看,**心系統(tǒng)是處在所有硬件的最上層,和所有軟件的最下層,是一個(gè)“跨界”的角色。
**作系統(tǒng)很重要,那作為一門(mén)學(xué)科,難不難學(xué)呢?大家的態(tài)度走兩個(gè)極端,一邊的人覺(jué)得**作系統(tǒng)有什么可學(xué)的,不就是點(diǎn)鼠標(biāo)劃玻璃,太簡(jiǎn)單連小學(xué)的計(jì)算機(jī)課都不一定認(rèn)真教,大學(xué)還專門(mén)設(shè)了專業(yè)課太夸張了。另一邊的人又覺(jué)得**作系統(tǒng)太難,**作系統(tǒng)的玩家不是Linus這樣的業(yè)界大神,就是微軟、谷歌這樣的行業(yè)大佬,萌新小本只好瑟瑟發(fā)抖。
這些觀點(diǎn)對(duì)不對(duì)呢?
都有一些理解上的偏差。我們平時(shí)常說(shuō)的“安裝**作系統(tǒng)”,這里的“**作系統(tǒng)”,準(zhǔn)確來(lái)說(shuō),應(yīng)該叫“**作系統(tǒng)產(chǎn)品”,而**作系統(tǒng)這門(mén)課,主要內(nèi)容講的是**作系統(tǒng)的內(nèi)核原理。
**作系統(tǒng)產(chǎn)品和**作系統(tǒng)內(nèi)核二者的關(guān)系,有一點(diǎn)像計(jì)算機(jī)和CPU,沒(méi)有它不行,光有它也不行。一款**作系統(tǒng)產(chǎn)品,第一肯定得有**作系統(tǒng)內(nèi)核,但是光有內(nèi)核是沒(méi)法使用的,還得加上配套的周邊功能。
雖然叫“周邊配套”,但絕不是可有可無(wú)的意思,大部分我們所熟識(shí)**作系統(tǒng)功能,實(shí)際上都是屬于“周邊配套”,譬如說(shuō)我們最最最熟悉的“桌面”,放著漂亮的壁紙,擺滿各色各樣的圖標(biāo),是**作系統(tǒng)主要的用戶交互界面,術(shù)語(yǔ)稱為圖形用戶界面(Graphical User Interface,簡(jiǎn)稱GUI)。
前面感覺(jué)自己“精通**作系統(tǒng)”的那位同學(xué),其實(shí)精通的只是GUI的使用,而且很抱歉,GUI不在**作系統(tǒng)內(nèi)核里面。
不過(guò),話說(shuō)回來(lái),雖然專門(mén)有“**作系統(tǒng)內(nèi)核”這樣的術(shù)語(yǔ),但并不意味著所謂的“內(nèi)核”與“周邊”之間,天然就存在一條清晰的界限。在**作系統(tǒng)里面,一直存在著宏內(nèi)核和微內(nèi)核兩條路線的爭(zhēng)論,爭(zhēng)論的焦點(diǎn),正是什么該劃入“內(nèi)核”,什么又該算作周邊。
微內(nèi)核的主張,顧名思義,就是最小化內(nèi)核所需要提供的服務(wù),只負(fù)責(zé)最基本的功能,把應(yīng)用服務(wù)、驅(qū)動(dòng)、GUI,甚至一些感覺(jué)上也挺基本的功能,譬如文件系統(tǒng)服務(wù),都統(tǒng)統(tǒng)趕出內(nèi)核。
這樣做的好處是靈活方便,像是要提供新服務(wù),那直接新增就可以了,不需要對(duì)內(nèi)核進(jìn)行額外的改動(dòng),但缺點(diǎn)也很突出,什么功能都趕出去了,真到用的時(shí)候還需要進(jìn)行內(nèi)核模式-用戶模式的切換,模式切換會(huì)增加額外的開(kāi)銷(xiāo),導(dǎo)致性能受損,因此就有人主張應(yīng)該把常用的功能都接納進(jìn)來(lái),這就是宏內(nèi)核。
Windows早前采用的就是微內(nèi)核架構(gòu),把GUI趕了出去,結(jié)果性能損失受不了,后來(lái)又重新請(qǐng)回來(lái),一直到現(xiàn)在,GUI仍然是Windows內(nèi)核的一部分。
02 **作系統(tǒng)的核心內(nèi)容
**作系統(tǒng)這門(mén)課主要研究的是**作系統(tǒng)內(nèi)核,這名字不太平易近人,容易給人“難學(xué)懂”的感覺(jué)。確實(shí),現(xiàn)在**作系統(tǒng)的功能越來(lái)越豐富,連帶著**作系統(tǒng)內(nèi)核也越來(lái)越復(fù)雜。有一本**作系統(tǒng)業(yè)內(nèi)很有名的書(shū),叫《Windows Internals》,講的是Windows**作系統(tǒng)的功能原理,從這本書(shū)就可以看出來(lái)**作系統(tǒng)的一個(gè)變化趨勢(shì)。
《Windows Internals》是跟著Windows推陳出新的,Windows不斷更新,這本書(shū)也不斷再版,一個(gè)肉眼可見(jiàn)的變化就是書(shū)越寫(xiě)越厚,現(xiàn)在最新版干脆把一本書(shū)分成了上下兩卷,內(nèi)容太多,光一塊磚頭已經(jīng)不夠裝了。
這還只是Windows,現(xiàn)在是移動(dòng)互聯(lián)網(wǎng)時(shí)代,還有**作系統(tǒng)還有一半多的江山被iOS和Android這哥倆占著,而且都以一年一個(gè)版本的速度迭代,要學(xué)的知識(shí)豈不是漫無(wú)邊際?
其實(shí)不用擔(dān)心,**作系統(tǒng)確實(shí)在迅速發(fā)展,但最最核心的還是那些老兄弟。**作系統(tǒng)有一本非常經(jīng)典的教材,只要你問(wèn)就一定會(huì)有人推薦,叫《Operating System Concept》,中文譯為《**作系統(tǒng)概念》。因?yàn)檫@本書(shū)的封面畫(huà)著恐龍,所以學(xué)界也稱為“恐龍書(shū)”。
恐龍書(shū)不但介紹**作系統(tǒng)知識(shí),還會(huì)引入“當(dāng)前主流**作系統(tǒng)”作為研究案例。當(dāng)然,恐龍書(shū)已經(jīng)從第1版發(fā)展到了第9版,書(shū)里的“當(dāng)前主流**作系統(tǒng)”也一換再換,默默地記錄著**作系統(tǒng)的變化發(fā)展。
不過(guò),我把幾個(gè)版本比較了一下,最新版知識(shí)點(diǎn)增加了不少,還補(bǔ)充了一些新的內(nèi)容,涵蓋了iOS、Android等移動(dòng)**作系統(tǒng),但主要的知識(shí)結(jié)構(gòu)并沒(méi)有大幅調(diào)整,核心的研究對(duì)象和問(wèn)題,仍然是早就登場(chǎng)的那幾個(gè)。
具體是哪幾個(gè)呢?就仨:進(jìn)程、內(nèi)存和存儲(chǔ)。**作系統(tǒng)最重要的功能就是“管理”,具體來(lái)說(shuō)是兩項(xiàng)工作,資源的分配和資源的調(diào)度,那管理的核心對(duì)象是哪些呢?就是這仨,分別對(duì)應(yīng)的硬件是CPU、內(nèi)存和硬盤(pán),想想就能知道,這仨同樣是計(jì)算機(jī)里的三個(gè)扛把子部件。
我們說(shuō)恐龍書(shū)經(jīng)典,其中一個(gè)地方就體現(xiàn)在對(duì)**作系統(tǒng)知識(shí)體系的劃分上面??铸垥?shū)當(dāng)然會(huì)重點(diǎn)照顧這三個(gè)核心對(duì)象,為它們一一設(shè)有單元,再加上必不可少的概論、大家現(xiàn)在都很關(guān)注的安全,以及前面提到的案例分析,就構(gòu)成了恐龍書(shū)最新第9版的六大知識(shí)板塊。
作為一名**作系統(tǒng)愛(ài)好者,我看過(guò)很多**作系統(tǒng)的書(shū),有偏重原理的,有偏重實(shí)例的,也會(huì)有其它新的偏重,譬如會(huì)為網(wǎng)絡(luò),硬件架構(gòu)、設(shè)備管理等等內(nèi)容設(shè)置**章節(jié),但無(wú)論哪本書(shū),進(jìn)程、內(nèi)存和存儲(chǔ)(也有稱為外存)始終是書(shū)里的三條主線??偠灾?,學(xué)**作系統(tǒng),第一都得緊緊抓住進(jìn)程、內(nèi)存和存儲(chǔ)學(xué)懂學(xué)通。
03 怎樣學(xué)**作系統(tǒng)
既然進(jìn)程、內(nèi)存和存儲(chǔ)是**作系統(tǒng)的三個(gè)核心對(duì)象,那具體應(yīng)該怎么學(xué)呢?一句話回答:帶著問(wèn)題學(xué)。這里的“帶著問(wèn)題學(xué)”,和我們平時(shí)常說(shuō)的有所不同,在**作系統(tǒng)里面,進(jìn)程、內(nèi)存和存儲(chǔ)都有各自需要重點(diǎn)關(guān)注的問(wèn)題。
就拿進(jìn)程來(lái)說(shuō),進(jìn)程是**作系統(tǒng)中相對(duì)比較抽象的概念,所以大多數(shù)**作系統(tǒng)的教材都會(huì)不吝筆墨,給進(jìn)程下一堆的定義,試圖只靠文字就解釋清楚什么是進(jìn)程。不過(guò)效果總不太好,大家不容易看懂,還容易看暈,畢竟“抽象”的意思就是說(shuō),你懂了馬上心領(lǐng)神會(huì),你不懂總感覺(jué)雞同鴨講。
我倒認(rèn)為沒(méi)必要在進(jìn)程的定義上作過(guò)多糾結(jié),關(guān)鍵是功用,開(kāi)始只需要記住一點(diǎn),進(jìn)程對(duì)應(yīng)的是CPU。計(jì)算機(jī)所謂的“計(jì)算”,指的就是CPU運(yùn)算,那運(yùn)算什么內(nèi)容呢?這就是進(jìn)程。
本來(lái)這個(gè)過(guò)程不算復(fù)雜,好像也沒(méi)什么問(wèn)題,但是后來(lái)人們搞出了“多進(jìn)程”,一個(gè)CPU能“同時(shí)”運(yùn)行多個(gè)進(jìn)程。但這個(gè)“同時(shí)”不是真正的同時(shí),用術(shù)語(yǔ)來(lái)說(shuō),是并發(fā)執(zhí)行而不是并行執(zhí)行,結(jié)果一下就復(fù)雜起來(lái),問(wèn)題也就隨之而來(lái)了。
進(jìn)程增多了,但CPU卻只有一個(gè),出現(xiàn)了多對(duì)一的競(jìng)態(tài)問(wèn)題,這就是一切問(wèn)題的起源。圍繞著競(jìng)態(tài)問(wèn)題,進(jìn)程接著又衍生出了許多問(wèn)題。
第一就是調(diào)度問(wèn)題。對(duì)**作系統(tǒng)來(lái)說(shuō),調(diào)度是個(gè)大問(wèn)題。書(shū)本肯定都會(huì)告訴你,進(jìn)程有很多個(gè)狀態(tài),有些還畫(huà)成了狀態(tài)遷移圖,各種線飛來(lái)飛去,看得眼花繚亂。感覺(jué)上很難,但我覺(jué)得,把握好了背后的邏輯,這些看似凌亂的知識(shí)點(diǎn)就是條理清晰地串在一起。
在這里,我們只需要****盯住競(jìng)態(tài)問(wèn)題,正是因?yàn)檫M(jìn)程和CPU不再是一一對(duì)應(yīng),所以需要調(diào)度,而所謂調(diào)度,就是雜技里的用兩只手玩五只球,總會(huì)區(qū)分出接回手里的、準(zhǔn)備拋出的和停在空中的幾種情況,所以也需要根據(jù)情況給進(jìn)程配套設(shè)計(jì)不同的狀態(tài),調(diào)度的具體工作,就是想辦法讓進(jìn)程在這幾個(gè)狀態(tài)中來(lái)回遷移倒騰,最終營(yíng)造出CPU同時(shí)執(zhí)行多個(gè)進(jìn)程的假象。
進(jìn)程之下是線程,現(xiàn)在又搞出了協(xié)程和纖程,以后不知道還會(huì)什么程,不過(guò),目的只有一個(gè),更充分地利用CPU時(shí)間,而且都難以避免一個(gè)問(wèn)題,就是調(diào)度問(wèn)題。
調(diào)度本身不難,難就難在設(shè)計(jì)調(diào)度原則,誰(shuí)上誰(shuí)下,執(zhí)行多久,等待多久,都需要一一加以考慮,而且最難的地方在于,調(diào)度是沒(méi)有最優(yōu)解的,只有在指定原則條件下,設(shè)計(jì)出相當(dāng)不錯(cuò)的調(diào)度方案。
進(jìn)程除了競(jìng)爭(zhēng)CPU,還要競(jìng)爭(zhēng)資源,譬如兩個(gè)甚至更多的進(jìn)程可能都需要同時(shí)讀寫(xiě)同一個(gè)文件,我們熟悉的多對(duì)一的關(guān)系,會(huì)導(dǎo)致我們熟悉的競(jìng)態(tài)問(wèn)題,在CPU那導(dǎo)致了調(diào)度問(wèn)題,而到了資源這里,則會(huì)導(dǎo)致同步問(wèn)題和**鎖問(wèn)題。
同步問(wèn)題很簡(jiǎn)單,進(jìn)程既然要調(diào)度,那肯定沒(méi)辦法把活一口氣干完,譬如說(shuō)讀寫(xiě)某個(gè)文件,讀到一半被換下來(lái)了,下次再換上來(lái)的時(shí)候發(fā)現(xiàn),別的進(jìn)程也在讀寫(xiě)這個(gè)文件,內(nèi)容變了。
多線程有一個(gè)默契,就是前后環(huán)境要保持一致,你把我從CPU那換上換下我沒(méi)意見(jiàn),但你得保證我所處的環(huán)境是相同的,別像雍正那樣一覺(jué)醒來(lái)發(fā)現(xiàn)大清亡了,后面也就沒(méi)法跟著劇本走。那怎么保證一致性呢,這就是同步問(wèn)題,方法包括互斥鎖、信號(hào)量等等。
**鎖問(wèn)題聽(tīng)起感覺(jué)復(fù)雜一點(diǎn),書(shū)上花了不少筆墨但內(nèi)容還是不好懂。其實(shí)也不復(fù)雜,我們?cè)谛^(qū)門(mén)口喜聞樂(lè)見(jiàn)的堵車(chē)就是**鎖。小區(qū)門(mén)口只有一條車(chē)道,早高峰大家都得排著隊(duì)出去,這時(shí)如果外面有一輛車(chē)回來(lái),開(kāi)到門(mén)口又不肯避讓,那就堵車(chē)了,用**作系統(tǒng)的術(shù)語(yǔ)來(lái)說(shuō),就是**鎖了。
前面說(shuō),為了解決同步問(wèn)題,我們會(huì)采取互斥鎖等方法,簡(jiǎn)單來(lái)說(shuō),當(dāng)多個(gè)進(jìn)程都要使用同一項(xiàng)資源時(shí),只有當(dāng)前正在使用的進(jìn)程用完了,也就是術(shù)語(yǔ)所說(shuō)的資源釋放了,后面的進(jìn)程才可以接著用。這樣做的好處當(dāng)然是保證了一致性,但壞處則是導(dǎo)致了另一個(gè)問(wèn)題,就是**鎖問(wèn)題。
拿前面的小區(qū)出口比劃一下就清楚了。單車(chē)道當(dāng)然是互斥的,要么只進(jìn)要么只出,不可能一邊進(jìn)一邊出。如果兩頭的來(lái)車(chē)各占一半車(chē)道,結(jié)果當(dāng)然是想進(jìn)來(lái)的進(jìn)不來(lái),想出去的出不去,兩頭堵**,這就**鎖了。
那怎么解決**鎖問(wèn)題呢,大方向有兩種,一種是避免出現(xiàn)**鎖,從根本上解決這個(gè)問(wèn)題,不過(guò)難度較大。另一種則是想辦法對(duì)已經(jīng)發(fā)生的**鎖及時(shí)檢測(cè)發(fā)現(xiàn),第二進(jìn)行恢復(fù)。但是怎么才能及時(shí)發(fā)現(xiàn)**鎖呢?這又是一個(gè)**作系統(tǒng)方向需要研究的問(wèn)題。
關(guān)于作者:莫凡,網(wǎng)名木羊同學(xué)。娛樂(lè)向機(jī)器學(xué)習(xí)解說(shuō)選手,《機(jī)器學(xué)習(xí)算法的數(shù)學(xué)解析與Python實(shí)現(xiàn)》作者,前沿技術(shù)發(fā)展觀潮者,擅長(zhǎng)高冷技術(shù)的“白菜化”解說(shuō),微信**“睡前機(jī)器學(xué)習(xí)”,個(gè)人知乎號(hào)“木羊”。
延伸閱讀《現(xiàn)代**作系統(tǒng):原理與實(shí)現(xiàn)》
推薦語(yǔ):**作系統(tǒng)和系統(tǒng)安全領(lǐng)域國(guó)際知名學(xué)者、上海交通大學(xué)陳海波、夏虞斌領(lǐng)銜撰寫(xiě)。作者在復(fù)旦大學(xué)和上海交通大學(xué)十余年**作系統(tǒng)教學(xué)經(jīng)驗(yàn)的科學(xué)小編綜合來(lái)說(shuō)。由淺入深介紹現(xiàn)代**作系統(tǒng)經(jīng)典理論與方法,結(jié)合前沿研究與工業(yè)界實(shí)踐,面向真實(shí)場(chǎng)景與真實(shí)問(wèn)題。全新打造ChCore微內(nèi)核系列課程實(shí)驗(yàn),建立對(duì)**作系統(tǒng)的第一手實(shí)踐經(jīng)驗(yàn)。
拓展知識(shí):
前沿拓展:
導(dǎo)讀:這一篇聊**作系統(tǒng)。最近大家對(duì)“卡脖子”討論很多,首當(dāng)其沖是芯片,緊接著就是**作系統(tǒng)。**作系統(tǒng),英文名Operating System,所以也常簡(jiǎn)稱“OS”。**作系統(tǒng)很重要,計(jì)算機(jī)系的學(xué)生都知道,**作系統(tǒng)作為一門(mén)核心專業(yè)課,和數(shù)據(jù)庫(kù)、編譯原理合稱“三座大山”。
作者:木羊同學(xué)
來(lái)源:華章科技
01 **作系統(tǒng)都學(xué)些什么
**作系統(tǒng)的重要性當(dāng)然不止于此。如果深入研究你就會(huì)發(fā)現(xiàn),**作系統(tǒng)在整個(gè)計(jì)算機(jī)學(xué)科體系中處于一個(gè)十分關(guān)鍵的位置。計(jì)算機(jī)科學(xué)的學(xué)科方向多如牛毛,但總的來(lái)說(shuō)可以分成兩塊,硬件一塊,軟件一塊,這兩大塊都喜歡各玩各的,中間說(shuō)是隔著次元壁也一點(diǎn)不夸張。
但都在一個(gè)體系內(nèi),總要想個(gè)辦法來(lái)打破次元壁呀,這個(gè)重要的工作由誰(shuí)來(lái)做呢?就是**作系統(tǒng)。所以從體系架構(gòu)的角度看,**心系統(tǒng)是處在所有硬件的最上層,和所有軟件的最下層,是一個(gè)“跨界”的角色。
**作系統(tǒng)很重要,那作為一門(mén)學(xué)科,難不難學(xué)呢?大家的態(tài)度走兩個(gè)極端,一邊的人覺(jué)得**作系統(tǒng)有什么可學(xué)的,不就是點(diǎn)鼠標(biāo)劃玻璃,太簡(jiǎn)單連小學(xué)的計(jì)算機(jī)課都不一定認(rèn)真教,大學(xué)還專門(mén)設(shè)了專業(yè)課太夸張了。另一邊的人又覺(jué)得**作系統(tǒng)太難,**作系統(tǒng)的玩家不是Linus這樣的業(yè)界大神,就是微軟、谷歌這樣的行業(yè)大佬,萌新小本只好瑟瑟發(fā)抖。
這些觀點(diǎn)對(duì)不對(duì)呢?
都有一些理解上的偏差。我們平時(shí)常說(shuō)的“安裝**作系統(tǒng)”,這里的“**作系統(tǒng)”,準(zhǔn)確來(lái)說(shuō),應(yīng)該叫“**作系統(tǒng)產(chǎn)品”,而**作系統(tǒng)這門(mén)課,主要內(nèi)容講的是**作系統(tǒng)的內(nèi)核原理。
**作系統(tǒng)產(chǎn)品和**作系統(tǒng)內(nèi)核二者的關(guān)系,有一點(diǎn)像計(jì)算機(jī)和CPU,沒(méi)有它不行,光有它也不行。一款**作系統(tǒng)產(chǎn)品,第一肯定得有**作系統(tǒng)內(nèi)核,但是光有內(nèi)核是沒(méi)法使用的,還得加上配套的周邊功能。
雖然叫“周邊配套”,但絕不是可有可無(wú)的意思,大部分我們所熟識(shí)**作系統(tǒng)功能,實(shí)際上都是屬于“周邊配套”,譬如說(shuō)我們最最最熟悉的“桌面”,放著漂亮的壁紙,擺滿各色各樣的圖標(biāo),是**作系統(tǒng)主要的用戶交互界面,術(shù)語(yǔ)稱為圖形用戶界面(Graphical User Interface,簡(jiǎn)稱GUI)。
前面感覺(jué)自己“精通**作系統(tǒng)”的那位同學(xué),其實(shí)精通的只是GUI的使用,而且很抱歉,GUI不在**作系統(tǒng)內(nèi)核里面。
不過(guò),話說(shuō)回來(lái),雖然專門(mén)有“**作系統(tǒng)內(nèi)核”這樣的術(shù)語(yǔ),但并不意味著所謂的“內(nèi)核”與“周邊”之間,天然就存在一條清晰的界限。在**作系統(tǒng)里面,一直存在著宏內(nèi)核和微內(nèi)核兩條路線的爭(zhēng)論,爭(zhēng)論的焦點(diǎn),正是什么該劃入“內(nèi)核”,什么又該算作周邊。
微內(nèi)核的主張,顧名思義,就是最小化內(nèi)核所需要提供的服務(wù),只負(fù)責(zé)最基本的功能,把應(yīng)用服務(wù)、驅(qū)動(dòng)、GUI,甚至一些感覺(jué)上也挺基本的功能,譬如文件系統(tǒng)服務(wù),都統(tǒng)統(tǒng)趕出內(nèi)核。
這樣做的好處是靈活方便,像是要提供新服務(wù),那直接新增就可以了,不需要對(duì)內(nèi)核進(jìn)行額外的改動(dòng),但缺點(diǎn)也很突出,什么功能都趕出去了,真到用的時(shí)候還需要進(jìn)行內(nèi)核模式-用戶模式的切換,模式切換會(huì)增加額外的開(kāi)銷(xiāo),導(dǎo)致性能受損,因此就有人主張應(yīng)該把常用的功能都接納進(jìn)來(lái),這就是宏內(nèi)核。
Windows早前采用的就是微內(nèi)核架構(gòu),把GUI趕了出去,結(jié)果性能損失受不了,后來(lái)又重新請(qǐng)回來(lái),一直到現(xiàn)在,GUI仍然是Windows內(nèi)核的一部分。
02 **作系統(tǒng)的核心內(nèi)容
**作系統(tǒng)這門(mén)課主要研究的是**作系統(tǒng)內(nèi)核,這名字不太平易近人,容易給人“難學(xué)懂”的感覺(jué)。確實(shí),現(xiàn)在**作系統(tǒng)的功能越來(lái)越豐富,連帶著**作系統(tǒng)內(nèi)核也越來(lái)越復(fù)雜。有一本**作系統(tǒng)業(yè)內(nèi)很有名的書(shū),叫《Windows Internals》,講的是Windows**作系統(tǒng)的功能原理,從這本書(shū)就可以看出來(lái)**作系統(tǒng)的一個(gè)變化趨勢(shì)。
《Windows Internals》是跟著Windows推陳出新的,Windows不斷更新,這本書(shū)也不斷再版,一個(gè)肉眼可見(jiàn)的變化就是書(shū)越寫(xiě)越厚,現(xiàn)在最新版干脆把一本書(shū)分成了上下兩卷,內(nèi)容太多,光一塊磚頭已經(jīng)不夠裝了。
這還只是Windows,現(xiàn)在是移動(dòng)互聯(lián)網(wǎng)時(shí)代,還有**作系統(tǒng)還有一半多的江山被iOS和Android這哥倆占著,而且都以一年一個(gè)版本的速度迭代,要學(xué)的知識(shí)豈不是漫無(wú)邊際?
其實(shí)不用擔(dān)心,**作系統(tǒng)確實(shí)在迅速發(fā)展,但最最核心的還是那些老兄弟。**作系統(tǒng)有一本非常經(jīng)典的教材,只要你問(wèn)就一定會(huì)有人推薦,叫《Operating System Concept》,中文譯為《**作系統(tǒng)概念》。因?yàn)檫@本書(shū)的封面畫(huà)著恐龍,所以學(xué)界也稱為“恐龍書(shū)”。
恐龍書(shū)不但介紹**作系統(tǒng)知識(shí),還會(huì)引入“當(dāng)前主流**作系統(tǒng)”作為研究案例。當(dāng)然,恐龍書(shū)已經(jīng)從第1版發(fā)展到了第9版,書(shū)里的“當(dāng)前主流**作系統(tǒng)”也一換再換,默默地記錄著**作系統(tǒng)的變化發(fā)展。
不過(guò),我把幾個(gè)版本比較了一下,最新版知識(shí)點(diǎn)增加了不少,還補(bǔ)充了一些新的內(nèi)容,涵蓋了iOS、Android等移動(dòng)**作系統(tǒng),但主要的知識(shí)結(jié)構(gòu)并沒(méi)有大幅調(diào)整,核心的研究對(duì)象和問(wèn)題,仍然是早就登場(chǎng)的那幾個(gè)。
具體是哪幾個(gè)呢?就仨:進(jìn)程、內(nèi)存和存儲(chǔ)。**作系統(tǒng)最重要的功能就是“管理”,具體來(lái)說(shuō)是兩項(xiàng)工作,資源的分配和資源的調(diào)度,那管理的核心對(duì)象是哪些呢?就是這仨,分別對(duì)應(yīng)的硬件是CPU、內(nèi)存和硬盤(pán),想想就能知道,這仨同樣是計(jì)算機(jī)里的三個(gè)扛把子部件。
我們說(shuō)恐龍書(shū)經(jīng)典,其中一個(gè)地方就體現(xiàn)在對(duì)**作系統(tǒng)知識(shí)體系的劃分上面??铸垥?shū)當(dāng)然會(huì)重點(diǎn)照顧這三個(gè)核心對(duì)象,為它們一一設(shè)有單元,再加上必不可少的概論、大家現(xiàn)在都很關(guān)注的安全,以及前面提到的案例分析,就構(gòu)成了恐龍書(shū)最新第9版的六大知識(shí)板塊。
作為一名**作系統(tǒng)愛(ài)好者,我看過(guò)很多**作系統(tǒng)的書(shū),有偏重原理的,有偏重實(shí)例的,也會(huì)有其它新的偏重,譬如會(huì)為網(wǎng)絡(luò),硬件架構(gòu)、設(shè)備管理等等內(nèi)容設(shè)置**章節(jié),但無(wú)論哪本書(shū),進(jìn)程、內(nèi)存和存儲(chǔ)(也有稱為外存)始終是書(shū)里的三條主線??偠灾?,學(xué)**作系統(tǒng),第一都得緊緊抓住進(jìn)程、內(nèi)存和存儲(chǔ)學(xué)懂學(xué)通。
03 怎樣學(xué)**作系統(tǒng)
既然進(jìn)程、內(nèi)存和存儲(chǔ)是**作系統(tǒng)的三個(gè)核心對(duì)象,那具體應(yīng)該怎么學(xué)呢?一句話回答:帶著問(wèn)題學(xué)。這里的“帶著問(wèn)題學(xué)”,和我們平時(shí)常說(shuō)的有所不同,在**作系統(tǒng)里面,進(jìn)程、內(nèi)存和存儲(chǔ)都有各自需要重點(diǎn)關(guān)注的問(wèn)題。
就拿進(jìn)程來(lái)說(shuō),進(jìn)程是**作系統(tǒng)中相對(duì)比較抽象的概念,所以大多數(shù)**作系統(tǒng)的教材都會(huì)不吝筆墨,給進(jìn)程下一堆的定義,試圖只靠文字就解釋清楚什么是進(jìn)程。不過(guò)效果總不太好,大家不容易看懂,還容易看暈,畢竟“抽象”的意思就是說(shuō),你懂了馬上心領(lǐng)神會(huì),你不懂總感覺(jué)雞同鴨講。
我倒認(rèn)為沒(méi)必要在進(jìn)程的定義上作過(guò)多糾結(jié),關(guān)鍵是功用,開(kāi)始只需要記住一點(diǎn),進(jìn)程對(duì)應(yīng)的是CPU。計(jì)算機(jī)所謂的“計(jì)算”,指的就是CPU運(yùn)算,那運(yùn)算什么內(nèi)容呢?這就是進(jìn)程。
本來(lái)這個(gè)過(guò)程不算復(fù)雜,好像也沒(méi)什么問(wèn)題,但是后來(lái)人們搞出了“多進(jìn)程”,一個(gè)CPU能“同時(shí)”運(yùn)行多個(gè)進(jìn)程。但這個(gè)“同時(shí)”不是真正的同時(shí),用術(shù)語(yǔ)來(lái)說(shuō),是并發(fā)執(zhí)行而不是并行執(zhí)行,結(jié)果一下就復(fù)雜起來(lái),問(wèn)題也就隨之而來(lái)了。
進(jìn)程增多了,但CPU卻只有一個(gè),出現(xiàn)了多對(duì)一的競(jìng)態(tài)問(wèn)題,這就是一切問(wèn)題的起源。圍繞著競(jìng)態(tài)問(wèn)題,進(jìn)程接著又衍生出了許多問(wèn)題。
第一就是調(diào)度問(wèn)題。對(duì)**作系統(tǒng)來(lái)說(shuō),調(diào)度是個(gè)大問(wèn)題。書(shū)本肯定都會(huì)告訴你,進(jìn)程有很多個(gè)狀態(tài),有些還畫(huà)成了狀態(tài)遷移圖,各種線飛來(lái)飛去,看得眼花繚亂。感覺(jué)上很難,但我覺(jué)得,把握好了背后的邏輯,這些看似凌亂的知識(shí)點(diǎn)就是條理清晰地串在一起。
在這里,我們只需要****盯住競(jìng)態(tài)問(wèn)題,正是因?yàn)檫M(jìn)程和CPU不再是一一對(duì)應(yīng),所以需要調(diào)度,而所謂調(diào)度,就是雜技里的用兩只手玩五只球,總會(huì)區(qū)分出接回手里的、準(zhǔn)備拋出的和停在空中的幾種情況,所以也需要根據(jù)情況給進(jìn)程配套設(shè)計(jì)不同的狀態(tài),調(diào)度的具體工作,就是想辦法讓進(jìn)程在這幾個(gè)狀態(tài)中來(lái)回遷移倒騰,最終營(yíng)造出CPU同時(shí)執(zhí)行多個(gè)進(jìn)程的假象。
進(jìn)程之下是線程,現(xiàn)在又搞出了協(xié)程和纖程,以后不知道還會(huì)什么程,不過(guò),目的只有一個(gè),更充分地利用CPU時(shí)間,而且都難以避免一個(gè)問(wèn)題,就是調(diào)度問(wèn)題。
調(diào)度本身不難,難就難在設(shè)計(jì)調(diào)度原則,誰(shuí)上誰(shuí)下,執(zhí)行多久,等待多久,都需要一一加以考慮,而且最難的地方在于,調(diào)度是沒(méi)有最優(yōu)解的,只有在指定原則條件下,設(shè)計(jì)出相當(dāng)不錯(cuò)的調(diào)度方案。
進(jìn)程除了競(jìng)爭(zhēng)CPU,還要競(jìng)爭(zhēng)資源,譬如兩個(gè)甚至更多的進(jìn)程可能都需要同時(shí)讀寫(xiě)同一個(gè)文件,我們熟悉的多對(duì)一的關(guān)系,會(huì)導(dǎo)致我們熟悉的競(jìng)態(tài)問(wèn)題,在CPU那導(dǎo)致了調(diào)度問(wèn)題,而到了資源這里,則會(huì)導(dǎo)致同步問(wèn)題和**鎖問(wèn)題。
同步問(wèn)題很簡(jiǎn)單,進(jìn)程既然要調(diào)度,那肯定沒(méi)辦法把活一口氣干完,譬如說(shuō)讀寫(xiě)某個(gè)文件,讀到一半被換下來(lái)了,下次再換上來(lái)的時(shí)候發(fā)現(xiàn),別的進(jìn)程也在讀寫(xiě)這個(gè)文件,內(nèi)容變了。
多線程有一個(gè)默契,就是前后環(huán)境要保持一致,你把我從CPU那換上換下我沒(méi)意見(jiàn),但你得保證我所處的環(huán)境是相同的,別像雍正那樣一覺(jué)醒來(lái)發(fā)現(xiàn)大清亡了,后面也就沒(méi)法跟著劇本走。那怎么保證一致性呢,這就是同步問(wèn)題,方法包括互斥鎖、信號(hào)量等等。
**鎖問(wèn)題聽(tīng)起感覺(jué)復(fù)雜一點(diǎn),書(shū)上花了不少筆墨但內(nèi)容還是不好懂。其實(shí)也不復(fù)雜,我們?cè)谛^(qū)門(mén)口喜聞樂(lè)見(jiàn)的堵車(chē)就是**鎖。小區(qū)門(mén)口只有一條車(chē)道,早高峰大家都得排著隊(duì)出去,這時(shí)如果外面有一輛車(chē)回來(lái),開(kāi)到門(mén)口又不肯避讓,那就堵車(chē)了,用**作系統(tǒng)的術(shù)語(yǔ)來(lái)說(shuō),就是**鎖了。
前面說(shuō),為了解決同步問(wèn)題,我們會(huì)采取互斥鎖等方法,簡(jiǎn)單來(lái)說(shuō),當(dāng)多個(gè)進(jìn)程都要使用同一項(xiàng)資源時(shí),只有當(dāng)前正在使用的進(jìn)程用完了,也就是術(shù)語(yǔ)所說(shuō)的資源釋放了,后面的進(jìn)程才可以接著用。這樣做的好處當(dāng)然是保證了一致性,但壞處則是導(dǎo)致了另一個(gè)問(wèn)題,就是**鎖問(wèn)題。
拿前面的小區(qū)出口比劃一下就清楚了。單車(chē)道當(dāng)然是互斥的,要么只進(jìn)要么只出,不可能一邊進(jìn)一邊出。如果兩頭的來(lái)車(chē)各占一半車(chē)道,結(jié)果當(dāng)然是想進(jìn)來(lái)的進(jìn)不來(lái),想出去的出不去,兩頭堵**,這就**鎖了。
那怎么解決**鎖問(wèn)題呢,大方向有兩種,一種是避免出現(xiàn)**鎖,從根本上解決這個(gè)問(wèn)題,不過(guò)難度較大。另一種則是想辦法對(duì)已經(jīng)發(fā)生的**鎖及時(shí)檢測(cè)發(fā)現(xiàn),第二進(jìn)行恢復(fù)。但是怎么才能及時(shí)發(fā)現(xiàn)**鎖呢?這又是一個(gè)**作系統(tǒng)方向需要研究的問(wèn)題。
關(guān)于作者:莫凡,網(wǎng)名木羊同學(xué)。娛樂(lè)向機(jī)器學(xué)習(xí)解說(shuō)選手,《機(jī)器學(xué)習(xí)算法的數(shù)學(xué)解析與Python實(shí)現(xiàn)》作者,前沿技術(shù)發(fā)展觀潮者,擅長(zhǎng)高冷技術(shù)的“白菜化”解說(shuō),微信**“睡前機(jī)器學(xué)習(xí)”,個(gè)人知乎號(hào)“木羊”。
延伸閱讀《現(xiàn)代**作系統(tǒng):原理與實(shí)現(xiàn)》
推薦語(yǔ):**作系統(tǒng)和系統(tǒng)安全領(lǐng)域國(guó)際知名學(xué)者、上海交通大學(xué)陳海波、夏虞斌領(lǐng)銜撰寫(xiě)。作者在復(fù)旦大學(xué)和上海交通大學(xué)十余年**作系統(tǒng)教學(xué)經(jīng)驗(yàn)的科學(xué)小編綜合來(lái)說(shuō)。由淺入深介紹現(xiàn)代**作系統(tǒng)經(jīng)典理論與方法,結(jié)合前沿研究與工業(yè)界實(shí)踐,面向真實(shí)場(chǎng)景與真實(shí)問(wèn)題。全新打造ChCore微內(nèi)核系列課程實(shí)驗(yàn),建立對(duì)**作系統(tǒng)的第一手實(shí)踐經(jīng)驗(yàn)。
拓展知識(shí):
前沿拓展:
導(dǎo)讀:這一篇聊**作系統(tǒng)。最近大家對(duì)“卡脖子”討論很多,首當(dāng)其沖是芯片,緊接著就是**作系統(tǒng)。**作系統(tǒng),英文名Operating System,所以也常簡(jiǎn)稱“OS”。**作系統(tǒng)很重要,計(jì)算機(jī)系的學(xué)生都知道,**作系統(tǒng)作為一門(mén)核心專業(yè)課,和數(shù)據(jù)庫(kù)、編譯原理合稱“三座大山”。
作者:木羊同學(xué)
來(lái)源:華章科技
01 **作系統(tǒng)都學(xué)些什么
**作系統(tǒng)的重要性當(dāng)然不止于此。如果深入研究你就會(huì)發(fā)現(xiàn),**作系統(tǒng)在整個(gè)計(jì)算機(jī)學(xué)科體系中處于一個(gè)十分關(guān)鍵的位置。計(jì)算機(jī)科學(xué)的學(xué)科方向多如牛毛,但總的來(lái)說(shuō)可以分成兩塊,硬件一塊,軟件一塊,這兩大塊都喜歡各玩各的,中間說(shuō)是隔著次元壁也一點(diǎn)不夸張。
但都在一個(gè)體系內(nèi),總要想個(gè)辦法來(lái)打破次元壁呀,這個(gè)重要的工作由誰(shuí)來(lái)做呢?就是**作系統(tǒng)。所以從體系架構(gòu)的角度看,**心系統(tǒng)是處在所有硬件的最上層,和所有軟件的最下層,是一個(gè)“跨界”的角色。
**作系統(tǒng)很重要,那作為一門(mén)學(xué)科,難不難學(xué)呢?大家的態(tài)度走兩個(gè)極端,一邊的人覺(jué)得**作系統(tǒng)有什么可學(xué)的,不就是點(diǎn)鼠標(biāo)劃玻璃,太簡(jiǎn)單連小學(xué)的計(jì)算機(jī)課都不一定認(rèn)真教,大學(xué)還專門(mén)設(shè)了專業(yè)課太夸張了。另一邊的人又覺(jué)得**作系統(tǒng)太難,**作系統(tǒng)的玩家不是Linus這樣的業(yè)界大神,就是微軟、谷歌這樣的行業(yè)大佬,萌新小本只好瑟瑟發(fā)抖。
這些觀點(diǎn)對(duì)不對(duì)呢?
都有一些理解上的偏差。我們平時(shí)常說(shuō)的“安裝**作系統(tǒng)”,這里的“**作系統(tǒng)”,準(zhǔn)確來(lái)說(shuō),應(yīng)該叫“**作系統(tǒng)產(chǎn)品”,而**作系統(tǒng)這門(mén)課,主要內(nèi)容講的是**作系統(tǒng)的內(nèi)核原理。
**作系統(tǒng)產(chǎn)品和**作系統(tǒng)內(nèi)核二者的關(guān)系,有一點(diǎn)像計(jì)算機(jī)和CPU,沒(méi)有它不行,光有它也不行。一款**作系統(tǒng)產(chǎn)品,第一肯定得有**作系統(tǒng)內(nèi)核,但是光有內(nèi)核是沒(méi)法使用的,還得加上配套的周邊功能。
雖然叫“周邊配套”,但絕不是可有可無(wú)的意思,大部分我們所熟識(shí)**作系統(tǒng)功能,實(shí)際上都是屬于“周邊配套”,譬如說(shuō)我們最最最熟悉的“桌面”,放著漂亮的壁紙,擺滿各色各樣的圖標(biāo),是**作系統(tǒng)主要的用戶交互界面,術(shù)語(yǔ)稱為圖形用戶界面(Graphical User Interface,簡(jiǎn)稱GUI)。
前面感覺(jué)自己“精通**作系統(tǒng)”的那位同學(xué),其實(shí)精通的只是GUI的使用,而且很抱歉,GUI不在**作系統(tǒng)內(nèi)核里面。
不過(guò),話說(shuō)回來(lái),雖然專門(mén)有“**作系統(tǒng)內(nèi)核”這樣的術(shù)語(yǔ),但并不意味著所謂的“內(nèi)核”與“周邊”之間,天然就存在一條清晰的界限。在**作系統(tǒng)里面,一直存在著宏內(nèi)核和微內(nèi)核兩條路線的爭(zhēng)論,爭(zhēng)論的焦點(diǎn),正是什么該劃入“內(nèi)核”,什么又該算作周邊。
微內(nèi)核的主張,顧名思義,就是最小化內(nèi)核所需要提供的服務(wù),只負(fù)責(zé)最基本的功能,把應(yīng)用服務(wù)、驅(qū)動(dòng)、GUI,甚至一些感覺(jué)上也挺基本的功能,譬如文件系統(tǒng)服務(wù),都統(tǒng)統(tǒng)趕出內(nèi)核。
這樣做的好處是靈活方便,像是要提供新服務(wù),那直接新增就可以了,不需要對(duì)內(nèi)核進(jìn)行額外的改動(dòng),但缺點(diǎn)也很突出,什么功能都趕出去了,真到用的時(shí)候還需要進(jìn)行內(nèi)核模式-用戶模式的切換,模式切換會(huì)增加額外的開(kāi)銷(xiāo),導(dǎo)致性能受損,因此就有人主張應(yīng)該把常用的功能都接納進(jìn)來(lái),這就是宏內(nèi)核。
Windows早前采用的就是微內(nèi)核架構(gòu),把GUI趕了出去,結(jié)果性能損失受不了,后來(lái)又重新請(qǐng)回來(lái),一直到現(xiàn)在,GUI仍然是Windows內(nèi)核的一部分。
02 **作系統(tǒng)的核心內(nèi)容
**作系統(tǒng)這門(mén)課主要研究的是**作系統(tǒng)內(nèi)核,這名字不太平易近人,容易給人“難學(xué)懂”的感覺(jué)。確實(shí),現(xiàn)在**作系統(tǒng)的功能越來(lái)越豐富,連帶著**作系統(tǒng)內(nèi)核也越來(lái)越復(fù)雜。有一本**作系統(tǒng)業(yè)內(nèi)很有名的書(shū),叫《Windows Internals》,講的是Windows**作系統(tǒng)的功能原理,從這本書(shū)就可以看出來(lái)**作系統(tǒng)的一個(gè)變化趨勢(shì)。
《Windows Internals》是跟著Windows推陳出新的,Windows不斷更新,這本書(shū)也不斷再版,一個(gè)肉眼可見(jiàn)的變化就是書(shū)越寫(xiě)越厚,現(xiàn)在最新版干脆把一本書(shū)分成了上下兩卷,內(nèi)容太多,光一塊磚頭已經(jīng)不夠裝了。
這還只是Windows,現(xiàn)在是移動(dòng)互聯(lián)網(wǎng)時(shí)代,還有**作系統(tǒng)還有一半多的江山被iOS和Android這哥倆占著,而且都以一年一個(gè)版本的速度迭代,要學(xué)的知識(shí)豈不是漫無(wú)邊際?
其實(shí)不用擔(dān)心,**作系統(tǒng)確實(shí)在迅速發(fā)展,但最最核心的還是那些老兄弟。**作系統(tǒng)有一本非常經(jīng)典的教材,只要你問(wèn)就一定會(huì)有人推薦,叫《Operating System Concept》,中文譯為《**作系統(tǒng)概念》。因?yàn)檫@本書(shū)的封面畫(huà)著恐龍,所以學(xué)界也稱為“恐龍書(shū)”。
恐龍書(shū)不但介紹**作系統(tǒng)知識(shí),還會(huì)引入“當(dāng)前主流**作系統(tǒng)”作為研究案例。當(dāng)然,恐龍書(shū)已經(jīng)從第1版發(fā)展到了第9版,書(shū)里的“當(dāng)前主流**作系統(tǒng)”也一換再換,默默地記錄著**作系統(tǒng)的變化發(fā)展。
不過(guò),我把幾個(gè)版本比較了一下,最新版知識(shí)點(diǎn)增加了不少,還補(bǔ)充了一些新的內(nèi)容,涵蓋了iOS、Android等移動(dòng)**作系統(tǒng),但主要的知識(shí)結(jié)構(gòu)并沒(méi)有大幅調(diào)整,核心的研究對(duì)象和問(wèn)題,仍然是早就登場(chǎng)的那幾個(gè)。
具體是哪幾個(gè)呢?就仨:進(jìn)程、內(nèi)存和存儲(chǔ)。**作系統(tǒng)最重要的功能就是“管理”,具體來(lái)說(shuō)是兩項(xiàng)工作,資源的分配和資源的調(diào)度,那管理的核心對(duì)象是哪些呢?就是這仨,分別對(duì)應(yīng)的硬件是CPU、內(nèi)存和硬盤(pán),想想就能知道,這仨同樣是計(jì)算機(jī)里的三個(gè)扛把子部件。
我們說(shuō)恐龍書(shū)經(jīng)典,其中一個(gè)地方就體現(xiàn)在對(duì)**作系統(tǒng)知識(shí)體系的劃分上面??铸垥?shū)當(dāng)然會(huì)重點(diǎn)照顧這三個(gè)核心對(duì)象,為它們一一設(shè)有單元,再加上必不可少的概論、大家現(xiàn)在都很關(guān)注的安全,以及前面提到的案例分析,就構(gòu)成了恐龍書(shū)最新第9版的六大知識(shí)板塊。
作為一名**作系統(tǒng)愛(ài)好者,我看過(guò)很多**作系統(tǒng)的書(shū),有偏重原理的,有偏重實(shí)例的,也會(huì)有其它新的偏重,譬如會(huì)為網(wǎng)絡(luò),硬件架構(gòu)、設(shè)備管理等等內(nèi)容設(shè)置**章節(jié),但無(wú)論哪本書(shū),進(jìn)程、內(nèi)存和存儲(chǔ)(也有稱為外存)始終是書(shū)里的三條主線??偠灾瑢W(xué)**作系統(tǒng),第一都得緊緊抓住進(jìn)程、內(nèi)存和存儲(chǔ)學(xué)懂學(xué)通。
03 怎樣學(xué)**作系統(tǒng)
既然進(jìn)程、內(nèi)存和存儲(chǔ)是**作系統(tǒng)的三個(gè)核心對(duì)象,那具體應(yīng)該怎么學(xué)呢?一句話回答:帶著問(wèn)題學(xué)。這里的“帶著問(wèn)題學(xué)”,和我們平時(shí)常說(shuō)的有所不同,在**作系統(tǒng)里面,進(jìn)程、內(nèi)存和存儲(chǔ)都有各自需要重點(diǎn)關(guān)注的問(wèn)題。
就拿進(jìn)程來(lái)說(shuō),進(jìn)程是**作系統(tǒng)中相對(duì)比較抽象的概念,所以大多數(shù)**作系統(tǒng)的教材都會(huì)不吝筆墨,給進(jìn)程下一堆的定義,試圖只靠文字就解釋清楚什么是進(jìn)程。不過(guò)效果總不太好,大家不容易看懂,還容易看暈,畢竟“抽象”的意思就是說(shuō),你懂了馬上心領(lǐng)神會(huì),你不懂總感覺(jué)雞同鴨講。
我倒認(rèn)為沒(méi)必要在進(jìn)程的定義上作過(guò)多糾結(jié),關(guān)鍵是功用,開(kāi)始只需要記住一點(diǎn),進(jìn)程對(duì)應(yīng)的是CPU。計(jì)算機(jī)所謂的“計(jì)算”,指的就是CPU運(yùn)算,那運(yùn)算什么內(nèi)容呢?這就是進(jìn)程。
本來(lái)這個(gè)過(guò)程不算復(fù)雜,好像也沒(méi)什么問(wèn)題,但是后來(lái)人們搞出了“多進(jìn)程”,一個(gè)CPU能“同時(shí)”運(yùn)行多個(gè)進(jìn)程。但這個(gè)“同時(shí)”不是真正的同時(shí),用術(shù)語(yǔ)來(lái)說(shuō),是并發(fā)執(zhí)行而不是并行執(zhí)行,結(jié)果一下就復(fù)雜起來(lái),問(wèn)題也就隨之而來(lái)了。
進(jìn)程增多了,但CPU卻只有一個(gè),出現(xiàn)了多對(duì)一的競(jìng)態(tài)問(wèn)題,這就是一切問(wèn)題的起源。圍繞著競(jìng)態(tài)問(wèn)題,進(jìn)程接著又衍生出了許多問(wèn)題。
第一就是調(diào)度問(wèn)題。對(duì)**作系統(tǒng)來(lái)說(shuō),調(diào)度是個(gè)大問(wèn)題。書(shū)本肯定都會(huì)告訴你,進(jìn)程有很多個(gè)狀態(tài),有些還畫(huà)成了狀態(tài)遷移圖,各種線飛來(lái)飛去,看得眼花繚亂。感覺(jué)上很難,但我覺(jué)得,把握好了背后的邏輯,這些看似凌亂的知識(shí)點(diǎn)就是條理清晰地串在一起。
在這里,我們只需要****盯住競(jìng)態(tài)問(wèn)題,正是因?yàn)檫M(jìn)程和CPU不再是一一對(duì)應(yīng),所以需要調(diào)度,而所謂調(diào)度,就是雜技里的用兩只手玩五只球,總會(huì)區(qū)分出接回手里的、準(zhǔn)備拋出的和停在空中的幾種情況,所以也需要根據(jù)情況給進(jìn)程配套設(shè)計(jì)不同的狀態(tài),調(diào)度的具體工作,就是想辦法讓進(jìn)程在這幾個(gè)狀態(tài)中來(lái)回遷移倒騰,最終營(yíng)造出CPU同時(shí)執(zhí)行多個(gè)進(jìn)程的假象。
進(jìn)程之下是線程,現(xiàn)在又搞出了協(xié)程和纖程,以后不知道還會(huì)什么程,不過(guò),目的只有一個(gè),更充分地利用CPU時(shí)間,而且都難以避免一個(gè)問(wèn)題,就是調(diào)度問(wèn)題。
調(diào)度本身不難,難就難在設(shè)計(jì)調(diào)度原則,誰(shuí)上誰(shuí)下,執(zhí)行多久,等待多久,都需要一一加以考慮,而且最難的地方在于,調(diào)度是沒(méi)有最優(yōu)解的,只有在指定原則條件下,設(shè)計(jì)出相當(dāng)不錯(cuò)的調(diào)度方案。
進(jìn)程除了競(jìng)爭(zhēng)CPU,還要競(jìng)爭(zhēng)資源,譬如兩個(gè)甚至更多的進(jìn)程可能都需要同時(shí)讀寫(xiě)同一個(gè)文件,我們熟悉的多對(duì)一的關(guān)系,會(huì)導(dǎo)致我們熟悉的競(jìng)態(tài)問(wèn)題,在CPU那導(dǎo)致了調(diào)度問(wèn)題,而到了資源這里,則會(huì)導(dǎo)致同步問(wèn)題和**鎖問(wèn)題。
同步問(wèn)題很簡(jiǎn)單,進(jìn)程既然要調(diào)度,那肯定沒(méi)辦法把活一口氣干完,譬如說(shuō)讀寫(xiě)某個(gè)文件,讀到一半被換下來(lái)了,下次再換上來(lái)的時(shí)候發(fā)現(xiàn),別的進(jìn)程也在讀寫(xiě)這個(gè)文件,內(nèi)容變了。
多線程有一個(gè)默契,就是前后環(huán)境要保持一致,你把我從CPU那換上換下我沒(méi)意見(jiàn),但你得保證我所處的環(huán)境是相同的,別像雍正那樣一覺(jué)醒來(lái)發(fā)現(xiàn)大清亡了,后面也就沒(méi)法跟著劇本走。那怎么保證一致性呢,這就是同步問(wèn)題,方法包括互斥鎖、信號(hào)量等等。
**鎖問(wèn)題聽(tīng)起感覺(jué)復(fù)雜一點(diǎn),書(shū)上花了不少筆墨但內(nèi)容還是不好懂。其實(shí)也不復(fù)雜,我們?cè)谛^(qū)門(mén)口喜聞樂(lè)見(jiàn)的堵車(chē)就是**鎖。小區(qū)門(mén)口只有一條車(chē)道,早高峰大家都得排著隊(duì)出去,這時(shí)如果外面有一輛車(chē)回來(lái),開(kāi)到門(mén)口又不肯避讓,那就堵車(chē)了,用**作系統(tǒng)的術(shù)語(yǔ)來(lái)說(shuō),就是**鎖了。
前面說(shuō),為了解決同步問(wèn)題,我們會(huì)采取互斥鎖等方法,簡(jiǎn)單來(lái)說(shuō),當(dāng)多個(gè)進(jìn)程都要使用同一項(xiàng)資源時(shí),只有當(dāng)前正在使用的進(jìn)程用完了,也就是術(shù)語(yǔ)所說(shuō)的資源釋放了,后面的進(jìn)程才可以接著用。這樣做的好處當(dāng)然是保證了一致性,但壞處則是導(dǎo)致了另一個(gè)問(wèn)題,就是**鎖問(wèn)題。
拿前面的小區(qū)出口比劃一下就清楚了。單車(chē)道當(dāng)然是互斥的,要么只進(jìn)要么只出,不可能一邊進(jìn)一邊出。如果兩頭的來(lái)車(chē)各占一半車(chē)道,結(jié)果當(dāng)然是想進(jìn)來(lái)的進(jìn)不來(lái),想出去的出不去,兩頭堵**,這就**鎖了。
那怎么解決**鎖問(wèn)題呢,大方向有兩種,一種是避免出現(xiàn)**鎖,從根本上解決這個(gè)問(wèn)題,不過(guò)難度較大。另一種則是想辦法對(duì)已經(jīng)發(fā)生的**鎖及時(shí)檢測(cè)發(fā)現(xiàn),第二進(jìn)行恢復(fù)。但是怎么才能及時(shí)發(fā)現(xiàn)**鎖呢?這又是一個(gè)**作系統(tǒng)方向需要研究的問(wèn)題。
關(guān)于作者:莫凡,網(wǎng)名木羊同學(xué)。娛樂(lè)向機(jī)器學(xué)習(xí)解說(shuō)選手,《機(jī)器學(xué)習(xí)算法的數(shù)學(xué)解析與Python實(shí)現(xiàn)》作者,前沿技術(shù)發(fā)展觀潮者,擅長(zhǎng)高冷技術(shù)的“白菜化”解說(shuō),微信**“睡前機(jī)器學(xué)習(xí)”,個(gè)人知乎號(hào)“木羊”。
延伸閱讀《現(xiàn)代**作系統(tǒng):原理與實(shí)現(xiàn)》
推薦語(yǔ):**作系統(tǒng)和系統(tǒng)安全領(lǐng)域國(guó)際知名學(xué)者、上海交通大學(xué)陳海波、夏虞斌領(lǐng)銜撰寫(xiě)。作者在復(fù)旦大學(xué)和上海交通大學(xué)十余年**作系統(tǒng)教學(xué)經(jīng)驗(yàn)的科學(xué)小編綜合來(lái)說(shuō)。由淺入深介紹現(xiàn)代**作系統(tǒng)經(jīng)典理論與方法,結(jié)合前沿研究與工業(yè)界實(shí)踐,面向真實(shí)場(chǎng)景與真實(shí)問(wèn)題。全新打造ChCore微內(nèi)核系列課程實(shí)驗(yàn),建立對(duì)**作系統(tǒng)的第一手實(shí)踐經(jīng)驗(yàn)。
拓展知識(shí):
前沿拓展:
導(dǎo)讀:這一篇聊**作系統(tǒng)。最近大家對(duì)“卡脖子”討論很多,首當(dāng)其沖是芯片,緊接著就是**作系統(tǒng)。**作系統(tǒng),英文名Operating System,所以也常簡(jiǎn)稱“OS”。**作系統(tǒng)很重要,計(jì)算機(jī)系的學(xué)生都知道,**作系統(tǒng)作為一門(mén)核心專業(yè)課,和數(shù)據(jù)庫(kù)、編譯原理合稱“三座大山”。
作者:木羊同學(xué)
來(lái)源:華章科技
01 **作系統(tǒng)都學(xué)些什么
**作系統(tǒng)的重要性當(dāng)然不止于此。如果深入研究你就會(huì)發(fā)現(xiàn),**作系統(tǒng)在整個(gè)計(jì)算機(jī)學(xué)科體系中處于一個(gè)十分關(guān)鍵的位置。計(jì)算機(jī)科學(xué)的學(xué)科方向多如牛毛,但總的來(lái)說(shuō)可以分成兩塊,硬件一塊,軟件一塊,這兩大塊都喜歡各玩各的,中間說(shuō)是隔著次元壁也一點(diǎn)不夸張。
但都在一個(gè)體系內(nèi),總要想個(gè)辦法來(lái)打破次元壁呀,這個(gè)重要的工作由誰(shuí)來(lái)做呢?就是**作系統(tǒng)。所以從體系架構(gòu)的角度看,**心系統(tǒng)是處在所有硬件的最上層,和所有軟件的最下層,是一個(gè)“跨界”的角色。
**作系統(tǒng)很重要,那作為一門(mén)學(xué)科,難不難學(xué)呢?大家的態(tài)度走兩個(gè)極端,一邊的人覺(jué)得**作系統(tǒng)有什么可學(xué)的,不就是點(diǎn)鼠標(biāo)劃玻璃,太簡(jiǎn)單連小學(xué)的計(jì)算機(jī)課都不一定認(rèn)真教,大學(xué)還專門(mén)設(shè)了專業(yè)課太夸張了。另一邊的人又覺(jué)得**作系統(tǒng)太難,**作系統(tǒng)的玩家不是Linus這樣的業(yè)界大神,就是微軟、谷歌這樣的行業(yè)大佬,萌新小本只好瑟瑟發(fā)抖。
這些觀點(diǎn)對(duì)不對(duì)呢?
都有一些理解上的偏差。我們平時(shí)常說(shuō)的“安裝**作系統(tǒng)”,這里的“**作系統(tǒng)”,準(zhǔn)確來(lái)說(shuō),應(yīng)該叫“**作系統(tǒng)產(chǎn)品”,而**作系統(tǒng)這門(mén)課,主要內(nèi)容講的是**作系統(tǒng)的內(nèi)核原理。
**作系統(tǒng)產(chǎn)品和**作系統(tǒng)內(nèi)核二者的關(guān)系,有一點(diǎn)像計(jì)算機(jī)和CPU,沒(méi)有它不行,光有它也不行。一款**作系統(tǒng)產(chǎn)品,第一肯定得有**作系統(tǒng)內(nèi)核,但是光有內(nèi)核是沒(méi)法使用的,還得加上配套的周邊功能。
雖然叫“周邊配套”,但絕不是可有可無(wú)的意思,大部分我們所熟識(shí)**作系統(tǒng)功能,實(shí)際上都是屬于“周邊配套”,譬如說(shuō)我們最最最熟悉的“桌面”,放著漂亮的壁紙,擺滿各色各樣的圖標(biāo),是**作系統(tǒng)主要的用戶交互界面,術(shù)語(yǔ)稱為圖形用戶界面(Graphical User Interface,簡(jiǎn)稱GUI)。
前面感覺(jué)自己“精通**作系統(tǒng)”的那位同學(xué),其實(shí)精通的只是GUI的使用,而且很抱歉,GUI不在**作系統(tǒng)內(nèi)核里面。
不過(guò),話說(shuō)回來(lái),雖然專門(mén)有“**作系統(tǒng)內(nèi)核”這樣的術(shù)語(yǔ),但并不意味著所謂的“內(nèi)核”與“周邊”之間,天然就存在一條清晰的界限。在**作系統(tǒng)里面,一直存在著宏內(nèi)核和微內(nèi)核兩條路線的爭(zhēng)論,爭(zhēng)論的焦點(diǎn),正是什么該劃入“內(nèi)核”,什么又該算作周邊。
微內(nèi)核的主張,顧名思義,就是最小化內(nèi)核所需要提供的服務(wù),只負(fù)責(zé)最基本的功能,把應(yīng)用服務(wù)、驅(qū)動(dòng)、GUI,甚至一些感覺(jué)上也挺基本的功能,譬如文件系統(tǒng)服務(wù),都統(tǒng)統(tǒng)趕出內(nèi)核。
這樣做的好處是靈活方便,像是要提供新服務(wù),那直接新增就可以了,不需要對(duì)內(nèi)核進(jìn)行額外的改動(dòng),但缺點(diǎn)也很突出,什么功能都趕出去了,真到用的時(shí)候還需要進(jìn)行內(nèi)核模式-用戶模式的切換,模式切換會(huì)增加額外的開(kāi)銷(xiāo),導(dǎo)致性能受損,因此就有人主張應(yīng)該把常用的功能都接納進(jìn)來(lái),這就是宏內(nèi)核。
Windows早前采用的就是微內(nèi)核架構(gòu),把GUI趕了出去,結(jié)果性能損失受不了,后來(lái)又重新請(qǐng)回來(lái),一直到現(xiàn)在,GUI仍然是Windows內(nèi)核的一部分。
02 **作系統(tǒng)的核心內(nèi)容
**作系統(tǒng)這門(mén)課主要研究的是**作系統(tǒng)內(nèi)核,這名字不太平易近人,容易給人“難學(xué)懂”的感覺(jué)。確實(shí),現(xiàn)在**作系統(tǒng)的功能越來(lái)越豐富,連帶著**作系統(tǒng)內(nèi)核也越來(lái)越復(fù)雜。有一本**作系統(tǒng)業(yè)內(nèi)很有名的書(shū),叫《Windows Internals》,講的是Windows**作系統(tǒng)的功能原理,從這本書(shū)就可以看出來(lái)**作系統(tǒng)的一個(gè)變化趨勢(shì)。
《Windows Internals》是跟著Windows推陳出新的,Windows不斷更新,這本書(shū)也不斷再版,一個(gè)肉眼可見(jiàn)的變化就是書(shū)越寫(xiě)越厚,現(xiàn)在最新版干脆把一本書(shū)分成了上下兩卷,內(nèi)容太多,光一塊磚頭已經(jīng)不夠裝了。
這還只是Windows,現(xiàn)在是移動(dòng)互聯(lián)網(wǎng)時(shí)代,還有**作系統(tǒng)還有一半多的江山被iOS和Android這哥倆占著,而且都以一年一個(gè)版本的速度迭代,要學(xué)的知識(shí)豈不是漫無(wú)邊際?
其實(shí)不用擔(dān)心,**作系統(tǒng)確實(shí)在迅速發(fā)展,但最最核心的還是那些老兄弟。**作系統(tǒng)有一本非常經(jīng)典的教材,只要你問(wèn)就一定會(huì)有人推薦,叫《Operating System Concept》,中文譯為《**作系統(tǒng)概念》。因?yàn)檫@本書(shū)的封面畫(huà)著恐龍,所以學(xué)界也稱為“恐龍書(shū)”。
恐龍書(shū)不但介紹**作系統(tǒng)知識(shí),還會(huì)引入“當(dāng)前主流**作系統(tǒng)”作為研究案例。當(dāng)然,恐龍書(shū)已經(jīng)從第1版發(fā)展到了第9版,書(shū)里的“當(dāng)前主流**作系統(tǒng)”也一換再換,默默地記錄著**作系統(tǒng)的變化發(fā)展。
不過(guò),我把幾個(gè)版本比較了一下,最新版知識(shí)點(diǎn)增加了不少,還補(bǔ)充了一些新的內(nèi)容,涵蓋了iOS、Android等移動(dòng)**作系統(tǒng),但主要的知識(shí)結(jié)構(gòu)并沒(méi)有大幅調(diào)整,核心的研究對(duì)象和問(wèn)題,仍然是早就登場(chǎng)的那幾個(gè)。
具體是哪幾個(gè)呢?就仨:進(jìn)程、內(nèi)存和存儲(chǔ)。**作系統(tǒng)最重要的功能就是“管理”,具體來(lái)說(shuō)是兩項(xiàng)工作,資源的分配和資源的調(diào)度,那管理的核心對(duì)象是哪些呢?就是這仨,分別對(duì)應(yīng)的硬件是CPU、內(nèi)存和硬盤(pán),想想就能知道,這仨同樣是計(jì)算機(jī)里的三個(gè)扛把子部件。
我們說(shuō)恐龍書(shū)經(jīng)典,其中一個(gè)地方就體現(xiàn)在對(duì)**作系統(tǒng)知識(shí)體系的劃分上面??铸垥?shū)當(dāng)然會(huì)重點(diǎn)照顧這三個(gè)核心對(duì)象,為它們一一設(shè)有單元,再加上必不可少的概論、大家現(xiàn)在都很關(guān)注的安全,以及前面提到的案例分析,就構(gòu)成了恐龍書(shū)最新第9版的六大知識(shí)板塊。
作為一名**作系統(tǒng)愛(ài)好者,我看過(guò)很多**作系統(tǒng)的書(shū),有偏重原理的,有偏重實(shí)例的,也會(huì)有其它新的偏重,譬如會(huì)為網(wǎng)絡(luò),硬件架構(gòu)、設(shè)備管理等等內(nèi)容設(shè)置**章節(jié),但無(wú)論哪本書(shū),進(jìn)程、內(nèi)存和存儲(chǔ)(也有稱為外存)始終是書(shū)里的三條主線??偠灾?,學(xué)**作系統(tǒng),第一都得緊緊抓住進(jìn)程、內(nèi)存和存儲(chǔ)學(xué)懂學(xué)通。
03 怎樣學(xué)**作系統(tǒng)
既然進(jìn)程、內(nèi)存和存儲(chǔ)是**作系統(tǒng)的三個(gè)核心對(duì)象,那具體應(yīng)該怎么學(xué)呢?一句話回答:帶著問(wèn)題學(xué)。這里的“帶著問(wèn)題學(xué)”,和我們平時(shí)常說(shuō)的有所不同,在**作系統(tǒng)里面,進(jìn)程、內(nèi)存和存儲(chǔ)都有各自需要重點(diǎn)關(guān)注的問(wèn)題。
就拿進(jìn)程來(lái)說(shuō),進(jìn)程是**作系統(tǒng)中相對(duì)比較抽象的概念,所以大多數(shù)**作系統(tǒng)的教材都會(huì)不吝筆墨,給進(jìn)程下一堆的定義,試圖只靠文字就解釋清楚什么是進(jìn)程。不過(guò)效果總不太好,大家不容易看懂,還容易看暈,畢竟“抽象”的意思就是說(shuō),你懂了馬上心領(lǐng)神會(huì),你不懂總感覺(jué)雞同鴨講。
我倒認(rèn)為沒(méi)必要在進(jìn)程的定義上作過(guò)多糾結(jié),關(guān)鍵是功用,開(kāi)始只需要記住一點(diǎn),進(jìn)程對(duì)應(yīng)的是CPU。計(jì)算機(jī)所謂的“計(jì)算”,指的就是CPU運(yùn)算,那運(yùn)算什么內(nèi)容呢?這就是進(jìn)程。
本來(lái)這個(gè)過(guò)程不算復(fù)雜,好像也沒(méi)什么問(wèn)題,但是后來(lái)人們搞出了“多進(jìn)程”,一個(gè)CPU能“同時(shí)”運(yùn)行多個(gè)進(jìn)程。但這個(gè)“同時(shí)”不是真正的同時(shí),用術(shù)語(yǔ)來(lái)說(shuō),是并發(fā)執(zhí)行而不是并行執(zhí)行,結(jié)果一下就復(fù)雜起來(lái),問(wèn)題也就隨之而來(lái)了。
進(jìn)程增多了,但CPU卻只有一個(gè),出現(xiàn)了多對(duì)一的競(jìng)態(tài)問(wèn)題,這就是一切問(wèn)題的起源。圍繞著競(jìng)態(tài)問(wèn)題,進(jìn)程接著又衍生出了許多問(wèn)題。
第一就是調(diào)度問(wèn)題。對(duì)**作系統(tǒng)來(lái)說(shuō),調(diào)度是個(gè)大問(wèn)題。書(shū)本肯定都會(huì)告訴你,進(jìn)程有很多個(gè)狀態(tài),有些還畫(huà)成了狀態(tài)遷移圖,各種線飛來(lái)飛去,看得眼花繚亂。感覺(jué)上很難,但我覺(jué)得,把握好了背后的邏輯,這些看似凌亂的知識(shí)點(diǎn)就是條理清晰地串在一起。
在這里,我們只需要****盯住競(jìng)態(tài)問(wèn)題,正是因?yàn)檫M(jìn)程和CPU不再是一一對(duì)應(yīng),所以需要調(diào)度,而所謂調(diào)度,就是雜技里的用兩只手玩五只球,總會(huì)區(qū)分出接回手里的、準(zhǔn)備拋出的和停在空中的幾種情況,所以也需要根據(jù)情況給進(jìn)程配套設(shè)計(jì)不同的狀態(tài),調(diào)度的具體工作,就是想辦法讓進(jìn)程在這幾個(gè)狀態(tài)中來(lái)回遷移倒騰,最終營(yíng)造出CPU同時(shí)執(zhí)行多個(gè)進(jìn)程的假象。
進(jìn)程之下是線程,現(xiàn)在又搞出了協(xié)程和纖程,以后不知道還會(huì)什么程,不過(guò),目的只有一個(gè),更充分地利用CPU時(shí)間,而且都難以避免一個(gè)問(wèn)題,就是調(diào)度問(wèn)題。
調(diào)度本身不難,難就難在設(shè)計(jì)調(diào)度原則,誰(shuí)上誰(shuí)下,執(zhí)行多久,等待多久,都需要一一加以考慮,而且最難的地方在于,調(diào)度是沒(méi)有最優(yōu)解的,只有在指定原則條件下,設(shè)計(jì)出相當(dāng)不錯(cuò)的調(diào)度方案。
進(jìn)程除了競(jìng)爭(zhēng)CPU,還要競(jìng)爭(zhēng)資源,譬如兩個(gè)甚至更多的進(jìn)程可能都需要同時(shí)讀寫(xiě)同一個(gè)文件,我們熟悉的多對(duì)一的關(guān)系,會(huì)導(dǎo)致我們熟悉的競(jìng)態(tài)問(wèn)題,在CPU那導(dǎo)致了調(diào)度問(wèn)題,而到了資源這里,則會(huì)導(dǎo)致同步問(wèn)題和**鎖問(wèn)題。
同步問(wèn)題很簡(jiǎn)單,進(jìn)程既然要調(diào)度,那肯定沒(méi)辦法把活一口氣干完,譬如說(shuō)讀寫(xiě)某個(gè)文件,讀到一半被換下來(lái)了,下次再換上來(lái)的時(shí)候發(fā)現(xiàn),別的進(jìn)程也在讀寫(xiě)這個(gè)文件,內(nèi)容變了。
多線程有一個(gè)默契,就是前后環(huán)境要保持一致,你把我從CPU那換上換下我沒(méi)意見(jiàn),但你得保證我所處的環(huán)境是相同的,別像雍正那樣一覺(jué)醒來(lái)發(fā)現(xiàn)大清亡了,后面也就沒(méi)法跟著劇本走。那怎么保證一致性呢,這就是同步問(wèn)題,方法包括互斥鎖、信號(hào)量等等。
**鎖問(wèn)題聽(tīng)起感覺(jué)復(fù)雜一點(diǎn),書(shū)上花了不少筆墨但內(nèi)容還是不好懂。其實(shí)也不復(fù)雜,我們?cè)谛^(qū)門(mén)口喜聞樂(lè)見(jiàn)的堵車(chē)就是**鎖。小區(qū)門(mén)口只有一條車(chē)道,早高峰大家都得排著隊(duì)出去,這時(shí)如果外面有一輛車(chē)回來(lái),開(kāi)到門(mén)口又不肯避讓,那就堵車(chē)了,用**作系統(tǒng)的術(shù)語(yǔ)來(lái)說(shuō),就是**鎖了。
前面說(shuō),為了解決同步問(wèn)題,我們會(huì)采取互斥鎖等方法,簡(jiǎn)單來(lái)說(shuō),當(dāng)多個(gè)進(jìn)程都要使用同一項(xiàng)資源時(shí),只有當(dāng)前正在使用的進(jìn)程用完了,也就是術(shù)語(yǔ)所說(shuō)的資源釋放了,后面的進(jìn)程才可以接著用。這樣做的好處當(dāng)然是保證了一致性,但壞處則是導(dǎo)致了另一個(gè)問(wèn)題,就是**鎖問(wèn)題。
拿前面的小區(qū)出口比劃一下就清楚了。單車(chē)道當(dāng)然是互斥的,要么只進(jìn)要么只出,不可能一邊進(jìn)一邊出。如果兩頭的來(lái)車(chē)各占一半車(chē)道,結(jié)果當(dāng)然是想進(jìn)來(lái)的進(jìn)不來(lái),想出去的出不去,兩頭堵**,這就**鎖了。
那怎么解決**鎖問(wèn)題呢,大方向有兩種,一種是避免出現(xiàn)**鎖,從根本上解決這個(gè)問(wèn)題,不過(guò)難度較大。另一種則是想辦法對(duì)已經(jīng)發(fā)生的**鎖及時(shí)檢測(cè)發(fā)現(xiàn),第二進(jìn)行恢復(fù)。但是怎么才能及時(shí)發(fā)現(xiàn)**鎖呢?這又是一個(gè)**作系統(tǒng)方向需要研究的問(wèn)題。
關(guān)于作者:莫凡,網(wǎng)名木羊同學(xué)。娛樂(lè)向機(jī)器學(xué)習(xí)解說(shuō)選手,《機(jī)器學(xué)習(xí)算法的數(shù)學(xué)解析與Python實(shí)現(xiàn)》作者,前沿技術(shù)發(fā)展觀潮者,擅長(zhǎng)高冷技術(shù)的“白菜化”解說(shuō),微信**“睡前機(jī)器學(xué)習(xí)”,個(gè)人知乎號(hào)“木羊”。
延伸閱讀《現(xiàn)代**作系統(tǒng):原理與實(shí)現(xiàn)》
推薦語(yǔ):**作系統(tǒng)和系統(tǒng)安全領(lǐng)域國(guó)際知名學(xué)者、上海交通大學(xué)陳海波、夏虞斌領(lǐng)銜撰寫(xiě)。作者在復(fù)旦大學(xué)和上海交通大學(xué)十余年**作系統(tǒng)教學(xué)經(jīng)驗(yàn)的科學(xué)小編綜合來(lái)說(shuō)。由淺入深介紹現(xiàn)代**作系統(tǒng)經(jīng)典理論與方法,結(jié)合前沿研究與工業(yè)界實(shí)踐,面向真實(shí)場(chǎng)景與真實(shí)問(wèn)題。全新打造ChCore微內(nèi)核系列課程實(shí)驗(yàn),建立對(duì)**作系統(tǒng)的第一手實(shí)踐經(jīng)驗(yàn)。
拓展知識(shí):
原創(chuàng)文章,作者:九賢生活小編,如若轉(zhuǎn)載,請(qǐng)注明出處:http://m.xiesong.cn/4170.html