管道(有名無名),訊號,訊號量,訊息佇列,共享記憶體。
所謂程序間通訊,就是指乙個程序和另乙個程序有聯絡,不僅僅指傳遞訊息,還包括其他操作,有簡單也有複雜。不過他們使用的方法是基本相同的。訊號和訊號量是兩種不同的方式,他們都可以用來實現同步和互斥,但前者是使用訊號處理器來進行的,後者是使用pv操作來實現的。訊息佇列是一種比較高階的程序間通訊的方法,可以使用其來傳遞訊息。
乙個訊息佇列可以被多個程序所共享,如果乙個程序訊息太多,乙個訊息佇列放不下,也可以用多個訊息佇列。共享訊息佇列的程序所傳送的訊息除了訊息本身外,還有乙個標誌,這個標誌該訊息將由哪個程序或者哪類程序接收。每乙個共享訊息佇列的程序針對這個佇列也有自己的標誌,可以用來宣告自己的身份。
兩者的主要區別是mutex可以用於程序之間的互斥,critical section適用於執行緒間的互斥。
四,考察程序的排程 短作業優先代表最短剩餘時間優先 可剝奪式處理機&不可剝奪式處理機
首先來分析死鎖,死鎖是指兩個或兩個以上的程序在執行的過程中,由於爭奪資源而產生的一種互相等待的狀態。若無外力作用,它們都將無法推進下去,此時稱系統陷入了死鎖狀態或者說程序產生了死鎖。
產生死鎖的四個必要條件如下:
互斥條件:乙個資源每次只能被乙個程序使用;
請求與保持條件:乙個程序因請求資源而阻塞時,對已獲得的資源保持不放;
不剝奪條件:程序已經獲取的資源,在未使用完成之前,不能強行剝奪;
迴圈等待的條件:若干程序之間形成一種頭尾銜接的迴圈等待資源的關係。
這四個條件是死鎖的必要條件,只要系統發生死鎖,這些條件必然成立,而只要上述條件之一不滿足,就不會發生死鎖。
死鎖的解除與預防方法如下:
首先,對於資源的分配要予以合理的規劃,防止程序在處於等待狀態之下占用資源,在系統執行過程中,對於程序對系統發出的每乙個可以滿足的資源請求進行動態檢查,並根據檢查結果決定是否分配資源,若分配資源後可能發生死鎖,則不予分配。
根據以上四條必要條件,只要破壞其中一條,就可以避免產生死鎖,因此有如下三種預防措施:
採用資源靜態分配策略,破壞部分分配的條件;
允許程序剝奪使用其他程序占有的資源,破壞不可剝奪條件;
採用資源有序分配法,破壞環路條件;
這裡注意一點,互斥條件無法被破壞!
避免死鎖演算法最有代表性的是dijkstra e.w 於2023年提出的銀行家演算法,該演算法需要檢查申請者對資源的最大需求量,如果系統現存的各類資源可以滿足申請者的請求,就滿足申請者的請求。這樣申請者就可以很快完成其計算,然後釋放它占用的資源,從而保證系統中所有程序都能完成,進而避免死鎖的發生。
fork()函式可以複製乙個子程序,子程序複製了父程序的絕大部分,棧,緩衝區等。系統為子程序建立乙個新的頁表項,其中程序id與父程序的程序id不同,父程序的返回值是子程序的程序id,子程序的返回值為0;雖然父子程序共享**空暗間,但是在涉及**寫資料時子程序有著自己的資料空間。在子程序進行修改時,系統會為子程序申請新的頁面。
就緒(ready):程式獲得了執行所需要的所有資源,只要獲得處理機便可以執行,此時程式處於就緒狀態。
執行(running):當程序獲得處理機,程式正在處理機上執行,,此時程序的狀態處於執行狀態。
阻塞(blocked):在處理機上執行的程式,由於等待某個事件發生而無法執行時,便放棄處理機而處於阻塞狀態。引起程序組的事件有很多種,例如,等待i/o完成,申請緩衝區不能滿足,等待訊號等。
若系統中有五颱繪圖儀,有多個程序需要使用兩台,規定每個程序一次僅允許申請一台,則至多允許()個程序參與競爭,而不會發生死鎖?
哲學家就餐問題:資源(餐叉)按照某種規則編號為1-5,每個工作單元(哲學家)總是先拿起左右兩邊編號較低的餐叉,再拿編號較高的餐叉,用完餐叉後,他總是先放下編號較高的,再放下編號較低的。在這種情況下,當四位哲學家同時拿起他們手邊編號較低的餐叉時,只有編號最高的餐叉留在桌子上,從而第五位哲學家就不能使用任何乙隻餐叉了。
(整理自程式設計師面試寶典)
面試題相關
一些位址 osi七層功能及協議 資料鏈路層是如何定址的?傳送方 已知接收方ip arp 接收方mac位址 交換機尋找該mac位址所在埠,把幀往這個埠 mac通過rarp轉為ip位址。可靠通訊是靠哪一層來完成的?網路層 tcp協議 100base t 100mbps,baseband,雙絞線對。簡而言...
C C 開發執行緒 程序相關面試題
注意 重點 必須從cpu排程,上下文切換,資料共享,多核cup利用率,資源占用,等等各方面回答,然後有乙個問題必須會被問到 哪些東西是乙個執行緒私有的?答案中必須包含暫存器,否則悲催 1 程序資料是分開的 共享複雜,需要用ipc 程序間通訊 同步簡單 多執行緒共享程序資料 共享簡單,同步複雜 2 程...
前端面試題 css相關面試題
css 選擇器中,元素選擇器和類選擇器的區別是什麼?元素選擇器是最常見的 css 選擇器,即,文件的元素就是最基本的選擇器。選擇器通常是某個 html 元素,比如 等,甚至可以是 元素本身。類選擇器用於將樣式規則與附帶 class 屬性的元素匹配,其中該 class 屬性的值為類選擇器中指定的值。使...