1. 程式人生 > >《計算機作業系統》筆記|第三章

《計算機作業系統》筆記|第三章

第三章 程序管理
3.1 程序的概念
1.作業系統的特點:

  • 程式併發執行
  • 系統所擁有的資源被共享
  • 系統的使用者隨機地使用

2.程式順序執行的特點:順序性、封閉性、可再現性
3.程式並行執行的特點:獨立性、隨機性、資源共享性
4.程式的併發執行:一組在邏輯上互相獨立的程式或程式段在執行過程中,其執行時間在客觀上互相重疊,即一個程式段的執行尚未結束,另一個程式段的執行已經開始的這種執行方式。
5.程序是可以和其他程式並行執行的程式,是關於某個資料集合的一次執行過程。
6.作業與程序的區別與聯絡:

  • 作業是使用者向計算機提交任務的任務實體,而程序則是完成使用者任務的執行實體,是資源分配的基本單位
  • 一個作業可由一個或多個程序組成
  • 作業的概念主要用在批處理系統中,而程序的概念則用在幾乎所有的多道系統中

7.程序和程式的區別和聯絡:

  • 程序是一個動態概念,是一個執行的程式,而程式則是一個靜態概念
  • 程序具有併發特徵,而程式沒有
  • 程序是競爭計算機系統資源的基本單位,程序有資源,而程式沒有
  • 不同的程序可以包括同一程式

3.2 程序的描述
1.程序的靜態描述有三部分組成:

  • 程序控制塊(PCB)
  • 有關程式段
  • 該程式段對其進行操作的資料結構集

2.程序控制塊(PCB)包括一個程序的描述資訊、控制資訊及資源資訊,有些系統中還有程序排程等待所使用的現場保護區(CPU現場保護區——程序的上下文)。
3.一個程序的PCB結構都是全部或部分常駐記憶體的。
4.程序上下文實際上是程序執行過程中順序關聯的靜態描述。程序上下文是一個與程序切換和處理機狀態發生交換有關的概念。
5.在程序執行過程中,由於中斷、等待或程式出錯等原因造成程序排程,這時作業系統需要知道和記憶程序已經執行到什麼地方或新的程序將從何處執行。另外,程序執行過程中還經常出現呼叫子程式的情況。在呼叫子程式執行後,程序將返回何處繼續執行,執行結果將返回或存放到什麼地方等都需要進行記憶。
6.程序上下文是一個抽象的概念,它包含了每個程序執行過的、執行時的以及待執行的指令和資料,在指令暫存器、堆疊(存放各呼叫子程式的返回點和引數等)和狀態字暫存器等中的內容。
7.已執行過的程序指令和資料在相關暫存器與堆疊中的內容稱為上文,正在執行的指令和資料在暫存器與堆疊中的內容稱為正文,待執行的指令和資料在暫存器與堆疊中的內容稱為下文。
8.程序上下文結構
在這裡插入圖片描述


