大部分教程知識點記錄于慕課網的視頻教程,
計算機組成原理基本知識:
一:CUP
Core:核心,既CPU的內核,cpu中間的核心芯片,單晶硅制成,cpu可分為單核和多核cpu, 每一個核都是獨立的運算單元,可以完成獨立的計算,接收指令,處理資料等,- 單核cup: cpu只有一個用來處理資料的核心,
- 多核cpu:cpu中有多個進行處理資料的核心,另外,
cpu核數和性能的關系是呈 線性增長的, 赫茲(HZ):代表cpu的頻率,cpu是以高低電平的轉換來作業的,聽過一個頻率的概念,來表示cpu的性能,例如 2GHZ表示,每秒進行高低電平切換20億次,- 目標:要學會充分理解和利用cpu的多核性能,需要懂得怎樣去使用,什么樣的場景下去使用,怎么樣去利用cpu性能,
- (1)CPU的功能
- 控制程式的順序運行,
程式實際上就是串行的一系列有序的指令, - 產生完成每一條指令所需的控制指令,(譯碼器)
- 對各種操作加以時間上的控制,(時序發生器)
- 對資料進行邏輯運算和邏輯加工,(運算器)
(1)cpu內核的主要組成
控制器:協調和控制計算機運行,
程式計數器:主要用來存盤下一套指令的運算地址,cpu運行時,就是不斷在程式計數器中取出指令,并執行,- 時序發生器:主要負責發出信號的脈沖,產生頻率穩定的電信號,每個步驟都有時間的限制,時間的限制就是通過電信號的頻率來進行控制的,
- 指令譯碼器:負責把指令轉換為相關的電信號的譯碼器件,
- 其他各種暫存器:暫時的存盤一些資料,
(2)運算器:資料的運算加工,
- 資料緩沖器:包括資料輸入緩沖,輸出緩沖,負責資料的暫時緩沖,
- 通用暫存器:
- ALU:負責計算的元器件,
- 狀態字暫存器等:負責進行計算狀態的保存,
(2)高速快取:
- 處于存盤器的部分,后面介紹,
二:存盤器
(1)存盤器的存次結構
- 1.快取: 上面提到的高速快取等,速度最快,價格高,
- 2.主存:主要存盤, 記憶體條,即時存盤,斷電資料丟失,速度始終,價格適中,
- 3.輔存:磁盤,SSD等,斷點依然可以保存資料,速度低,價格低,
出現層次性結構的原因:區域性原理, 是指CPU訪問存盤器時,無論是存取指令還是存取資料,所訪問的存盤單元都趨于聚集在一個較小的連續區域中,就是2-8定律,20的存盤區域,將會占用CPU訪問的80%的時間,

- 層次結構實作原理:在cpu與志村之間增加一層速度快(容量小的)
Cache(快取),解決主存速度不足的問題,
作業系統基本知識
一和二是 B站上的網課學習內容筆記,可以直接跳到三,
一: 相關基本概念
- job(作業):是指,計算機用戶在一次上機程序中眼球計算機系統為其所做作業的合集;作業中每項相對獨立的作業稱為:作業步
- Thread(執行緒):程式的一次相對獨立的運行程序(動態程序),是系統調度的最小單位,
- 行程:是系統資源分配的最小單位,也就是說,行程是系統中擁有資源的最小物體,一個行程可以包括多個執行緒,執行緒被調度,使用行程的資源,
- Virtual Memory(虛擬存盤):是行程的邏輯地址空間把實際的記憶體空間進行虛擬擴大, 也就是把部分外存空間,(運用某種手段或演算法)虛擬為記憶體使用,讓用戶感覺 記憶體空間變大了
- File(檔案):命名了的位元組流(對一團位元組流進行命名,就可以說這團位元組流是你的一個檔案)
二:相關系統
- 單道批處理系統:外存上是一批作業在排隊(批),記憶體上只有一個作業執行(單道)

- Monitor早期的在記憶體中的作業系統,來實作將一個作業從 外存調度到記憶體進行執行(通過演算法,決定將那個作業呼叫到記憶體),
- 過渡(單到多道):浪費資源,當執行io等操作時,cpu只能等待io結束,才能接著執行,利用率低下,
- 多道批處理:

- 系統允許多個任務進入記憶體(1.就涉及到記憶體劃分,多個任務如何進入到記憶體),在記憶體還是要排隊(等cpu資源)
- 總結: 外存中作業配對等待進入記憶體,多個任務進入記憶體,還要排隊等待 cpu執行它,
(1)多道程式中遇到的問題:
- 同步(協調)也叫行程同步:例如:計算行程a,列印行程b,列印行程b需要等計算行程a計算出來結果,通知b后,才能列印,

