有關程序的一些基本概念

2021-06-02 08:28:40 字數 4184 閱讀 6577

對程序的初步描述

一.和程序有關的一些概念

①乙個程序就是乙個正在執行程式的例項,包括程式計數器,暫存器和變數的當前值。

從概念上說,每個程序擁有它自己的虛擬cpu,當然真實的cpu在各個程序之間來回切換。

②在某一瞬間,cpu只能執行乙個程序,但在一秒鐘時間他可以執行多個程序,這一就產生了並行的錯覺,

通產這就是人們所說的偽並行。

③在偽並行狀態下cpu在程序之間的快速切換稱為多道程式設計。

④乙個程序是某種型別的乙個活動,他有程式,輸入,輸出以及狀態,單個處理器可以被若干個狀態程序共享,它使用某種排程演算法

決定何時停止乙個程序的工作,並轉而為另外乙個程序提供服務,值得注意的是乙個程序如果執行了2遍則算作2個程序。

二.程序的建立

㈠有4種主要的方式建立程序

①系統初始化

②執行了正在執行的程序所呼叫的程序建立了系統呼叫

③使用者請求建立乙個新的程序

④乙個批處理作業的初始化

㈡一些和程序建立有關的概念

①停留在後台諸如電子郵件,web頁面,新聞,列印之類活動的程序稱為守護程序

②在unix系統中,只有乙個系統呼叫可以用來建立新程序:fork,這個系統呼叫會建立乙個與呼叫程序相同的副本

③在windows中,情形正好相反,乙個win32函式呼叫creatprocess既處理程序的建立,也負責把正確的程式裝入新的程序。

④在unix系統中,子程序的的初始位址空間是父程序的乙個副本,但這裡涉及兩個不同的位址空間,不可寫的記憶體區是共享的

⑤在windows中,從一開始父程序的位址空間和子程序的位址空間就是不同的

三.程序的終止

程序通常有4種方式終止

①正常退出

②出錯退出(自願的)

③嚴重錯誤(非自願)

④被其他程序殺死

多數程序是由於完成了他們的工作而終止,

unix中該系統呼叫是exit,而在windows中相關的系統呼叫時exitprocess

unix中結束程序的系統呼叫是kill,win32對應的函式是terminateprocess

四.程序的層次結構

某些系統中,當程序建立了另乙個程序後,父程序和子程序就以某種形式繼續保持關聯,

子程序可以建立更多的程序,但注意的程序只有乙個父程序,這與有性繁殖不同;

在unix中,程序和他所有的子女以及後代共同組成了乙個程序組,當使用者從鍵盤發出乙個訊號時,該訊號被送到當前與鍵盤相關的程序

組中的所有成員(他們通常是當前視窗建立的所有活動程序),每個程序可以分別捕獲該訊號,忽略該訊號,忽略該訊號或採取預設動作,

即該訊號被殺死)

這裡還有乙個例子,可以用來說明程序的層次的作用,考慮unix在啟動時如何初始化自己,乙個稱為init的特殊程序出現在啟動的映像

中,當它開始執行時,讀入乙個說明終端數量的檔案,接著,為每個終端建立乙個新的程序,這些程序等待使用者的登入,如果有乙個使用者登

錄成功,該登入程序就準備乙個shell準備接受命令.所有接受的這些命令會啟動更多的程序,以此類推,這樣,在整個系統中都是以init

為根的一顆樹.

相反windows中沒有程序的層次概念,所有的程序都是地位相同的,唯一類似程序層次的暗示是在建立程序的時候,父程序得到乙個特別

的令牌(稱為控制代碼),該控制代碼可以用來控制子程序,但是它有權把這個令牌傳送給某個其他的程序,這樣就不存在程序層次了,在unix中,

程序就不能剝奪其子女的"繼承權".

五.程序的狀態

①執行態

②就緒態

③堵塞態

1.執行--->堵塞---->程序為等待輸入而堵塞

2.執行--->就緒---->排程程式選擇另乙個程序

3.就緒--->執行---->排程程式選擇這個程序

4.堵塞--->就緒---->出現有效的輸入

作業系統最底層的是排程程式,在它上面有許多程序,所有關於中斷處理,啟動程序和停止程序的具體細節都隱藏在排程程式中,

那麼是這樣麼?實際上,排程程式是一段非常短小的程式.作業系統的其他部分被簡單的組織成程序的形式,不過很少有真實的系統是以

這樣理想的方式構造的.

六.程序的實現

(1)為了實現程序模型,作業系統維護著一張表(乙個結構陣列),即程序表(process table).

每個程序占用乙個程序表項.(有的作者稱這為程序控制塊)

該表項包含了程序狀態的重要資訊,包括程式計數器,堆疊指標,記憶體分配狀況,所開啟的檔案的狀態,帳號和排程資訊,以及其他在程序

