作業系統之處理機管理

2021-07-28 11:57:21 字數 3708 閱讀 9248

處理機管理可歸結為對程序的管理。

在單道程式系統中,程式只能夠順序的執行,即兩個程式只能等乙個執行完再執行下乙個。這樣就使程式的執行具有三個特型:順序性、封閉性和可再現性。而到了多道程式系統中,允許程式併發的執行(巨集觀並行,微觀序列)。此時程式併發執行就具有了:間斷性、失去封閉性和不可再現性。為了解決程式併發執行的問題,並且可以對併發執行的程式加以描述和控制,人們就引入了程序的概念。

程序是程式的一次執行,是資源分配和排程的基本單位。程序 = 程式 + 資料 + 程式控制塊(process control block,pcb)。

pcb是程序最重要的資料結構,是程序存在的唯一標識。pcb中記錄了系統所需的,用於描述程序的當前情況一起管理程序執行的全部資訊。os通過pcb就能夠很好的控制程序。pcb中的記錄的內容大致為:程序識別符號、處理機狀態、程序排程資訊、程序控制資訊。

程序的管理下面幾個方面:

就緒狀態——程序所需要的資源都已經到位,只需要等待處理機排程

執行狀態——程序獲得處理機,正在執行

阻塞狀態——程序等待某些事件的發生才能繼續執行,所以不再占用處理機而轉為阻塞狀態

程序的三態圖和五態圖如下:

程序的控制主要包括建立程序、撤銷程序以及程序的狀態轉換。程序控制一般有os的核心通過原語來實現。

核心(kernel):一些常駐記憶體,存在於緊靠硬體的軟體層次中的模組的集合。例如中斷處理程式、常用裝置驅動程式及執行頻率較高的模組(時鐘管理、程序排程這些)。

核心一般都包含了支撐功能(中斷處理、時鐘管理和原語操作)以及資源管理功能(程序、儲存器和裝置的管理)。

原語——由若干條指令組成的,用於完成一定功能的乙個過程。或者說是系統態下執行的某些具有特定功能的程式段。原語操作是一種「原子操作」,就是不可分的意思。即乙個操作中的所有動作要麼全做,要麼全不做。

阻塞和喚醒的原語分別是 block 和 wakeup。掛機和啟用的原語是 suspend 和 active 。

程序同步機制的主要任務,是對多個相關程序在執行次序上進行協調,是併發執行的程序能按一定的規則(或時序)共享系統資源,並能很好的相互合作,從而使程式的執行具有可再現性。

程序之間的制約:

臨界區:程序中訪問臨界資源的**。

程序必須互斥地進入自己的臨界區,系統為此設定了專門的同步機構來協調。同步機制需要遵循十六字真言:空閒讓進、忙則等待、有限等待、讓權等待。

2023年dijkstra提出訊號量(semaphores)機制是一種卓有成效的程序同步工具,這個機制有幾種發展產物。我們通常使用記錄型訊號量。

記錄型訊號量只是在整形訊號量的基礎上增加了將程序阻塞和喚醒的操作,這樣符合「讓權等待」的規則。

訊號量s是乙個表示資源數目的東西,只有在wait(s)和signal(s)這兩個原子操作中才能夠修改,這就保護了訊號量不被其它地方隨意改變。這兩個操作又稱為pv操作。

p操作就相當於在訪問資源之前,先對代表該資源的訊號量進行判斷,如果有就訪問,沒有的話該程序就被阻塞等待。

v操作就是在訪問資源之後,釋放乙個資源,並喚醒乙個等待該資源的程序。

訊號量機制實現前驅圖也經常考到,但很簡單。對於前驅圖中乙個結點,有多少個箭頭指向它,則在執行本身程式之前必須先進行多少次 p 操作來等待所有資源。有多少個箭頭從它指出去,在本身程式執行後就要進行多少次 v 操作釋放資源。

為臨界資源設定一互斥訊號量mutex,初始值為1。每個程序在進入臨界區之前都要對該訊號量進行p操作,判斷mutex的值,如果為1則表示沒有其它程序正在訪問該資源,現在可以訪問;如果為0則表示當前有程序在訪問該資源必須等待。這就相當於用乙個識別符號給臨界區上了鎖,實現了互斥訪問。

兩個程序共享緩衝池,想象生產者和消費者的問題。設緩衝池具有的可用空間為n,要為該緩衝池設定3個訊號量,乙個是互斥訪問訊號量s,初始值為1。乙個是s1,初始值為n,表示緩衝池可用空間數。另乙個是s2,初始值為0,表示緩衝池中已滿空間數(相當於已有產品數)。在這個條件下:

對於生產者程序,在將產品放入到緩衝池(訪問)之前必須先對 s1 進行 p操作,判斷 s1 的值,如果不為0,就對 s 執行 p操作,判斷該緩衝區中是否有其它程序正在訪問。如果為 0,則表示該緩衝區已滿不能再放產品,生產者程序只能等待。只有這兩個 p操作都通過了,生產者才能將產品放入緩衝池。然後對 s 進行 v操作,釋放訪問,再對 s2(是s2,不是s1,因為放了乙個產品是要給s2加1)進行 v操作。

