1.簡要描述
馮·諾依曼體系結構是現代計算機的基本設計思想,其核心理念是將計算機的硬件和軟件統一為一個整體,通過存儲程序的方式實現計算。馮·諾依曼體系結構的核心思想是通過存儲程序實現自動計算,其五大部件協同工作,奠定了現代計算機的基本框架。
2.基本組成部分
馮·諾依曼體系結構由以下五大部件組成:
輸入設備:用于將外部數據輸入到計算機中(如鍵盤、鼠標、攝像頭等)。
存儲器:用于存儲程序和數據(包括內存和外存)。
運算器:負責執行算術運算和邏輯運算。
控制器:負責協調和控制計算機各部件的工作,執行程序指令。
輸出設備:用于將計算結果輸出到外部(如顯示器、打印機、揚聲器等)。
3.示例說明
? ? ?但是換句話講,在Linux中一切皆是文件,發送消息的本質就是基于馮諾依曼結構,從我的鍵盤文件拷貝數據到對方的顯示器文件!!!!!!!
4. 內存與外存
-
內存:與CPU直接交互,速度快但容量有限。
-
外存:如硬盤、SSD等,容量大但速度較慢。
-
內存作為外存和CPU之間的緩存,確保數據能夠快速傳遞。
5. 性能瓶頸
馮·諾依曼體系結構的一個主要問題是“馮·諾依曼瓶頸”,即數據在存儲器和CPU之間的傳輸速度限制了整體性能。圖片中提到的“木桶理論”形象地說明了這一點:系統的性能由最慢的環節(如存儲器(內存)速度)決定。
6.操作系統
6.1 操作系統概述
操作系統是一種系統軟件,處于計算機硬件和其他軟件及用戶之間的中間層,它對軟硬件資源進行管理,為用戶和應用軟件提供良好的運行環境。
?從上圖可以看到,操作系統是分為俠義和廣義的,內核就是開發者所制造出來的(指的是祖師爺那幫人),外殼是給公司里的各種程序員使用的,諸位程序員在外殼上對操作系統進行開發,開發完成后形成廣義的操作系統,也就是大家都在用的安卓蘋果等等。
6.2 操作系統結構
用戶部分 :包含指令操作、開發操作和管理操作等,用戶通過這些操作與計算機系統進行交互。
用戶操作接口 :有 shell 外殼、lib 和部分指令,方便用戶進行各種操作,就像是用戶與操作系統之間的一座橋梁,讓用戶能夠按照自己的意圖操控計算機系統。
系統調用接口 :是操作系統提供給用戶程序調用的一組接口,用戶程序可以通過這些接口請求操作系統提供的各種服務,如文件操作、進程控制等,它是操作系統內核與應用程序之間的橋梁,使得應用程序能夠在受控的方式下訪問操作系統提供的功能和服務。
系統軟件部分 :包括內存管理、進程管理、文件管理和驅動管理等模塊。內存管理負責計算機內存的分配、回收等操作,確保各個進程能夠合理、高效地使用內存資源;進程管理則對進程的創建、撤銷、調度等進行控制和協調,使得多個進程能夠有序地運行,提高系統的并發執行能力;文件管理負責文件的存儲、讀取、寫入等操作,為用戶和應用程序提供方便的文件存儲和訪問服務;驅動管理則是對各類硬件設備的驅動程序進行管理和調度,使得硬件設備能夠正常工作并被操作系統及應用程序所使用。
驅動程序 :如網卡驅動、硬盤驅動和其他驅動,它們是操作系統與硬件設備之間的接口軟件,負責控制和管理特定的硬件設備,使得操作系統和應用程序能夠通過驅動程序與硬件設備進行通信和交互,完成各種硬件操作。
硬件部分 :是計算機系統的基礎,包括網卡、硬盤等硬件設備,它們為計算機系統的運行提供了物質基礎和計算、存儲、通信等能力。
6.3 操作系統的必要性
對下 :可以管理好軟硬件資源,對計算機系統的各類資源進行統一的管理和調度,確保資源的合理分配和高效利用,避免資源的浪費和沖突。
對上 :能給用戶提供便捷、穩定、安全、高效的運行環境,用戶和應用程序無需直接與硬件打交道,而是通過操作系統提供的接口和功能來使用計算機資源,大大降低了使用計算機的難度,提高了計算機的可用性和可靠性。
6.4 操作系統與管理
管理的本質 :管理的本質是通過數據來進行管理。在操作系統中,各種資源和對象都可以通過相應的數據結構和信息來進行描述和管理,例如通過進程控制塊來管理進程的狀態、信息等。
結構化管理 :可以采用鏈表、數組等結構來對管理對象進行組織和管理。比如使用鏈表來管理進程列表,方便對進程的增刪改查等操作,提高管理的效率和靈活性。
---------------------------------------------------------------------------------------------------------------------------------
上述內容看不懂沒關系,這里我在詳細解釋一下:
例子一:
首先我們要搞明白什么叫做管理者?舉個例子,學校里面有校長,老師和同學,同學自然而然便是被管理者那么老師是屬于什么?管理者還是被管理者呢?都不是,老師是屬于決策的執行者,而決策是由校長制定的,因此在這個例子中,校長是管理者。同理,對于我們的操作系統,驅動程序還有硬件,也符合這三者的關系,我們的操作系統就相當于是管理者,操作系統將命令下達后傳達給驅動程序,再由驅動程序傳遞給硬件。
我們再回到上述例子,管理者是如何知道我的相關數據的呢?管理者要管理被我們管理者,但是他們并沒有見過我的面,他是如何管理的我呢?
結論就是見面并不是本質,獲取你身上的有效信息才是管理的必要條件。在上述例子中,校長通過輔導員協助收集我們的有效信息,進而可以實現對我們的管理。打個比方,以分宿舍為例,校委會通過老師來收集我們的生源地,將生源地比較靠近的學生分到一起,避免分歧。這便是管理執行的一個例子。
因此我們得出一個結論,管理的本質就是對數據進行管理,管理的做法也就是先描述再組織。
描述可以理解為收集到我們的個人信息,在我們編程語言中便是結構體,這里的組織便是通過一系列的操作方式完成目的,這也就是為什么c++,Python,JAVA等語言為什么要提供類,為什么要提供容器技術,比如stl的原因。
這也就恰恰的解釋了我們當時在設計學生管理系統的時候,為什么要用一個結構體來封裝每一個學生單元。本質上就是要對數據進行描述!!!
因此對于我們操作系統而言,其內部一定存在著大量的數據結構,匹配著對應的算法,用于我們對數據的管理進行描述與組織。換句話說,如果想學習好操作系統,必須要先了解操作系統內的各種數據結構
例子二:
現在我們再舉個例子來論述底層硬件驅動程序和操作系統的關系。假設我現在有一個銀行系統,其分為了5個部分,分別為金庫,桌椅,宿舍,食堂還有電腦。這5個部分就像我們計算機的操作系統里面的不同數據結構或者函數,你要干什么就調用相應的函數就可以了。比如我來到了銀行想存錢,那我就去金庫部門,假如我想到銀行吃飯,那我就去食堂部門。但是林子大了什么鳥都有,人民群眾中可能會有壞人,我們可以直接讓人們直接把錢放到金庫,然后再去電腦端自己手動輸入去更新數據嗎?這個是顯然不現實的,因此我們的銀行系統中會有一個一個的窗口,窗戶里面有人來為我我們辦理業務。不允許外部的人直接訪問銀行系統內部的相關數據。這個可以類比為我們計算機系統里面的驅動程序,?然而有些老年人可能不會存錢,有可能這些人不會寫字,甚至不會整個操作流程,那如果讓這些老年人直接去窗口辦理業務的話會大大增加時間成本,因此大堂經理便發揮了重要作用。他們可以根據老年人的要求幫助老年人填寫好單子,預約好窗口,減少窗口使用的成本,這也就是程序員存在的意義所在,需要將操作系統開發到普通群眾可以拿來就能用!
倘若直接讓一個小白去使用我們的操作系統,他是不會用底層的語言來操作系統進而完成他想操作的東西。此時就需要程序員在操作系統進行各種庫的開發與調用,比如c標準庫,c++標準庫。那么在系統調用方面和庫函數調用又有什么關系呢?實際上這些庫和系統調用是屬于上下層之間的關系,使用者通過操縱庫函數來進行系統調用,而與操作系統進行交互的唯一方式也只能通過操作系統來調用!
想必到這里,讀者應該對操作系統有了初步的理解與認識,下一篇文章中我們將繼續講解進程的概念!