9.程序上下文切換髮生在不同的程序之間而不是同一個程序內。
10.程序上下文切換過程一般包含3個部分,並涉及3個程序。
第一部分為儲存被切換程序的正文部分(或當前狀態)至有關儲存區,例如該程序的PCB中。
第二部分是作業系統程序中有關排程和資源分配程式執行,並選取新的程序。
第三部分則是將被選中程序的原來被儲存的正文部分從有關儲存區中取出,並送至有關暫存器與堆疊中,啟用被選中程序執行。
11.任一程序,都有一個自己的地址空間,該空間稱為程序空間或虛空間。
12.程序空間的大小隻與處理機的位數有關。例如,一個16位長處理機的程序空間大小為2 16,而32位長處理機的程序空間天小為2 32。
13.程序空間還被劃分為使用者空間和系統空間兩大部分。
14.什麼是執行緒?
答執行緒是在程序內用於排程和佔有處理機的基本單位,它由執行緒控制表、儲存執行緒上下文的使用者找以及核心棧組成。執行緒可分為使用者級執行緒、核心級執行緒以及使用者/核心混合型執行緒等型別。其中使用者級執行緒在使用者態下執行,CPU排程演算法和各執行緒優先順序都由使用者設定,與作業系統核心無關。核心級執行緒的排程演算法及執行緒優先順序的控制權在作業系統核心。混合型執行緒的控制權則在使用者和作業系統核心二者。
15.執行緒與程序的主要區別:
(1)程序是資源管理的基本單位,它擁有自己的地址空間和各種資源,例如記憶體空間、外部裝置等;執行緒只是處理機排程的基本單位,它只和其他執行緒一起共享程序資源,但自己沒有任何資源。
(2)以程序為單位進行處理機切換和排程時,由於涉及資源轉移以及現場保護等問題,將導致處理機切換時間變長,資源利用率降低。以執行緒為單位進行處理機切換和排程時,由於不發生資源變化,特別是地址空間的變化,處理機切換的時間較短,從而處理機效率較高。
(3)對使用者來說,多執行緒可減少使用者的等待時間,提高系統的響應速度。例如,當一個程序需要對兩個不同的伺服器進行遠端過程呼叫時,對於無執行緒系統的作業系統來說,需要順序等待兩個不同調用返回結果後才能繼續執行,且在等待中容易發生程序排程、對於多執行緒系統而言,則可以在同一程序中使用不同的執行緒同時進行遠端過程呼叫,從而縮短程序的等待時間。
(4)執行緒和程序一樣,都有自己的狀態,也有相應的同步機制。不過,由於執行緒沒有單獨的資料和程式空間,因此,執行緒不能像程序的資料與程式那樣交換到外存儲存空間,從而執行緒沒有掛起狀態。
(5)程序的排程、同步等控制大多由作業系統核心完成,而執行緒的控制既可以由作業系統核心進行,也可以由使用者控制進行。

3.3 程序狀態及其轉換
1.在程序的生命期內,一個程序至少具有5種基本狀態:初始態、執行狀態、等待狀態、就緒狀態和終止狀態。
2.程序狀態轉換:
在這裡插入圖片描述

3.4 程序管理
1.PCB表:系統把所有PCB組織在一起,並把它們放在記憶體的固定區域,就構成了PCB表。
PCB表的大小決定了系統中最多可同時存在的程序個數,稱為系統的併發度。
PCB表組織方式:線性表、連結方式、索引方式
2.一般地,把系統態下執行的某些具有特定功能的程式段稱為原語。原語可分為兩類:一類是機器指令級的,其特點是執行期間不允許中斷;另一類是功能級的,其特點是作為原語的程式段不允許併發執行。
3.用於程序控制的原語有建立原語、撤銷原語、阻塞原語和喚醒原語等。
4.程序建立方式:
* 由系統程式模組統一建立
* 由父程式建立

5.無論是系統建立方式還是父程序建立方式,都必須端用建立原語來實現。
6.建立原語掃描系統的PCB連結串列,在找到一定的PCB表之後,填入呼叫者提供的有關引數,最後形成代表程序的PCB結構。
7.建立原語流圖
在這裡插入圖片描述
9.撤銷原語首先檢查PCB程序鏈或程序家族,尋找所要撤銷的程序是否存在。如果找到了所要撤銷的程序的PCB結構,則撤銷原語釋放該程序所佔有的資源之後,把對應的PCB結構從程序鏈或程序家族中摘下並返回給PCB空佇列。如果被撤銷的程序有自己的子程序,則撤銷原語先撤銷其子程序的PCB結構並釋放子程序所佔用的資源之後,再撤銷當前程序的PCB結構並釋放其資源。
10.撤銷原語流圖
在這裡插入圖片描述
11.一個程序有兩個方法:一種是由系統程序喚醒,另一種是由事件發生程序喚醒。
12.阻塞原語流圖和喚醒原語流圖
在這裡插入圖片描述

