自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

從硬件到內(nèi)核,聊聊Linux系統(tǒng)的層次結(jié)構(gòu)

存儲(chǔ) 存儲(chǔ)設(shè)備
相信組裝過電腦的朋友都知道,我們的電腦最主要的幾個(gè)零件是:CPU、內(nèi)存、硬盤。但我們實(shí)際使用的時(shí)候,我們并不會(huì)主動(dòng)跟硬件打交道,而是和顯示器上顯示的操作系統(tǒng)打交道。

[[245667]]

相信組裝過電腦的朋友都知道,我們的電腦最主要的幾個(gè)零件是:CPU、內(nèi)存、硬盤。但我們實(shí)際使用的時(shí)候,我們并不會(huì)主動(dòng)跟硬件打交道,而是和顯示器上顯示的操作系統(tǒng)打交道。

那么問題來了,操作系統(tǒng)到底是怎么操作CPU、內(nèi)存、硬盤,讓其實(shí)現(xiàn)我們的功能的呢?操作系統(tǒng)與硬件之間的層級(jí)結(jié)構(gòu)是怎樣的?

這里的操作系統(tǒng),我們默認(rèn)說的是 Linux 操作系統(tǒng)。

了解過 Linux 的朋友會(huì)知道,其實(shí) Linux 系統(tǒng)的整個(gè)系統(tǒng)結(jié)構(gòu)如下面所示:

 

[[245668]]

 

它由內(nèi)核、系統(tǒng)調(diào)用、Shell、庫函數(shù)、應(yīng)用幾個(gè)部分構(gòu)成??粗遣皇怯行烆^轉(zhuǎn)向叻,沒關(guān)系。下面我將用極其簡單的口水文跟你介紹這幾個(gè)層級(jí),讓你看完之后印象深刻。

硬件的好基友:內(nèi)核

緊挨著硬件的是內(nèi)核,只有內(nèi)核才能操作硬件,一般我們也叫它內(nèi)核空間。

大學(xué)學(xué)過模擬電路和數(shù)字電路的同學(xué)都知道,計(jì)算機(jī)里任何的運(yùn)算到最后都是 1 0 數(shù)字,最終通過數(shù)字電路的來進(jìn)行運(yùn)算。例如我們要計(jì)算一個(gè)加法(4+5),對(duì)于我們來說就是簡單地一個(gè)運(yùn)算,但對(duì)于計(jì)算機(jī)來說,它并不知道 4 是什么,5 是什么,它只知道 1 和 0。并且我們一步就可以算出來的加法,計(jì)算機(jī)可能要經(jīng)過無數(shù)次運(yùn)算。一個(gè)簡單的加法尚且如此,更不用說更加復(fù)雜的算法運(yùn)算了。

舉上面這個(gè)例子主要是想表達(dá)硬件操作的復(fù)雜性,以及機(jī)器碼對(duì)于人類的不友好。所以為了對(duì)外屏蔽這些硬件細(xì)節(jié),就有了內(nèi)核空間這一層?xùn)|西。

內(nèi)核空間是一個(gè)虛擬的空間,其直接與硬件打交道。除了內(nèi)核空間,其他任何模塊都無法與硬件直接接觸,都需要通過內(nèi)核空間來操作硬件。所以說內(nèi)核空間是硬件的好基友,任何人要見它,都得經(jīng)過我。

這么一個(gè)設(shè)置也有一個(gè)好處,那就是保證了硬件的穩(wěn)定。試想一下,如果誰都能操作硬件。你弄一下,我弄一下,那么硬件估計(jì)就被弄?dú)埩恕?/p>

系統(tǒng)的基石:系統(tǒng)調(diào)用

挨著內(nèi)核兄弟的就是系統(tǒng)調(diào)用了,系統(tǒng)調(diào)用是操作系統(tǒng)的最小單位,任何操作都是由一個(gè)個(gè)系統(tǒng)調(diào)用組成的。這就像我們的漢字,無論這個(gè)字多復(fù)雜,它都是由點(diǎn)、橫、撇等組成。而系統(tǒng)調(diào)用之于操作系統(tǒng),就像是筆畫之于漢字。

集大成者:庫函數(shù)

如果說系統(tǒng)調(diào)用是筆畫,那么庫函數(shù)就是漢字的偏旁了。我們記漢字不可能記住它的所有筆畫,但我們能記住它由哪一些偏旁組成。因此,在 Linux 操作系統(tǒng)中也類似,設(shè)計(jì)者一些常用的操作組合起來,編程庫函數(shù)。

例如一個(gè)簡單的變量內(nèi)存分配操作,就需要?jiǎng)佑枚鄠€(gè)系統(tǒng)調(diào)用。如果沒有庫函數(shù),我們就得每次都去寫多次系統(tǒng)調(diào)用,但有了庫函數(shù)我們直接用 malloc() 庫函數(shù)就可以實(shí)現(xiàn)這個(gè)功能。

