1. 程式人生 > >死鎖面試題(什麼是死鎖,產生死鎖的原因及必要條件)

死鎖面試題(什麼是死鎖,產生死鎖的原因及必要條件)

什麼是死鎖?

  • 所謂死鎖,是指多個程序在執行過程中因爭奪資源而造成的一種僵局,當程序處於這種僵持狀態時,若無外力作用,它們都將無法再向前推進。

產生死鎖的原因?

可歸結為如下兩點:

a. 競爭資源

  • 系統中的資源可以分為兩類:
    1. 可剝奪資源,是指某程序在獲得這類資源後,該資源可以再被其他程序或系統剝奪,CPU和主存均屬於可剝奪性資源;
    2. 另一類資源是不可剝奪資源,當系統把這類資源分配給某程序後,再不能強行收回,只能在程序用完後自行釋放,如磁帶機、印表機等。

  • 產生死鎖中的競爭資源之一指的是競爭不可剝奪資源(例如:系統中只有一臺印表機,可供程序P1使用,假定P1已佔用了印表機,若P2繼續要求印表機列印將阻塞)

  • 產生死鎖中的競爭資源另外一種資源指的是競爭臨時資源(臨時資源包括硬體中斷、訊號、訊息、緩衝區內的訊息等),通常訊息通訊順序進行不當,則會產生死鎖

b. 程序間推進順序非法

  • 若P1保持了資源R1,P2保持了資源R2,系統處於不安全狀態,因為這兩個程序再向前推進,便可能發生死鎖

  • 例如,當P1執行到P1:Request(R2)時,將因R2已被P2佔用而阻塞;當P2執行到P2:Request(R1)時,也將因R1已被P1佔用而阻塞,於是發生程序死鎖

死鎖產生的4個必要條件?

  • 產生死鎖的必要條件:

    1. 互斥條件
    2. 請求和保持條件
    3. 不剝奪條件
    4. 環路等待條件。