復習
關于計算機作業系統的一些看法:事實上,計算機只不過是一個硬體的集成,而人們要更加方便的對計算機下達命令并且讓計算機去執行這些命令,在計算機發展伊始,當時還沒有作業系統的出現的時候,人們給計算機下達命令,或者從計算機上獲取結果,都是用紙帶的方式然后進行翻譯,這種方式顯得過于復雜,而且效率也比較低下,在歷史記載以來,世界上第一個作業系統是GM-NAA I/O作業系統,這個作業系統可以執行批處理行程,也就是一個行程執行完畢后還可以去執行下一個行程,這個作業系統還提供了統一的共享介面,事實上,作業系統最常用也是使用人數最多的作業系統就是Windows作業系統,Linux,UNIX只有一些開發運維的人員才會深入的去玩這個,但是Linux作業系統事實上卻是很棒,速度也很快,例如我正在用的deepin作業系統,
【行程管理】
行程是作業系統中最基本的概念,并且行程是資源分配的基本單位,并且一個行程可以搞成許多的執行緒,或者理解為輕量化的進這樣比較形象一些,并且執行緒的執行是在內核態下進行執行,而且無論有沒有引進執行緒這個概念,行程都是資源分配的基本單位,行程是一個抽象的概念,或者你可以這樣理解行程就是計算機中正在運行的程式,假設在Windows作業系統的環境下我們打開資源管理器:
會發現,后臺上有許多正在運行的程式,當在手機作業系統中的時候——也叫嵌入式作業系統,一般來說,都會支持打開后臺程式管理,這時候你打開的界面上的App就是正在運行的行程,行程在計算機上執行的時候也分為用戶態和內核態,用戶態就相當于你在計算機上面打開程式,內核態則是你發出一個命令,或者系統呼叫,或者中斷的處理,cpu會進入到內核態去處理你的命令,這里有必要談論一下內核的概念,
【內核】
在現代計算機的構成的時候,你在買計算機的時候,常常會聽到核心這個說法,這時候你就要分辨出來這個是真核心還是假核心(執行緒數),拿cpu來看,cpu是一個硬體集成的東西,你把cpu拆開后就會發現一個cpu被分成了多個內核,這個分割是物理上的分割,和作業系統無關,而作業系統根據分配演算法還有設計上的不同就可以給不同的內核上面分配多少個行程,
【EXample】:假設cpu是4核心的,這個時候來了10個執行緒,根據不同分配,把執行緒分配到所有的核心上進行運行,但是OS肯定為了性能考慮會選擇最優的分配策略,
事實上,查看電腦cpu核心和執行緒數有一種最簡單的方法:
- win+R打開命令控制
- 輸入wmic
- 進入這個界面:

- 輸入“cpu get”命令
然后就可以查看cpu的核心數和其他的一些引數:

(小聲嘀咕:電腦太垃圾)
內核是運行執行緒的物理裝置,但是決定一個內核上面可以運行多少個執行緒的數量這個是可以人為控制的,所以就出現了市面上說的多少多少核心事實上是執行緒的數量來欺騙消費者,
下面繼續談行程的關系,現代計算機都是多行程一起并發的執行,這就導致了一個問題,計算機有很多的行程,但是一次只允許一個行程上處理機進行處理(一般說,當然還有多處理機的情況,處理機和處理器之間的區別在于,處理機包括處理器,處理機加上外圍設備就構成了計算機),而決定些行程的處理的順序往往影響著計算機的性能,這就引出了調度的概念:
一般來說有三種調度(按照調度的層次進行劃分):
- 作業調度
- 記憶體調度
- 行程的調度
根據調度的層次不同,采用的調度策略也不同,常見的幾種調度演算法有:
- 短作業優先:事實上就是看作業在處理機上的運行時間,哪一個作業的時間更短,就讓哪一個上處理機,但是這個會導致一個缺點:如果不斷有短作業上處理機運行,那么時間長的作業遲遲不上處理機運行,這就使得發生了饑餓狀態,
- 先來先服務:顧名思義,就是哪一個作業先來,根據作業的先后順序執行,但是綜合考慮下來,只利于cpu繁忙但是不利于Io繁忙,
- 優先級調度演算法(靜態):根據行程的就緒佇列,提前設定好行程的優先級,在行程上處理機運行的時候,這個優先級不發生任何的改變,
- 高回應比調度演算法:
回應比p=(等待時間+要求服務的時間)/(要求服務時間)
事實上,這個演算法兼顧了短作業和長作業達到了一種平衡,
不會發生饑餓現象,
- 多級反饋
- 時間片輪轉演算法:對于就緒佇列上的每一個行程,都設定一個固定的時間,在這個固定的時間行程上處理機運行,當時間片上的時間用完的時候,不管行程有沒有運行結束,都變成就緒態,讓下一個行程上處理機進行運行,
【行程的同步和互斥】
就行程的同步而言,打個很簡單的例子:比如說,你去吃飯,你向收銀員先給錢(給錢拿錢這個程序相當于傳遞一個緩沖區),然后你才能拿到飯,達成了吃飯這個需求,
而互斥更簡單:好比于很多人在戶外上廁所,但是這個廁所每次只允許一個進入,這就是互斥的概念,
【死鎖】
有了行程的互斥和同步的概念,我們談談死鎖的概念,先舉一個例子:
假設有兩個人和5個糖,每個人需要三個糖才會離開這家店,但是這個店不能空并且只有他們吃掉一個后才會做新的糖,現在每個人手里有兩個糖,都只差一個才會走,但是都不吃掉自己手中的糖,這就發生了死鎖,
課本的概念總結的更加概括一些:多個行程因為競爭資源而造成的一種僵局(等待),如果沒有外力作用(比如撤銷掉某些行程),這些行程都沒有辦法繼續執行下去,
[原因]:死鎖產生的必要條件:
- 回圈等待
- 互斥
- 請求和保持
- 不剝奪
從死鎖產生的必要條件入手,破壞其中一個就可以破壞死鎖,但是這也引出了一個問題,如果每次都是在發生死鎖后然后進行處理未免顯得過于麻煩了一些,有沒有一種可以提前確定好行程執行順序,按照這個順序就一定不會發生死鎖,這就引出了一個新的演算法——銀行家演算法
【注】;銀行家演算法是預防死鎖的演算法
這里給出一個王道書上的例子:

并且有一個當前作業系統的資源數量A=(3,3,2)
Claim1:
我們首先用max矩陣—allocation矩陣的到一個need矩陣如下:
比較向量A我們知道可以滿足p1和p3行程的需求
假設是p1得到滿足,用(3,3,2)+(2,0,0)=(5,3,2)
回圈這個程序就得到了一個安全序列:p1 p3 p4 p2 p0
按照這個順序執行下去就一定不會發生死鎖,

【remark】:
總的來說,行程管理對作業系統起著至關重要的作用,這里結合一下計算機組成原理談一下行程管理,我們都知道我們的計算機都是時分復用的計算機,即就是在一個時鐘周期內,通過執行不同程式的不同指令,來達到宏觀上看起來是一起在計算機上執行,但是事實上是一個一個的去執行的,程式在執行的程序就是行程,行程管理通過出廠的時候裝好的策略或者是人為的去給他設定某種行程管理的演算法,連同cpu一起提升計算機的性能,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/6660.html
標籤:其他
