面試整理-計算機作業系統部分
目錄
1、計算機作業系統學習筆記
1、程序和執行緒的關係和區別。
定義:
程序:具有一定獨立功能的程式關於某個資料集合上的一次執行活動,程序是系統進行資源分配和排程的一個獨立單位.
執行緒:程序的一個實體,是CPU排程和分派的基本單位,它是比程序更小的能獨立執行的基本單位.執行緒自己基本上不擁有系統資源,只擁有一點在執行中必不可少的資源(如程式計數器,一組暫存器和棧),但是它可與同屬一個程序的其他的執行緒共享程序所擁有的全部資源.
關係:
一個執行緒可以建立和撤銷另一個執行緒;同一個程序中的多個執行緒之間可以併發執行.
相對程序而言,執行緒是一個更加接近於執行體的概念,它可以與同進程中的其他執行緒共享資料,但擁有自己的棧空間,擁有獨立的執行序列。
區別:
- 程序是資源分配的最小單位,執行緒是程式執行的最小單位。
- 程序有自己的獨立地址空間,每啟動一個程序,系統就會為它分配地址空間,建立資料表來維護程式碼段、堆疊段和資料段,這種操作非常昂貴。而執行緒是共享程序中的資料的,使用相同的地址空間,因此CPU切換一個執行緒的花費遠比程序要小很多,同時建立一個執行緒的開銷也比程序要小很多。
- 執行緒之間的通訊更方便,同一程序下的執行緒共享全域性變數、靜態變數等資料,而程序之間的通訊需要以通訊的方式(IPC)進行。不過如何處理好同步與互斥是編寫多執行緒程式的難點。
- 但是多程序程式更健壯,多執行緒程式只要有一個執行緒死掉,整個程序也死掉了,而一個程序死掉並不會對另外一個程序造成影響,因為程序有自己獨立的地址空間。
2、死鎖的必要條件,怎麼處理死鎖。
死鎖的四大必要條件:
1、互斥條件
程序對所分配到的資源進行排它性使用,即在一段時間內某資源只由一個程序佔用。如果此時還有其它程序請求資源,則請求者只能等待,直至佔有資源的程序用畢釋放。
2、請求和保持條件
程序已經保持至少一個資源,但又提出了新的資源請求,而該資源已被其它程序佔有,此時請求程序阻塞,但又對自己已獲得的其它資源保持不放。
3、不剝奪條件
程序已獲得的資源,在未使用完之前,不能被剝奪,只能在使用完時由自己釋放。
4、環路等待條件
在發生死鎖時,必然存在一個程序——資源的環形鏈,即程序集合{P0,P1,P2,···,Pn}中的P0正在等待一個P1佔用的資源;P1正在等待P2佔用的資源,……,Pn正在等待已被P0佔用的資源,也就是若干程序之間形成一種頭尾相接的迴圈等待資源關係。
這四個條件是死鎖的必要條件,只要系統發生死鎖,這些條件必然成立,而只要上述條件之一不滿足,就不會發生死鎖。
處理死鎖的策略:
- 忽略該問題。例如鴕鳥演算法,該演算法可以應用在極少發生死鎖的的情況下。為什麼叫鴕鳥演算法呢,因為傳說中鴕鳥看到危險就把頭埋在地底下,可能鴕鳥覺得看不到危險也就沒危險了吧。跟掩耳盜鈴有點像。
- 監測死鎖並且恢復
- 仔細地對資源動態分配,以避免死鎖。
- 通過破除死鎖四個必要條件,以防止死鎖產生。
預防死鎖的方法:
1、破除“互斥”條件:
就是在系統裡取消互斥。若資源不被一個程序獨佔使用,那麼死鎖是肯定不會發生的。但一般來說在所列的四個條件中,“互斥”條件是無法破壞的。因此,在死鎖預防裡主要是破壞其他幾個必要條件,而不去涉及破壞“互斥”條件。
2、破除“佔有並等待”條件:
就是在系統中不允許程序在已獲得某種資源的情況下,申請其他資源。即要想出一個辦法,阻止程序在持有資源的同時申請其他資源。
方法一:建立程序時,要求它申請所需的全部資源,系統或滿足其所有要求,或什麼也不給它。這是所謂的 “ 一次性分配”方案。
方法二:要求每個程序提出新的資源申請前,釋放它所佔有的資源。這樣,一個程序在需要資源S時,須先把它先前佔有的資源R釋放掉,然後才能提出對S的申請,即使它可能很快又要用到資源R。
3、破除“不可搶佔”條件:
破壞“不可搶佔”條件就是允許對資源實行搶奪。
方法一:如果佔有某些資源的一個程序進行進一步資源請求被拒絕,則該程序必須釋放它最初佔的資源,如果有必要,可再次請求這些資源和另外的資源。
方法二:如果一個程序請求當前被另一個程序佔有的一個資源,則作業系統可以搶佔另一個程序,要求它釋放資源。只有在任意兩個程序的優先順序都不相同的條件下,方法二才能預防死鎖。
4、破除“迴圈等待”條件:
破壞“迴圈等待”條件的一種方法,是將系統中的所有資源統一編號,程序可在任何時刻提出資源申請,但所有申請必須按照資源的編號順序(升序)提出。這樣做就能保證系統不出現死鎖。
死鎖的解除:
- 資源剝奪法。掛起某些死鎖程序,並搶佔它的資源,將這些資源分配給其他的死鎖程序。但應防止被掛起的程序長時間得不到資源,而處於資源匱乏的狀態。
- 撤銷程序法。強制撤銷部分、甚至全部死鎖程序並剝奪這些程序的資源。撤銷的原則可以按程序優先順序和撤銷程序代價的高低進行。
- 程序回退法。讓一(多)個程序回退到足以迴避死鎖的地步,程序回退時自願釋放資源而不是被剝奪。要求系統保持程序的歷史資訊,設定還原點。
(1)安全序列:
安全序列{P1,P2,...,Pn}是這樣組成的:若對於每一個程序Pi,它需要的附加資源可以被系統中當前可用資源加上所有程序Pj當前佔有資源之和所滿足,則{P1,P2,...,Pn}為一個安全序列,這時系統處於安全狀態,不會進入死鎖狀態。
(2)銀行家演算法:
銀行家演算法是從當前狀態出發,逐個按安全序列檢查各客戶誰能完成其工作,然後假定其完成工作且歸還全部貸款,再進而檢查下一個能完成工作的客戶,......。如果所有客戶都能完成工作,則找到一個安全序列,銀行家才是安全的。
3、記憶體管理方式:段儲存、頁儲存和段頁儲存。
(1)頁儲存
基本概念:
頁式儲存管理將程式邏輯地址空間劃分為固定大小的頁(page),而實體記憶體劃分為同樣大小的頁框(page frame)。為方便地址轉換,頁面大小應是2的整數冪。每一個作業有一個頁表,用來記錄各個頁在記憶體中所對應的塊(頁框)。
優點是沒有外碎片,每個內碎片不超過頁的大小。
缺點是程式全部裝入記憶體,要求有相應的硬體支援。例如地址變換機構缺頁中斷的產生和選擇淘汰頁面等都要求有相應的硬體支援。這增加了機器成本,增加了系統開銷。
地址結構:
地址結構包含兩部分:前一部分為頁號P,後一部分為頁內偏移量W。其中頁號與頁內偏移量所佔多少位,與頁面的大小和主存的最大容量有關。
每頁大小為4KB,主存大學為4GB。則地址長度為32 位,其中0~11位為頁內地址,即:12~31位為頁號,地址空間最多允許有2^20頁。
地址變換機制:
上面介紹的地址變換過程可知,若頁表全部放在記憶體中,則存取一個數據或一條指令至少要訪問兩次記憶體:一次是訪問頁表,確定所存取的資料或指令的實體地址,第二次才根據該地址存取資料或指令。顯然,這種方法比通常執行指令的速度慢了一半。
為此,在地址變換機構中增設了一個具有並行查詢能力的高速緩衝儲存器——快表,又稱聯想暫存器(TLB),用來存放當前訪問的若干頁表項,以加速地址變換的過程。
請求式分頁儲存管理:
基本概念:
請求分頁系統建立在基本分頁系統基礎之上,為了支援虛擬儲存器功能而增加了請求調頁功能和頁面置換功能。請求分頁是目前最常用的一種實現虛擬儲存器的方法。在請求分頁系統中,只要求將當前需要的一部分頁面裝入記憶體,便可以啟動作業執行。在作業執行過程中,當所要訪問的頁面不在記憶體時,再通過調頁功能將其調入,同時還可以通過置換功能將暫時不用的頁面換出到外存上,以便騰出記憶體空間。
段頁式管理的段式管理與頁式管理方案結合而成的所以具有他們兩者的優點。但反過來說,由於管理軟體的增加,複雜性和開銷也就隨之增加了。另外需要的硬體以及佔用的記憶體也有所增加。使得速度降下來。
擴充的頁表:
地址變換機制:
頁面置換演算法:
1、最佳演算法(OPT演算法)
用來評價其他演算法,使用缺頁中斷率:
f = F / A(其中F為作業失敗訪問的次數,A為作業總的訪問次數)
2、先進先出演算法(FIFO演算法)
淘汰在記憶體駐留時間最長的頁面。
3、最近最久未使用淘汰演算法(LRU演算法)
淘汰最久沒有被使用的頁面。
4、最不經常使用淘汰演算法(LFU演算法)
淘汰一段時間內,訪問次數最少的頁面。
(2)段儲存
基本概念:
段式儲存管理要求每個作業的地址空間按照程式自身的邏輯劃分為若干段,每個段都有一個唯一的內部段號。
優點:
- 可以分別編寫和編譯,可以針對不同型別的段採用不同的保護,可以按段為單位來進行共享,包括通過動態連結進行程式碼共享。
- 沒有內碎片,外碎片可以通過記憶體緊縮來消除。
缺點:
要求程式全部裝入記憶體,沒有足夠的記憶體,程式就不能執行。
地址結構:
邏輯地址由段號S與段內偏移量W兩部分組成。
段號為16位,段內偏移量為16位,則一個作業最多可有2^16=65536個段,最大段長為64KB。
地址變換機制:
(3)段頁儲存
基本概念:
在段頁式儲存中,每個分段又被分成若干個固定大小的頁。
地址結構:
邏輯地址由段號S、段內頁號P與頁內偏移量W兩部分組成。
地址變換機制:
段式和頁式管理的區別:
頁式和段式系統有許多相似之處。比如,兩者都採用離散分配方式,且都通過地址對映機構來實現地址變換。但概念上兩者也有很多區別,主要表現在:
- 需求:頁是資訊的物理單位,分頁是為了實現離散分配方式,以減少記憶體的碎片,提高記憶體的利用率。或者說,分頁僅僅是由於系統管理的需要,而不是使用者的需要。段是資訊的邏輯單位,它含有一組其意義相對完整的資訊。分段的目的是為了更好地滿足使用者的需要。
- 一條指令或一個運算元可能會跨越兩個頁的分界處,而不會跨越兩個段的分界處。
- 大小:頁大小固定且由系統決定,把邏輯地址劃分為頁號和頁內地址兩部分,是由機器硬體實現的。段的長度不固定,且決定於使用者所編寫的程式,通常由編譯系統在對源程式進行編譯時根據資訊的性質來劃分。
- 邏輯地址表示:頁式系統地址空間是一維的,即單一的線性地址空間,程式設計師只需利用一個識別符號,即可表示一個地址。分段的作業地址空間是二維的,程式設計師在標識一個地址時,既需給出段名,又需給出段內地址。
- 比頁大,因而段表比頁表短,可以縮短查詢時間,提高訪問速度。
4、程序的幾種狀態。
注意:建立和退出不是程序的狀態。阻塞和就緒的區別:阻塞是等待除CPU以外的資源,而就緒等待的是CPU資源。
- 就緒——執行:對就緒狀態的程序,當程序排程程式按一種選定的策略從中選中一個就緒程序,為之分配了處理機後,該程序便由就緒狀態變為執行狀態;
- 執行——阻塞:正在執行的程序因發生某等待事件而無法執行,則程序由執行狀態變為阻塞狀態,如程序申請資源(主存空間或外部裝置)得不到滿足時變成等待資源狀態;
- 阻塞——就緒:處於阻塞狀態的程序,在其等待的事件已經發生,如資源得到滿足時,處於等待狀態的程序並不馬上轉入執行狀態,而是先轉入就緒狀態,然後再由系統程序排程程式在適當的時候將該程序轉為執行狀態;
- 執行——就緒:正在執行的程序,因時間片用完而被暫停執行,或在採用搶先式優先順序排程演算法的系統中,當有更高優先順序的程序要執行而被迫讓出處理機時,該程序便由執行狀態轉變為就緒狀態。
5、IPC幾種通訊方式。
- 管道( pipe ):管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。
- 有名管道 (named pipe) : 有名管道也是半雙工的通訊方式,但是它允許無親緣關係程序間的通訊。
- 訊號量( semophore ) : 訊號量是一個計數器,可以用來控制多個程序對共享資源的訪問。它常作為一種鎖機制,防止某程序正在訪問共享資源時,其他程序也訪問該資源。因此,主要作為程序間以及同一程序內不同執行緒之間的同步手段。
- 訊息佇列( message queue ) : 訊息佇列是由訊息的連結串列,存放在核心中並由訊息佇列識別符號標識。訊息佇列克服了訊號傳遞資訊少、管道只能承載無格式位元組流以及緩衝區大小受限等缺點。
- 訊號 ( signal ) : 訊號是一種比較複雜的通訊方式,用於通知接收程序某個事件已經發生。
- 共享記憶體( shared memory ) :共享記憶體就是對映一段能被其他程序所訪問的記憶體,這段共享記憶體由一個程序建立,但多個程序都可以訪問。共享記憶體是最快的 IPC 方式,它是針對其他程序間通訊方式執行效率低而專門設計的。它往往與其他通訊機制,如訊號量,配合使用,來實現程序間的同步和通訊。
- 套接字( socket ) : 套解口也是一種程序間通訊機制,與其他通訊機制不同的是,它可用於不同機器間的程序通訊。
6、執行緒同步方式。
- 互斥量:採用互斥物件機制,只有擁有互斥物件的執行緒才有訪問公共資源的許可權。因為互斥物件只有一個,所以可以保證公共資源不會被多個執行緒同時訪問。
- 訊號量:它允許同一時刻多個執行緒訪問同一資源,但是需要控制同一時刻訪問此資源的最大執行緒數量。當需要一個計數器來限制可以使用某共享資源的執行緒數目時,可以使用“訊號量”物件。
- 事件(訊號):通過通知操作的方式來保持多執行緒同步,還可以方便的實現多執行緒優先順序的比較操作。即事件機制允許一個執行緒在處理完一個任務後,主動喚醒另外一個執行緒執行任務。
- 臨界區:臨界資源(一次只允許一個程序(一個執行緒)使用的資源),訪問臨界資源的程式碼叫做臨界區。
7、什麼是虛擬記憶體。
虛擬記憶體別稱虛擬儲存器(Virtual Memory)。
- 電腦中所執行的程式均需經由記憶體執行,若執行的程式佔用記憶體很大或很多,則會導致記憶體消耗殆盡。為解決該問題,Windows中運用了虛擬記憶體技術,即勻出一部分硬碟空間來充當記憶體使用。
- 當記憶體耗盡時,電腦就會自動呼叫硬碟來充當記憶體,以緩解記憶體的緊張。若計算機執行程式或操作所需的隨機儲存器(RAM)不足時,則 Windows 會用虛擬儲存器進行補償。它將計算機的RAM和硬碟上的臨時空間組合。
- 當RAM執行速率緩慢時,它便將資料從RAM移動到稱為“分頁檔案”的空間中。將資料移入分頁檔案可釋放RAM,以便完成工作。 一般而言,計算機的RAM容量越大,程式執行得越快。
- 若計算機的速率由於RAM可用空間匱乏而減緩,則可嘗試通過增加虛擬記憶體來進行補償。但是,計算機從RAM讀取資料的速率要比從硬碟讀取資料的速率快,因而擴增RAM容量(可加記憶體條)是最佳選擇。
8、虛擬地址、邏輯地址、線性地址和實體地址的區別。
虛擬地址是由程式產生的由段選擇符(段號)和段內偏移地址組成的地址。這兩部分組成的地址並沒有直接訪問實體記憶體,而是要通過分段地址的變換處理後才會對應到相應的實體記憶體地址。
邏輯地址指由程式產生的段內偏移地址。有時把邏輯地址當成虛擬地址,兩者並沒有明確的界限。
線性地址是指虛擬地址到實體地址變換的中間層, 是處理器可定址的記憶體空間(稱為線性地址空間)中的地址。程式程式碼會產生邏輯地址,或者說段中的偏移地址,加上相應段基址就生成了一個線性地址。如果啟用了分頁機制,那麼線性地址可以再經過變換產生實體地址。若是沒有采用分頁機制,那麼線性地址就是實體地址。
實體地址是指現在 CPU 外部地址總線上的定址實體記憶體的地址訊號,是地址變換的最終結果。
9、什麼是緩衝區溢位?有什麼危害?其原因是什麼?
緩衝區溢位是指當計算機向緩衝區填充資料時超出了緩衝區本身的容量,溢位的資料覆蓋在合法資料上。(蠕蟲)
危害:
程式崩潰,導致拒絕服務。
跳轉並且執行一段惡意程式碼。
原因:
程式沒有仔細檢查使用者輸入。
10、作業系統中的程序排程策略有哪些?
一、先來先服務和短作業(程序)優先排程演算法
(1)先來先服務排程演算法
先來先服務(FCFS)排程演算法是一種最簡單的排程演算法,該演算法既可用於作業排程,也可用於程序排程。當在作業排程中採用該演算法時,每次排程都從後備作業佇列中選擇一個或多個最先進入該佇列的作業,將它們調入記憶體,為它們分配資源、建立程序,然後放入就緒佇列。在程序排程中採用FCFS演算法時,則每次排程是從就緒佇列中選擇一個最先進入該佇列的程序,為之分配處理機,使之投入執行。該程序一直執行到完成或發生某事件而阻塞後才放棄處理機。
(2)短作業(程序)優先排程演算法
短作業(程序)優先排程演算法SJ(P)F,是指對短作業或短程序優先排程的演算法。它們可以分別用於作業排程和程序排程。短作業優先(SJF)的排程演算法是從後備佇列中選擇一個或若干個估計執行時間最短的作業,將它們調入記憶體執行。而短程序優先(SPF)排程演算法則是從就緒佇列中選出一個估計執行時間最短的程序,將處理機分配給它,使它立即執行並一直執行到完成,或發生某事件而被阻塞放棄處理機時再重新排程。
二、高優先權優先排程演算法
(1)優先權排程演算法的型別
為了照顧緊迫型作業,使之在進入系統後便獲得優先處理,引入了最高優先權優先(FPF)排程演算法。此演算法常被用於批處理系統中,作為作業排程演算法,也作為多種作業系統中的程序排程演算法,還可用於實時系統中。當把該演算法用於作業排程時,系統將從後備佇列中選擇若干個優先權最高的作業裝入記憶體。當用於程序排程時,該演算法是把處理機分配給就緒佇列中優先權最高的程序,這時,又可進一步把該演算法分成如下兩種。
1、非搶佔式優先權演算法
在這種方式下,系統一旦把處理機分配給就緒佇列中優先權最高的程序後,該程序便一直執行下去,直至完成;或因發生某事件使該程序放棄處理機時,系統方可再將處理機重新分配給另一優先權最高的程序。這種排程演算法主要用於批處理系統中;也可用於某些對實時性要求不嚴的實時系統中。
2、搶佔式優先權排程演算法
在這種方式下,系統同樣是把處理機分配給優先權最高的程序,使之執行。但在其執行期間,只要又出現了另一個其優先權更高的程序,程序排程程式就立即停止當前程序(原優先權最高的程序)的執行,重新將處理機分配給新到的優先權最高的程序。因此,在採用這種排程演算法時,是每當系統中出現一個新的就緒程序i 時,就將其優先權Pi與正在執行的程序j 的優先權Pj進行比較。如果Pi≤Pj,原程序Pj便繼續執行;但如果是Pi>Pj,則立即停止Pj的執行,做程序切換,使i 程序投入執行。顯然,這種搶佔式的優先權排程演算法能更好地滿足緊迫作業的要求,故而常用於要求比較嚴格的實時系統中,以及對效能要求較高的批處理和分時系統中。
(2)高響應比優先排程演算法
在批處理系統中,短作業優先演算法是一種比較好的演算法,其主要的不足之處是長作業的執行得不到保證。如果我們能為每個作業引入前面所述的動態優先權,並使作業的優先順序隨著等待時間的增加而以速率a 提高,則長作業在等待一定的時間後,必然有機會分配到處理機。該優先權的變化規律可描述為:
由於等待時間與服務時間之和就是系統對該作業的響應時間,故該優先順序又相當於響應比RP。據此,又可表示為:
有上式可以看出:
- 如果作業的等待時間相同,則要求服務的時間愈短,其優先權愈高,因而該演算法有利於短作業。
- 當要求服務的時間相同時,作業的優先權決定於其等待時間,等待時間愈長,其優先權愈高,因而它實現的是先來先服務。
- 對於長作業,作業的優先順序可以隨等待時間的增加而提高,當其等待時間足夠長時,其優先順序便可升到很高,從而也可獲得處理機。簡言之,該演算法既照顧了短作業,又考慮了作業到達的先後次序,不會使長作業長期得不到服務。因此,該演算法實現了一種較好的折衷。當然,在利用該演算法時,每要進行排程之前,都須先做響應比的計算,這會增加系統開銷。
三、基於時間片的輪轉排程演算法
(1)時間片輪轉法
系統將所有的就緒程序按先來先服務的原則排成一個佇列,每次排程時,把CPU 分配給隊首程序,並令其執行一個時間片。時間片的大小從幾ms 到幾百ms。當執行的時間片用完時,由一個計時器發出時鐘中斷請求,排程程式便據此訊號來停止該程序的執行,並將它送往就緒佇列的末尾;然後,再把處理機分配給就緒佇列中新的隊首程序,同時也讓它執行一個時間片。這樣就可以保證就緒佇列中的所有程序在一給定的時間內均能獲得一時間片的處理機執行時間。換言之,系統能在給定的時間內響應所有使用者的請求。
(2)多級反饋佇列排程演算法
前面介紹的各種用作程序排程的演算法都有一定的侷限性。如短程序優先的排程演算法,僅照顧短程序而忽略長程序,而且如果並未指明程序的長度,則短程序優先和基於程序長度的搶佔式排程演算法都將無法使用。而多級反饋佇列排程演算法則不必事先知道各種程序所需的執行時間,而且還可以滿足各種型別程序的需要,因而它是目前被公認的一種較好的程序排程演算法。在採用多級反饋佇列排程演算法的系統中,排程演算法的實施過程如下所述。
- 應設定多個就緒佇列,併為各個佇列賦予不同的優先順序。第一個佇列的優先順序最高,第二個佇列次之,其餘佇列額優先順序逐個降低。該演算法賦予各個佇列中程序執行時間片的大小也各不相同,在優先順序權越高的佇列中,為每個程序所規定的執行時間片就越小。例如第二個佇列的時間片要比第一個佇列的時間片長一倍,…,第i+1個佇列的時間片要比第i個佇列的時間片長一倍。
- 當一個新程序進入記憶體後,首先將它放入第一佇列的末尾,按照FCFS原則排隊等待排程。當輪到該程序執行時,如它能在改時間片內完成,即可準備撤離系統;如果它在一個時間片結束時尚未完成,排程程式便將該執行緒轉入第二佇列的末尾,在同樣地按照FCFS原則等待排程執行;如果它在第二佇列中執行一個時間片後仍未完成,再將它放入第三佇列,…,如此下去,當一個長作業(程序)從第一佇列一次降到第n佇列後,在第n佇列便採取按時間片輪轉的方式執行。
- 僅當第一佇列空閒時,排程程式才排程第二佇列中的程序;僅當1~(i-1)佇列均空時,才會排程第i佇列中的程序執行。如果處理機正在第i佇列中為某程序服務時,又有新程序進入優先權較高的佇列(第1~(i-1)中的任何一個佇列),則此時新程序將搶佔正在執行程序的處理機,即由排程程式把正在執行的程序放回到第i佇列的末尾,把處理機分配給新到的高優先權程序。
11、程序同步有哪幾種機制?
原子操作,訊號量機制,自旋鎖,管程,會合,分散式系統。
1、訊號量
用於程序間傳遞訊號的一個整數值。在訊號量上只有三種操作可以進行:初始化,P操作和V操作,這三種操作都是原子操作。
P操作(遞減操作)可以用於(申請一個單位資源)阻塞一個程序,V操作(增加操作)可以用於(釋放一個單位資源)解除阻塞一個程序。
基本原理是兩個或多個程序可以通過簡單的訊號進行合作,一個程序可以被迫在某一位置停止,直到它接收到一個特定的訊號。該訊號即為訊號量s。
為通過訊號量s傳送訊號,程序可執行原語semSignal(s);為通過訊號量s接收訊號,程序可執行原語semWait(s);如果相應的訊號仍然沒有傳送,則程序被阻塞,直到傳送完為止。
可把訊號量視為一個具有整數值的變數,在它之上定義三個操作:
- 一個訊號量可以初始化為非負數
- semWait操作使訊號量s減1.若值為負數,則執行semWait的程序被阻塞。否則程序繼續執行。
- semSignal操作使訊號量加1,若值大於或等於零,則被semWait操作阻塞的程序被解除阻塞。
2、管程
管程是由一個或多個過程、一個初始化序列和區域性資料組成的軟體模組,其主要特點如下:
- 區域性資料變數只能被管程的過程訪問,任何外部過程都不能訪問。
- 一個程序通過呼叫管程的一個過程進入管程。
- 在任何時候,只能有一個程序在管程中執行,呼叫管程的任何其他程序都被阻塞,以等待管程可用。
管程通過使用條件變數提供對同步的支援,這些條件變數包含在管程中,並且只有在管程中才能被訪問。有兩個函式可以操作條件變數:
- cwait(c):呼叫程序的執行在條件c上阻塞,管程現在被另一個程序使用。
- csignal(c):恢復執行在cwait之後因為某些條件而阻塞的程序。如果有多個這樣的程序,選擇其中一個;如果沒有這樣的程序,什麼都不做。
3、訊息佇列
在訊息傳遞系統中,程序間的資料交換是以格式化的訊息(Message)為單位的。若通訊的程序之間不存在可直接訪問的記憶體空間,則必須利用作業系統提供的訊息傳遞方式實現程序通訊。程序通過系統提供的傳送訊息和接收訊息兩個原語進行資料交換。
(1)直接通訊方式:
傳送程序直接把訊息放鬆給接收程序,並將它掛在接收程序的訊息緩衝佇列上,接收程序從訊息緩衝佇列中取得訊息。
(2)間接通訊方式:
傳送程序把訊息傳送到某個中間實體上,接收程序從中間實體取得訊息。這種中間實體一般稱為信箱,這種通訊方式又稱為信箱通訊方式。該通訊方式廣泛應用於計算機網路中,相應的通訊系統稱為電子郵件系統。
訊息傳遞的實際功能以一對原語的形式提供:
send(destination,message)
receive(source,message)
這是程序間程序訊息傳遞所需要的最小操作集。一個程序以訊息的形式給另一個指定的目標程序傳送訊息;程序通過執行receive原語接收訊息,receive原語中指明發送訊息的源程序和訊息。
訊號量機制:
優:PV操作能夠實現對臨界區的管理要求;實現簡單;允許使用它的程式碼休眠,持有鎖的時間可相對較長。
缺:一個訊號量只能置一次初值,以後只能對之進行p操作或v操作。由此也可以看到,訊號量機制必須有公共記憶體,不能用於分散式作業系統,這是它最大的弱點。訊號量機制功能強大,但使用時對訊號量的操作分散,而且難以控制,讀寫和維護都很困難。加重了程式設計師的編碼負擔;核心操作P-V分散在各使用者程式的程式碼中,不易控制和管理;一旦錯誤,後果嚴重,且不易發現和糾正。
管程:
訊號量機制功能強大,但使用時對訊號量的操作分散,而且難以控制,讀寫和維護都很困難。因此後來又提出了管程。
優: 集中式同步程序——管程。其基本思想是將共享變數和對它們的操作集中在一個模組中,作業系統或併發程式就由這樣的模組構成。這樣模組之間聯絡清晰,便於維護和修改,易於保證正確性。
缺:如果一個分散式系統具有多個CPU,並且每個CPU擁有自己的私有記憶體,它們通過一個區域網相連,那麼這些原語將失效。而管程在少數幾種程式語言之外又無法使用,並且,這些原語均未提供機器間的資訊交換方法。
12、OS的特性與功能。
OS的基本特性:
併發(最重要);共享;虛擬;非同步
OS的主要功能:資源管理器和使用者介面
資源管理功能:
處理機管理;儲存器管理;裝置管理;檔案管理
作業系統和使用者之間的介面:
使用者介面:連線使用者介面,脫產使用者介面和圖形使用者介面。
程式介面:該介面是為使用者程式在執行中訪問系統資源而設定的,它是由一組系統呼叫組成。
13、程序間的兩種相互制約關係。
同步、互斥(程序之間的一種低階通訊方式)
程序同步(直接相互制約關係):它主要源於程序合作,是程序間共同完成一項任務時直接發生相互作用的關係。為程序之間的直接制約關係,在多道環境下,這種程序間在執行次序上的協調是必不可少的。
舉例:有輸入程序A 通過單緩衝向程序B 提供資料。當緩衝空時,計算程序因不能獲得所需資料而阻塞,當程序A 把資料輸入緩衝區後,便喚醒程序B;反之,當緩衝區已滿時,程序A 因沒有緩衝區放資料而阻塞,程序B 將緩衝區資料取走後便喚醒A。
程序互斥(間接相互制約關係):它主要源於資源共享,是程序之間的間接制約關係。在多道系統中,每次只允許一個程序訪問的資源稱為臨界資源,程序互斥就是保證每次只有一個程序使用臨界資源。
舉例:有兩程序A 和B,如果A 提出列印請求,系統已把唯一的 一臺印表機分配給了程序B,則程序A 只能阻塞;一旦B 釋放印表機,A 才由阻塞改為就緒。