對於消費者程序,在從緩衝池拿出產品(訪問)之前必須現對 s2 進行 p操作,判斷 s2 的值,如果不為0,就對 s 執行 p操作。如果為0,則表示緩衝區為空(沒有產品),消費者程序必須等待。只有這兩個 p操作都通過,生產者才能拿到產品。然後對 s 進行 v操作,表示自己不再訪問臨界區了。再對 s1 進行v操作。

雖然訊號量機制已經是一種方便又高效的程序同步機制,但每個訪問臨界區的程序必須自備pv操作,這就是大量同步操作分散在各個程序中,不利於系統的管理,也容易產生死鎖。為了解決問題,又引進了乙個新概念——管程。

系統中的資源都可以用資料結構抽象地描述其資源特性,而忽略它們的內部結構和實現細節。因此,可以利用共享資料結構抽象地表示共享資源,並且將對該共享資料結構實施特定的操作定義為一組過程。簡單理解,這個過程就是我們所說的管程。

有了管程之後,程序對共享資源的訪問,可以不用自備pv操作了。直接通過這乙個過程就可以,這乙個過程就包括了程序對資源的申請、請求和其它操作。而這個過程可以確保每次只讓乙個程序進入,實現了互斥。也達到了對共享資源的所有訪問的統一管理。

仔細想想,管程其實包含了物件導向的思想,將資料和操作都封裝起來,隱藏實現細節。任何管程以外的過程都不能訪問到裡面的資料。程序也只需要呼叫管程中的方法就可實現對資源的訪問。

如果說程序的引入是為了解決程式併發執行的問題,那麼執行緒的引入則是為了更好的提高程式併發執行的程度。

因為程序本身是占有資源的,在進行程序排程時有很大的時空開銷。所以再將程序分為更小的不帶資源(佔據很少量資源)的執行緒,然後以執行緒作為為排程和分配的基本單位來較小時空開銷,提高併發程度。

程序之間因為存在著互斥和同步的關係,所以程序之間肯定需要進行一定的資訊交換。(沒有溝通,怎麼能懂別人想幹什麼呢,對吧)

前面提到了訊號量機制其實就是一種低階通訊,因為每次只能告知另乙個程序乙個資訊。比如說放了乙個產品,而不能說放很多產品了。

高階通訊就是能夠高效地傳送大量資料,並且使用方便,對使用者透明(系統隱藏了實現程序通訊的具體細節)。

乙個很關鍵的概念:在作業系統中,「透明」 一詞指某種東西實際存在,但從某個角度看好像沒有。就是對應用人員來說不可見(你只能按它說的做,但不能直接控制)。

高階通訊包括:

**排程的概念:

高階排程——又稱作業排程(將作業從後備佇列調入就緒佇列,也就是從外存調入記憶體)

中級排程——又稱兌換排程(類似於掛起和啟用)

低階排程——又稱程序排程

排程演算法:先來先服務、時間片輪轉法、優先順序排程、多級反饋佇列排程(具體演算法思想就不再贅述)

死鎖:一組程序中的每個程序都在等待著只能由改組程序才能引發的事件。

死鎖必要條件:互斥條件、請求和保持條件(就是既占有資源,又請求新資源)、不可搶占條件,環路條件。

死鎖預防:通過破環四個必要條件中的乙個或幾個。一次性分配法(破壞請求和保持條件)、有序資源分配法(破壞環路條件)

死鎖避免:銀行家演算法,就是對每一次分配資源都要判斷是否是安全狀態,安全才分配,不安全則不分配,開銷很大。

死鎖檢測:看圖法

死鎖解除:搶占資源、終止程序。

作業系統之處理機排程

1.處理機即計算機的處理器,簡單理解就是cpu,多處理機指多核,即多個cpu同時工作,隨著工藝的提高,多個cpu可以整合在一塊晶元上,比如兩核,四核處理器。2.作業和程序的區別 1 作業是乙個比程式更加廣泛的概念,包含程式 資料和作業說明書 2 程序包含pcb 程式和資料集合 所以程式是程序的一部分...

作業系統 處理機管理

計算機的核心是cpu,首先作業系統講的就是對處理器的管理。在處理器管理當中都講了些什麼呢?當然是需要操作需要管理的東西。處理器是用來處理程序的,程序通俗的講就是要幹的活兒。並且處理器屬於獨佔型資源,同一時刻只能處理一件事情。為了能夠讓處理器的利用率發揮到最高,就出現了處理器管理,貌似有點像個人管理,...

作業系統之 處理機(1)處理機排程

長程排程 作業排程 排程物件是作業,決定作業何時裝入記憶體,為其建立程序 分配資源,放入就緒佇列中。主要用於多批道處理系統 記憶體排程 將暫時無法執行的程序從記憶體調到外存,合適時將外存的就緒程序調入記憶體執行。實際為儲存器管理中的對換功能,見後續.短程排程 程序排程 排程物件是程序,決定就緒佇列中...