3.5 程序互斥
1.臨界資源:一次僅允許一個程序訪問的資源被稱為臨界資源。
2.臨界區:把在程序中那段訪問資源的程式碼稱為臨界區。(不允許多個併發程序交叉執行的一段程式稱為臨界區)
3.間接制約:把這種由於共享某一公有資源而引起的在臨界區內不允許併發程序交叉執行的現象,稱為由共享公有資源而造成的對併發程序執行速度的間接制約。
4.互斥:一組併發程序中的一個或多個程式段,因共享某一公有資源而導致它們必須以一個不允許交叉執行的單位執行。也就是說,不允許兩個以上的共享該資源的併發程序同時進入臨界區稱為互斥。
5.一組併發程序互斥執行時必須滿足如下準則:
* (空閒讓進)不能假設各併發程序的相對執行速度。即各併發程序享有平等地、獨立地競爭共有資源的權利,且在不採取任何措施的條件下,在臨界區內任一指令結束時,其他併發程序可以進入臨界區。
* (忙則等待)併發程序中的某個程序不在臨界區時,它不阻止其他程序進入臨界區。
* (多則擇一)併發程序中的若干個程序申請進入臨界區時,只能允許一個程序進入。
* (有限等待)併發程序中的某個程序從申請進入臨界區時開始,應在有限時間內得以進入臨界區。

6.對臨界區加速以實現互斥:首先測試該臨界區是否是上鎖的。如果該臨界區已被鎖住,則該程序要等到該臨界區開鎖之後才有可能獲得臨界區。設臨養區的類名為S。為了保證每一次臨界區中只能有一個程式段被執行,又設鎖定
位為key[S],它表示該鎖定位屬於類名為S的臨界區。
7.在作業系統中,訊號量sem是一個整數。在sem大於等於零時代表可供併發程序使用的資源實體數,但sem小於零時則表示正在等待使用臨界區的程序數。
8.P原語、V原語流程圖
在這裡插入圖片描述
9.P、V原語的過程:
當某個程序正在臨界區內執行時,其他程序如果執行了P原語,則該程序並不像lock時那樣因進不了臨界區而返回到lock的起點,等以後重新執行測試,而是在等待佇列中等待由其他程序做V原語操作釋放資源後,進人臨界區,這時P原語才算真正結束若有多個程序做P原語操作而進入等待狀態之後,一旦有V原語釋放資源,則等待程序中的一個進人臨界區,其餘的繼續等待。
10.P、V原語法和加鎖法實現程序間互斥的區別:
加鎖法是採用反覆測試lock而實現互斥的,存在CPU浪費和不公平現象,P、V原語使用了訊號量,克服了加鎖法的弊端。

3.6 程序同步
1.把非同步環境下的一組併發程序因直接制約而互相傳送訊息而進行互相合作、互相等待,使得各程序按一定的速度執行的過程稱為程序間的同步。
2.具有同步關係的一組併發程序稱為合作程序,合作程序間互相發的訊號稱為訊息或事件。
3.如果對一個訊息或事件賦予唯一的訊息名,則可用過程
wait(訊息名)
表示程序等待合作程序發來的訊息,而用過程
signal(訊息名)
表示向合作程序傳送訊息。
4.私用訊號量:同步時使用
公用訊號量:互斥時使用
5.把系統中使用某一類資源的程序稱為該資源的消費者,而把釋放同類資源的程序稱為該資源的生產者。
6.生產者和消費者之間滿足如下條件:
(1)消費者想接收資料時,有界緩衝區中至少有一個單元是滿的。
(2)生產者想傳送資料時,有界緩衝區中至少有一個單元是空的。
另外,由於有界緩衝區是臨界資源,因此,各生產者程序和各消費者程序之間必須互斥執行。

3.7 程序通訊
1.低階通訊:程序間控制資訊的交換。
一般只傳送一個或幾個位元組的資訊。
目的:控制程序執行速度。
2.高階通訊:程序間大批量資料的交換。
要傳送大量資料。
目的:交換資訊。
3.在單機系統中,程序間通訊可分為4種形式:
(1)主從式;
(2)會話式;
(3)訊息或郵箱機制;
(4)共享儲存區方式。
4.主從式通訊系統的主要特點如下:
(1)主程序可自由地使用從程序的資源或資料。
(2)從程序的動作受主程序的控制。
(3)主程序和從程序的關係是固定的。
主從式通訊系統的典型例子是終端控制程序和終端程序。
5.會話系統的特點:
(1)使用程序在使用服務程序所提供的服務之前,必須得到服務程序的許可。
(2)服務程序根據使用程序的要求提供服務,但對所提供服務的控制由服務程序自身
完成。
(3)使用程序和服務程序在進行通訊時有固定連線關係。
6.訊息或郵箱機制的特點如下:
(1)只要存在空緩衝區或郵箱,傳送程序就可以傳送訊息。
(2)與會話系統不同,傳送程序和接收程序之間無直接連線關係,接收程序可能在收到
某個傳送程序發來的訊息之後,又轉去接收另一個傳送程序發來的訊息。
(3)傳送程序和接收程序之間存在緩衝區或郵箱用來存放被傳送訊息。
7.訊息的組成
在這裡插入圖片描述
8.使用訊息快取機制傳送資料時,兩個通訊程序必須滿足如下條件:
(1)在傳送程序把訊息寫入緩衝區和把緩衝區掛入訊息佇列時,應禁止其他程序對該緩衝區訊息佇列的訪問。
(2)當緩衝區中無訊息存在時,接收程序不能接受到任何訊息。

