目錄
1. 先談?dòng)布?/p>
1、初步理解馮諾依曼體系結(jié)構(gòu)
2、理解各個(gè)模塊之間的協(xié)作
2. 再談軟件
1、為什么要有操作系統(tǒng)
2、操作系統(tǒng)如何管理軟硬件資源
3. 再談進(jìn)程
1、什么是進(jìn)程
2、如何理解進(jìn)程
3、Linux 是如何管理進(jìn)程的
寫在最后:
1. 先談?dòng)布?/h2>
1、初步理解馮諾依曼體系結(jié)構(gòu)
我現(xiàn)在認(rèn)識(shí)的計(jì)算機(jī),都是由一個(gè)個(gè)硬件組成的,他們都遵循這這樣一個(gè)體系:
我們先來慢慢理解一下馮諾依曼體系結(jié)構(gòu):
1)存儲(chǔ)器指的是什么?
存儲(chǔ)器指的就是內(nèi)存,而我們的磁盤之類的硬件是輸入輸出設(shè)備。
2)輸入設(shè)備:鍵盤,攝像頭,話筒,磁盤,網(wǎng)卡...
3)輸出設(shè)備:顯示器,播放器硬件,磁盤,網(wǎng)卡...
輸入輸出設(shè)備也稱之為外部設(shè)備,也就是所謂的外設(shè)。
4)運(yùn)算器:對(duì)我們輸入的數(shù)據(jù)進(jìn)行計(jì)算任務(wù)(算術(shù)運(yùn)算,邏輯運(yùn)算)
5)控制器:對(duì)我們的計(jì)算硬件流程進(jìn)行一定的控制
我們把這兩個(gè)統(tǒng)稱為中央處理器,也就是 CPU 。
而這五大部件都是獨(dú)立的個(gè)體。想要他們系統(tǒng)的工作,
各個(gè)硬件單元就必須用 “線” 連接起來,我們稱這些線為總線:1. 系統(tǒng)總線,2. IO 總線 。
2、理解各個(gè)模塊之間的協(xié)作
還是這張圖:
先說結(jié)論:
先從輸入設(shè)備交到存儲(chǔ)器,中央處理器從存儲(chǔ)器中拿數(shù)據(jù),然后在內(nèi)部做計(jì)算,然后把計(jì)算的結(jié)果再寫回存儲(chǔ)器,再將數(shù)據(jù)刷新到輸入設(shè)備中。這個(gè)是馮諾依曼體系中,數(shù)據(jù)的流向。
我們來聊一聊存儲(chǔ):
一般來說,存儲(chǔ)容量越大,速度就會(huì)越慢。正是因?yàn)檫@樣,我們這個(gè)體系中才需要內(nèi)存作為緩沖,讓速度很慢的外設(shè)和速度很快的中央處理器能夠通過內(nèi)存更好的交互數(shù)據(jù)。
說了這么多模塊之間的協(xié)作,誰來實(shí)現(xiàn)他們的協(xié)作呢?操作系統(tǒng)。
2. 再談軟件
我們的電腦里面有著 qq,微信,瀏覽器等等,計(jì)算機(jī)怎么知道什么時(shí)候使用他們?所以我們就需要一個(gè)東西總體上將他們統(tǒng)籌起來。也就是操作系統(tǒng),
操作系統(tǒng)是一款進(jìn)行管理的軟件,他能對(duì)硬件和軟件進(jìn)行管理。
1、為什么要有操作系統(tǒng)
整個(gè)計(jì)算機(jī)是一個(gè)層狀的結(jié)構(gòu),來看這樣一個(gè)圖:
從下往上,先是硬件和驅(qū)動(dòng)程序,所有的硬件如果需要被軟件使用,都需要配上相應(yīng)的驅(qū)動(dòng)程序,我們可以把他們理解成直接跟硬件打交道的軟件,再往上就是操作系統(tǒng),而我們之后需要重點(diǎn)學(xué)習(xí)的就是進(jìn)程管理和文件管理相關(guān)的內(nèi)容。
回到原來的話題,我們?yōu)槭裁葱枰胁僮飨到y(tǒng)呢?
1)操作系統(tǒng)幫助用戶,管理好這些軟硬件資源。(手段)
2)為了給用戶提供一個(gè)良好(穩(wěn)定,高效,安全)的運(yùn)行環(huán)境。(目的)
操作系統(tǒng)里面有著各種各樣的數(shù)據(jù),但是,操作系統(tǒng)不信任所有用戶!所以操作系統(tǒng)為了保證自己數(shù)據(jù)安全,也為了保證給用戶提供服務(wù),操作系統(tǒng)就以接口的方式給用戶提供了調(diào)用的入口,來獲取操作系統(tǒng)內(nèi)部的資源。
那什么是接口呢?Linux 操作系統(tǒng)本質(zhì)上就是用 C語言 寫的,所以所謂的接口其實(shí)就是 C語言 實(shí)現(xiàn)的自己內(nèi)部的函數(shù)調(diào)用,我們稱之為系統(tǒng)調(diào)用。而,所有訪問操作系統(tǒng)的行為,都只能通過系統(tǒng)調(diào)用來完成。
所以看回那個(gè)圖,再往上就是 system call 系統(tǒng)調(diào)用接口。
接著就是用戶操作接口,有我們熟悉的 shell 外殼,然后是 lib,也就是庫,因?yàn)橄到y(tǒng)調(diào)用還是比較的復(fù)雜,有些語言之類的就會(huì)將其封裝成庫供我們使用。
任何一門語言,如果他們想要直接或間接的使用到硬件,就必須經(jīng)過操作系統(tǒng),而經(jīng)過操作系統(tǒng)就必須要使用系統(tǒng)調(diào)用接口。
那么如上就是計(jì)算機(jī)的整體層狀結(jié)構(gòu)了。
2、操作系統(tǒng)如何管理軟硬件資源
我們先來理解一下什么是管理:
1)管理者和被管理者是不需要見面的(就像在學(xué)校,我們作為學(xué)生一般也不會(huì)和校長見面,在公司,我們一般也不會(huì)和老板一直見面(小公司當(dāng)我沒說))
2)管理者在見不到被管理者的情況下如何做好管理呢?核心在于管理信息,只要管理者得到管理信息,就能在未來進(jìn)行管理決策 —— 管理的本質(zhì)是通過對(duì) ‘?dāng)?shù)據(jù)’ 的管理,達(dá)到對(duì)人的管理。
3)管理者和被管理者面都不見,該怎么拿到對(duì)應(yīng)的數(shù)據(jù)呢?(先補(bǔ)充一個(gè)概念:什么是管理者?我們一般將世界上所有的事情分成兩種,一種是決策,一種是執(zhí)行,舉個(gè)例子:今晚吃什么?吃面吧。這是決策;我現(xiàn)在去煮面。這是執(zhí)行。做決策其實(shí)就是管理者,做執(zhí)行的就是被管理者。不過在我們?nèi)粘I罾?,決策和執(zhí)行基本都是一體的。)管理者需要通過執(zhí)行者拿到對(duì)應(yīng)的數(shù)據(jù)。
所以!
操作系統(tǒng)在進(jìn)行管理的時(shí)候,需要見到軟硬件嗎?不需要,那操作系統(tǒng)該怎么拿到他們的狀態(tài)數(shù)據(jù)呢?以硬件為例,操作系統(tǒng)就是通過驅(qū)動(dòng)程序獲取數(shù)據(jù)。
操作系統(tǒng)管理任何東西,都一定是遵循著 “先描述,再組織” 的策略,使用結(jié)構(gòu)體對(duì)一個(gè)對(duì)象進(jìn)行描述,然后將它用一個(gè)數(shù)據(jù)結(jié)構(gòu)組織起來,這樣就能達(dá)到一種狀態(tài):在操作系統(tǒng)中,管理任何對(duì)象,最終都可以轉(zhuǎn)化成為對(duì)某種數(shù)據(jù)結(jié)構(gòu)的增刪查改。
結(jié)論:操作系統(tǒng)如何管理?
先描述,再組織。
3. 再談進(jìn)程
1、什么是進(jìn)程
一個(gè)已經(jīng)加載到內(nèi)存中的程序,叫做進(jìn)程。
我們到 Linux 下寫一個(gè)進(jìn)程瞧一瞧:
我們簡單寫一個(gè)程序,然后跑起來:
?
然后我們復(fù)制一個(gè) SSH 渠道,然后查看一下進(jìn)程:
ps axj | head -1 && ps axj | grep process
所以其實(shí),正在運(yùn)行的程序,就叫做進(jìn)程。????????
2、如何理解進(jìn)程
一個(gè)操作系統(tǒng),不僅僅只能運(yùn)行一個(gè)進(jìn)程,可以同時(shí)運(yùn)行多個(gè)進(jìn)程。
操作系統(tǒng)必須把進(jìn)程管理起來,那該如何管理進(jìn)程呢?先描述,再組織。
任何一個(gè)進(jìn)程,在加載到內(nèi)存的時(shí)候,在形成真正的進(jìn)程時(shí),操作系統(tǒng)需要先創(chuàng)建用于描述進(jìn)程的結(jié)構(gòu)體對(duì)象 —— PCB,process ctrl block —— 進(jìn)程控制塊。
問題來了,該這么描述進(jìn)程呢?用各種屬性的集合來描述一個(gè)東西。所以所謂的 PCB 其實(shí)就是進(jìn)程屬性的集合。所以 PCB 就是一個(gè)結(jié)構(gòu)體:
struct PCB {
? ? ? ? 進(jìn)程的編號(hào),
? ? ? ? 進(jìn)程的狀態(tài),
? ? ? ? 進(jìn)程的優(yōu)先級(jí),
? ? ? ? ...?...?
}
系統(tǒng)會(huì)根據(jù)進(jìn)程的 PCB 類型,為該進(jìn)程創(chuàng)建對(duì)應(yīng)的 PCB 對(duì)象。
那么什么是進(jìn)程,進(jìn)程就是 PCB 嗎?并不是,進(jìn)程其實(shí)是:
進(jìn)程 = 內(nèi)核 PCB 數(shù)據(jù)結(jié)構(gòu)對(duì)象 + 對(duì)應(yīng)程序的代碼和數(shù)據(jù)
而進(jìn)程的 PCB ,當(dāng)然就包含描述進(jìn)程的所有屬性。那這樣子,操作系統(tǒng)進(jìn)行管理的就不是你的代碼和數(shù)據(jù),他只需要管理這個(gè)進(jìn)程 PCB 即可。這樣子,操作系統(tǒng)對(duì)進(jìn)程的所有管理操作就都變成了對(duì) PCB 這樣一個(gè)數(shù)據(jù)結(jié)構(gòu)的增刪查改。
3、Linux 是如何管理進(jìn)程的
前面我們理解了進(jìn)程是什么樣的,那 Linux 操作系統(tǒng)具體又是如何組織管理進(jìn)程的呢?
Linux 操作系統(tǒng)下的 PCB 是:task_struct(進(jìn)程其實(shí)也有人稱其為任務(wù)),在 Linux 內(nèi)核中采取的是基本的雙鏈表的形式來組織進(jìn)程 task_struct 。?
至于 task_struct 究竟是什么樣的,那就,欲知后事如何,且聽下回分解~
寫在最后:
以上就是本篇文章的內(nèi)容了,感謝你的閱讀。
如果感到有所收獲的話可以給博主點(diǎn)一個(gè)贊哦。文章來源:http://www.zghlxwxcb.cn/news/detail-635932.html
如果文章內(nèi)容有遺漏或者錯(cuò)誤的地方歡迎私信博主或者在評(píng)論區(qū)指出~文章來源地址http://www.zghlxwxcb.cn/news/detail-635932.html
到了這里,關(guān)于馮諾依曼體系結(jié)構(gòu)與進(jìn)程概念理解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!