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