Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
傳統存儲管理方式的特征
各種內存管理策略都是為了同時將多個進程保存在內存中以便允許多道程序設計。
傳統的內存管理策略它們都具有以下兩個共同的特征:
1) 一次性
作業必須一次性全部裝入內存后,方能開始運行。這會導致兩種情況發生:
·當作業很大,不能全部被裝入內存時,將使該作業無法運行;
·當大量作業要求運行時,由于內存不足以容納所有作業,只能使少數作業先運行,導致多道程序度的下降。
2) 駐留性
作業被裝入內存后,就一直駐留在內存中,其任何部分都不會被換出,直至作業運行結束。運行中的進程,會因等待I/O而被阻塞,可能處于長期等待狀態。
由以上分析可知,許多在程序運行中不用或暫時不用的程序(數據)占據了大量的內存空間,而一些需要運行的作業又無法裝入運行,顯然浪費了寶貴的內存資源。
局部性原理
高速緩存技術依賴的設計原理就是程序局部性原理
要真正理解虛擬內存技術的思想,首先必須了解計算機中著名的局部性原理。著名的 Bill Joy (SUN公司CEO)說過:”在研究所的時候,我經常開玩笑地說高速緩存是計算機科學中唯一重要的思想。事實上,髙速緩存技術確實極大地影響了計算機系統的設計。“快表、頁高速緩存以及虛擬內存技術從廣義上講,都是屬于高速緩存技術。這個技術所依賴的原理就是局部性原理。局部性原理既適用于程序結構,也適用于數據結構(更遠地講, 著名的關于“goto語句有害”的論文也是出于對程序局部性原理的深刻認識和理解)。
局部性原理表現在以下兩個方面:
·時間局部性:如果程序中的某條指令一旦執行,不久以后該指令可能再次執行;如果某數據被訪問過,不久以后該數據可能再次被訪問。產生時間局部性的典型原因,是由于在程序中存在著大量的循環操作。
·空間局部性:一旦程序訪問了某個存儲單元,在不久之后,其附近的存儲單元也將被訪問,即程序在一段時間內所訪問的地址,可能集中在一定的范圍之內,這是因為指令通常是順序存放、順序執行的,數據也一般是以向量、數組、表等形式簇聚存儲的。
時間局部性是通過將近來使用的指令和數據保存到高速緩存存儲器中,并使用高速緩存的層次結構實現。空間局部性通常是使用較大的高速緩存,并將預取機制集成到高速緩存控制邏輯中實現。虛擬內存技術實際上就是建立了 “內存一外存”的兩級存儲器的結構,利用局部性原理實現髙速緩存。
虛擬存儲器的定義和特征
基于局部性原理,在程序裝入時,可以將程序的一部分裝入內存,而將其余部分留在外存,就可以啟動程序執行。在程序執行過程中,當所訪問的信息不在內存時,由操作系統將所需要的部分調入內存,然后繼續執行程序。
另一方面,操作系統將內存中暫時不使用的內容換出到外存上,從而騰出空間存放將要調入內存的信息。這樣,系統好像為用戶提供了一個比實際內存大得多的存儲器,稱為虛擬存儲器。
之所以將其稱為虛擬存儲器,是因為這種存儲器實際上并不存在,只是由于(對用戶完全透明),給用戶的感覺是好像存在一個比實際物理內存大得多的存儲器。虛擬存儲器的大小由計算機的地址結構決定,并非是內存和外存的簡單相加。虛擬存儲器有以下三個主要特征:
·多次性,是指無需在作業運行時一次性地全部裝入內存,而是允許被分成多次調入內存運行。
·對換性,是指無需在作業運行時一直常駐內存,而是允許在作業的運行過程中,進行換進和換出。
·虛擬性,是指從邏輯上擴充內存的容量,使用戶所看到的內存容量,遠大于實際的內存容量。
虛擬內存技術的實現
虛擬內存中,允許將一個作業分多次調入內存。釆用連續分配方式時,會使相當一部分內存空間都處于暫時或“永久”的空閑狀態,造成內存資源的嚴重浪費,而且也無法從邏輯上擴大內存容量。因此,虛擬內存的實現需要建立在離散分配的內存管理方式的基礎上。虛擬內存的實現有以下三種方式:
·請求分頁存儲管理。 ·請求分段存儲管理。 ·請求段頁式存儲管理。
不管哪種方式,都需要有一定的硬件支持。一般需要的支持有以下幾個方面:
·一定容量的內存和外存。
·頁表機制(或段表機制),作為主要的數據結構。
·中斷機構,當用戶程序要訪問的部分尚未調入內存,則產生中斷。
·地址變換機構,邏輯地址到物理地址的變換。
3.6 請求分頁管理方式實現虛擬內存
請求分頁系統建立在基本分頁系統基礎之上,為了支持虛擬存儲器功能而增加了請求調頁功能和頁面置換功能。請求分頁是目前最常用的一種實現虛擬存儲器的方法。
在請求分頁系統中,只要求將當前需要的一部分頁面裝入內存,便可以啟動作業運行。在作業執行過程中,當所要訪問的頁面不在內存時,再通過調頁功能將其調入,同時還可以通過置換功能將暫時不用的頁面換出到外存上,以便騰出內存空間。
為了實現請求分頁,系統必須提供一定的硬件支持。除了需要一定容量的內存及外存的計算機系統,還需要有頁表機制、缺頁中斷機構和地址變換機構。
頁表機制
請求分頁系統的頁表機制不同于基本分頁系統,請求分頁系統在一個作業運行之前不要求全部一次性調入內存,因此在作業的運行過程中,必然會出現要訪問的頁面不在內存的情況,如何發現和處理這種情況是請求分頁系統必須解決的兩個基本問題。為此,在請求頁表項中增加了四個字段,如圖3-24所示。
圖3-24請求分頁系統中的頁表項
增加的四個字段說明如下:
·狀態位P:用于指示該頁是否已調入內存,供程序訪問時參考。
·訪問字段A:用于記錄本頁在一段時間內被訪問的次數,或記錄本頁最近己有多長時間未被訪問,供置換算法換出頁面時參考。
·修改位M:標識該頁在調入內存后是否被修改過。
·外存地址:用于指出該頁在外存上的地址,通常是物理塊號,供調入該頁時參考。
缺頁中斷機構
在請求分頁系統中,每當所要訪問的頁面不在內存時,便產生一個缺頁中斷,請求操作系統將所缺的頁調入內存。此時應將缺頁的進程阻塞(調頁完成喚醒),如果內存中有空閑塊,則分配一個塊,將要調入的頁裝入該塊,并修改頁表中相應頁表項,若此時內存中沒有空閑塊,則要淘汰某頁(若被淘汰頁在內存期間被修改過,則要將其寫回外存)。
請求頁面的時候,若內存中有空閑的塊未使用,則直接將調入的頁放入這個塊使用,并修改頁表中的頁表項;若內存中沒有空閑塊,則要采取頁面置換算法淘汰一個頁面。
缺頁中斷作為中斷同樣要經歷,諸如保護CPU環境、分析中斷原因、轉入缺頁中斷處理程序、恢復CPU環境等幾個步驟。但與一般的中斷相比,它有以下兩個明顯的區別:
·在指令執行期間產生和處理中斷信號,而非一條指令執行完后,屬于內部中斷。
·一條指令在執行期間,可能產生多次缺頁中斷。
地址變換機構
請求分頁系統中的地址變換機構,是在分頁系統地址變換機構的基礎上,為實現虛擬內存,又增加了某些功能而形成的。
圖3-25請求分頁中的地址變換過程
如圖3-25所示,在進行地址變換時,先檢索快表:
·若找到要訪問的頁,便修改頁表項中的訪問位(寫指令則還須重置修改位),然后利用頁表項中給出的物理塊號和頁內地址形成物理地址。
·若未找到該頁的頁表項,應到內存中去查找頁表,再對比頁表項中的狀態位P,看該頁是否已調入內存,未調入則產生缺頁中斷,請求從外存把該頁調入內存。
3.8頁面分配策略:駐留集大小、調入頁面的時機以及從何處調入頁面
駐留集大小
對于分頁式的虛擬內存,在準備執行時,不需要也不可能把一個進程的所有頁都讀取到主存,因此,操作系統必須決定讀取多少頁。也就是說,給特定的進程分配多大的主存空間,這需要考慮以下幾點:
1.分配給一個進程的存儲量越小,在任何時候駐留在主存中的進程數就越多,從而可以提高處理機的時間利用效率。
2.如果一個進程在主存中的頁數過少,盡管有局部性原理,頁錯誤率仍然會相對較高。
3. 如果頁數過多,由于局部性原理,給特定的進程分配更多的主存空間對該進程的錯誤率沒有明顯的影響。
基于這些因素,現代操作系統通常釆用三種策略:
1.固定分配局部置換。它為每個進程分配一定數目的物理塊,在整個運行期間都不改變。若進程在運行中發生缺頁,則只能從該進程在內存中的頁面中選出一頁換出,然后再調入需要的頁面。實現這種策略難以確定為每個進程應分配的物理塊數目:太少會頻繁出現缺頁中斷,太多又會使CPU和其他資源利用率下降。
2.可變分配全局置換。這是最易于實現的物理塊分配和置換策略,為系統中的每個進程分配一定數目的物理塊,操作系統自身也保持一個空閑物理塊隊列。當某進程發生缺頁時,系統從空閑物理塊隊列中取出一個物理塊分配給該進程,并將欲調入的頁裝入其中。
3.可變分配局部置換。它為每個進程分配一定數目的物理塊,當某進程發生缺頁時,只允許從該進程在內存的頁面中選出一頁換出,這樣就不會影響其他進程的運行。如果進程在運行中頻繁地缺頁,系統再為該進程分配若干物理塊,直至該進程缺頁率趨于適當程度; 反之,若進程在運行中缺頁率特別低,則可適當減少分配給該進程的物理塊。
調入頁面的時機
程序初始化啟動的時候,預調頁策略
為確定系統將進程運行時所缺的頁面調入內存的時機,可釆取以下兩種調頁策略:
1.預調頁策略。根據局部性原理,一次調入若干個相鄰的頁可能會比一次調入一頁更高效。但如果調入的一批頁面中大多數都未被訪問,則又是低效的。所以就需要釆用以預測為基礎的預調頁策略,將預計在不久之后便會被訪問的頁面預先調入內存。但目前預調頁的成功率僅約50%。故這種策略主要用于進程的首次調入時,由程序員指出應該先調入哪些頁。
2.請求調頁策略。進程在運行中需要訪問的頁面不在內存而提出請求,由系統將所需頁面調入內存。由這種策略調入的頁一定會被訪問,且這種策略比較易于實現,故在目前的虛擬存儲器中大多釆用此策略。它的缺點在于每次只調入一頁,調入調出頁面數多時會花費過多的I/O開銷。
從何處調入頁面
請求分頁系統中的外存分為兩部分:用于存放文件的文件區和用于存放對換頁面的對換區。對換區通常是釆用連續分配方式,而文件區釆用離散分配方式,故對換區的磁盤I/O速度比文件區的更快。這樣從何處調入頁面有三種情況:
1.系統擁有足夠的對換區空間:可以全部從對換區調入所需頁面,以提髙調頁速度。為此,在進程運行前,需將與該進程有關的文件從文件區復制到對換區。
2.系統缺少足夠的對換區空間:凡不會被修改的文件都直接從文件區調入;而當換出這些頁面時,由于它們未被修改而不必再將它們換出。但對于那些可能被修改的部分,在將它們換出時須調到對換區,以后需要時再從對換區調入。
3.UNIX方式:與進程有關的文件都放在文件區,故未運行過的頁面,都應從文件區調入。曾經運行過但又被換出的頁面,由于是被放在對換區,因此下次調入時應從對換區調入。進程請求的共享頁面若被其他進程調入內存,則無需再從對換區調入。
3.9頁面抖動(顛簸)和工作集(駐留集)
頁面抖動(顛簸)
在頁面置換過程中的一種最糟糕的情形是,剛剛換出的頁面馬上又要換入主存,剛剛換入的頁面馬上就要換出主存,換句話說就是進程需要頻繁的進行缺頁中斷。這種頻繁的頁面調度行為稱為抖動,或顛簸。如果一個進程在換頁上用的時間多于執行時間,那么這個進程就在顛簸。
頻繁的發生缺頁中斷(抖動),其主要原因是某個進程頻繁訪問的頁面數目高于可用的物理頁幀數目。虛擬內存技術可以在內存中保留更多的進程以提髙系統效率。在穩定狀態,幾乎主存的所有空間都被進程塊占據,處理機和操作系統可以直接訪問到盡可能多的進程。但如果管理不當,處理機的大部分時間都將用于交換塊,即請求調入頁面的操作,而不是執行進程的指令,這就會大大降低系統效率。
工作集(駐留集)
工作集(或駐留集)是指在某段時間間隔內,進程要訪問的頁面集合。經常被使用的頁面需要在工作集中,而長期不被使用的頁面要從工作集中被丟棄。為了防止系統出現抖動現象,需要選擇合適的工作集大小。
工作集模型的原理是:讓操作系統跟蹤每個進程的工作集,并為進程分配大于其工作集的物理塊。如果還有空閑物理塊,則可以再調一個進程到內存以增加多道程序數。如果所有工作集之和增加以至于超過了可用物理塊的總數,那么操作系統會暫停一個進程,將其頁面調出并且將其物理塊分配給其他進程,防止出現抖動現象。
正確選擇工作集的大小,對存儲器的利用率和系統吞吐量的提嵩,都將產生重要影響。
3.10內存管理知識點總結
分頁管理方式和分段管理方式在很多地方相似,比如內存中都是不連續的、都有地址變 換機構來進行地址映射等。但兩者也存在著許多區別,表3-20列出了分頁管理方式和分段管理方式在各個方面的對比。
表3-20 分頁管理方式和分段管理方式的比較
設置Chrome默認搜索引擎
設置Chrome默認搜索引擎
打開Chrome選項,然后單擊管理搜索引擎。由于默認的搜索參數不能修改,只好新建一個。添加新的搜索引擎,名字和關鍵字隨意。名字是在網頁中選中內容后單擊右鍵時顯示的,可以來點個性化。默認的Google搜索配置如下:
{google:baseURL}search?{google:RLZ}{google:acceptedSuggestion}{google:originalQueryForSuggestion}sourceid=chrome&ie={inputEncoding}&q=%s
{google:baseURL}代表你所在的國家或地區是否有本地化的Google搜索,比如在中國,會自動跳轉到.hk。所以需要需將該字段修改為(注意{}要刪除)。由于默認配置無法修改,則新建一個Google搜索。
修改后如下:
http://www.google.com/search?{google:RLZ}{google:acceptedSuggestion}{google:originalQueryForSuggestion}sourceid=chrome&ie={inputEncoding}&q=%s
添加完成后,將鼠標移到新添加的Google搜索,單擊“設為默認值”即可。
最后編輯于 :2017.12.05 02:49:43
?著作權歸作者所有,轉載或內容合作請聯系作者
*請認真填寫需求信息,我們會在24小時內與您取得聯系。