- 互斥:比如列印機,只允許一個行程使用完了,才能另一個使用
- 不確定性:不受環境配置影響,執行結果是確定的,不能是可變的,
- 死鎖:競爭資源,卡死,
(2)作業系統分層結構風格

- 就像是計算機網路上面的 OSI7層結構,
每一層向上層提供服務,又隱藏自己,就好像直接是 網路層到網路層傳輸,忽視下層, 作業系統,我們在作業系統的平臺上開發,也是使用作業系統的提供介面,但不在乎這些介面,只管自己這層對軟體的開發,下層是透明的, - Liunx:是一個分塊的作業系統,(因為有眾多人分塊的實作各個部分功能)
模式:簡單地說,就是程式運行程序中使用的,由硬體體系結構提供的CPU特權模式,


用戶態,內核態:用戶使用 用戶模式(核外子系統),呼叫核心子系統,但是 核心子系統,不會去呼叫你寫的程式,
行程
- 行程的構成:程式+資料+PCB(行程控制塊,系統利用PCB來描述行程的基本情況和活動程序,進而控制和管理行程,使并發執行的每一個程式(含資料)都能獨立的運行)
- 目的:使程式可以并發的執行,但是會出現資源競爭等問題,需要合理解決,
- 行程狀態之間的轉換:

- 交換技術:(在linux磁盤磁區時,有這樣的磁區)

- 程式的掛起狀態: 我猜測虛擬機的掛起就是這樣的狀態, 掛起就是運用到 交換技術,將程式和資料從記憶體轉移到外存中去,

三: 作業系統的基本功能:
(1)操作統一管理計算機不同的資源:
- 根據上節的計算機組成內容,可以抽象出很多不同的資源,
- 1.處理器資源
- 2.IO設備資源
- 3.存盤器資源
- 4.檔案資源
管理方式:驅動,比方說使用網卡等,都需要安裝驅動,是一種貼近硬體的一種程式,是集成在作業系統內部的,內核態中的,
(2)實作對作業系統資源的抽象
- 1.有了作業系統,用戶在編程的時候就不需要面向硬體介面進行編程(面向硬體編程是相關驅動的作業),
開發人員撰寫程式,一般都是在作業系統之上進行編程的,使用的計算機資源,都是經過作業系統抽象出來的, - 舉例子:
IO設備管理軟體,虛擬設備,開發者再使用IO設備的時候,寫的其實是虛擬的設備,實際的設備是由驅動去完成的,介面是由驅動或者是作業系統提供給我們的,檔案管理軟體(也稱為檔案系統):讀或者寫一個檔案的時候,我們不需要知道檔案的具體位置,作業系統會提供給我們一個介面,和一個檔案的句柄(可以稱之為虛擬的檔案),在程式里只需要對這個虛擬的檔案進行讀或者寫,在硬體的層面,就會自懂的幫我們完成硬體的保存和讀取,從程式開發者的角度,這些硬體資源都被作業系統所抽象出來了,實作了對計算機資源的抽象,我們實際上操作的都是對計算機資源的一個抽象,并不是實際的操作底層的硬體,
(3)作業系統提供了用戶與計算機之間的介面
作業系統提供了 系統呼叫,命令列,圖形視窗三種形式的介面呼叫,

系統調動: 是比較專業的介面,需要有一定的開發基礎,比如平時的創建行程(pthread),打開檔案,網路發送(socket),都是系統呼叫,使用作業系統給開發人員提供的介面,
四: 作業系統的用戶態與內核態
由來:

(1)內核態: 專門用來運行內核態相關的程式
-
內核空間:存放的是內核代碼和資料
-
行程執行作業系統內核的代碼
-
cpu可以訪問記憶體所有資料,包括外圍設備
-
支撐功能

-
資源管理能功能

(2)用戶態:用來運行用戶自己撰寫的一些程式,
-
用戶空間: 存放的是用戶程式的代碼和資料
-
行程在執行用戶自己的代碼(非系統呼叫之類的函式)
-
CPU只可以訪問有限的記憶體,不允許訪問外設,
-
用戶態切換到內核態的三種方法:系統呼叫,例外中斷,外圍設備的中斷, -
外圍設備的中斷:一般是指磁盤,網卡,鍵盤等,**舉例說明:**例如cpu需要讀取磁盤上的資料, cpu和磁盤的速度差別很大,發出讀寫信號后,cpu是不可能去等磁盤讀取資料完成的,這是就會出現一個叫做
DMA的設備,出現在兩者之間,cpu在發送了讀取信號后就去干別的事情了,等到dma設備讀取完成后,發送中斷信號,這是CPU才會從用戶態切換到內核態來處理DMA的資料,

