複習
關於計算機作業系統的一些看法:事實上,計算機只不過是乙個硬體的整合,而人們要更加方便的對計算機下達命令並且讓計算機去執行這些命令,在計算機發展伊始,當時還沒有作業系統的出現的時候,人們給計算機下達命令,或者從計算機上獲取結果,都是用紙帶的方式然後進行翻譯,這種方式顯得過於複雜,而且效率也比較低下,在歷史記載以來,世界上第乙個作業系統是gm-naa i/o作業系統,這個作業系統可以執行批處理程序,也就是乙個程序執行完畢後還可以去執行下乙個程序,這個作業系統還提供了統一的共享介面,事實上,作業系統最常用也是使用人數最多的作業系統就是
windows
作業系統,
linux
,unix
只有一些開發運維的人員才會深入的去玩這個,但是
linux
作業系統事實上卻是很棒,速度也很快,例如我正在用的
deepin
作業系統。
【程序管理】
程序是作業系統中最基本的概念,並且程序是資源分配的基本單位,並且乙個程序可以搞成許多的執行緒,或者理解為輕量化的進這樣比較形象一些,並且執行緒的執行是在核心態下進行執行,而且無論有沒有引進執行緒這個概念,程序都是資源分配的基本單位,程序是乙個抽象的概念,或者你可以這樣理解程序就是計算機中正在執行的程式,假設在windows作業系統的環境下我們開啟資源管理器:
就是正在執行的程序,程序在計算機上執行的時候也分為使用者態和核心態,使用者態就相當於你在計算機上面開啟程式,核心態則是你發出乙個命令,或者系統呼叫,或者中斷的處理,
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
按照這個順序執行下去就一定不會發生死鎖。
總的來說,程序管理對作業系統起著至關重要的作用,這裡結合一下計算機組成原理談一下程序管理,我們都知道我們的計算機都是時分復用的計算機,即就是在乙個時鐘週期內,通過執行不同程式的不同指令,來達到巨集觀上看起來是一起在計算機上執行,但是事實上是乙個乙個的去執行的,程式在執行的過程就是程序,程序管理通過出廠的時候裝好的策略或者是人為的去給他設定某種程序管理的演算法,連同cpu一起提公升計算機的效能。
作業系統複習 程序管理
程序是程式在核心定義的資料結構上的一次順序執行,它屬於動態的範疇,是操作資訊員進行資源分配和保護的基本單位。程序的執行環境稱為程序的映像,包括 各個通用暫存器的值 程序的記憶體映像 開啟檔案的狀態和程序占用資源的資訊等。其中最主要的部分就是記憶體映像,它包括 程序控制塊 process contro...
作業系統複習 程序管理
1.程式順序執行時的特徵 順序性,封閉性,可再現性 2.程序的六大特徵 1.結構特徵,通常的程式是不能併發執行的,我們會為之配置一程序控制塊,即pcb。程式段,資料,pcb構成了程序實體。2.動態性,程序的實質是程序實體的一次執行過程 3.併發性,多個程序實體同存於記憶體中,且能在一段時間內同時執行...
作業系統02程序執行緒 01程序的概述
一般情況下,我們把程序實體就簡稱為程序,例如,所謂建立程序,實質上是建立程序實體中的pcb 而撤銷程序,實質上是撤銷程序實體中的pcb 注意 pcb 是程序存在的唯一標誌 引入程序實體的概念後,可把程序定義為 程序是程序實體的執行過程,是系統進行資源分配和排程的乙個獨立單位。程式段 資料段 pcb ...