1. 程式人生 > >程序基本概念

程序基本概念

一、題外話
說到程序這個概念,還是以前上機的時候,每當VS卡得執行不了的時候,老師就會讓我們開啟工作管理員,在程序那個視窗下,選中VS,然後結束掉這個程序,如下圖所示:
這裡寫圖片描述
那時還不懂什麼是程序,但是能猜到大概的意思應該就是一個程式在執行時的狀態。
最近的一段時間在學習Linux方面的東西,對程序做了進一步的瞭解,下面就來看一看程序的相關知識。
二、程序的基本概念
1、先來看一下不同的書籍上對程序是如何定義的
(1)程式的一個執行例項;
(2)作業系統對一個正在執行的程式的抽象;
(3)能分配處理器並且由處理器執行的實體;
(4)核心觀點:擔當分配系統資源(CPU時間,記憶體)的實體。
程序的兩個基本元素是程式程式碼(可能被執⾏行相同程式的其他程序共享)和程式碼相關聯的資料集。
三、對程序定義的幾點疑問


看了以上程序的概念,我有三點疑惑
1、程式和程序有什麼區別?
經過查詢資料,總結了一下兩點區別:
(1)儲存的位置不同
程序是載入到記憶體中的,而程式實在硬碟上的二進位制檔案。
(2)屬性不同
程序是一個動態的概念,是程式正在執行時的過程;而程式是一個靜態的概念,是一些預先編譯好的指令和資料集合的二進位制檔案。
2、程序是如何來分配系統資源的?
(1)首先我們來了解一下什麼叫做“多工系統”?
你的PC機上的所有應用程式都以程序的方式在執行,當然應用程式是如何建立程序的,這個我們在後面進行討論。每個程序都有自己獨立的地址空間,使得程序之間可以相互隔離。CPU由作業系統統一進行分配,但是是根據什麼進行分配的呢,當然是根據程序的優先順序,優先順序高的程序能優先得到CPU的資源。
(2)再來了解什麼叫做“搶佔式分配”?
如上所說,當某一個程序的執行時間超出了一定範圍,它長時間佔用CPU,那麼作業系統就要將該程序暫停了,強制剝奪CPU的資源給目前最需要的程序,這就是所謂的搶佔式分配,現在大多數的作業系統都是採用這一方式。
通過以上的描述,我們對程序是如何分配CPU資源的有了一個大概的瞭解,當然很多細節性的問題還沒有涉及到,通過對程序的更深入的理解,可以及時進行補充。
3、處理器又是如何執行程序的?
(1)處理器的分類
處理器可以分為單核處理器和多核處理器,所謂的單核處理器就是隻包含一個CPU的處理器;而多核處理器就是將多個CPU整合在一個晶片上的處理器。
(2)以單核處理器為例來說明處理器是如何執行程序的
在說明這個之前我們要了解到,在系統上執行程式的時候,我們會得到一個假象,那就是CPU好像同時在執行多個程序,但是在任何時刻,單處理器都只能執行一個程序的程式碼。這又是怎麼回事呢?這種現象是由我們的處理器在程序之間切換實現的,具體的切換過程舉例進行說明:
這裡寫圖片描述

文字描述:剛開始執行的是A程序,即等待命令列上的輸入,但是此時B進行要執行,怎麼辦呢,對於單核的處理器來說,在任何時刻只能執行一個程序,於是就只能進行切換了,A進行首先要通過系統呼叫將自己的控制權傳給作業系統核心,作業系統核心拿到A的控制權之後會做三件事,先將A的上下文環境儲存起來,以便後續從A停止的地方繼續執行A程序,然後再將控制權給B程序,並且建立B程序的上下文環境,表示B程序現在有權利佔用系統資源了。至此就是將A程序切換到B程序的全過程,當然要切換回去也是同樣的道理。
四、幾個常見的概念
1、邏輯控制流
邏輯控制流就是程式計數器PC裡面儲存的序列值,簡稱邏輯流。
2、併發流
一個邏輯流與另一個邏輯流在時間上的重疊稱為併發流。為了更好的理解這個概念我們舉例來進行說明:
這裡寫圖片描述

現在我們來判斷一下程序三個程序之間的關係:
B是在A開始之後,結束之前開始執行的,即AB時間上有重疊,因此AB併發執行,同理可以判斷AC併發執行,BC不是併發執行。
3、並行流
如果兩個流在時間上有重疊,並且它們執行在不同的處理器或者PC機上,那麼我們稱他們為並行流。
4、多工和時間片
一個程序和另外一個程序輪流執行的概念成為多工。
一個程序執行它的控制流的每一部分的時間段稱為時間片。
例如:
上圖中的程序A就有兩個時間片;程序B只有一個時間片;程序C有兩個時間片。