七、死鎖
概念
- 死鎖的特征(四個(gè)條件同時(shí)出現(xiàn)星立,死鎖將會(huì)發(fā)生(必要條件))
- 互斥:一次只有一個(gè)進(jìn)程可以使用一個(gè)資源
- 占有并等待:一個(gè)至少有一個(gè)資源的進(jìn)程等待獲得額外的由其他進(jìn)程所持有的資源
- 不可搶占:一個(gè)資源只有當(dāng)持有它的進(jìn)程完成任務(wù)后胞锰,自由的釋放
- 循環(huán)等待:等待資源的進(jìn)程之間存在環(huán){P0灾锯,P1,...,P0}
- P0等待P1占有的資源嗅榕,P1等待P2占有的資源,...,Pn-1等待Pn占有的資源顺饮,Pn等待P0占有的資源
- 處理死鎖的方法
- 確保系統(tǒng)永遠(yuǎn)不會(huì)進(jìn)入死鎖
- 死鎖預(yù)防
- 死鎖避免
- 允許系統(tǒng)進(jìn)入死鎖狀態(tài),然后檢測它并加以恢復(fù)
- 死鎖檢測
- 死鎖恢復(fù)
- 忽略這個(gè)問題凌那,假裝系統(tǒng)中從未出現(xiàn)過死鎖
- 確保系統(tǒng)永遠(yuǎn)不會(huì)進(jìn)入死鎖
- 如果圖沒有環(huán)兼雄,那么不會(huì)有死鎖
- 如果圖有環(huán)
- 如果每種資源類型只有一個(gè)實(shí)例,那么死鎖發(fā)生
- 如果一種資源類型有多個(gè)實(shí)例案怯,可能死鎖
死鎖預(yù)防
死鎖避免
- 銀行家算法
死鎖檢測和恢復(fù)
八君旦、內(nèi)存管理
連續(xù)分配方式會(huì)形成很多“碎片”澎办,所以有了離散分配方式
-
內(nèi)存管理有
- 分頁內(nèi)存管理
- 分段內(nèi)存管理
- 段頁式內(nèi)存管理
分頁內(nèi)存管理
- 頁
- 把物理地址空間分成大小固定的塊嘲碱,稱為幀金砍。
- 把邏輯內(nèi)存也分為同樣大小的塊,稱為頁麦锯。
- 頁面大小
- CPU固定恕稠,過小=>頁表過大
- 過大=>頁內(nèi)碎片增大
- 頁地址
- 頁號(hào):包含每個(gè)頁在物理內(nèi)存中的基址,用來作為頁表的索引
-
頁偏移:同基址相結(jié)合扶欣,用來確定送入內(nèi)存設(shè)備的物理內(nèi)存地址
- 32位即4Byte = 一條頁地址記錄
- 若邏輯地址空間是32位鹅巍,也就產(chǎn)生了232個(gè)邏輯地址
- 頁面大小=4KB=212Byte(系統(tǒng)設(shè)定)
- 此時(shí)產(chǎn)生的頁表有220條記錄
- 頁表大小=4B*220=4MB
- 頁表
- 頁表被保存在主存中
- 頁表基址寄存器(PTBR)指向頁表
- 頁表限長寄存器(PRLR)表明頁表的長度
- 在這個(gè)機(jī)制中,每一次的數(shù)據(jù)/指令存取需要兩次內(nèi)存存取料祠,一次是存取頁表骆捧,一次是存取數(shù)據(jù)/指令
- 解決兩次存取的問題,是采用小但專用且快速的硬件緩沖髓绽,這種緩沖稱為轉(zhuǎn)換表緩沖器(TLB)或聯(lián)想寄存器
頁表結(jié)構(gòu)
- 頁表結(jié)構(gòu)
- 例子:
- 32位邏輯地址敛苇、頁大小4KB
- 一個(gè)頁最多可包含100萬個(gè)表項(xiàng)
- 每個(gè)頁表項(xiàng)4個(gè)字節(jié),需要4MB空間放頁表顺呕,1024個(gè)連續(xù)頁面
- 需要這么多個(gè)連續(xù)頁面來存放頁表不一定能實(shí)現(xiàn)
- 解決方法:
- 層次頁表
- 哈希頁表
- 反向頁表
- 例子:
- 層次頁表
大多數(shù)計(jì)算機(jī)系統(tǒng)支持大邏輯地址空間(2的32到64的冪)枫攀。這種情況下,頁表本身非常大株茶。我們并不可能在內(nèi)存中連續(xù)的分配這個(gè)表来涨。一個(gè)簡單方法是將頁表劃分為更小部分。
一種方法是使用兩級(jí)分頁算法启盛,將頁表在分頁蹦掐。以一個(gè)4kb頁大小的32位系統(tǒng)為例。一個(gè)邏輯地址被分為20位的頁碼和12位的頁偏移僵闯。因?yàn)橐獙?duì)頁表進(jìn)行再000分頁笤闯,所以該頁號(hào)可分為10位的頁碼和10位 的頁偏移。這樣一個(gè)邏輯地址就表示如下形式:
是用來訪問外部頁表的索引棍厂,p2是外部頁表的頁偏移颗味,采用這種結(jié)構(gòu)地址轉(zhuǎn)換方法如下圖所示。由于地址轉(zhuǎn)換由外向內(nèi)牺弹,這種方案也稱為向前映射頁表浦马。
- 哈希頁表
處理超過32位地址空間的常用方法是使用哈希頁表(hashed page table),并以虛擬頁碼作為哈希值张漂。哈希頁表的每一條目都包括一個(gè)鏈表的元素晶默,這些元素哈希成同一位置。每個(gè)元素有三個(gè)域:虛擬頁碼 所映射的幀號(hào) 指向鏈表中下一個(gè)元素的指針航攒。
虛擬地址中的虛擬頁號(hào)轉(zhuǎn)換到哈希表中磺陡,用虛擬頁號(hào)與鏈表中的每一個(gè)元素的第一個(gè)域相比較。如果匹配,那么相應(yīng)的幀號(hào)就用來形成物理地址币他。如果不匹配坞靶,就對(duì)鏈表中的下一個(gè)節(jié)點(diǎn)進(jìn)行比較,以尋找一個(gè)匹配的頁號(hào):
群集頁表類似于哈希頁表蝴悉,對(duì)于稀疏地址空間很有用彰阴,稀疏地址空間的地址引用不連續(xù),且分散在整個(gè)地址空間
- 反向頁表
通常每個(gè)進(jìn)程都有一個(gè)相關(guān)頁表拍冠。每個(gè)頁表有很多項(xiàng)尿这。這可能消耗大量物理內(nèi)存。為解決這個(gè)問題庆杜,可以使用反向頁表射众。
內(nèi)存擴(kuò)充技術(shù)
- 解決方法(如何在較小的內(nèi)存空間運(yùn)行較大的進(jìn)程)
- 緊縮
- 覆蓋技術(shù)
- 交換技術(shù)
- 虛擬內(nèi)存
http://blog.csdn.net/omenglishuixiang1234/article/details/51536771
http://blog.csdn.net/windowseight/article/details/8279863