時隔快一年了,我回來啦,打算寫一篇關於OS的小總結,但是感覺工程量有點大,那就從零碎的知識開始吧~
預告知
本篇分享不會提到所有詳細的內容,所以更像是一個OS中的小提綱,其實也就是回頭複習用的,具體的程式碼實現什麼的(比如用Pascal)就不說了,也許以後寫了也會放在這裡的~
那開始吧!
基礎知識點
並行:同一個時間下同時執行在不同的處理機上
併發:某一個指定的時間,無論是否在同一個處理機上,只需要兩個活動此時的狀態都是處於begin和end之間的某一處
時間片 = 系統響應時間/程式數(q = T/N)
作業:指使用者在一次計算的過程中或一個事務處理中要求計算機系統所要完成工作的集合
+ 作業步
程式:程式的一次執行,PCB+程式+資料,可擁有資源的獨立實體的同時也是一個可以獨立排程的實體
PCB:程式名+當前狀態+優先順序+現場保留區+程式佇列鏈指標+資源清單+程式執行起始地址+家族關係+其他
程式狀態轉換圖:
原語:不可中斷的系統程式,建立原語+撤消原語+阻塞原語+喚醒原語
執行緒:輕量級程式,是程式中的一個實體,是被系統獨立呼叫的基本單位,是使用CPU的基本單位(執行緒識別符號+程式計數器+暫存器組+堆疊)
程式排程:是對CPU的使用的呼叫,協調和控制各程式對CPU的使用
程式排程演算法:FCFS(先來先服務)、RR(輪轉排程)、分級輪轉法、優先數法
程式通訊部分
Bernstein條件:判斷程式併發執行結果是否可再現
條件內容:
read_set R(pi)={a1,a2,...,an}
write_set W(Pi)={b1,b2,...,bn}
對於程式p1、p2需要滿足:[R(P1)∩W(P2)]∪[R(P2)∩W(P1)]∪[W(P1)∩W(P2)]
才能保證併發執行且結果具有再現性
臨界資源和臨界區:互斥與合作
臨界區的訪問規則:空閒讓進、有限等待、忙則等待、讓權等待
同步與互斥:同步(時序上的制約關係),程式之間為了協同工作而存在的一種等待關係。互斥則是程式之間對臨界資源的一種競爭關係,排他性地對資源的訪問方式。
解決方案
軟體解決(皮特森Peterson’s Solution):僅限用於兩個程式交替執行臨界區,test-and-set(lock),功能其實就是最簡單的單鎖的lock和unlock操作。
訊號量:僅能由P、V操作修改的整型變數,其中P(波蘭語proberen),為獲取/申請訊號量(s=s-1),V(波蘭語verhogen)為釋放訊號量(s=s+1)。
前驅圖:Procedence Graph
經典問題:生產者與消費者、讀者與寫者、哲學家就餐、睡覺的理髮師、山洞通行
管程:我對管程的理解,它作為一種資料結構,實際上更接近的是C++或者JAVA這類面嚮物件語言中的類,一個管程就是管程類的一個具體的實體。管程:共享資料+若干過程,資料表示了該管程的相應資源的狀態,過程(produce)則和function類似,主要是完成針對上述資料的某些規定操作。
管程的實現:霍爾方法Hoare
x、y的對列是指阻塞在x和y條件變數上的程式,而next則是獲得了資源而要執行的程式
訊息緩衝:send、receive