作業系統的程序

2021-10-06 21:25:08 字數 3640 閱讀 4040

馮諾依曼體系結構: 描述了一台計算機是如何構成的. (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 分時系統是在程序之間快速切換,以便使用者...