作業系統知識整理 - 程序的概念
主要內容
問題產生
採用一個什麼樣的概念來描述計算機程式的執行過程和作為資源分配的基本單位,才能充分反映作業系統的執行併發、資源共享及使用者隨機的特點?
程式
程式(program)描述計算機所要完成的具有獨立功能的,並在時間上按嚴格次序前後相繼的計算機操作序列集合,是一個靜態的概念。
單道程式的順序執行
我們把一個具有獨立功能的程式獨佔處理機直至最終結束的過程稱為程式的順序執行。
特點:
(1)順序性:每執行一條指令,系統將從上一個執行狀態轉移到下一個執行狀態,且上一條指令的執行結束是下一條指令執行開始的充要條件。
(2)封閉性:程式執行得到的最終結果由給定的初始條件決定,不受外界因素的影響。
(3)可再現性:只要輸入相同的初始條件,無論何時重複執行該程式都能得到相同的結果。
多道程式的併發執行
實際上,計算機經常需要同時處理多個具有獨立功能的程式,批處理系統、分時系統和實時系統都是這樣的系統。
特點:
(1)獨立性:每道程式在邏輯上都是獨立的,不存在制約關係。
(2)隨機性:程式的執行和資料的輸入開始時間都是隨機的。
(3)資源共享性:資源包括硬體資源和軟體資源。資源共享將導致對程序執行速度的制約。
併發執行使為了增強計算機系統的處理能力和提高資源利用率所採取的一種同時操作技術。
程式的併發執行可分為兩種:
1)多道程式系統的程式執行環境變化所引起的多道程式的併發執行。
2)單道程式的幾個程式段包含著一部分可以同時執行或順序可以顛倒執行的程式碼,即兩段沒有邏輯先後順序的程式碼。
併發執行的影響
程式的併發執行充分利用了系統資源,從而提高了系統的處理能力,這是併發執行好的一方面。然而資源有限,程式的併發執行必然導致資源共享和競爭,從而改變程式的執行速度
例如在棧的入棧和出棧操作中,若採用順序執行,要麼是先有資料入棧,再有資料出棧,要麼就是反過來,執行過程十分嚴謹。若採用併發執行,入棧和出棧就有可能出現問題。譬如出棧開始執行時,入棧也剛要開始執行,出棧操作佔用了處理機,入棧操作卻還未放入棧頂元素,出棧操作自然也無法順利進行。
為了控制和協調各程式執行過程中的軟、硬體資源的共享和競爭,顯然需要一個描述各程式段執行過程和共享資源的基本單位。
由於程式的順序性、靜態性和獨立性,用程式段作為描述其執行過程和共享資源的基本單位既增加作業系統設計和實現的複雜度,也無法反映作業系統所應該具有的程式段執行的併發性、隨機性以及資源共享等特性。
所以用程式來作基本單位是不合適的。
程序的定義
計算機中的許多名詞的定義不能像數學、物理那樣給出嚴格的定義,只能表示對名詞的一種描述。
關於程序比較經典的定義:
1)程序是程式的一次執行;
2)程序是一個程式及其資料在處理機上順序執行時發生的活動;
3)程序是程式在一個數據集合上執行的過程,它是系統進行資源分配和排程的一個獨立單位。
程序的基本屬性
1)程序是一個可擁有資源的獨立單位。
一個程序要獨立執行,它必須擁有一定的資源,包括用於存放程序正文和資料的磁碟、記憶體地址空間,以及執行時需要的外圍裝置等。
2)程序是一個可獨立排程和分派的基本單位。
這是一個程序要獨立執行的必要條件。
若設法將程序的兩個基本屬性分開,由OS分開處理:
1)不把作為排程和派生的基本單位同時當作擁有資源的單位。
2)對於擁有資源的單位不作頻繁的切換。
正是在這種思想的指導下,後來誕生了一個新概念——執行緒。