馮諾依曼體系結構: 描述了一台計算機是如何構成的. (99%的計算機都是馮諾依曼結構) => 硬體的特點會對軟體開發造成直接影響
馮諾西曼體系結構是由馮諾依曼提出的,他也被稱為計算機領域的祖師爺(計算機之父),他本來是個數學家,也是個物理學家,也是個化學家,還參與過曼哈頓計畫.
馮諾依曼在火車上遇到了乙個普林斯頓大學的研究員,當時這個研究員正在研究用來計算彈道飛彈軌跡的機器,可是遇到了難題,於是馮諾依曼說可以讓他去看看,他就去了,就為馮諾依曼體系奠定了基礎
圖靈 奠定了計算機工作原理的理論基礎
cpu**處理器(計算機的大腦),進行算術運算和邏輯判斷
過去幾十年,cpu的發展速度是非常迅猛的,這也驗證了"摩爾定律":18個月,晶元整合程度提高一倍,成本降低一半(指數提公升)這個摩爾是intel的副總裁,聯合創始人之一)
但是最近幾年摩爾定律失效,因為cpu整合程度更高,就需要讓單個元件盡量小,現在最強的是7nm級別,這樣的空間尺度上,經典物理學已經接近失效,主要靠量子力學,在解決這個問題的辦法是人海戰術,乙個cpu不能更快了就多搞幾個cpu,多核cpu
gpu是一種特殊的cpu,專門針對一些特定的場景進行優化運算(矩陣運算)
儲存器一般分成兩類
記憶體寫的**主要都是在記憶體中,new出來的物件就是在記憶體上申請空間
外存(磁碟)
記憶體和外存的對比:
記憶體的儲存空間較小,外存的儲存空間較小
記憶體的訪問速度較快(ns級別 納秒 ),外存的訪問速度較慢(us 微秒),大概查了三四個數量級
記憶體的成本較高,外存的成本較低
記憶體如果斷點了,資料就丟失了,而外存如果斷電了,資料不丟失 (外存支援持久化)
輸入裝置
鍵盤/滑鼠/攝像頭/麥克風… 和記憶體打交道
輸出裝置
顯示器/印表機/音響…
有些裝置算輸入裝置也是輸出裝置 (觸控螢幕)
作業系統核心是乙個軟體. 搞管理的軟體.一方面是管理計算機的硬體裝置. 另一方面管理計算機的軟體資源
乙個完整的作業系統 = 核心 + 配套的應用程式
那麼作業系統具體如何管理的呢?管理的核心工作是兩件事:描述 相當於知道有什麼
組織 然後要做什麼
程序是一種作業系統中非常重要的軟體資源.
把乙個可執行程式跑起來.系統中就會建立乙個對應的程序.
如果這個程式執行結束了,系統就會隨之銷毀對應的程序.
程序就可以看成是乙個程式的執行"活動"
系統進行資源分配和排程的基本單位
區分程式(可執行檔案)和程序
.exe就是可執行檔案 就是乙個磁碟上的檔案,靜態的,如果不使用,就不會發生變化
任務管理器中的qq,就是乙個程序,當雙擊exe檔案時,作業系統就會載入這個可執行檔案,把exe檔案中的很多內容都載入到記憶體中了,分配一些資源,並開始執行這個可執行程式包含的指令. (分配資源並執行的過程就是程序)
程序也可以認為是作業系統進行資源分配的最小單位.
pid就是程序id也就是程序的身份識別符號
先雙擊qq,得到乙個程序id p1
關閉qq,再次開啟,又得到乙個程序id p2
程序管理(重點,難點)
以linux為例
描述:核心中使用乙個task_struct / pcb (程序控制塊) 結構體來描述程序 (c語言)
每建立乙個程序,就同時建立乙個pcb這樣的類的例項.
組織:使用雙向鍊錶把所有的pcb物件串到一起
管理的核心工作是兩件事:雙擊乙個exe,建立乙個程序的時候,本質上就是在核心中,先建立了乙個pcb物件然後把這個物件加入到鍊錶中描述 相當於知道有什麼
組織 然後要做什麼
關閉乙個程式,結束乙個程序的時候,本質上就是在核心中找到這個對應的pcb物件,然後從鍊錶上刪掉,並且釋放掉該物件
通過任務管理器檢視到的所有的程序資訊,本質上就是在遍歷核心中的這個鍊錶,一次讀取對應pcb中的節點資訊
pcb裡面包含哪些資訊呢?
pid(程序id) 程序的身份標識.
一組記憶體指標,指向該程序持有的一些重要資料在記憶體中(系統給該程序分配的資源的一部分)的位置.
重要資料:
執行的指令都有啥
這些指令依賴的資料是啥
狀態
相當於一張日程表,為了區分當前的程序是正在執行還是等待執行
乙個程序的狀態有這些狀態:
r:就緒狀態.正在cpu上執行,或者即將執行
s:睡眠狀態,這些程序沒法再cpu上執行,而是在等待.
d:深度睡眠狀態.程序在長時間的忙於io操作,沒精力理會cpu
x:退出狀態.程序已經被銷毀了
優先順序
根據系統的情況,分優先順序執行程序
程序的記賬資訊
記錄做了什麼,不要讓某個程序一直霸佔cpu,差不多就行了
程序的上下文
程序上下文實際上是程序執行活動全過程的靜態描述,提前規劃好做什麼
3-6 是為了實現"程序排程",如果資源非常充裕,那麼不需要排程,事實是資源不那麼充足
程序多,但是資源少,最緊張的資源是cpu(同一時刻,乙個cpu上只能執行乙個程式的指令)
例如:我的電腦8核,但是當前程序數已經上百了
如何讓這麼多程序在8個cpu上很好地工作?
這就靠"程序排程"來完成
目的就是為了讓這麼多程序能夠很好地在有限的cpu上很好地執行
作業系統中實現程序排程的模組叫做"排程器",實現具體排程的時候有很多策略
這些策略都要依賴pcb中對應的屬性
"並髮式"執行
由於cpu執行指令極快,我們可讓cpu先執行程序1的指令,工作一小會兒之後執行程序2的指令,然後…然後再執行程序1的指令
這樣的過程就叫做併發↑
「並行」
巨集觀上是同時執行,微觀上也是同時執行(兩個cpu就可以同時執行兩個程序的指令)
補充時間片:只進行某程序的時間
搶占式排程:作業系統的排程器會非常頻繁的進行行程切換,哪怕那個程序只進行了一半,也是隨時可能被打斷的.
核心態:**在核心態上執行,例如一些操作硬體的** (為了安全性)
使用者態:
核心態的許可權比使用者態的許可權高很多.
作業系統 程序
在作業系統中,作業系統將記憶體,網路,檔案系統抽象為資源的統一抽象表示。1 什麼是程序 程序就是進入記憶體中正在執行的程式。把程序當做一組元素組成的實體。程序包括兩個部分,一部分是 部分,另一部分是 相關的資料集合。程序控制塊 每乙個程序,在核心中都對應著乙個程序控制塊。程序控制塊中儲存著程序的所有...
作業系統 程序
程序是作業系統中的重要概念,描述了程式的執行資訊。乙個程序就是一次執行。可以把程式想象成類,程序就是例項。引入程序的概念有利於實現多程式並行的設計。每乙個程式執行的時候可以大致分為io任務和計算任務,如果乙個程序正在io,那麼應該把cpu讓給另乙個程序執行計算任務,這樣可以提公升cpu的利用率,這就...
作業系統程序
乙個程序就是乙個正在執行的程式。它包括 程序狀態。包括 每個程序在作業系統中用程序控制塊pcb來表示,用來儲存與該程序有關的各種狀態資訊。pcb只是基本原理中的說法,對於乙個真實的作業系統可能不叫pcb,比如linux中叫做任務結構體 task struct 分時系統是在程序之間快速切換,以便使用者...