<Linux>计算机体系结构和操作系统
計(jì)算機(jī)體系結(jié)構(gòu)(馮 ? 諾依曼體系)和操作系統(tǒng)(Operator System)
文章目錄
- 計(jì)算機(jī)體系結(jié)構(gòu)(馮 ? 諾依曼體系)和操作系統(tǒng)(Operator System)
- 一、馮 ? 諾依曼體系結(jié)構(gòu)
- 1.存儲器(內(nèi)存)
- 2.運(yùn)算器和控制器(CPU)
- 3.輸入設(shè)備和輸出設(shè)備(I/O設(shè)備)
- 輸入設(shè)備
- 輸出設(shè)備
- 4.擴(kuò)展
- 二、數(shù)據(jù)流動
- 1.單機(jī)
- 2.跨機(jī)
- 三、操作系統(tǒng)OS
- 操作系統(tǒng)概念
- 設(shè)計(jì)OS的目的
- 如何理解管理
- OS的管理結(jié)構(gòu)
- 四、系統(tǒng)調(diào)用與用戶操作接口
- 1.系統(tǒng)調(diào)用接口
- 2.用戶操作接口
一、馮 ? 諾依曼體系結(jié)構(gòu)
我們常見的計(jì)算機(jī),如筆記本。我們不常見的計(jì)算機(jī),如服務(wù)器,大部分都遵守馮諾依曼體系。
計(jì)算機(jī)包含輸入設(shè)備、輸出設(shè)備、存儲器、中央處理器(運(yùn)算器+控制器) 截至目前,我們所認(rèn)識的計(jì)算機(jī),都是有一個(gè)個(gè)的硬件組件組成的。磁盤屬于外存,具有永久性存儲能力。CPU作為計(jì)算機(jī)的核心,負(fù)責(zé)計(jì)算,速度最快,寄存器次之,內(nèi)存在次之,而外設(shè)是較慢的。
- 這里的體系結(jié)構(gòu)我們不考慮軟件,只研究硬件
其中:
輸入設(shè)備:鍵盤、磁盤、網(wǎng)卡、鼠標(biāo)、攝像頭、話筒等
- 計(jì)算機(jī)的本質(zhì)是計(jì)算數(shù)據(jù),要計(jì)算數(shù)據(jù)第一步是想辦法把數(shù)據(jù)交給計(jì)算機(jī),需要有對應(yīng)的設(shè)備來采集相應(yīng)的數(shù)據(jù),這就需要使用輸入設(shè)備。
輸出設(shè)備:顯示器、磁盤、網(wǎng)卡、聲卡、音箱、打印機(jī)等
- 計(jì)算機(jī)的作用是服務(wù)用戶,計(jì)算完數(shù)據(jù)后需要將數(shù)據(jù)輸出給用戶,這就需要輸出設(shè)備
存儲器:內(nèi)存
CPU:運(yùn)算器、控制器
- 計(jì)算機(jī)的本質(zhì)工作是計(jì)算,CPU就是用來計(jì)算的,這是必不可少的。比如我們今天買了一部手機(jī),這個(gè)手機(jī)沒有芯片,那也只能當(dāng)作移動硬盤來用。
- 注意:同種設(shè)備可能即使輸入設(shè)備,也是輸出設(shè)備如磁盤、網(wǎng)卡等
- 內(nèi)存需要從磁盤中讀取數(shù)據(jù)(為什么不是CPU讀取下面會講),這時(shí)它是輸入設(shè)備,CPU處理好的數(shù)據(jù)需要經(jīng)由內(nèi)存放入磁盤,這里它就是輸出設(shè)備。
- 我們在聊天軟件如微信、QQ聊天時(shí),別人將信息通過網(wǎng)卡傳給我們,這時(shí)本地的網(wǎng)卡對于我們就是輸入設(shè)備,我們將信息通過本地的網(wǎng)卡傳給別人,此時(shí)本地的網(wǎng)卡就是輸出設(shè)備。
- 存儲器不是磁盤,是內(nèi)存,之后會反復(fù)用到內(nèi)存
1.存儲器(內(nèi)存)
馮諾依曼體系結(jié)構(gòu)里的存儲器一般指的是內(nèi)存。我們都知道,寫好的軟件在編譯好后,要運(yùn)行,必須要先加載到內(nèi)存,但是為什么要先加載到內(nèi)存呢?
因?yàn)镃PU在和存儲器的交互中,要不斷讀取數(shù)據(jù),這些數(shù)據(jù)必須是在內(nèi)存里面,這里的CPU能且只能對內(nèi)存進(jìn)行讀寫,不能訪問外設(shè)(輸入或輸出設(shè)備),但是你編譯好的.exe程序是文件,而這個(gè)文件在編譯好后是在磁盤這個(gè)外設(shè)上的,所以cpu會要求你把程序加載到內(nèi)存,從而實(shí)現(xiàn)交互。而這個(gè)操作是操作系統(tǒng)幫你完成的,會自動加載到內(nèi)存上(預(yù)加載)。CPU不和外設(shè)直接打交道,和內(nèi)存直接打交道。外設(shè)(輸入或輸出設(shè)備)要輸入或者輸出數(shù)據(jù),也只能寫入內(nèi)存或者從內(nèi)存中讀取。所有外設(shè)有數(shù)據(jù)需要載入,只能載入到內(nèi)存中,內(nèi)存寫出也一定是寫到外設(shè)中。簡單來說,就**是所有設(shè)備都只能直接和內(nèi)存打交道,提高整機(jī)效率。**
- 總結(jié):所以程序的運(yùn)行必須要加載到內(nèi)存,CPU執(zhí)行的代碼訪問數(shù)據(jù),只能從內(nèi)存中讀取(這也是體系結(jié)構(gòu)規(guī)定的)。
在這里大多數(shù)人還有一個(gè)問題就是,先將輸入設(shè)備的數(shù)據(jù)交給內(nèi)存,再由內(nèi)存將數(shù)據(jù)交給CPU,這個(gè)過程真的比CPU直接從輸入設(shè)備獲取數(shù)據(jù)更快嗎?
說明這個(gè)問題之前,我們首先需要知道:內(nèi)存具有數(shù)據(jù)存儲的能力。雖然內(nèi)存的大小只有4G/8G,但是既然內(nèi)存有大小,那么它就有預(yù)裝數(shù)據(jù)的能力,而這就是提高該體系結(jié)構(gòu)效率的秘訣。
這里不得不說到的就是局部性原理:根據(jù)統(tǒng)計(jì)學(xué)原理,當(dāng)一個(gè)數(shù)據(jù)正在被訪問時(shí),那么下一次有很大可能會訪問其周圍的數(shù)據(jù)。所以當(dāng)CPU需要獲取某一行數(shù)據(jù)時(shí),內(nèi)存可以將該行數(shù)據(jù)之后的數(shù)據(jù)一同加載進(jìn)來,而CPU處理數(shù)據(jù)和內(nèi)存加載數(shù)據(jù)是可以同時(shí)進(jìn)行的,這樣下次CPU就可以直接從內(nèi)存當(dāng)中獲取數(shù)據(jù)。
輸出數(shù)據(jù)的時(shí)候也一樣,CPU處理完數(shù)據(jù)后直接將數(shù)據(jù)放到內(nèi)存當(dāng)中,當(dāng)輸出設(shè)備需要時(shí)再在內(nèi)存當(dāng)中獲取即可,這也就有了我們平常所說的緩沖區(qū)的概念。例如,緩沖區(qū)滿了才將數(shù)據(jù)打印到屏幕上,使用fflush函數(shù)將緩沖區(qū)當(dāng)中的數(shù)據(jù)直接輸出之類的,都是將內(nèi)存當(dāng)中的數(shù)據(jù)直接拿到輸出設(shè)備當(dāng)中進(jìn)行顯示輸出。
按理說,計(jì)算機(jī)把要處理的數(shù)據(jù)通過輸入設(shè)備交給CPU處理,處理好后再通過輸出設(shè)備顯示結(jié)果,整個(gè)過程為何要有內(nèi)存呢?
下面將從兩個(gè)角度去解決這個(gè)問題:
一、技術(shù)角度:
CPU的內(nèi)部是有寄存器的,寄存器就是一些存儲單元,寄存器的速度是非常快的,而我們要清楚cpu的運(yùn)算速度 > 寄存器的速度 > L1 ~ L3Cache > 內(nèi)存 > 外設(shè)(磁盤)> 光盤磁帶,因此我們得知輸入輸出設(shè)備的速度相較于CPU是很慢的,而如若直接把數(shù)據(jù)通過輸入設(shè)備交給CPU處理,處理好后再通過輸出設(shè)備顯示結(jié)果,就會產(chǎn)生一個(gè)木桶效應(yīng):
因此得知,計(jì)算機(jī)體系的效率不是由cpu決定的(盡管cpu很快),而是由輸入輸出這兩個(gè)外設(shè)決定的,這就導(dǎo)致計(jì)算機(jī)的效率非常的差,所以不能只把外設(shè)和cpu對接起來,這樣的效率太低了。因此馮諾依曼就在輸入輸出和cpu之間添加了存儲器來改變這一現(xiàn)狀。
從數(shù)據(jù)角度看,外設(shè)不和CPU直接交互,而是和內(nèi)存交互,CPU也是如此。僅是添加存儲器這個(gè)媒介就能解決效率低的原因是如下:
1、從硬件上,存儲器的存在更好的適配了外設(shè)和CPU速度不均衡的特點(diǎn)。
2、因?yàn)榇鎯ζ鞯拇嬖?#xff0c;讓軟件的存在有了更大的生存空間和價(jià)值。
- **總結(jié):**內(nèi)存在我們看來,就是體系結(jié)構(gòu)的一個(gè)大的緩存,用于適配外設(shè)和CPU速度不均的問題!
二、成本角度
- 前面提到過,CPU具有寄存器,而寄存器也具有存儲數(shù)據(jù)的能力,為什么不用CPU的寄存器來充當(dāng)這個(gè)內(nèi)存呢,這樣就不再需要單獨(dú)添加內(nèi)存了。從技術(shù)上談是可以的,但是這就要考慮到成本了:寄存器的成本 >> 內(nèi)存 >> 磁盤(外設(shè))。如果用寄存器充當(dāng)內(nèi)存,光成本就要幾十w,真承擔(dān)不起。而計(jì)算機(jī)之所以能蔓延全球,主要是其具有便宜和有效的特點(diǎn)。因此使用內(nèi)存是最優(yōu)選,既適配了速度不均的問題,也經(jīng)濟(jì)實(shí)惠。
- **總結(jié):**使用內(nèi)存可以達(dá)到用較低的成本,來獲得較高的性能的特點(diǎn)。
2.運(yùn)算器和控制器(CPU)
運(yùn)算器:
計(jì)算機(jī)計(jì)算的種類有兩種:算數(shù)計(jì)算(+、-、*、/……) + 邏輯計(jì)算(&&邏輯與、||邏輯或……)
控制器:
控制器也是一個(gè)硬件,雖然外設(shè)和中央處理器在數(shù)據(jù)上沒有交互,但并不代表它倆就沒有交互。前面得知輸入設(shè)備會把數(shù)據(jù)預(yù)裝載到內(nèi)存,從何和cpu進(jìn)行交互,但是你怎么知道所有數(shù)據(jù)都被預(yù)裝載了呢,針對沒被預(yù)裝載的數(shù)據(jù),中央處理器就要和外設(shè)進(jìn)行交互協(xié)商,而這個(gè)操作就是由控制器完成的,從而將數(shù)據(jù)盡可能加載到內(nèi)存,或把數(shù)據(jù)從內(nèi)存加載到外設(shè)。
幾乎所有的硬件,只能被動的完成某種功能,不能主動的完成某種功能,一般都是要配合軟件完成的(OS操作系統(tǒng)+CPU)
這里的CPU只能被動接受別人的指令和別人的數(shù)據(jù),那么CPU必須先認(rèn)識別人的指令(每個(gè)CPU被制作都有自己的指令集),才能執(zhí)行別人的指令,起到計(jì)算別人數(shù)據(jù)的目的。
上面說到CPU的速度很快,而外設(shè)的速度很慢,那么CPU直接從外設(shè)拿數(shù)據(jù)效率就降低了,所以數(shù)據(jù)是從外設(shè)加載到內(nèi)存中的,然后CPU再從內(nèi)存中讀取數(shù)據(jù),CPU處理完的數(shù)據(jù)再返回給內(nèi)存(產(chǎn)生了緩存),數(shù)據(jù)再從內(nèi)存中加載到外設(shè),這大大提高的數(shù)據(jù)的處理。
所以CPU再讀取和寫入時(shí)候,在數(shù)據(jù)層面只和內(nèi)存打交道,為了整體效率。內(nèi)存從外設(shè)讀取和寫入數(shù)據(jù)的過程成為I/O過程(input/output)
3.輸入設(shè)備和輸出設(shè)備(I/O設(shè)備)
輸入設(shè)備
借助計(jì)算機(jī)的輸入設(shè)備,用戶能夠輕松地將數(shù)據(jù)或者指令傳遞給計(jì)算機(jī)。同時(shí),計(jì)算機(jī)中的 CPU 會接收用戶輸入的指令或數(shù)據(jù),并對其進(jìn)行處理、加工,最終將處理結(jié)果反饋給用戶。
下面給大家列舉了一些常見的輸入設(shè)備,如下表所示。
| 鍵盤 | 最常見的輸入設(shè)備之一,其包含有多個(gè)按鍵,每個(gè)按鍵上都標(biāo)有不同的數(shù)字、字母、字符等。 如今的鍵盤,可以通過 USB 或者藍(lán)牙設(shè)備連接到計(jì)算機(jī),用戶只需要按壓按鍵即可向計(jì)算機(jī)傳遞數(shù)據(jù)。 |
| 鼠標(biāo) | 一種手持輸入設(shè)備,通常有 2 個(gè)按鈕和一個(gè)滾輪組成。 借助鼠標(biāo),用戶可以控制計(jì)算機(jī)屏幕上光標(biāo)的移動,也可以選中某個(gè)應(yīng)用程序并對其做打開、刪除等操作。 |
| 掃描儀 | 用于掃描圖片或者文檔,并將掃描的內(nèi)容轉(zhuǎn)換為數(shù)字格式的數(shù)據(jù)傳遞給計(jì)算機(jī)。 |
| 攝像頭 | 可以連接到計(jì)算機(jī)的任何攝像頭,都可以稱為網(wǎng)絡(luò)攝像頭,筆記本上的內(nèi)嵌攝像頭也可歸為此類。 網(wǎng)絡(luò)攝像頭可以拍攝圖像或者錄制視頻,然后將其轉(zhuǎn)換為數(shù)字形式傳輸給計(jì)算機(jī)。 |
| 麥克風(fēng) | 麥克風(fēng)是用于向計(jì)算機(jī)中輸入聲音的輸入設(shè)備,它可以接收聲音產(chǎn)生的振動信息并將其轉(zhuǎn)換為音頻信息,必要時(shí)它還可以將音頻信息轉(zhuǎn)換為數(shù)字形式供計(jì)算機(jī)存儲。 |
| 數(shù)碼相機(jī) | 它可以捕捉圖像、視頻等信息,并以數(shù)字形式存儲在存儲卡中,用戶也可以將存儲的信息導(dǎo)入到計(jì)算機(jī)。 |
| 游戲桿/游戲方向盤 | 游戲桿的功能和鼠標(biāo)類似,是一種確定位置的輸入設(shè)備。和鼠標(biāo)不同,游戲桿是通過搖桿的移動來改變計(jì)算機(jī)屏幕上光標(biāo)的位置。 游戲方向盤常用作賽車游戲中的輸入設(shè)備,借助該設(shè)備,用戶可以在賽車游戲中控制賽車左轉(zhuǎn)或右轉(zhuǎn)。 |
| 觸摸屏/觸摸板 | 觸摸屏和觸摸板都可以看做是鼠標(biāo)的替代品,它們都是輸入設(shè)備。這 2 種輸入設(shè)備允許用戶通過手指控制計(jì)算機(jī)屏幕上光標(biāo)的移動,還附帶點(diǎn)擊、選中某個(gè)應(yīng)用程序等功能。 |
| 遙控器 | 遙控器允許用戶在不離開座位的情況也可以控制某臺設(shè)備。以電視遙控器為例,它可以調(diào)臺、增大或減小電視機(jī)的音量等。 |
| VR設(shè)備 | VR 是指由計(jì)算機(jī)生成的人工虛擬環(huán)境,用戶借助 VR 設(shè)備(例如 VR 耳機(jī)、VR 眼鏡等)即可與虛擬環(huán)境中的虛擬對象實(shí)現(xiàn)交互。 |
| 手勢識別裝置 | 此類輸入設(shè)備可以識別人的手勢,不同的手勢會被識別為不同的指令傳輸給計(jì)算機(jī)。 |
| 生物識別設(shè)備 | 生物識別主要指的是通過指紋、眼角膜、面部結(jié)構(gòu)等識別一個(gè)人的過程。 生物識別設(shè)備通常先掃描用戶的信息,然后和存儲在計(jì)算機(jī)(數(shù)據(jù)庫)中的數(shù)據(jù)比對,從而判定該用戶的身份是否符合要求。 |
| 光學(xué)字符閱讀器(OCR) | 該輸入設(shè)備可以掃描手寫或者打印的文本信息,并將掃描到的數(shù)據(jù)轉(zhuǎn)換為數(shù)字格式傳輸給計(jì)算機(jī)。 |
| 條形碼閱讀器 | 這是一種可讀取條形碼數(shù)據(jù)的輸入設(shè)備。條形碼閱讀器可以掃描條形碼表示的信息并傳輸給相連接的計(jì)算機(jī)。 |
| 讀卡器 | 讀卡器常用于讀取銀行卡,它可以將銀行卡包含的信息傳輸給連接的計(jì)算機(jī)。 |
除上表列舉的這些輸入設(shè)備外,還有一些輸入設(shè)備,例如 OMR 光標(biāo)閱讀器,數(shù)字化儀等,由于不太常見,這里不再做詳細(xì)的介紹,感興趣的讀者可自行查閱相關(guān)資料。
輸出設(shè)備
計(jì)算機(jī)的輸出設(shè)備用于向用戶顯示計(jì)算機(jī)對輸入數(shù)據(jù)的處理結(jié)果。
計(jì)算機(jī)可以用多種多樣的形式將處理結(jié)果展示給用戶,比如文本、圖像、音頻以及視頻等。
接下來給大家列舉了一些實(shí)際生活中常用的輸出設(shè)備,以及它們各自的特點(diǎn)。
顯示器
顯示器又稱屏幕,是實(shí)際生活中最常用的輸出設(shè)備之一。
顯示器用于向用戶顯示經(jīng)計(jì)算機(jī)處理后的數(shù)據(jù),且支持文本、圖像、音頻、視頻等多種顯示形式。
隨著科技的不斷進(jìn)步,根據(jù)內(nèi)部實(shí)現(xiàn)機(jī)制的不同,顯示器又可細(xì)分為 CRT顯示器(陰極射線管顯示器)、LCD 液晶顯示器、LED 顯示器以及等離子顯示器。
打印機(jī)
打印機(jī)的功能是將計(jì)算機(jī)的處理結(jié)果打印到紙張上,其顯示形式可以為文本、圖像等形式。
現(xiàn)今市面上的打印機(jī),根據(jù)工作原理的不同大體可分為 2 類,分別為擊打式打印機(jī)和非擊打式打印,每一類還有更細(xì)致的劃分,比如現(xiàn)在常用的噴墨式打印機(jī)、激光打印機(jī)都屬于非擊打式打印機(jī),而針式打印機(jī)則屬于擊打式打印機(jī)。
投影儀
投影儀也是一種輸出設(shè)備,它可以將計(jì)算機(jī)的處理結(jié)果以投影的方式顯示到大屏幕或者墻壁上。
鑒于投影儀在顯示計(jì)算機(jī)處理結(jié)果的同時(shí),還能將其放大顯示,因此該類輸出設(shè)備常常用于演示或者教學(xué)。
音箱
音箱也是一種輸出設(shè)備,它可以將計(jì)算機(jī)的處理結(jié)果以音頻的方式播放出來。
4.擴(kuò)展
我們經(jīng)常說CPU當(dāng)中有寄存器,實(shí)際上寄存器不僅在CPU中,在其它外設(shè)中也有寄存器。
如:當(dāng)我們敲擊鍵盤時(shí),鍵盤是先將獲取到的內(nèi)容存儲在寄存器當(dāng)中,然后通過寄存器將數(shù)據(jù)寫入內(nèi)存中。
在物理層面,各個(gè)硬件單元之間是通過總線連接的,外設(shè)與內(nèi)存之間的總線叫做IO總線,內(nèi)存與CPU之間的總線叫做系統(tǒng)總線。
在早些年的計(jì)算機(jī)中,因?yàn)樾酒芰Σ粡?qiáng),有時(shí)是之間將外設(shè)中的數(shù)據(jù)傳輸給CPU,CPU計(jì)算完后在交給內(nèi)存,在合適的時(shí)候由內(nèi)存拿出數(shù)據(jù)。現(xiàn)在不在使用這個(gè)技術(shù),而是在外設(shè)中使用DMA芯片,將外設(shè)的數(shù)據(jù)存入內(nèi)存,不在利用CPU。
在數(shù)據(jù)層面上,CPU不和外設(shè)交互,但有時(shí)候,有些控制信號需要二者交互。如:一些外設(shè)給CPU發(fā)送控制信號,請求幫助處理一些數(shù)據(jù)。
二、數(shù)據(jù)流動
我們已經(jīng)有了對馮諾依曼體系的理解,接下來我們就可以看一下,在硬件層面,單機(jī)和跨主機(jī)之間,數(shù)據(jù)流是如何流向的!
也就是研究,我們將我們的程序加載到內(nèi)存,然后執(zhí)行我們的代碼,最后在外設(shè)顯示器上打印,它的整個(gè)數(shù)據(jù)流在硬件上是如何走的。
該內(nèi)容難度不高,作為理解軟件的工具。因?yàn)檐浖菬o法脫離硬件的,當(dāng)我們理解了硬件的數(shù)據(jù)流向,軟件上的很多行為我們就可以嘗試去理解它了。
1.單機(jī)
我們以QQ音樂的啟動來了解單機(jī)中數(shù)據(jù)是如何流動的?
以在音樂播放器(網(wǎng)易云音樂)播放音樂為例:
首先,我們的客戶端軟件,先加載到內(nèi)存,然后由CPU執(zhí)行,接著我們就看到了網(wǎng)易云的界面,其次,我們點(diǎn)擊播放音樂,通過外設(shè)的網(wǎng)卡,拿到數(shù)據(jù),再將數(shù)據(jù)傳輸?shù)絻?nèi)存,經(jīng)CPU計(jì)算(此時(shí)的計(jì)算可以看作解析),計(jì)算后將計(jì)算結(jié)果返回到內(nèi)存,由內(nèi)存?zhèn)鞯酵庠O(shè),傳到計(jì)算機(jī)的音箱中播放出來。
2.跨機(jī)
假設(shè)你和你的朋友進(jìn)行qq聊天,如何解釋一個(gè)數(shù)據(jù)從你的輸入到輸出的整個(gè)數(shù)據(jù)流動過程呢?
要使用QQ,首先需要聯(lián)網(wǎng),而A和B的電腦都是馮諾依曼體系結(jié)構(gòu),在A向B發(fā)送消息的過程中,A電腦中的鍵盤充當(dāng)輸入設(shè)備、顯示器和網(wǎng)卡是輸出設(shè)備。B電腦中的網(wǎng)卡充當(dāng)輸入設(shè)備、顯示器充是輸出設(shè)備。
因?yàn)槟愫湍闩笥训挠?jì)算機(jī)都是馮諾依曼體系,所以你們通信的本質(zhì)就是從一個(gè)體系結(jié)構(gòu)到另一個(gè)體系結(jié)構(gòu),A在鍵盤上輸入數(shù)據(jù),在硬件上講,將數(shù)據(jù)輸入到內(nèi)存,在軟件上講,將數(shù)據(jù)輸入到QQ中。然后數(shù)據(jù)要經(jīng)過計(jì)算和加密,經(jīng)由CPU計(jì)算,將計(jì)算結(jié)果傳回內(nèi)存,由內(nèi)存?zhèn)鞯酵庠O(shè),這里是傳到了兩個(gè)地方,一個(gè)是A自己的顯示器,因?yàn)樗斎氲南?#xff0c;他自己也要看到,另一個(gè)傳到了網(wǎng)卡,經(jīng)由網(wǎng)卡傳給B。B的計(jì)算機(jī)通過網(wǎng)卡拿到數(shù)據(jù),將數(shù)據(jù)傳給內(nèi)存,經(jīng)過CPU進(jìn)行解密操作,在傳回內(nèi)存,由內(nèi)存?zhèn)鞯酵庠O(shè)中的顯示器,使B看到該消息。
其中,將外設(shè)中的數(shù)據(jù)讀入內(nèi)存,將數(shù)據(jù)顯示在顯示器上和發(fā)送到網(wǎng)卡,都是由軟件(QQ)內(nèi)部自己來完成。
對馮諾依曼的理解,不能停留在概念上,要深入到對軟件數(shù)據(jù)流理解上,請解釋,從你登錄上qq開始和某位朋友聊天開始,數(shù)據(jù)的流動過程。 從你打開窗口,開始給他發(fā)消息,到他的到消息之后的數(shù)據(jù)流動過程。如果是在qq上發(fā)送文件呢?
- 發(fā)送消息 ——> 接受消息的數(shù)據(jù)流動:你的電腦鍵盤 —> 你的電腦內(nèi)存 —> 你的電腦的CPU (加密) —> 你的電腦網(wǎng)卡 —> 你朋友電腦的網(wǎng)卡 —> 你朋友電腦的內(nèi)存 —> 你朋友電腦的CPU (解密) —> 你朋友電腦的顯示器
- 發(fā)送文件 ——> 接受文件的數(shù)據(jù)流動:你的電腦鍵盤 —> 你的電腦內(nèi)存 —> 你的電腦的CPU (加密) —> 你的電腦網(wǎng)卡 —> 你朋友電腦的網(wǎng)卡 —> 你朋友電腦的內(nèi)存 —> 你朋友電腦的CPU (解密) —> 你朋友電腦的顯示器
三、操作系統(tǒng)OS
操作系統(tǒng)概念
任何計(jì)算機(jī)系統(tǒng)都包含一個(gè)基本的程序集合,稱為操作系統(tǒng)(OS)。籠統(tǒng)的理解,操作系統(tǒng)包括:
- 內(nèi)核(進(jìn)程管理,內(nèi)存管理,文件管理,驅(qū)動管理)
- 其他程序(例如函數(shù)庫, shell程序等等)
設(shè)計(jì)OS的目的
在整個(gè)計(jì)算機(jī)軟硬件架構(gòu)中,操作系統(tǒng)的定位是: 一款純正的“搞管理”的軟件。對下要管理好軟硬件資源,對上要給用戶提供一個(gè)良好的運(yùn)行環(huán)境。那操作系統(tǒng)究竟管理些什么呢?操作系統(tǒng)主要進(jìn)行以下四項(xiàng)管理:
-
內(nèi)存管理:內(nèi)存分配、內(nèi)存共享、內(nèi)存保護(hù)以及內(nèi)存擴(kuò)張等等。
-
驅(qū)動管理:對計(jì)算機(jī)設(shè)備驅(qū)動驅(qū)動程序的分類、更新、刪除等操作。
-
文件管理:文件存儲空間的管理、目錄管理、文件操作管理以及文件保護(hù)等等。
-
進(jìn)程管理:其工作主要是進(jìn)程的調(diào)度。
如何理解管理
下面我將從三個(gè)方面去理解管理:
一、管理者不需要與被管理者直接交互,依舊能夠很好的將被管理者管理起來
我們以學(xué)校為例,學(xué)校的校長并沒有直接與我們 (學(xué)生) 進(jìn)行交互,但是他仍然能夠很好的將我們管理起來。可能有的同學(xué)會說,我們并不是由校長來管理的,而是由輔導(dǎo)員來管理的。但是實(shí)際上,輔導(dǎo)員并不算一個(gè)管理者,他沒有重大事宜的決策權(quán)。
擁有對重大事宜的決策權(quán)的人才是管理者,雖然日常與我們進(jìn)行交互的入是輔導(dǎo)員,但是輔導(dǎo)員對我們并沒有決策權(quán),比如你是否能夠升級、是否能夠評優(yōu)評先、是否會別學(xué)校開除等等重大事項(xiàng)。
二、管理的本質(zhì)就是對數(shù)據(jù)的管理
先舉個(gè)例子,每個(gè)高校都有校長、輔導(dǎo)員、學(xué)生這三類人。這里面有人是做決策,有人是做執(zhí)行,當(dāng)然這也就有了管理者與被管理者的身份,而管理的本質(zhì):不是對被管理對象進(jìn)行直接管理,而是只要拿到被管理對象的所有的相關(guān)數(shù)據(jù),我們對數(shù)據(jù)的管理,就可以體現(xiàn)對人的管理!!而拿到相關(guān)數(shù)據(jù)的人就稱為執(zhí)行者,我們畫個(gè)簡圖示意:
而上述校長的角色就是操作系統(tǒng),輔導(dǎo)員就是驅(qū)動,學(xué)生就是硬件。對于計(jì)算機(jī)來說,各種硬件對應(yīng)的驅(qū)動就是所謂的執(zhí)行者,比如網(wǎng)卡有網(wǎng)卡驅(qū)動,磁盤有磁盤驅(qū)動;操作系統(tǒng)從這些驅(qū)動獲取硬件數(shù)據(jù),然后通過對硬件的數(shù)據(jù)進(jìn)行管理實(shí)現(xiàn)對硬件的管理。
- 綜上管理的本質(zhì)是對數(shù)據(jù)的管理,但是數(shù)據(jù)是有“多、少”的分別的。當(dāng)數(shù)據(jù)量很大時(shí)該如何管理呢,下面就來討論。
三、管理的理念就是先描述,再組織
- 對于校長來說,他想管理上千號學(xué)生本質(zhì)就是在管理數(shù)據(jù),但是數(shù)據(jù)量很大,可是每個(gè)學(xué)生的重復(fù)數(shù)據(jù)類型很多,比如每個(gè)學(xué)生都具有籍貫、姓名、各科成績……,我們先前在學(xué)習(xí)c語言的過程中,都知道有struct,它是用來描述對象的某種功能,如下:
- 這是站在C語言的視角用結(jié)構(gòu)體類型來定義變量,如果數(shù)據(jù)量過大,多大上萬個(gè),那么就要定義上萬個(gè)變量來記錄這些人的數(shù)據(jù),可這就會導(dǎo)致這么多變量毫無關(guān)聯(lián),同樣對于校長來說難道我要一個(gè)一個(gè)小本本的添加信息嗎,這不純純冤種。對于校長,他就想到可以創(chuàng)建一個(gè)鏈表結(jié)構(gòu),在結(jié)構(gòu)體內(nèi)部構(gòu)建前驅(qū)和后繼指針
- 通過這樣一個(gè)鏈表結(jié)構(gòu),每個(gè)節(jié)點(diǎn)存儲了各個(gè)學(xué)生的相關(guān)信息,而這些節(jié)點(diǎn)又是前后相串聯(lián)起來的,如圖示:
- 此時(shí)對學(xué)生的管理,就變成了對鏈表的增刪改查。校長要想派出一名學(xué)生去參加數(shù)學(xué)競賽,那么就遍歷此鏈表,并找出數(shù)學(xué)成績最好的那個(gè)……
由硬件各種數(shù)據(jù)抽象出來的結(jié)構(gòu)體
typedef struct device {int type; //設(shè)備類型int status; //設(shè)備狀態(tài)... //其他屬性信息struct device* next; //下一個(gè)設(shè)備的地址 }Dev;對各種設(shè)備的數(shù)據(jù)進(jìn)行管理轉(zhuǎn)變?yōu)榱藢︽湵磉M(jìn)行增刪查改
list dev_list; struct Dev disk_div; dev_list.insert(disk_div); struct Dev keyBoard_div; dev_list.insert(keyBoard_div); dev_list.erase(display_div); ...總結(jié):管理的本質(zhì)是對數(shù)據(jù)進(jìn)行管理,而對數(shù)據(jù)的管理就是對某種數(shù)據(jù)結(jié)構(gòu)的管理。管理的核心理念就是先描述、再組織。所以無論是C還是C++,都是來幫助我們描述對象的,而數(shù)據(jù)結(jié)構(gòu)是幫助我們把所有的對象組織管理起來的。
OS的管理結(jié)構(gòu)
先來看下銀行的體系結(jié)構(gòu):
- 銀行有自己的底層硬件,比如電腦,桌椅,倉庫,宿舍……。當(dāng)然上面也有一批人專門負(fù)責(zé)對應(yīng)硬件的管理,這一批人直接和硬件打交道。再往上就會有銀行的正式職工,可以用電腦,做桌椅,取錢,住宿舍……。因?yàn)檫@些職工的存在再往上就會產(chǎn)生銀行的業(yè)務(wù)。而這些職工也會有人管理,叫做行長,可以管理軟硬件。整個(gè)這一套就是銀行的體系結(jié)構(gòu)。
類似的操作系統(tǒng)也是差不多這個(gè)結(jié)構(gòu)。
- 計(jì)算機(jī)的底層有相應(yīng)的硬件和驅(qū)動程序,操作系統(tǒng)內(nèi)核對下可以管理好軟硬件,同樣也要管理進(jìn)程。并且可以對外提供服務(wù)。
- 操作系統(tǒng)并不相信任何的用戶,它不會將自己任何的數(shù)據(jù)結(jié)構(gòu)、代碼邏輯……直接暴露給用戶,為的是防止用戶惡意修改操作系統(tǒng),所以操作系統(tǒng)是通過系統(tǒng)調(diào)用的方式,對外提供接口服務(wù)!類似于銀行的工作人員提供一個(gè)一個(gè)小的窗口來給我們服務(wù)。Linux操作系統(tǒng)是用C語言寫的,這里所謂的“接口”,本質(zhì)就是C函數(shù)!。我們學(xué)習(xí)系統(tǒng)編程,本質(zhì)就是在學(xué)習(xí)這里的系統(tǒng)接口。
- 系統(tǒng)調(diào)用在使用上,功能比較基礎(chǔ),對用戶的要求相對也比較高,所以,有心的開發(fā)者可以對部分系統(tǒng)調(diào)用進(jìn)行適度封裝,從而形成庫(用戶操作接口),有了庫,就很有利于更上層用戶或者開發(fā)者進(jìn)行二次開發(fā)。
四、系統(tǒng)調(diào)用與用戶操作接口
1.系統(tǒng)調(diào)用接口
既然操作系統(tǒng)是管理各種軟硬件資源的軟件,那么我們能否通過操作系統(tǒng)直接對各種軟硬件進(jìn)行操作呢?比如磁盤、顯示器、磁盤驅(qū)動等設(shè)備;答案是不能,因?yàn)?strong>操作系統(tǒng)不相信任何用戶,操作系統(tǒng)不確定我們是否會對各種軟硬件進(jìn)行違法操作,比如刪除磁盤驅(qū)動、向磁盤中添加惡意數(shù)據(jù)等等。
但是操作系統(tǒng)又必須給上層用戶提供各種服務(wù),比如用戶訪問軟硬件的需求,比如從磁盤中讀取與寫入數(shù)據(jù)、向顯示器打印數(shù)據(jù)、通過網(wǎng)卡發(fā)送數(shù)據(jù)等等;針對上述情況,操作系統(tǒng)想了一個(gè)完美的方法:給用戶提供系統(tǒng)調(diào)用的接口,即當(dāng)用戶有訪問軟硬件的需求時(shí),直接調(diào)用操作系統(tǒng)提供的接口,然后由操作系統(tǒng)來幫助用戶完成對應(yīng)的工作;這樣即滿足了用戶的需求,又保護(hù)了軟硬件資源。
注:Linux 操作系統(tǒng)是托瓦茲大神于1991年使用C語言編寫的,而上述的各種系統(tǒng)調(diào)用接口又是由操作系統(tǒng)提供的,所以它們也是C式的接口,說白了就是 用C語言編寫的用于用戶調(diào)用的各種函數(shù)接口。
2.用戶操作接口
雖然操作系統(tǒng)為我們提供了各種系統(tǒng)調(diào)用接口讓我們來訪問軟硬件,但是這些接口在使用上功能比較基礎(chǔ),對用戶的要求也相對較高;于是人們在系統(tǒng)調(diào)用接口的基礎(chǔ)上開發(fā)出了用戶操作接口,比如 Linux 下的外殼程序 shell,各種函數(shù)庫 (C/C++等),windows 圖形化界面 (GUI),以及一些指令 (編譯好的可執(zhí)行程序) 等;
用戶通過這些操作接口進(jìn)行指令操作、開發(fā)操作以及管理操作等等;比如 Linux 下外殼程序 bash 提供的 ls,本質(zhì)上是調(diào)用系統(tǒng)接口,將磁盤中文件信息寫入到顯示器;touch 本質(zhì)是調(diào)用系統(tǒng)接口,在磁盤上創(chuàng)建文件;又比如 C語言的 scanf/printf 函數(shù),底層都是調(diào)用系統(tǒng)調(diào)用接口從鍵盤讀入數(shù)據(jù)/向顯示器上打印數(shù)據(jù)。
參考文章:
1、計(jì)算機(jī)軟硬件體系結(jié)構(gòu)
2、I/O設(shè)備(輸入設(shè)備和輸出設(shè)備)
總結(jié)
以上是生活随笔為你收集整理的<Linux>计算机体系结构和操作系统的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Dockerfile配置APM监控实现J
- 下一篇: Linux 服务器安装、配置和维护,一文