民國115年 高考三級 電子工程 計算機概論
第4題
在多執行緒(multithread)的作業系統,可能會有飢餓(starvation)或死 結(deadlock)的問題,請問它們各自是怎樣的情況會造成這樣的問題…
題目
在多執行緒(multithread)的作業系統,可能會有飢餓(starvation)或死 結(deadlock)的問題,請問它們各自是怎樣的情況會造成這樣的問題。 請各提出一個解決的方法,並說明為何可以解決問題。(20 分)
參考解答(AI 生成,非官方)
- 一、飢餓(Starvation)的成因:又稱無限延遲(indefinite blocking),指某個行程雖未被死結卡住,卻因排程或資源分配不公平而長期得不到 CPU 或資源。常見於優先權排程(priority scheduling)下低優先權行程永遠被高優先權搶先、最短工作優先(SJF)下長工作不斷被短工作插隊、或讀寫鎖(reader-writer lock)中寫者被源源不絕的讀者餓死。
- 二、飢餓的解決方法:採用老化(aging)機制,讓等待越久的行程優先權逐步提升,最終必然能取得資源;或在排程器中設定公平佇列(fair queueing)、保證每個行程的最低服務比例。之所以有效,是因為它把「等待時間」轉化為可累積的優勢,打破高優先權永遠勝出的不公平結構,使任何行程的等待時間有上限。
- 三、死結(Deadlock)的成因:指兩個以上行程互相持有對方所需的資源並等待對方釋放,形成循環等待而永無進展。發生需同時滿足四項必要條件(Coffman conditions):互斥(mutual exclusion)、持有並等待(hold and wait)、不可搶占(no preemption)、循環等待(circular wait)。例如執行緒 T1 持有鎖 L1 等 L2,T2 持有 L2 等 L1。
- 四、死結的解決方法:可採預防、避免、偵測與復原三種層次。最實用的是「資源排序法」——為所有鎖編號,規定只能依固定順序取得鎖,如此循環等待不可能形成,直接破壞四條件之一;亦可採銀行家演算法(Banker's algorithm)在分配前檢查是否處於安全狀態(safe state),或定期偵測後以回滾、強制釋放資源復原。
- 五、比較與建議:老化只調整優先順序,成本低但需注意即時系統的優先權語意;鎖排序屬靜態規範,實作簡單且無執行期負擔,但需全域遵守;銀行家演算法需事先知道最大需求,實務彈性較差。考生宜點出「飢餓是公平性問題、死結是進度問題」,兩者成因與對策層次不同,避免混為一談。
AI 依官方試題文字產生的參考解答,非考選部公告答案,內容僅供備考參考。