目錄
馮諾依曼體系結構
操作系統是干什么的?
理解操作系統中的管理
對OS(操作系統)宏觀、整體的分析
總結
結語
馮諾依曼體系結構
首先我們來看這樣一張圖,這就是大名鼎鼎的馮諾依曼體系
在日常生活中,所有的計算機都是遵循馮諾依曼體系結構的
其中這里面有很多都是我們日常生活中耳熟能詳的
比如輸入設備:鍵盤,麥克風攝像頭等等,輸出設備:顯示器,聲卡,網卡等等
還有像CPU和存儲器(其實就是內存),這些我們在日常生活中都是很常見的
同時,我們的數據也必須是在這個體系中流動的,比如你要敲鍵盤,然后數據要在顯示器中顯示出來,而數據流動的本質就是復制,所以這就要求馮諾依曼體系中的每一個結構都有一定的存儲能力:存儲器不必多說,CPU中有寄存器等等
但是,為什么要有存儲器呢?直接輸入設備鏈接CPU鏈接輸出設備不就好了嗎?
這時我們就需要引入一個概念了,叫做木桶效應,也就是說,計算機整體的效率是由最慢的那個決定的
而我們效率的主要矛盾是什么?CPU的計算速度非常快,這肯定不是主要矛盾,所以最關鍵的就是數據流動的速度,也就是數據復制的速度
同樣的,我們的CPU很快,但是輸入和輸出設備非常慢,所以導致我們的整體效率就被拖垮了,這也就是為什么我們需要一個內存作為中間橋梁的原因
因為內存中可以預先加載大量數據,CPU不必等數據全部從輸入設備中來了才去計算,只需要從內存中讀取即可,甚至還能在輸入設備傳輸數據給內存的同時,CPU直接計算好順帶將數據返回給內存順便給輸出設備,這樣我們的效率就提升了好幾個量級
而同時,馮諾依曼體系結構規定:
CPU之和內存打交道,不和外設打交道
外設的數據只會交給內存,然后再交給CPU處理,最后再給回內存
所以,我們以前學習的時候,可能很疑惑,為什么代碼一定要先加載到內存中才能跑起來
現在我們明白了,這時馮諾依曼體系結構要求這么干的,而我們的程序在沒有跑起來之前,被放在了磁盤,也就是外設,只有加載到內存里面了,才能交給CPU然后跑起來
最后我們來說一下,為什么馮諾依曼體系結構那么偉大
大家看到這里其實還是比較無感的,認為這就是一個普通的知識點,而這時我們又需要引入一個概念了,叫做存儲金字塔:
我們因為需要提升電腦的效率,所以有了存儲器
如果你是一個土豪,你當然可以直接用各種寄存器充當內存只為追求極致的效率
但是這樣的電腦,可能就需要成百上千萬,根本不是老百姓消費得起的
而內存,沒那么貴,但是卻能夠給我們老百姓提供一臺效率相對不錯的電腦,而老百姓買得起了,才會有那么多的網民,才能養活這么多的互聯網公司,才有了如今的互聯網時代,這也就是為什么說馮諾依曼體系結構是偉大的
最后舉一個例子來演示一下馮諾依曼體系現實中的樣子:
比如有兩個人此時在wechat上面想聊天,那么左邊的人,就需要通過鍵盤(輸入設備)輸入消息,然后消息加載到內存,通過CPU執行操作(比如說加密),最后傳輸給網卡(輸出設備),中間網卡之間消息互傳的部分,比如說tcp/ip這里就不講了,最后消息就給到了右邊的人
右邊的人拿網卡(這時是輸入設備)接收到了消息,然后消息加載到內存,交給CPU操作(比如說解密),最后給到右邊的人的顯示器(輸出設備)
至此,兩個人之間就能夠互傳消息了
操作系統是干什么的?
操作系統的作用就是:對系統中的軟硬件資源進行管理
我們來舉個例子(這張圖并不全,這里只講解硬件部分):
外設,是有很多種類的,還有不同的廠商,都是完全不一樣的,所以我們的操作系統是不能直接對硬件進行管理的
比如說:市面上有很多游戲,現在廠商來了,說你要玩我這個游戲,你就自己去找資源,自己找地方買吧,這個時候,我們甚至可能買到盜版的,而這個過程是一個非常不好的體驗
而這時來了一個steam,他把游戲全部都管理起來,就對玩家說,要玩?來我這里買,里面的付款啊,下載安裝啊等等程序我都幫你處理好了,然后只給你提供對應的按鈕,你點擊就可以付款下載安裝了
而steam這個角色在我們今天這個情景里,就是中間紫色的驅動程序
所有的驅動程序都是廠商自己寫的,然后當我們硬件連接系統的時候自動安裝(比如有些鼠標,我們剛接上電腦的時候沒反應,過一小會聽見“噔”一下,然后右下角說什么驅動程序已安裝完畢)
而驅動程序都是文件,所以我們的操作系統只需要將這些文件管理好,就能將硬件管理好了
而這里我們只是以硬件為例子,而其他軟件也是殊途同歸
由此我們就能大概了解,為什么說OS(操作系統)是對軟硬件進行資源管理的了
理解操作系統中的管理
你,是一個校長,今天你需要管理你學校里的學生
但是你并不需要直接和每一個學生都見面,你只需要得知每一個同學的數據,就能管理起來了
而你在當校長之前,你還是一個寫c語言的程序員,你就想到,可以用struct創建一個學生類型,只要將學生的數據填進去即可
如果要管理起來,就在struct stu里面加上一個指向同樣類型的指針,把每一個類型都連接起來,形成一個單鏈表
這樣,我們對學生的管理就變成了對這個單鏈表的增刪查改
比如今天我要找績點最高的同學,好好表揚一下,那就是在這個鏈表中找到績點那個數據最大的那個對應的同學,如果有個同學犯事了,要開除,那也就是把對應節點刪掉而已
所以,管理的本質就是,先描述,再組織
接下來我們再回到我們最開始講的OS與硬件和驅動程序之間的關系
我們的硬件自帶了驅動程序,而我們的OS就是校長,將所有的驅動程序當成對應的類,填充對應的數據,就能夠用數據結構管理起來,所以對硬件本身的管理,就轉變成了對特定數據結構的增刪查改,也就是先描述再組織
對OS(操作系統)宏觀、整體的分析
現在再來看這張圖,其實就親切很多了
OS,對下要管理好各種硬件,對上,要給用戶提供各種接口,管理好各種軟件
總的目的就是:為用戶提供一個良好、穩定、安全、高效的系統
對下我們前文講過了,就是通過對硬件提供的驅動程序,進行先描述再組織,從而將硬件的管理轉換成對特定數據結構的增刪查改,從而管理硬件
對上我們現在來講
首先,我們用戶是不能直接管理硬件的,也不能進入操作系統內部
試想一下,銀行會允許用戶直接走到倉庫里面存錢,然后自己輸入存了多少錢嗎?當然不會。同樣的,萬一用戶操作不當,把OS搞fei了,那不就完damn了嘛
所以對上,OS會提供很多的接口給用戶使用,也就是上圖中的(system call)系統調用接口
對應的例子可以是銀行前臺的各種窗口:
你把錢和信息給對應的工作人員,讓他們通過這些窗口幫你處理各種業務即可
但是銀行中可能還有一些老大爺老大媽,他們甚至都不認識字,所以銀行中就有比如客戶經理,你不會寫字我幫你寫,資料什么的我幫你處理好轉接,這也就是最上面的用戶操作接口
而在過去,我們所有人都是老大爺老大媽,因為用戶操作接口中有一個叫做 lib,也就是庫函數
我們之前敲代碼用的stdio.h就是這里面的東西
總結
馮諾依曼體系結構是計算機中約定俗成的一種結構,其中,輸入輸出設備都會直接也只會和內存進行聯系,而CPU也是只會和內存進行聯系,因為內存可以預先加載大量數據,從而提升計算機的整體效率(因為計算機效率的主要矛盾點就是數據的復制)
到了操作系統章節,操作系統可以用結構體將所要管理的東西描述起來,可能是驅動文件,可能是后面要講到的進程等等,接著再用對應的數據結構管理起來,將對對應對象的管理轉變成對對應數據結構的管理
而操作系統通過這些管理,最終達成對下管理好各種硬件,對上能為用戶提供各種調用接口并管理好各種軟件,最終為用戶提供一個良好、穩定、安全、高效的操作系統
結語
這篇文章到這里就結束啦!!~( ̄▽ ̄)~*
如果覺得對你有幫助的,可以多多關注一下喔