第一篇:《死鎖》讀后感
《死鎖》讀后感
盧梓毅
今天,我讀了《死鎖》這幅畫后,內心久久不能平靜。
這幅畫面是:一個胖乎乎的小孩坐在桌前,他四肢健全,卻沒有腦袋。取代腦袋的是一把鎖。在桌上有很多鑰匙,他想把鎖打開,但是打不開。他想用錘子把鎖打開,但是打不開。他想用錘子把鎖搞壞,但是這是徒勞的。他雙手托腮,等待命運的降臨。
是的,在我們生活中禁錮思想的舉動就數不勝數,如古代的大興“文字獄”、上世紀50年代的“三反五反”和60年代的“文化大革命”。這些舉動曾一次次地告誡人們,而我們今天,禁錮思想仍然存在在我們的日常生活中。我奶奶就是這樣的人,在家里我們必須學習她“高尚”的品格。她常常說自己不講是非,不看連續劇。,其實并非如此。她常要我做她自己想做的事情,成為她想我成為的人。讓我沒有發言權,失去自由。其實我可以理解奶奶是在那個年代成長的會這樣做,但我不能接受。
其實,發展才是硬道理。禁錮思想對社會是百害而無一利。正如一個人禁錮別人的思想就會影響那個人的家庭然后到社會到世界。。。如果長期只聽從一個人就會發生**鄧等。面對著這個“鎖頭”同學,我接觸到他那脆弱的心靈,他在呼喚:“救救我,給我自由!”他不斷地向全世界求救。只有我們解放思想,才能不再出現“鎖頭”同學!
第二篇:死鎖_銀行家算法實驗報告
實驗目的
銀行家算法是避免死鎖的一種重要方法。通過編寫一個模擬動態資源分配的銀行家算法程序,進一步深入理解死鎖、產生死鎖的必要條件、安全狀態等重要概念,并掌握避免死鎖的具體實施方法
二、實驗要求
根據銀行家算法的基本思想,編寫和調試一個實現動態資源分配的模擬程序,并能夠有效地防止和避免死鎖的發生。
(1)設計思想說明
設計銀行家算法是為了避免死鎖
三、實驗方法內容 1.算法設計思路
銀行家算法又稱“資源分配拒絕”法,其基本思想是,系統中的所有進程放入進程集合,在安全狀態下系統受到進程的請求后試探性的把資源分配給他,現在系統將剩下的資源和進程集合中其他進程還需要的資源數做比較,找出剩余資源能滿足最大需求量的進程,從而保證進程運行完成后還回全部資源。這時系統將該進程從進程集合中將其清除。此時系統中的資源就更多了。反復執行上面的步驟,最后檢查進程的集合為空時就表明本次申請可行,系統處于安全狀態,可以實施本次分配,否則,只要進程集合非空,系統便處于不安全狀態,本次不能分配給他。請進程等待 2.算法流程圖
3.算法中用到的數據結構
數據結構的說明
1.可利用資源向量AVAILABLE。這是一個含有M個元素的數組,其中的每一個元素代表一類可利用的資源數目,其3初始值是系統中所配置的該類全部可哦那個資源的數目,其數值隨該類資源的分配和回收而動態的改變。
2.最大需求矩陣MAX。這是一個M*N的矩陣,它定義了系統中N個進程中的每一個進程對M類資源的最大需求。
3.分配矩陣ALLOCATION。這也是一個M*N的矩陣,它定義了系統中每一類資源當前已分配給每一進程的資源數。
4.需求矩陣NEED。這也是一個M*N的矩陣,用以表示每一個進程尚需的各類資源數。5.NEED[R,W]=MAX[R,W]-ALLOCATION[R,W]
4.主要的常量變量 #define W 10 //最大進程數W=10 #define R 20 //最大資源總數R=20 int AVAILABLE[R];//可利用資源向量 int MAX[W][R];//最大需求矩陣 int ALLOCATION[W][R];//分配矩陣 int NEED[W][R];//需求矩陣 int Request[R];//進程請求向量
void changdata(int k);//進程請求資源數據改變 int chksec(int s);//系統安全性的檢測
5.主要模塊
void inputdata()void showdata()void changdata(int k)void restoredata(int k)int chksec(int s)int chkmax(int s)
四、實驗代碼
#include
void changdata(int k);//進程請求資源數據改變 void restoredata(int k);//數據恢復 int chksec(int s);//系統安全性的檢測 int chkmax(int s);//檢測最大需求
void bank();//檢測分配的資源是否合理 void main(){ int i,j;inputdata();for(i=0;i if(j==0)break;} if(i>=M)cout<<“錯誤提示:經安全性檢查發現,系統的初始狀態不安全!!n”< if(M>W)cout< if(N>R)cout< for(j=0;j do{ cin>>ALLOCATION[i][j]; if(ALLOCATION[i][j]>MAX[i][j]) cout< }while(ALLOCATION[i][j]>MAX[i][j]);} } cout< for(j=0;j NEED[i][j]=MAX[i][j]-ALLOCATION[i][j];for(j=0;j for(i=0;i AVAILABLE[j]=0;} } } void showdata(){ int i,j;cout<<“各種資源的總數量,即向量all_resource為:”< cout< for(j=0;j cout< void changdata(int k){ int j;for(j=0;j AVAILABLE[j]=AVAILABLE[j]-Request[j]; ALLOCATION[k][j]=ALLOCATION[k][j]+Request[j]; NEED[k][j]=NEED[k][j]-Request[j];} } void restoredata(int k){ int j;for(j=0;j ALLOCATION[k][j]=ALLOCATION[k][j]-Request[j]; NEED[k][j]=NEED[k][j]+Request[j];} } int chksec(int s){ int WORK,FINISH[W];int i,j,k=0;for(i=0;i FINISH[i]=FALSE;for(j=0;j { if(FINISH[i]==FALSE&&NEED[i][j]<=WORK) { WORK=WORK+ALLOCATION[i][j]; FINISH[i]=TRUE; i=0; }else { i++; } }while(i if(FINISH[i]==FALSE) { return 1; } } return 0;} int chkmax(int s){ int j,flag=0;for(j=0;j if(MAX[s][j]==ALLOCATION[s][j]) { flag=1; AVAILABLE[j]=AVAILABLE[j]+MAX[s][j]; MAX[s][j]=0; } } return flag;} c { int i=0,j=0;char flag='Y';while(flag=='Y'||flag=='y'){ i=-1;while(i<0||i>=M){ cout<<“請輸入需申請資源的進程號(從P0到P”< cin>>i;if(i<0||i>=M) cout<<“輸入的進程號不存在,重新輸入!”< for(j=0;j cin>>Request[j];if(Request[j]>NEED[i][j]) { cout<<“進程P”< cout<<“申請不合理,出錯!請重新選擇!”< flag='N'; break; } else { if(Request[j]>AVAILABLE[j]) { cout<<“進程P”< cout<<“申請不合理,出錯!請重新選擇!”< flag='N'; break; } } } if(flag=='Y'||flag=='y'){ changdata(i); if(chksec(i)) { cout< cout<<“該分配會導致系統不安全!!本次資源申請不成功,不予分配!!”< cout< restoredata(i); } else { cout< cout<<“經安全性檢查,系統安全,本次分配成功,且資源分配狀況如下所示:”< cout< showdata(); if(chkmax(i)) {cout<<“在資源分配成功之后,由于該進程所需的某些資源的最大需求量已經滿足,”< cout<<“因此在進程結束后系統將回收這些資源!”< showdata(); } } } cout< 五、實驗結果 1.執行結果 2.結果分析 銀行家算法就是當接收到一個系統資源的分配后找到一個安全序列,使得進程間不會發生死鎖,若發生死鎖則讓進程等待。 六、實驗總結 通過本次銀行家算法實驗,加深了我對銀行家算法的了解,掌握了如何利用銀行家算法避免死鎖。實驗中遇到點問題,通過查閱資料、詢問老師順利解決。通過這次的實踐,使我的理論知識更加的牢固。 第三章 處理機調度與死鎖 重點與難點小結 1.高優先權調度和基于時間片的輪轉調度算法 1)高優先權優先調度 2)高響應比優先調度 3)時間片輪轉調度 4)多級反饋隊列調度 2.常用的幾種實時調度算法 1)最早截止時間優先(EDF)算法 2)最低松弛度優先(LLF)算法 3.多處理機環境下的進程(線程)調度方式 1)自調度方式 2)成組調度方式 3)專用處理器分配方式 4.死鎖的基本概念 1)產生死鎖的原因 2)產生死鎖的必要條件 5.預防死鎖的方法 1)摒棄互斥條件 2)摒棄請求保持條件 3)摒棄不剝奪條件 4)摒棄環路等待條件 5)各種方式的比較 6.死鎖的避免 熟練掌握銀行家算法和安全性檢測算法,并能利用這兩個算法求解具體問題 操作系統實驗:銀行家算法 姓名:李天瑋 班級:軟工1101 實驗內容: 在windows系統中實現銀行家算法程序。 學號:201126630117 實現銀行家算法所用的數據結構: 假設有5個進程3類資源,則有如下數據結構: 1.MAX[5,3] 5個進程對3類資源的最大需求量。2.AVAILABLE[3]系統可用資源數。 3.ALLOCATION[5,3]5個進程已經得到3類資源的資源量。4.NEED[5,3]5個進程還需要3類資源的資源量。 銀行家算法: 設進程1提出請求Request[N],則銀行家算法按如下規則進行判斷。(1)如果Request[N]<=NEED[1,N],則轉(2);否則,出錯。(2)如果Request[N]<=AVALIABLE,則轉(3);否則,出錯。(3)系統試探非配資源,修改相關數據。 AVALIABLE=AVALIABLE-REQUEST ALLOCATION=ALLOCATION+REQUEST NEED=NEED-REQUEST(4)系統執行安全性檢查,如安全,則分配成立;否則試探險性分配作廢,系統恢復原狀,進程等待。 安全性檢查: (1)設置兩個工作向量WORK=AVAILABLE;FINISH[M]=FALSE.(2)從晉城集合中找到一個滿足下述條件的進程,FINISH[i]=FALSE NEED<=WORK 如找到,執行(3);否則,執行(4)。 (3)設進程獲得資源,可順利執行,直至完成,從而釋放資源。 WORK=WORK+ALLOCATION FINISH[i]=TRUE GOTO(2) (4)如所有進程FINISH[M]=TRUE,則表示安全;否則系統不安全。 1.用init()函數對于數據的初始化 關鍵代碼: #define M 5 #define N 3 void init(){ cout<<“請輸入5個進程對3類資源最大資源需求量:”< } cout<<“請輸入系統可用的資哩源數:”< { } cin>>AVAILABLE[j];for(int j=0;j cout<<“請輸入5個進程已經-的到的3類資源的資源量:”< for(int i=0;i } cout<<“請?輸?入?5個?進?程ì還1需è要癮3類え?資哩?源′的?資哩?源′量?:”< } for(int j=0;j }// Stack around the variable 'AVAILABLE' was corrupted.顯示數據詳細信息 進行測試 輸入一號進程號,并給需要申請資源設定為{1,0,2} 檢驗錯誤輸入時候的報錯信息 檢驗當再次申請0號資源并申請資源數目為{0,2,0}時,系統提示系統不安全申請不成功。 每當驗證申請成功后會進行的修改操作: if(flag=='Y'||flag=='y')//進?行D數簓據Y修T改? { changdata(i); } } if(chkerr(0)){ } else showdata();rstordata(i);showdata();else showdata();cout< 第三章 處理機調度與死鎖 重點與難點小結 1.高優先權調度和基于時間片的輪轉調度算法 1) 2) 3)時間片輪轉調度 4)多級反饋隊列調度 2.常用的幾種實時調度算法 1)最早截止時間優先(EDF)算法 2)最低松弛度優先(LLF)算法 3.死鎖的基本概念 1)2)4.預防死鎖的方法 1)摒棄互斥條件 2)摒棄請求保持條件 3)摒棄不剝奪條件 4)摒棄環路等待條件 5)各種方式的比較 5.死鎖的避免 熟練掌握銀行家算法和安全性檢測算法,并能利用這兩個算法求解具體問題 6.死鎖定理第三篇:處理機調度與死鎖小結
第四篇:操作系統銀行家算法(避免死鎖)實驗報告
第五篇:第三章 處理機調度與死鎖小結