1.問題:假設系統中有5臺設備,有多個進程需要使用2個設備,假定每個進程一次只能使用一臺,則至多允許多少個進程來競爭這5個資源,而不會發生死鎖?
答案:哲學家就餐問題。系統中有N個併發進程,若規定每個進程需要申請R個某類資源,則當系統提供K=N*X(R-1)+1個同類資源時,無論採用何種方式申請使用,一定不會發生死鎖。 將K=5,R=2代入式子得N=4
2.併發,並行的區別?
在單CPU系統中,系統調度在某一時刻只能讓一個線程運行,雖然這種調試機制有多種形式(大多數是時間片輪巡爲主),但無論如何,要通過不斷切換需要運行的線程讓其運行的方式就叫併發(concurrent)。而在多CPU系統中,可以讓兩個以上的線程同時運行,這種可以同時讓兩個以上線程同時運行的方式叫做並行(parallel)
無鎖化編程有哪些常見方法?
1.針對計數器,可以使用原子加
2.只有一個生產者和一個消費者,那麼就可以做到免鎖訪問環形緩衝區(Ring Buffer)
3.RCU(Read-Copy-Update),新舊副本切換機制,對於舊副本可以採用延遲釋放的做法
4.CAS(Compare-and-Swap),如無鎖棧,無鎖隊列等待
同步機制應該遵循哪些基本準則?
1.空閒讓進
2.忙則等待
3.有限等待
4.讓權等待
死鎖的原因主要是:(1) 因爲系統資源不足。(2) 進程運行推進的順序不合適。(3) 資源分配不當等。
產生死鎖的四個必要條件:(1) 互斥條件(2) 請求與保持條件(3) 不剝奪條件。(4) 循環等待條件