3.8 死鎖問題
1.所謂死鎖,是指各併發程序互相等待對方所擁有的資源,且這些併發程序在得到對方的資源之前不會釋放自己所擁有的資源。
2.死鎖的起因:系統共享資源不足,資源分配不當,程序的推進順序不當(併發程序的執行速度)
3.產生死鎖的必要條件
(1)互斥條件
(2)不剝奪條件
(3)部分分配(保持和等待條件)
(4)環路條件
4.解決死鎖的方法一般可分為預防、避免、檢測與恢復3種。

  • 死鎖預防——靜態、按序、剝奪式
  • 死鎖避免
    1.有序資源分配法
    資源按類編號
    同類資源一次申請完
    按類序號上升次序申請
    2.銀行家演算法
  • 死鎖的檢測和恢復——資源分配圖
    最簡單的辦法是終止各鎖住程序,或按一定的順序中止程序序列,直至已釋放到有足夠的資源來完成剩下的程序時為止。另外,也可以從被鎖住程序強迫剝奪資源以解除死鎖。

3.9 執行緒的概念
1.程序是為了提高CPU的執行效率,減少因為程式等待帶來的CPU空轉以及其他計算機軟硬體資源的浪費而提出來的。
程序是為了完成使用者任務所需要的程式的一次執行過程以及為其分配資源的一個基本單位。
2.程序控制塊(PCB):以程序為單位來分配資源時,為了便於處理機執行,系統定義的如何對程序進行識別和操作的物理實體。
3.執行緒是程序的一部分,也是CPU排程的一個本單位,有時又被稱為輕權程序或輕量級程序。
4.每個執行緒也有自己的執行緒控制塊(TCB)
5.執行緒和程序的區別
執行緒改變只代表了CPU執行過程的改變,而程序所擁有的資源沒有發生變化。
執行緒是程序的一部分,它沒有自己的地址空間,它和程序內的其他程序一起共享分配給該程序的所有資源。
6.使用執行緒的最大好處是在有多個任務需要處理機處理時可以減少處理機的切換時間;而且,執行緒的建立和結束所需要的系統開銷也比程序要小得多。
7.執行緒典型應用

  • 伺服器中的檔案管理或通訊控制
  • 前後臺處理
  • 非同步處理

3.10 執行緒分類與執行
1.執行緒的兩個基本型別是使用者級執行緒和核心極執行緒(系統級執行緒)
2.區別
(1)使用者級執行緒的排程演算法和排程過程全部由使用者自行選擇和確定,與作業系統核心無關。
(2)使用者級執行緒的排程演算法只進行執行緒上下文切換而不進行處理機切換,且其執行緒上下文切換是在核心不參與的情況下進行的。
(3)儘管相關程序的狀態是阻塞的或等待的,但所屬執行緒狀態卻是執行的。
3.與使用者執行緒不同,核心級執行緒既可以被排程到一個處理機上併發執行,也可以被排程到
不同的處理機上並行執行。因此,核心級執行緒不會出現程序處於阻塞或等待狀態,而執行緒處於執行狀態的情況。
4.核心級執行緒的上下文切換時間要大於使用者級執行緒的上下文切換時間。
5.執行緒有3個基本狀態,即執行、就緒和阻塞。
6.執行緒有5種基本狀態,即派生,阻塞,啟用,排程,結束。

在這裡插入圖片描述