中由執行態轉換到阻塞態時必須儲存的資訊,從而保證該程序隨後能再次啟動,就像從未被中斷過一樣.

典型的程序表項中的一些字段

程序管理               

儲存管理             

檔案管理              

暫存器正文段指標

根目錄                  

程式狀態字

資料段指標    

工作目錄

程式計數器

堆疊段指標

檔案描述符

堆疊指標

使用者id

程序狀態  

組id

優先順序

排程引數

程序id

父程序 父程序

程序組

訊號

程序開始時間

使用cpu時間

子程序的cpu時間

下次報警時間

(2)在了解了程序表後,就可以對單個(或者每乙個)cpu上如何維持多個順序程序做出更多的描述

與每乙個io關聯的是乙個稱為中斷向量(interrupt vector)的位置(靠近記憶體底部的固定區域),它包括中斷服務程式的入口位址.假設

當多個磁碟中斷發生時,使用者程序3正在執行,則中斷硬體將程式計數器,程式狀態字,有時還有乙個或多個暫存器壓入堆疊,計算機隨機

跳轉到中斷所指示的位址,這些是硬體完成的所有操作,然後軟體,特別是中斷服務例程就接管剩餘的工作.

所有的中斷程式都從儲存暫存器開始,對於當前程序而言,通常實在程序表項中,隨後,會從堆疊中刪除由硬體中斷機制存入堆疊的那部

分資訊,並將堆疊指標指向乙個由程序處理程式所使用的臨時堆疊,一些諸如儲存暫存器值和設定堆疊指標等操作,無法用c語言這類高

級語言描述,所以這些操作通過乙個短小的組合語言例程來完成,通常該例程可以供所有的中斷使用,因為無論中斷是怎麼樣引起的,有

關儲存暫存器的工作則完全是一樣的.

當該例程結束後,他呼叫乙個c過程處理某個特別定的中斷型別剩下的工作,.在完成有關工作之後,大概就會使某些程序就緒,接著呼叫

排程程式,決定隨後該執行哪個程序,隨後將控制轉給一段彙編**,為當前的程序裝入暫存器值以及記憶體對映並啟動該程序執行,

當該程序結束時,作業系統顯示乙個提示符並等待新的命令,一旦它接到新命令,就能裝入新的程式進入記憶體,覆蓋前乙個程式.

(3)中斷發生後作業系統底層所做的一些事情

1.硬體壓入堆疊程式計數器等.

2.硬體從中斷向量裝入新的程式計數器.

3.組合語言過程儲存暫存器值.

4.組合語言過程設定新的堆疊,

5.c中斷服務例程執行(典型的讀和緩衝輸入)

6.排程程式決定下乙個將執行的程序

7.組合語言過程開始執行新的當前程序

七.多道程式設計模型

設程序得到io操作的時間與其停留在記憶體中的時間的比為p.當記憶體中同時有n個程序時(n也被稱為多道程設計的道數),

cpu的利用率 = 1 - p的n次方

並行:程序和io同步

併發:多個程式同步執行

乙個計算的若干操作必須按照嚴格的先後次序順序地執行,這類計算過程就是程式的順序執行過程

(1)多道程式設計應該考慮到的3個問題:

1.儲存保護

主儲存器中同時存放了多個作業的程式,為了避免相互干擾,必須提供必要的手段使得主儲存器中的各道程式只能訪問自己的區域

2.程式浮動

程式可以隨機的從主儲存器的乙個區域移動到另乙個區域,程式被移動後,仍然不絲毫不影響他的執行,這種技術稱為程式浮動

3.資源的分配和排程

(2)並行工作倒數與系統效率不成正比

1.主儲存器空間大小限制了可同時裝入的程式數量.

2.外圍裝置的數量也是乙個制約條件

3.多個程式同時要求使用同一資源的情況也會經常發生

程序的一些基本的概念的筆記......備份....

程序的一些基本概念

1.程序可以 2.關於建立程序 使用createprocess函式建立乙個程序,函式原型為 bool createprocess lptstr lpcommandline,lpsecurity attributes lpprocessattributes,lpsecurity attributes ...

程序通訊的一些基本概念

1.目的 1 資料傳輸 乙個程序需要將他的程序資料傳送給另乙個程序。2 資源共享 多個程序之間共享同樣的資源。3 通知事件 乙個程序需要向另乙個或一組程序傳送訊息,通知他們發生了某種事件。4 程序控制 有些程序希望完全控制另乙個程序的執行 如debug程序 此時控制程序希望能夠攔截另乙個程序的所有操...

有關網路爬蟲的一些基本概念 一

網路爬蟲 又被稱為網頁蜘蛛,網路機械人,在fofa社群中間,更經常的稱為網頁追逐者 是一種按照一定的規則,自動的抓取全球資訊網資訊的程式或者指令碼。uri uniform resource identifier 統一資源識別符號 一般由三部分組成 1.訪問資源的命名機制 方案名 協議 2.存放資源的...