??馮諾依曼體系結(jié)構(gòu)
文章目錄
馮諾依曼體系結(jié)構(gòu)
????認(rèn)識馮諾依曼體系結(jié)構(gòu)
??????硬件分類
??????各個硬件的簡單認(rèn)識
????????輸入輸出設(shè)備
????????中央處理器
????????存儲器
????關(guān)于內(nèi)存
????對馮諾依曼體系的理解
????操作系統(tǒng)
????操作系統(tǒng)概念
??????設(shè)計操作系統(tǒng)的目的
??????理解管理概念
??????管理工作
??????先描述,再組織
??????為什么要有操作系統(tǒng)
??????總結(jié)
????系統(tǒng)調(diào)用
??????理解系統(tǒng)調(diào)用
??????總結(jié)
????本文小結(jié)
前言:
??我們常見的計算機(jī),像筆記本,臺式機(jī)等,不常見的計算機(jī),像服務(wù)器,大部分都遵守馮諾依曼體系結(jié)構(gòu)。那馮諾依曼體系結(jié)構(gòu)究竟是什么呢?話不多說,開啟我們今天的話題!
??認(rèn)識馮諾依曼體系結(jié)構(gòu)
??硬件分類
??截止到目前為止,我們所認(rèn)識的計算機(jī)都是由一個個硬件組件組成。
- ?輸入單元:包括鍵盤、鼠標(biāo)、掃描儀等設(shè)備。
- ?輸出單元:顯示器,打印機(jī)等。
- ?中央處理單元:簡稱CPU。
|
|______ 運(yùn)算器:對數(shù)據(jù)進(jìn)行計算任務(wù)
|
|______ 控制器:對計算機(jī)硬件流程進(jìn)行一定的控制
關(guān)于馮諾依曼,必須 強(qiáng)調(diào) 的幾點(diǎn):
- ?不考慮緩存的情況下,這里的CPU只能對內(nèi)存進(jìn)行讀寫,不能訪問外設(shè)。
- ?外設(shè)要輸入輸出數(shù)據(jù),也只能從內(nèi)存寫入和讀取數(shù)據(jù)。
- ?也就是說,所有設(shè)備只能直接和內(nèi)存打交道。
注意: 它們都是獨(dú)立的個體, 各個部分必須用 總線 連接起來,總線分為 系統(tǒng)總線 和 IO總線。
??各個硬件的簡單認(rèn)識
?? 輸入輸出設(shè)備
??輸入輸出設(shè)備是指能夠把數(shù)據(jù)輸入到計算機(jī)或者把計算機(jī)處理的數(shù)據(jù)輸出給用戶的設(shè)備??梢哉f,它是計算機(jī)與外界溝通的橋梁,沒有輸入輸出設(shè)備,計算機(jī)就沒辦法接收發(fā)送數(shù)據(jù),更不能和用戶進(jìn)行交互。
?? 中央處理器
??中央處理器全稱Central Processing Unit,簡稱CPU,它由 負(fù)責(zé)執(zhí)行算數(shù)邏輯運(yùn)算 的 運(yùn)算器(ALU) 和 負(fù)責(zé)控制計算機(jī)運(yùn)行,協(xié)調(diào)其他部件工作 的 控制器(CU) 組成。CPU是計算機(jī)中最重要的硬件之一,它的性能決定了計算機(jī)整體性能。
?? 存儲器
??存儲器是 指內(nèi)存,而不是磁盤,具有 “掉電易失” 的特性,如果突然停電導(dǎo)致計算機(jī)不能正常工作,那么加載到內(nèi)存中的數(shù)據(jù)就很容易丟失了。而我們所謂的 磁盤,其實(shí) 也屬于輸入輸出設(shè)備的一種。
??關(guān)于內(nèi)存
??不知道你有沒有想過,我們直接讓CPU與輸入輸出設(shè)備進(jìn)行交互就好了啊,為什么還需要內(nèi)存這個 “中間商” 呢?
??其實(shí),在我們計算機(jī)當(dāng)中,存在著一種存儲金字塔模型:
??我們可以發(fā)現(xiàn):
- ?距離CPU越近的存儲單元,效率越高,造價貴,單體容量小。
- ?距離CPU越遠(yuǎn)的存儲單元,效率越低,造價便宜,單體容量大。
??輸入與輸出這些是設(shè)備,距離CPU有一定距離,而相 對CPU來說,這些設(shè)備的速度就顯得非常慢 了,而有一個原理叫做 木桶效應(yīng):
??一個團(tuán)隊的好壞,取決于最差的那個人,而計算機(jī)也是如此,整個計算機(jī)就像一個團(tuán)隊一樣,而這些外設(shè)對于CPU來說非常的慢,所以這些外設(shè) 必定會拖慢CPU的速度。
??于是人類就在計算機(jī)外設(shè)與CPU之間,加上了 內(nèi)存 ,讓外設(shè)直接訪問到內(nèi)存,CPU也只需要從內(nèi)存中拿數(shù)據(jù)即可。
??但是這似乎看起來更加拖慢速度了?原本我CPU只需要與外設(shè)打交道,現(xiàn)在還多了個 “中間商” 在那賺差價,不就變得更慢了嗎?
??其實(shí),在我們內(nèi)存中,存在著兩個機(jī)制:預(yù)先加載 和 緩存 技術(shù):
- ?預(yù)先加載:指在用戶調(diào)度之前,預(yù)先將數(shù)據(jù)加載到內(nèi)存或緩存 中,這樣可以減少用戶的等待時間。
- ?緩存:將 數(shù)據(jù)存儲在臨時存儲器 中,以便于快速訪問。
??這就好比,在工作當(dāng)中有一個急性子和一個慢性子的人合作,而事情往往會向著慢性子的方向發(fā)展,但是如果在來一個性子適中的人,既可以催促慢性子人工作,等到慢性子的人匯聚一定工作結(jié)果,適中性子的人再將結(jié)果反饋給急性子的人,而其他閑的時候也可以和急性子的人一起干其他事情。
??而我們存儲金字塔越往塔尖就存儲設(shè)備就越貴,如果我們把內(nèi)存全部換為更加高效的寄存器,效率確實(shí)很高,但是我們 普通用戶消費(fèi)不起 啊,而最 適中且大眾能夠接受 的選擇就是 內(nèi)存!
??我們再看馮諾依曼體系結(jié)構(gòu):
??我們只看數(shù)據(jù)流動的信號,我們來思考一個問題:為什么我們前面說程序在運(yùn)行的時候,為什么要先把程序加載到內(nèi)存?
??我們要先知道,程序文件是存儲在磁盤當(dāng)中 的,而程序中的指令和數(shù)據(jù),是要被CPU拿來執(zhí)行的,磁盤屬于外設(shè),那么根據(jù)上圖,外設(shè)就 必須要先經(jīng)過內(nèi)存,才能被CPU讀取。
??結(jié)論:因?yàn)轳T諾依曼體系是這樣規(guī)定的,所以運(yùn)行程序要先加載到內(nèi)存!
??對馮諾依曼體系的理解
??對馮諾依曼體系的理解不能只停留在概念上,要深入到軟件數(shù)據(jù)流理解上,我們拿在QQ與別人聊天為例子:
??阿熊與遠(yuǎn)在異地的女朋友聯(lián)系,一個在安徽,一個在北京,并且兩人都在用電腦聊天,這時,阿熊給女朋友發(fā)了一句:“在嗎?”
??我的問題是:當(dāng)阿熊輸入 在嗎 這個字符串,整個數(shù)據(jù)的信息流動是怎樣的?
??首先,兩人都是用電腦在聯(lián)系,那么兩臺電腦就是兩臺馮諾依曼機(jī),而發(fā)送端輸入的內(nèi)容經(jīng)過馮諾依曼處理,由網(wǎng)卡經(jīng)網(wǎng)絡(luò)所送到對端,對端再由網(wǎng)卡接收,進(jìn)行解包等操作,最后到輸出設(shè)備。
??這個時候,阿熊的女朋友剛學(xué)完C語言,直接給阿熊發(fā)了一個關(guān)機(jī)程序,阿熊女朋友將程序拖入聊天框內(nèi),點(diǎn)擊發(fā)送。
??我的問題是,這個時候的數(shù)據(jù)傳輸又是怎樣的?
??其實(shí)只需要把上圖的接收端和發(fā)送端調(diào)換一下位置,程序要傳輸,需要先被加載到內(nèi)存中,在由輸出設(shè)備經(jīng)網(wǎng)卡傳輸,接收端也是由網(wǎng)卡接收到輸入設(shè)備,加載到內(nèi)存進(jìn)行解包等操作,最后到了阿熊的輸出設(shè)備。
??結(jié)論:數(shù)據(jù)在流動的時候必須從外設(shè)到達(dá)內(nèi)存,完全遵循馮諾依曼體系結(jié)構(gòu)。
??操作系統(tǒng)
??什么是操作系統(tǒng),對我們來說,這是一個很模糊的觀念,今天我們就來簡單認(rèn)識一下操作系統(tǒng)。
??我們先來了解一下計算機(jī)層狀結(jié)構(gòu)圖:
??操作系統(tǒng)概念
??任何計算機(jī)系統(tǒng)都包含一個基本的程序集合,稱為操作系統(tǒng)(OS)。籠統(tǒng)的理解,操作系統(tǒng)包括:
- ?內(nèi)核(進(jìn)程管理,內(nèi)存管理,文件管理,驅(qū)動管理)
- ?其他程序(例如函數(shù)庫,Shell程序等)
也可以這樣理解:操作系統(tǒng)是一個 軟硬件 資源 管理 的 軟件。
??設(shè)計操作系統(tǒng)的目的
- ?與硬件進(jìn)行交互,管理所有的軟硬件資源。
- ?為用戶程序(應(yīng)用程序)提供一個良好的執(zhí)行環(huán)境。
??在整個操作系統(tǒng)軟硬件架構(gòu)中,操作系統(tǒng)的 定位 是:一款純正的 “搞管理” 的軟件。
??理解管理概念
那么什么叫做 管理?
?世界上無非就三種人,一種是 做決策的人,一種是 做執(zhí)行的人,還有一種是 既做決策,也做執(zhí)行 的人。而我們的管理者其實(shí)就是做決策的人,而被管理者就是做執(zhí)行的人。
??那么對于我們操作系統(tǒng)來說,操作系統(tǒng)就是管理者,底層硬件部分就是被管理者。
??管理工作
??我們拿校園生活舉例:
??在大學(xué)期間,校長就是管理者,輔導(dǎo)員是保證管理決策的落地,而學(xué)生就是被管理者。在大學(xué)開學(xué)之前,校長沒見到你的面,但是卻知道你是我們學(xué)校的,于是將錄取通知書發(fā)給你。
??明明校長沒有和你見過面,但是卻能將錄取通知書發(fā)給你,說明管理者不需要對執(zhí)行者見面。
結(jié)論:管理者的本質(zhì),不在于對人做管理,而在于對人的信息做管理,管理者的核心工作是做決策,根據(jù)數(shù)據(jù)來做決策。
??這里有個疑問:為什么沒有見過面,但是校長卻知道我?
??其實(shí)是因?yàn)檩o導(dǎo)員保證了校長所做決策的落地,輔導(dǎo)員在你還沒上大學(xué)的時候,就已經(jīng)將你的信息從高中檔案里拿到了。而校長只需要從輔導(dǎo)員那里獲取信息即可。
??先描述,再組織
??但是,當(dāng)數(shù)據(jù)量很大的時候,我們的校長該如何管理呢?假如我們的校長曾經(jīng)是個教C語言的老師,校長C語言很好,于是,校長寫了一個 結(jié)構(gòu)體 來對每個學(xué)生的信息進(jìn)行管理:
struct Student{
char name[20];//姓名
char sex[5];//性別
int age;//年齡
char tele[20];//電話
//...
};
??每個學(xué)生的信息我們用結(jié)構(gòu)體對象來存儲,但是如何讓很多學(xué)生的數(shù)據(jù)關(guān)聯(lián)起來呢?這時校長想到了在學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)時學(xué)過的——鏈表,使用 鏈表將學(xué)生信息進(jìn)行關(guān)聯(lián) 起來:
struct Student{
char name[20];//姓名
char sex[5];//性別
int age;//年齡
char tele[20];//電話
//...
};
struct Student *next; //鏈?zhǔn)浇Y(jié)構(gòu)關(guān)聯(lián)起數(shù)據(jù)
??有了鏈?zhǔn)浇Y(jié)構(gòu)之后,校長就對著整個鏈表在那里翻看,校長一想,這不對啊,這樣的話還用鏈表存儲干嘛呢?直接讀不就完了?
??然后校長想到,寫一批 對鏈表的增刪改查 的代碼,這樣,當(dāng)學(xué)校需要一個會C++的同學(xué)參加比賽,那么校長直接遍歷這個鏈表,找到C++考的最好的同學(xué)去參加即可。
??這樣以來,校長所有的決策工作,就變?yōu)榱藢︽湵淼脑鰟h查改!
??其實(shí)這也就是對管理的一個 計算機(jī)建模 的過程,這個過程用六個字來總結(jié)就是:先描述再組織!
如何理解六個字?
??就拿上面的結(jié)構(gòu)體舉例,校長想要管理學(xué)生,需要知道這個學(xué)生的脾氣嗎?需要知道這個學(xué)生的愛好嗎?不需要,校長只需要知道學(xué)生的屬性信息即可,也就是將學(xué)生的屬性信息進(jìn)行具象化描述,再將這些屬性組織起來,就是Student結(jié)構(gòu)體,再以鏈表的形式進(jìn)行管理。
??所以,校長對學(xué)生的管理工作 轉(zhuǎn)化為了 對鏈表的增刪查改!
??那么將學(xué)生、輔導(dǎo)員、校長映射到操作系統(tǒng)中就是:
??為什么要有操作系統(tǒng)
??現(xiàn)在再來看這個問題,其實(shí)就是在問:為什么要有操作系統(tǒng)的管理?
- ?對下管理好軟硬件資源 ——手段
- ?對上提供一個良好的運(yùn)行環(huán)境 ——目的
??操作系統(tǒng)通過對下硬件的管理,對上給用戶提供 安全、穩(wěn)定、高效、功能豐富的執(zhí)行環(huán)境,讓用戶有一個好的體驗(yàn),這就是操作系統(tǒng)存在的意義。
??總結(jié)
- ?管理者和被管理者不需要見面。
- ?管理的本質(zhì)是 對被管理者的數(shù)據(jù)做管理。
- ?管理的方法是:先描述,再組織。
??系統(tǒng)調(diào)用
??理解系統(tǒng)調(diào)用
??我們前面所介紹的是從操作系統(tǒng)到硬件的過程,下面我們來談?wù)剰牟僮飨到y(tǒng)往上的部分:
??在操作系統(tǒng)往上的部分,是面向用戶的,但是為什么在用戶和操作系統(tǒng)之間卻存在一個叫做 系統(tǒng)調(diào)用 的東西?
??這時候舉一個例子來幫大家理解:
??大家在去銀行取錢的時候,你去到跟前臺說:“我要取100萬”,難道這個時候前臺就會乖乖的給你去金庫里拿錢了?天知道你是不是真的有100萬,而且就算有你該怎么證明?
??銀行不能保證錢是你的錢,不能保證你是好人還是壞人,而我們前面也說了,這里的銀行就是操作系統(tǒng),而我們前面也說了,操作系統(tǒng)的目的是為了給用戶 提供安全 高效的服務(wù)。這明顯很不安全。
??這就好比銀行直接讓來的用戶自己去金庫里取錢,是一件很危險的事情,操作系統(tǒng)也是如此。也就是說,操作系統(tǒng)直接交給用戶來操作是一件很危險的事情,于是在用戶和操作系統(tǒng)之間出現(xiàn)了——系統(tǒng)調(diào)用。
??系統(tǒng)調(diào)用就像是銀行的柜臺,如果你是來搶劫銀行的,那柜臺那頭的小姐姐會毫不猶豫的按下報警按鈕,防止金錢丟失。而系統(tǒng)調(diào)用正是如此。
??操作系統(tǒng)不知道你是好人壞人,干脆把大家都當(dāng)為壞人,你只能通過我給你的接口來進(jìn)行訪問,內(nèi)核數(shù)據(jù)結(jié)構(gòu)的屬性用戶不能直接更改,需要通過系統(tǒng)調(diào)用接口來間接更改。
??其實(shí)將其抽象化,可以把操作系統(tǒng)看為一個巨大的類,而類中public部分是給用戶展示的,用戶可以直接操作,而private部分用戶不可直接操作,可以調(diào)用接口來間接修改private內(nèi)部的屬性。文章來源:http://www.zghlxwxcb.cn/news/detail-769185.html
??總結(jié):
- ?從開發(fā)角度而言,操作系統(tǒng)對外會表現(xiàn)為一個整體,但是會暴露自己的部分接口,供上層開發(fā)使用,這部分由操作系統(tǒng)提供的接口,叫做——系統(tǒng)調(diào)用。
- ?系統(tǒng)調(diào)用在使用上,功能比較基礎(chǔ),對用戶的要求相對也比較高,所以,有些開發(fā)者會對部分的系統(tǒng)調(diào)用進(jìn)行封裝,從而形成了庫,有了庫,就很有利于更上層的用戶或開發(fā)者進(jìn)行二次開發(fā)。
????本文小結(jié)
- ?大部分計算機(jī)都是馮諾依曼體系結(jié)構(gòu)所組成的。
- ?馮諾依曼組成的各個部件都只與內(nèi)存進(jìn)行直接的交互.
- ?操作系統(tǒng)是一個對軟硬件進(jìn)行資源管理的軟件。
- ?操作系統(tǒng)向下進(jìn)行管理,方式是:先描述,再組織。向上提供安全、高效的服務(wù)。
- ?為了操作系統(tǒng)安全,需要有系統(tǒng)調(diào)用作為媒介讓用戶與操作系統(tǒng)進(jìn)行交互。
??如果這篇文章對你有幫助的話,還望三連支持一下博主~~文章來源地址http://www.zghlxwxcb.cn/news/detail-769185.html
到了這里,關(guān)于淺談馮諾依曼體系和操作系統(tǒng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!