作業系統中作業、程式、程序、執行緒及管程的定義與聯絡
概念
作業
作業是指使用者在一次解題或一個事務處理過程中要求計算機系統所做工作的集合。它包括程式,資料及其作業說明書。
程式
程式是為解決一個資訊處理任務而預先編制的工作執行方案,是由一串CPU能夠執行的基本指令組成的序列,每一條指令規定了計算機應進行什麼操作(如加、減、乘、判斷等)及操作需要的有關資料。
程序
程序指是具有一定獨立功能的程式關於某個資料集合上的一次執行活動,是系統進行資源分配和排程的一個獨立單位。
執行緒
執行緒是指執行緒是程序中的一個實體,是被系統獨立排程和執行的基本單位。
管程
管程是指管程實際上是定義了一個數據結構和在該資料結構上的能為併發程序所執行的一組操作,這組操作能同步程序和改變管程中的資料。
關係
(1)作業是在較早的多道批處理系統中提出的,現代作業系統基本沒有這個概念。一般來說作業是可以包含多個程式或資料集,但至少有一個程式。怎麼理解呢?個人任務程式和作業可以從功能的角度來理解。打個比方,今天班主任要求我們進行班級大掃除,這可以看做一個作業。而這個作業被我們分成擦窗戶,洗地板等等,這些所謂的“子作業”可以看成是一個一個的程式。
(2)一個程式可以有多個程序,一個執行緒可以包含多個程式。前半句比較好理解,那上面那個例子來說,比如說實現擦窗戶這個程式。有些人(資源)去準備好布(資源)和水(資源),供別人擦洗;有些人(資源)接布程序擦窗戶。這便可以理解為實現這個程式功能的兩個執行緒。而為什麼又說一個執行緒可以包含多個程式?仔細看清楚是“包含”。其實便是在這個程序裡面直接呼叫其他程式,也就是使用程式的功能。
(3)一個程序至少有一個執行緒. 執行緒的劃分尺度小於程序,多個執行緒共享程序記憶體。多執行緒的意義在於一個應用程式中,有多個執行部分可以同時執行。但作業系統並沒有將多個執行緒看做多個獨立的應用,來實現程序的排程和管理以及資源分配。這就是程序和執行緒的重要區別。 一個執行緒可以建立和撤銷另一個執行緒;同一個程序中的多個執行緒之間可以併發執行。還是拿上面的例子來講,實現擦窗戶這個功能的程式建立了兩個程序。需要的資源有:人、布、水。這些資源早在建立的時候就已經申請了。第一條程序“有些人(資源)去準備好布(資源)和水(資源),供別人擦洗“現在可以開闢多個執行緒來細化這個任務。可以叫其中一個人去打水,其中一個人負責洗布,其中一個人傳遞乾淨的布等,這便是一個個執行緒。而無論開闢多少個執行緒,使用的資源都是來自程序已申請的,無法脫離程序而獨自存在。另外,執行緒之間是獨立的,打水的,洗布的,傳遞的,只要自己幹好自己的活,沒有必然的相互依賴的關係。而且可以同時進行,這便是多執行緒的好處所在。
(4)而對於管程呢?通俗的理解就是”管理程序“。死鎖問題的存在導致管程於1971年被Dijkstra提出,說道:把所有程序對某一種臨界資源的同步操作都集中起來,構成一個所謂的祕書程序。凡要訪問該臨界資源的程序,都需先報告祕書,由祕書來實現諸程序對同一臨界資源的互斥使用。
管程由四部分組成:
1).管程內部的共享變數。
2).管程內部的條件變數。
3).管程內部並行執行的程序。
4).對於區域性與管程內部的共享資料設定初始值的語句。
回到例子,上面說道兩個程序中,有些人去準備布和水的工作,有些人要擦窗戶。那麼問題來了。準備布工作的人的名單中卻寫著準備水的人,那麼問題來了,這個人到底該幹嗎?如果準備布工作要了這個人,這個人一直工作著,而準備水的工作一直等著他去做,那麼就一直等著嗎?更極端的情況下,這個一直在洗布就不去換水,這便是死鎖的一個情形。沒關係,此時班主任來了,看到在場的情形,他決定了此時這個人應該去幹嘛,解決了用人衝突的問題,其作用類似管程。