所以說,庫函數(shù)是集大成者,是系統(tǒng)調(diào)用的模塊化體現(xiàn)。

效率利器:Shell

我們除了使用庫函數(shù)去實(shí)現(xiàn)常用的操作之外,還可以使用 Shell 去實(shí)現(xiàn)。Shell 其實(shí)與庫函數(shù)的功能類似,他們都將一些常用的系統(tǒng)調(diào)用組裝起來,方便后續(xù)調(diào)用,可以說是模塊化的提現(xiàn)。

但是 Shell 與庫函數(shù)的定位還是略有不同的。庫函數(shù)更多時(shí)候是作為開發(fā) API 來使用,應(yīng)用通過調(diào)用 API 來實(shí)現(xiàn)各種功能。而 Shell 則更多是作為運(yùn)維的工具,能通過 Shell 腳本實(shí)現(xiàn)更多復(fù)雜的功能。

Shell 不僅僅是操作系統(tǒng)中的一個(gè)層次,它還指某種特定的語言規(guī)范,通過這種語言規(guī)范,我們可以組裝成 Shell 腳本,從而實(shí)現(xiàn)復(fù)雜的功能。牛逼的運(yùn)維都會(huì)使用 Shell 腳本來自動(dòng)化處理業(yè)務(wù),從而極大地提高工作效率。

友好使者:應(yīng)用

在操作系統(tǒng)最外層就是應(yīng)用了。在這一層我們可以調(diào)用 Shell、庫函數(shù)、系統(tǒng)調(diào)用這幾個(gè)層次的東西,從而方便我們的開發(fā)。我們常用的各種辦公軟件、圖像處理軟件都是這一層次的東西。

如果要選一個(gè)最人類最友好的使者,那么非應(yīng)用這個(gè)小兄弟不可了。經(jīng)歷了重重難關(guān),從硬件到內(nèi)核,再從內(nèi)核到庫函數(shù),最后到應(yīng)用這一層才能看得比較舒服,我們也才能夠更高效地使用。

總結(jié)

許多工作了十幾年的工程師很多時(shí)候都搞不清楚操作系統(tǒng)的層級(jí)關(guān)系,更甚者連內(nèi)核是什么都不知道。但樹義認(rèn)為,了解操作系統(tǒng)的層級(jí)結(jié)構(gòu)是很重要的知識(shí)點(diǎn),可以為我們深入理解應(yīng)用層面的知識(shí)打下基礎(chǔ)。

例如當(dāng)我們學(xué)到 Netty 的時(shí)候,我們會(huì)學(xué)到 Unix 網(wǎng)絡(luò) IO 模型,這時(shí)候就會(huì)涉及到數(shù)據(jù)是如何從文件或者網(wǎng)絡(luò)另一端讀取到本機(jī)的內(nèi)存中的。此時(shí),就會(huì)涉及到內(nèi)核空間以及用戶空間的知識(shí)。這時(shí)如果你不理解內(nèi)核是什么,那么自然也就無法理解 Unix 網(wǎng)絡(luò) IO 模型這個(gè)知識(shí)點(diǎn)了。

好了,今天的文章就到這里。如果你喜歡的話,麻煩轉(zhuǎn)發(fā)讓更多的朋友看到。一個(gè)人學(xué)習(xí)可以走得很快,但一群人可以走得更遠(yuǎn)。

責(zé)任編輯:武曉燕 來源: Java技術(shù)精選
相關(guān)推薦

2020-03-04 17:37:09

存儲(chǔ)系統(tǒng)硬件層

2021-09-28 07:12:09

Linux內(nèi)核入口

2020-11-05 09:59:24

Linux內(nèi)核信號(hào)量

2021-09-01 22:58:22

Canvas標(biāo)簽

2022-11-01 12:16:47

Nginx微服務(wù)編譯

2014-05-16 11:13:22

2009-09-28 10:09:09

Linux內(nèi)核Linux循環(huán)鏈表

2010-07-09 09:37:00

HART協(xié)議

2020-07-28 08:00:03

存儲(chǔ)數(shù)據(jù)技術(shù)

2011-11-28 10:10:24

手機(jī)手機(jī)設(shè)計(jì)

2009-12-29 10:24:51

Linux內(nèi)核循環(huán)鏈表

2009-12-09 14:03:18

2010-03-03 10:14:44

Linux vmwar

2009-09-25 13:33:08

2022-03-03 08:01:41

阻塞與非阻塞同步與異步Netty

2009-06-10 09:54:21

程序員層次

2011-01-14 14:49:05

2016-08-24 20:09:27

Linux數(shù)據(jù)結(jié)構(gòu)位數(shù)組

2011-01-14 16:23:46

Linux內(nèi)核

2010-07-06 10:19:15

SQL Server層
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)