四: 并行與并發
并發:是指具有同時處理多個任務的能力,(同一時間間隔發生)并行:是指真正可以在同一時間,處理多個任務的能力,(同一時間發生)- 并發系統:
既有并行,也有并發,一般通常叫做并發系統,
作業系統中的并行與并發
- 單核cpu:中只能夠并發的執行,也就是同一時間只能執行一個任務,串行執行,
- 多核CPU:例如四核cpu,擁有四個核心,可以真正的同時執行四個程式,
四核之間任務并行執行,每個核里又是很多任務并發執行!

- 分時系統: 給任務分配時間片,一段時間內輪流執行,
五:同步,異步
- 一個函式,呼叫另一個函式,可能要等另一個函式準備好資料,呼叫方一直等待對方準備資料,就是同步,
- 異步, 被呼叫函式,直接回傳,告訴呼叫函式,你先去忙其他的事吧,等我準備好再通知你,然后繼續準備資料,準被完成后,在告訴呼叫函式去讀取資料,呼叫函式不需要等待,

同步和異步,強調的是訊息通信機制!- 阻塞和非阻塞:強調的是程式在等待呼叫結果時的狀態,(例如I/O模型中的阻塞和非阻塞)
六:作業系統行程
目的:多道程式環境下,使程式能夠并發執行,隔離資源,運行環境,提升資源利用率,行程是系統進行資源分配和調度的基本單位,- 組成:程式段,相關資料段和PCB三部分構成行程物體(又稱行程映像),
行程的狀態轉換,請參考上面二的介紹,

PCB(行程控制資料塊):屬于作業系統內核的一種資料結構,用來描述和控制行程運行的通用資料結構,包括:行程識別符號(用戶程式起的行程名字),內部識別符號(行程號),處理機狀態,行程調度資訊,行程控制資訊等


- 行程用戶空間也保存著一些資訊:

行程調度演算法
非搶占式調度, 當前行程主動方放棄CPU搶占式調度: 當前行程被動放棄CPU,允許終端當前執行的行程(行程擁有優先級)
就緒佇列:- 先來先服務演算法:誰先來先服務誰,知道運行好了,自動退出再換下一個,
- 短作業優先演算法:預估行程剩余所需運行時間,時間短的優先調度,要求就緒佇列規模較小,時間估算也不一定準
- 最高回應比演算法:

等等還有很多,比如有時間片輪轉,優先級調度演算法,
用戶級執行緒:
-
切換成本低,與內核執行緒之間是多對一的,由用戶自行調度,內核無法干涉,
-
內核執行緒阻塞,所有執行緒無法運行

-
組合方式執行緒:管理作業既發生在內核態也發生在用戶態,多對多,不會因為內核執行緒的阻塞,導致所有用戶態執行緒不能執行,

常見的編程語言的執行緒模型
-
C/C++語言:使用原生的作業系統執行緒

-
java和上面的一樣,用戶態,內核態1對1.

-
javascript:主要運行在瀏覽器的,單執行緒語言, 可以通過async等關鍵字實作用戶態的執行緒,一對多

-
go語言: 典型的組合方式,
執行緒調度模型:G-P-M,G代表協程,用戶級執行緒,M內核級執行緒,P就是G和M之間的調度物件,用來調節G 和 M之間的關系,

-
python: 組合方式的實作方式

補充探究的內容:用戶態執行緒,內核態執行緒

- 可以對這些問題進行考究:下面是里面的圖片




- 后面關于書中介紹的執行緒的創建等,就不去截圖了,
行程與執行緒的背景關系切換
什么是背景關系:cpu切換執行任務時,需要得到的資訊, 就兩個人聊天,突然加進來另外一個人,他中途到來,不知道我們上文說了什么,所以也聽不懂我們后面要說啥,
暫存器級別背景關系:
- 保存在CPU核心里面的
用戶程式級別背景關系
- 主要保存在主存中,和當前運行的行程,用戶級的資料,包括程式的邏輯等,
系統級別的背景關系
協程
協程就是用戶級的執行緒,
- 平時所說的16核32執行緒,指的是內核執行緒,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/277655.html
標籤:其他
上一篇:小白開始學習python 的日記
