作業系統中的死鎖問題(精簡版)

2021-10-12 06:51:40 字數 1459 閱讀 3625

​ 多個程序或執行緒互相以阻塞狀態等待對方的資源,在得到所有的對方的資源之前,都不會釋放自己現有的資源,這樣形成的迴圈等待現象叫死鎖。

​ 1、資源不共享(資源互斥)

​ 2、占有且等待(請求且保持)

​ 3、資源不可剝奪

​ 4、環路等待

​ 將處於死鎖狀態的其中乙個程序掛起,並搶占它的資源,將這些資源分配給其他等待的死鎖程序

​ 按照優先順序、強制殺死部分程序,將其資源釋放出來,然後其他等待的死鎖程序資源自然可以繼續。

​ 當新的資源搶占不到時,程序或執行緒自願釋放舊的資源,避免進入死迴圈(要求保留歷史資訊,設定還原點)

​ 允許資源能共享訪問,則可以避免程序死鎖狀態。

​ 缺點:有些資源不能共享訪問,如印表機、掃瞄器等硬體資源。

​ 採用預先靜態分配的方法,在程序執行之前,一次申請完成它所需要的所有資源,在資源滿足之前不執行,一旦執行這些資源就一直歸它所有,這樣就能保證不會發生死鎖。

​ 缺點:資源被嚴重浪費

​ 如果已經占有了一些不可剝奪的資源,在搶占新的資源時失敗,則先釋放已經占有的所有資源,待需要時再重新申請。

​ 缺點:該策略實踐起來複雜,釋放已經占有的資源就會讓之前的工作白幹了,反覆地申請和釋放會導致系統開銷增大,降低系統的吞吐量。

​ 給所有的資源進行編號,所有的程序遵守從小到大或從大到小的搶占順序,避免陷入環路等待

​ 缺點:必須要確保資源編號相對穩定,這樣新新增資源就比較麻煩

​ sem_t就是個資源計數器,用於控制訪問有限共享資源的執行緒數。

#include

intsem_init

(sem_t *sem,

int pshared,

unsigned

int value)

;功能:建立乙個訊號量

sem:獲取訊號量的id

pshared:一般取0即可,非0表示該訊號量可以記憶體共享方式供多個程序使用,但linux系統不支援。

value:訊號量的初始化

intsem_wait

(sem_t *sem)

;功能:訊號量減1,如果不能減則阻塞

intsem_trywait

(sem_t *sem)

;功能:嘗試對訊號量減1,如果不能減則立即返回

intsem_timedwait

(sem_t *sem,

const

struct timespec *abs_timeout)

;功能:帶倒計時的對訊號量減1

intsem_post

(sem_t *sem)

;功能:訊號量加1

intsem_destroy

(sem_t *sem)

;功能:銷毀訊號量

intsem_getvalue

(sem_t *sem,

int*sval)

;功能:獲取訊號量的值

深度精簡版作業系統下IIS的安裝方法

解壓至任意路徑。2.找到windows組建管理檔案 c windows inf sysoc.inf 開始 執行中輸入即可 在 components 段下新增 iis iis.dll,ocentry,iis.inf,7 3.在執行裡輸入 expand iis5.1的安裝檔案的解壓路徑 iis.dl c...

作業系統 死鎖問題

當系統當中所有的資源都無法完成當前的任務 可能也占用了資源 同時都在等待資源的分配時會產生死鎖。這一題的答案為13 假如不同程序所需的資源不一樣,就需要計算每乙個程序所需的資源數 1,再依次相加後 1得出不產生死鎖所需要的資源數。死鎖產出的四大條件 互斥,保持與等待,不剝奪,環路等待 死鎖的避免 銀...

單鏈表的建立,插入,刪除等操作 精簡版

不多說廢話,直接上 1 include 2 include 34 定義節點型別,不帶頭結點 5 typedef struct node 6lnode 1011 建立鍊錶,12 從終端接收資料,使用尾部插入法完成。13 成功返回1,失敗返回014 15 int creatlist lnode h 16...