乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      虛擬內(nèi)存,內(nèi)存頁(yè)面錯(cuò)誤與頁(yè)面錯(cuò)誤增量如何處理。(整理)

       刀叢里覓詩(shī) 2017-04-10

      頁(yè)面錯(cuò)誤

      頁(yè)面錯(cuò)誤指當(dāng)軟件試圖讀取或?qū)懭霕?biāo)記為“不存在”的虛擬內(nèi)存位置時(shí)發(fā)生的中斷。頁(yè)面錯(cuò)誤記錄了一個(gè)進(jìn)程必須從硬盤(pán)上恢復(fù)的次數(shù)。

      在“任務(wù)管理器”中,頁(yè)面錯(cuò)誤是進(jìn)程中當(dāng)數(shù)據(jù)不在內(nèi)存而必須從磁盤(pán)檢索的次數(shù)。頁(yè)面錯(cuò)誤值從進(jìn)程啟動(dòng)的時(shí)間開(kāi)始累計(jì)。

      頁(yè)面錯(cuò)誤增量

      在“任務(wù)管理器”中,自上一次更新開(kāi)始的頁(yè)面錯(cuò)誤次數(shù)的變化。

      具體參見(jiàn): 幫助--任務(wù)管理器--使用進(jìn)程--進(jìn)程計(jì)數(shù)器列標(biāo)題--頁(yè)面錯(cuò)誤

      頁(yè)面錯(cuò)誤不表示程序存在錯(cuò)誤。不管內(nèi)存多大,WINDOWS都離不開(kāi)虛擬內(nèi)存(利用磁盤(pán)),多少都會(huì)利用虛擬內(nèi)存來(lái)存入一些數(shù)據(jù),比如程序被最小化。

      頁(yè)面錯(cuò)誤 任務(wù)管理器 主要檢測(cè)內(nèi)存情況的。

      轉(zhuǎn)載地址: http://blog.sina.com.cn/s/blog_51396f890100qjtb.html

      內(nèi)存監(jiān)控

          開(kāi)發(fā)的一個(gè)項(xiàng)目中,遇到了內(nèi)存泄露的情況,發(fā)現(xiàn)此時(shí)頁(yè)面錯(cuò)誤增量在300多,什么是頁(yè)面錯(cuò)誤增量?

          上網(wǎng)看了一下,這個(gè)就是當(dāng)程序需要訪問(wèn)內(nèi)存時(shí),待訪問(wèn)的地址不再物理內(nèi)存中,需要換頁(yè)將虛擬內(nèi)存頁(yè)換到物理內(nèi)存中。頁(yè)面錯(cuò)誤增量大,會(huì)導(dǎo)致運(yùn)行效率差,贓頁(yè)多。

          但是為什么會(huì)出現(xiàn)這個(gè)情況?是OS的問(wèn)題還是APP的問(wèn)題?還不清楚,需要再查一下。

          如果要查看程序使用情況,可以調(diào)用接口GetProcessMemoryInfo

      1. BOOL GetProcessMemoryInfo(  
      2.   HANDLE Process,  
      3.   PPROCESS_MEMORY_COUNTERS ppsmemCounters,  
      4.   DWORD cb  
      5. );  

          如果需要限制程序使用虛擬內(nèi)存的大小,可使用SetProcessWorkingSetSize,注意:這樣可能會(huì)降低運(yùn)行效率.

      1. BOOL SetProcessWorkingSetSize 
      2.   HANDLE hProcess,  
      3.   SIZE_T dwMinimumWorkingSetSize,  
      4.   SIZE_T dwMaximumWorkingSetSize  
      5. );  
      內(nèi)存管理和緩存管理的細(xì)節(jié),所以記錄詳細(xì)點(diǎn),其他的東西(僅指基本組件)理解還可以。。以備忘的形式慢慢po上來(lái)~

      頁(yè)面交換


      使用技巧

      對(duì)于虛擬內(nèi)存如何設(shè)置的問(wèn)題,微軟已經(jīng)給我們提供了官方的解決辦法,對(duì)于一般情況下,我們推薦采用如下的設(shè)置方法:
      • 頁(yè)面文件,文件的大小由你對(duì)系統(tǒng)的設(shè)置決定。具體設(shè)置方法如下:打開(kāi)"我的電腦"的"屬性"設(shè)置窗口,切換到"高級(jí)"選項(xiàng)卡,在"啟動(dòng)和故障恢復(fù)"窗口的"寫(xiě)入調(diào)試信息"欄,如果你采用的是試和錯(cuò)誤報(bào)告了。所以折中的辦法是在系統(tǒng)盤(pán)設(shè)置較小的頁(yè)面文件,只要夠用就行了。
      • 內(nèi)存,其最小值設(shè)置為物理內(nèi)存的1.5倍,最大值設(shè)置為物理內(nèi)存的3倍,該分區(qū)專門(mén)用來(lái)存儲(chǔ)頁(yè)面文件,不要再存放其它任何文件。之所以單獨(dú)劃分一個(gè)分區(qū)用來(lái)設(shè)置虛擬內(nèi)存,主要是基于兩點(diǎn)考慮:其一,由于該分區(qū)上沒(méi)有其它文件,這樣分區(qū)不會(huì)產(chǎn)生磁盤(pán)碎片,這樣能保證頁(yè)面文件的數(shù)據(jù)讀寫(xiě)不受磁盤(pán)碎片的干擾;其二,按照Windows對(duì)內(nèi)存的管理技術(shù),Windows會(huì)優(yōu)先使用不經(jīng)常訪問(wèn)的分區(qū)上的頁(yè)面文件,這樣也減少了讀取系統(tǒng)盤(pán)里的頁(yè)面文件的機(jī)會(huì),減輕了系統(tǒng)盤(pán)的壓力。
      • 頁(yè)面文件,則其它硬盤(pán)分區(qū)不設(shè)置任何頁(yè)面文件。因?yàn)檫^(guò)多的分區(qū)設(shè)置頁(yè)面文件,這樣會(huì)導(dǎo)致,硬盤(pán)磁頭反復(fù)的在不同的分區(qū)來(lái)回讀取。這樣既耽誤了系統(tǒng)速率,也會(huì)減少硬盤(pán)的壽命。當(dāng)然,如果你有多個(gè)硬盤(pán),則可以為每個(gè)硬盤(pán)都創(chuàng)建一個(gè)頁(yè)面文件。當(dāng)信息分布在多個(gè)頁(yè)面文件上時(shí),硬盤(pán)控制器可以同時(shí)在多個(gè)硬盤(pán)上執(zhí)行讀取和寫(xiě)入操作。這樣系統(tǒng)性能將得到提高。

      換頁(yè)錯(cuò)誤

      換頁(yè)錯(cuò)誤,即Page fault。
      Page Fault 是在進(jìn)程嘗試執(zhí)行代碼指導(dǎo),或者引用進(jìn)程所映射物理內(nèi)存中并不存在的數(shù)據(jù)頁(yè)時(shí),操作系統(tǒng)記錄的事件。換句話說(shuō),進(jìn)程需要的內(nèi)存頁(yè)實(shí)際上可能還處于物理內(nèi)存中,但是由于它無(wú)法再分配到進(jìn)程中,所以當(dāng)進(jìn)程將此頁(yè)讀取回到它的內(nèi)存頁(yè)時(shí),就發(fā)生了Page Fault。

      在開(kāi)發(fā)上,我認(rèn)為主要是優(yōu)化內(nèi)存讀取方式,如果存在大量的文件讀取,虛擬內(nèi)存也就多,換頁(yè)次數(shù)就多,自然也很多,不作為主要的評(píng)測(cè)指標(biāo)。













      現(xiàn)在內(nèi)存都是分頁(yè)的, 如果你要讀或者寫(xiě)的頁(yè)還沒(méi)分在內(nèi)存里, 就出現(xiàn)缺頁(yè)錯(cuò)了。 這種事情在程序啟動(dòng)的時(shí)候可能非常頻繁, 但是也不用你自己處理, 一般系統(tǒng)會(huì)自己搞定這事的, 搞不定就直接死機(jī)。。

      轉(zhuǎn)載:http://en./wiki/Page_fault


      頁(yè)缺失 (計(jì)算機(jī)科學(xué))

      維基百科,自由的百科全書(shū)
      (重定向自Page fault

      頁(yè)缺失英語(yǔ)Page fault,又名硬錯(cuò)誤、分頁(yè)錯(cuò)誤、尋頁(yè)缺失、缺頁(yè)中斷、頁(yè)故障等)指的是當(dāng)軟件試圖訪問(wèn)已映射在虛擬地址空間中,但是目前并未被加載在物理內(nèi)存中的一個(gè)分頁(yè)時(shí),由中央處理器內(nèi)存管理單元所發(fā)出的中斷。

      通常情況下,用于處理此中斷的程序是操作系統(tǒng)的一部分。如果操作系統(tǒng)判斷此次訪問(wèn)是有效的,那么操作系統(tǒng)會(huì)嘗試將相關(guān)的分頁(yè)從硬盤(pán)上的虛擬內(nèi)存文件中調(diào)入內(nèi)存。而如果訪問(wèn)是不被允許的,那么操作系統(tǒng)通常會(huì)結(jié)束相關(guān)的進(jìn)程。[1]

      雖然其名為“頁(yè)缺失”錯(cuò)誤,但實(shí)際上這并不一定是一種錯(cuò)誤。而且這一機(jī)制對(duì)于利用虛擬內(nèi)存來(lái)增加程序可用內(nèi)存空間的操作系統(tǒng)(比如Microsoft Windows和各種類Unix系統(tǒng))中都是常見(jiàn)且有必要的。

      微軟在較新版Windows(Windows Vista及以上)的資源監(jiān)視器中使用“硬錯(cuò)誤”這一術(shù)語(yǔ)來(lái)指代“頁(yè)缺失”。[2]

      目錄

         [隱藏

      [編輯]分類

      [編輯]軟性

      軟性頁(yè)缺失指頁(yè)缺失發(fā)生時(shí),相關(guān)的頁(yè)已經(jīng)被加載進(jìn)內(nèi)存,但是沒(méi)有向MMU注冊(cè)的情況。操作系統(tǒng)只需要在MMU中注冊(cè)相關(guān)頁(yè)對(duì)應(yīng)的物理地址即可。[1]

      發(fā)生這種情況的可能性之一,是一塊物理內(nèi)存被兩個(gè)或多個(gè)程序共享,操作系統(tǒng)已經(jīng)為其中的一個(gè)裝載并注冊(cè)了相應(yīng)的頁(yè),但是沒(méi)有為另一個(gè)程序注冊(cè)。

      可能性之二,是該頁(yè)已被從CPU的工作集中移除,但是尚未被交換到磁盤(pán)上。比如OpenVMS這樣的使用次級(jí)頁(yè)緩存的系統(tǒng),就有可能會(huì)在工作集過(guò)大的情況下,將某頁(yè)從工作集中去除,但是不寫(xiě)入硬盤(pán)也不擦除(比如說(shuō)這一頁(yè)被讀出硬盤(pán)后沒(méi)被修改過(guò)),只是放入空閑頁(yè)表。除非有其他程序需要,導(dǎo)致這一頁(yè)被分配出去了,不然這一頁(yè)的內(nèi)容不會(huì)被修改。當(dāng)原程序再次需要該頁(yè)內(nèi)的數(shù)據(jù)時(shí),如果這一頁(yè)確實(shí)沒(méi)有被分配出去,那么系統(tǒng)只需要重新為該頁(yè)在MMU內(nèi)注冊(cè)映射即可。[3]

      [編輯]硬性

      與軟性頁(yè)缺失相反,硬性頁(yè)缺失是指相關(guān)的頁(yè)在頁(yè)缺失發(fā)生時(shí)未被加載進(jìn)內(nèi)存的情況。這時(shí)操作系統(tǒng)需要:[4]

      1. 尋找到一個(gè)空閑的頁(yè)?;蛘甙蚜硗庖粋€(gè)使用中的頁(yè)寫(xiě)到磁盤(pán)上(如果其在最后一次寫(xiě)入后發(fā)生了變化的話),并注銷在MMU內(nèi)的記錄
      2. 將數(shù)據(jù)讀入被選定的頁(yè)
      3. 向MMU注冊(cè)該頁(yè)

      硬性頁(yè)缺失導(dǎo)致的性能損失是很大的。以一塊7200rpm的主流機(jī)械硬盤(pán)為例,其平均尋道時(shí)間為8.5毫秒,讀入內(nèi)存需要0.05毫秒。相對(duì)的,DDR3內(nèi)存的訪問(wèn)延遲通常在數(shù)十到100納秒之間,性能差距可能會(huì)達(dá)到8萬(wàn)到22萬(wàn)倍。

      另外,有些操作系統(tǒng)會(huì)將程序的一部分延遲到需要使用的時(shí)候再加載入內(nèi)存執(zhí)行,以此來(lái)提升性能。這一特性也是通過(guò)捕獲硬性頁(yè)缺失達(dá)到的。[5]

      當(dāng)硬性頁(yè)缺失過(guò)于頻繁的發(fā)生時(shí),稱發(fā)生系統(tǒng)顛簸。

      [編輯]無(wú)效

      當(dāng)程序訪問(wèn)的虛擬地址是不存在于虛擬地址空間內(nèi)的時(shí)候,則發(fā)生無(wú)效頁(yè)缺失。一般來(lái)說(shuō)這是個(gè)軟件問(wèn)題,但是也不排除硬件可能,比如因?yàn)閮?nèi)存故障而損壞了一個(gè)正確的指針。

      具體動(dòng)作與所使用的操作系統(tǒng)有關(guān),比如Windows會(huì)使用異常機(jī)制向程序報(bào)告,而類Unix系統(tǒng)則會(huì)使用信號(hào)機(jī)制。如果程序未處理相關(guān)問(wèn)題,那么操作系統(tǒng)會(huì)執(zhí)行默認(rèn)處理方式,通常是轉(zhuǎn)儲(chǔ)內(nèi)存、終止相關(guān)的程序,然后向用戶報(bào)告。[4][6]

      [編輯]參考與延伸閱讀

      1. 1.0 1.1 Red Hat Enterprise Linux 3: Introduction to System Administration, 4.4. Virtual Memory: The Details. RedHat [2013-02-11].
      2. ^ 參見(jiàn)資源監(jiān)視器幫助
      3. ^ HP OpenVMS Systems Documentation, Chapter 7 Evaluating the Memory Resource. HP [2013-02-11].
      4. 4.0 4.1 So What Is A Page Fault?. OSR Online. 2003-05-07 [2013-02-11].
      5. ^ Red Hat Enterprise Linux 3: Introduction to System Administration, 4.5. Virtual Memory Performance Implications. RedHat [2013-02-11]. See note.
      6. ^ UnhandledExceptionFilter function. Microsoft MSDN [2013-02-11].
      • John L. Hennessy, David A. Patterson, Computer Architecture, A Quantitative Approach (ISBN 1-55860-724-2)
      • Tanenbaum, Andrew S. Operating Systems: Design and Implementation (Second Edition). New Jersey: Prentice-Hall 1997.
      • Intel Architecture Software Developer's Manual–Volume 3: System Programming

      非法訪問(wèn)和無(wú)效頁(yè)錯(cuò)誤處理

      非法訪問(wèn)和無(wú)效頁(yè)錯(cuò)誤可能會(huì)導(dǎo)致程序崩潰,分割錯(cuò)誤,總線錯(cuò)誤或核心轉(zhuǎn)儲(chǔ)的操作系統(tǒng)環(huán)境。這些問(wèn)題通常是由于軟件缺陷,但可能會(huì)損壞硬件內(nèi)存錯(cuò)誤,如由超頻所引起的,指針和正確的軟件故障。

      WindowsUNIX的操作系統(tǒng)(以及其他類UNIX系統(tǒng))提供不同的頁(yè)故障引起的錯(cuò)誤報(bào)告機(jī)制。Windows使用結(jié)構(gòu)化異常處理報(bào)告故障無(wú)效的存取訪問(wèn)沖突異常,UNIX(UNIX-like)的系統(tǒng)通常使用信號(hào),如SIGSEGV,報(bào)告這些錯(cuò)誤條件的方案。

      如果收到錯(cuò)誤的程序不處理,操作系統(tǒng)執(zhí)行的默認(rèn)操作,一般涉及終止正在運(yùn)行的過(guò)程中導(dǎo)致錯(cuò)誤的條件,并通知用戶,該計(jì)劃已發(fā)生了故障。最新版本的Windows中經(jīng)常報(bào)道這樣的問(wèn)題,就類似“這個(gè)程序必須關(guān)閉”(有經(jīng)驗(yàn)的用戶或程序員提供一個(gè)調(diào)試器仍然可以獲取詳細(xì)信息)。最新的Windows版本UNIX類UNIX操作系統(tǒng)報(bào)告這些條件的用戶提供的錯(cuò)誤信息,如“分割違反”或“巴士,也可以編寫(xiě)一個(gè)小型轉(zhuǎn)儲(chǔ)(類似的原則,以一個(gè)核心轉(zhuǎn)儲(chǔ))描述的狀態(tài)崩潰的過(guò)程。錯(cuò)誤“,也可能產(chǎn)生核心轉(zhuǎn)儲(chǔ)。

      編輯 ]性能

      頁(yè)故障,由于其本身的性質(zhì),一個(gè)程序或操作系統(tǒng)的性能降低和退化的情況可能會(huì)導(dǎo)致顛簸優(yōu)化程序和操作系統(tǒng)數(shù)量減少的頁(yè)面錯(cuò)誤,提高程序性能,甚至整個(gè)系統(tǒng)。的兩個(gè)主要側(cè)重的優(yōu)化工作,降低整體內(nèi)存使用率和改善記憶的地方。為了減少頁(yè)面系統(tǒng)中的故障,程序員必須使用適當(dāng)?shù)?a title="頁(yè)面替換算法" style="text-decoration:none; color:rgb(11,0,128)" needtodo="http://en./wiki/Page_replacement_algorithm">頁(yè)面置換算法,適合當(dāng)前需求和最大限度地提高了頁(yè)面的點(diǎn)擊。許多人都被提出,如實(shí)施啟發(fā)式算法,以減少發(fā)病的頁(yè)面錯(cuò)誤。一般情況下,提供更多的物理內(nèi)存,也減少了頁(yè)面錯(cuò)誤。

      主要頁(yè)錯(cuò)誤的傳統(tǒng)(硬盤(pán))計(jì)算機(jī)上可以有一個(gè)顯著的性能影響。平均的硬盤(pán)具有的平均旋轉(zhuǎn)等待時(shí)間為3ms,尋道時(shí)間為5ms,和轉(zhuǎn)印時(shí)間為0.05毫秒/頁(yè)。因此,總的尋呼時(shí)間是8ms的(8 000我們)附近。如果內(nèi)存訪問(wèn)時(shí)間為0.2,那么頁(yè)面故障,使操作約40,000倍的速度。

      MMU

      求助編輯百科名片

      MMU是Memory Management Unit的縮寫(xiě),中文名是內(nèi)存管理單元,它是中央處理器(CPU)中用來(lái)管理虛擬存儲(chǔ)器、物理存儲(chǔ)器的控制線路,同時(shí)也負(fù)責(zé)虛擬地址映射為物理地址,以及提供硬件機(jī)制的內(nèi)存訪問(wèn)授權(quán)。

      編輯本段鏈接地址鏈接地址歷史

      許多年以前,當(dāng)人們還在使用DOS或是更古老的操作系統(tǒng)的時(shí)候,計(jì)算機(jī)的內(nèi)存還非常小,一般都是以K為單位進(jìn)行計(jì)算,相應(yīng)的,當(dāng)時(shí)的程序規(guī)模也不大,所以內(nèi)存容量雖然小,但還是可以容納當(dāng)時(shí)的程序。但隨著圖形界面的興起還有用戶需求的不斷增大,應(yīng)用程序的規(guī)模也隨之膨脹起來(lái),終于一個(gè)難題出現(xiàn)在程序員的面前,那就是應(yīng)用程序太大以至于內(nèi)存容納不下該程序,通常解決的辦法是把程序分割成許多稱為覆蓋塊(overlay)的片段。覆蓋塊0首先運(yùn)行,結(jié)束時(shí)他將調(diào)用另一個(gè)覆蓋塊。雖然覆蓋塊的交換是由OS完成的,但是必須先由程序員把程序先進(jìn)行分割,這是一個(gè)費(fèi)時(shí)費(fèi)力的工作,而且相當(dāng)枯燥。人們必須找到更好的辦法從根本上解決這個(gè)問(wèn)題。不久人們找到了一個(gè)辦法,這就是虛擬存儲(chǔ)器(virtual memory).虛擬存儲(chǔ)器的基本思想是程序,數(shù)據(jù),堆棧的總的大小可以超過(guò)物理存儲(chǔ)器的大小,操作系統(tǒng)把當(dāng)前使用的部分保留在內(nèi)存中,而把其他未被使用的部分保存在磁盤(pán)上。比如對(duì)一個(gè)16MB的程序和一個(gè)內(nèi)存只有4MB的機(jī)器,操作系統(tǒng)通過(guò)選擇,可以決定各個(gè)時(shí)刻將哪4M的內(nèi)容保留在內(nèi)存中,并在需要時(shí)在內(nèi)存和磁盤(pán)間交換程序片段,這樣就可以把這個(gè)16M的程序運(yùn)行在一個(gè)只具有4M內(nèi)存機(jī)器上了。而這個(gè)16M的程序在運(yùn)行前不必由程序員進(jìn)行分割。

      編輯本段鏈接地址鏈接地址相關(guān)概念

      ——地址范圍、虛擬地址映射為物理地址 以及 分頁(yè)機(jī)制
      任何時(shí)候,計(jì)算機(jī)上都存在一個(gè)程序能夠產(chǎn)生的地址集合,我們稱之為地址范圍。這個(gè)范圍的大小由CPU的位數(shù)決定,例如一個(gè)32位的CPU,它的地址范圍是0~0xFFFFFFFF (4G),而對(duì)于一個(gè)64位的CPU,它的地址范圍為0~0xFFFFFFFFFFFFFFFF (16E).這個(gè)范圍就是我們的程序能夠產(chǎn)生的地址范圍,我們把這個(gè)地址范圍稱為虛擬地址空間,該空間中的某一個(gè)地址我們稱之為虛擬地址。與虛擬地址空間和虛擬地址相對(duì)應(yīng)的則是物理地址空間和物理地址,大多數(shù)時(shí)候我們的系統(tǒng)所具備的物理地址空間只是虛擬地址空間的一個(gè)子集。這里舉一個(gè)最簡(jiǎn)單的例子直觀地說(shuō)明這兩者,對(duì)于一臺(tái)內(nèi)存為256M的32bit x86主機(jī)來(lái)說(shuō),它的虛擬地址空間范圍是0~0xFFFFFFFF(4G),而物理地址空間范圍是0x000000000~0x0FFFFFFF(256M)。
      在沒(méi)有使用虛擬存儲(chǔ)器的機(jī)器上,虛擬地址被直接送到內(nèi)存總線上,使具有相同地址的物理存儲(chǔ)器被讀寫(xiě);而在使用了虛擬存儲(chǔ)器的情況下,虛擬地址不是被直接送到內(nèi)存地址總線上,而是送到存儲(chǔ)器管理單元MMU,把虛擬地址映射為物理地址。
      大多數(shù)使用虛擬存儲(chǔ)器的系統(tǒng)都使用一種稱為分頁(yè)(paging)機(jī)制。虛擬地址空間劃分成稱為頁(yè)(page)的單位,而相應(yīng)的物理地址空間也被進(jìn)行劃分,單位是頁(yè)幀(frame).頁(yè)和頁(yè)幀的大小必須相同。在這個(gè)例子中我們有一臺(tái)可以生成32位地址的機(jī)器,它的虛擬地址范圍從0~0xFFFFFFFF(4G),而這臺(tái)機(jī)器只有256M的物理地址,因此他可以運(yùn)行4G的程序,但該程序不能一次性調(diào)入內(nèi)存運(yùn)行。這臺(tái)機(jī)器必須有一個(gè)達(dá)到可以存放4G程序的外部存儲(chǔ)器(例如磁盤(pán)或是FLASH),以保證程序片段在需要時(shí)可以被調(diào)用。在這個(gè)例子中,頁(yè)的大小為4K,頁(yè)幀大小與頁(yè)相同——這點(diǎn)是必須保證的,因?yàn)閮?nèi)存和外圍存儲(chǔ)器之間的傳輸總是以頁(yè)為單位的。對(duì)應(yīng)4G的虛擬地址和256M的物理存儲(chǔ)器,他們分別包含了1M個(gè)頁(yè)和64K個(gè)頁(yè)幀。

      編輯本段鏈接地址鏈接地址功能

      鏈接地址鏈接地址1、將虛擬地址映射為物理地址

      現(xiàn)代的多用戶多進(jìn)程操作系統(tǒng),需要MMU,才能達(dá)到每個(gè)用戶進(jìn)程都擁有自己獨(dú)立的地址空間的目標(biāo)。使用MMU,操作系統(tǒng)劃分出一段地址區(qū)域,在這塊地址區(qū)域中,每個(gè)進(jìn)程看到的內(nèi)容都不一定一樣。例如MICROSOFT WINDOWS操作系統(tǒng)將地址范圍4M-2G劃分為用戶地址空間,進(jìn)程A在地址0X400000(4M)映射了可執(zhí)行文件,進(jìn)程B同樣在地址0X400000(4M)映射了可執(zhí)行文件,如果A進(jìn)程讀地址0X400000,讀到的是A的可執(zhí)行文件映射到RAM的內(nèi)容,而進(jìn)程B讀取地址0X400000時(shí),則讀到的是B的可執(zhí)行文件映射到RAM的內(nèi)容。
      這就是MMU在當(dāng)中進(jìn)行地址轉(zhuǎn)換所起的作用。

      鏈接地址鏈接地址2、提供硬件機(jī)制的內(nèi)存訪問(wèn)授權(quán)

      多年以來(lái),微處理器一直帶有片上存儲(chǔ)器管理單元(MMU),MMU能使單個(gè)軟件線程工作于硬件保護(hù)地址空間。但是在許多商用實(shí)時(shí)操作系統(tǒng)中,即使系統(tǒng)中含有這些硬件也沒(méi)采用MMU。
      當(dāng)應(yīng)用程序的所有線程共享同一存儲(chǔ)器空間時(shí),任何一個(gè)線程將有意或無(wú)意地破壞其它線程的代碼、數(shù)據(jù)或堆棧。異常線程甚至可能破壞內(nèi)核代碼或內(nèi)部數(shù)據(jù)結(jié)構(gòu)。例如線程中的指針錯(cuò)誤就能輕易使整個(gè)系統(tǒng)崩潰,或至少導(dǎo)致系統(tǒng)工作異常。
      就安全性和可靠性而言,基于進(jìn)程的實(shí)時(shí)操作系統(tǒng)(RTOS)的性能更為優(yōu)越。為生成具有單獨(dú)地址空間的進(jìn)程,RTOS只需要生成一些基于RAM的數(shù)據(jù)結(jié)構(gòu)并使MMU加強(qiáng)對(duì)這些數(shù)據(jù)結(jié)構(gòu)的保護(hù)。基本思路是在每個(gè)關(guān)聯(lián)轉(zhuǎn)換中“接入”一組新的邏輯地址。MMU利用當(dāng)前映射,將在指令調(diào)用或數(shù)據(jù)讀寫(xiě)過(guò)程中使用的邏輯地址映射為存儲(chǔ)器物理地址。MMU還標(biāo)記對(duì)非法邏輯地址進(jìn)行的訪問(wèn),這些非法邏輯地址并沒(méi)有映射到任何物理地址。
      這些進(jìn)程雖然增加了利用查詢表訪問(wèn)存儲(chǔ)器所固有的系統(tǒng)開(kāi)銷,但其實(shí)現(xiàn)的效益很高。在進(jìn)程邊界處,疏忽或錯(cuò)誤操作將不會(huì)出現(xiàn),用戶接口線程中的缺陷并不會(huì)導(dǎo)致其它更關(guān)鍵線程的代碼或數(shù)據(jù)遭到破壞。目前在可靠性和安全性要求很高的復(fù)雜嵌入式系統(tǒng)中,仍然存在采無(wú)存儲(chǔ)器保護(hù)的操作系統(tǒng)的情況,這實(shí)在有些不可思議。
      采用MMU還有利于選擇性地將頁(yè)面映射或解映射到邏輯地址空間。物理存儲(chǔ)器頁(yè)面映射至邏輯空間,以保持當(dāng)前進(jìn)程的代碼,其余頁(yè)面則用于數(shù)據(jù)映射。類似地,物理存儲(chǔ)器頁(yè)面通過(guò)映射可保持進(jìn)程的線程堆棧。RTOS可以在每個(gè)線程堆棧解映射之后,很容易地保留邏輯地址所對(duì)應(yīng)的頁(yè)面內(nèi)容。這樣,如果任何線程分配的堆棧發(fā)生溢出,將產(chǎn)生硬件存儲(chǔ)器保護(hù)故障,內(nèi)核將掛起該線程,而不使其破壞位于該地址空間中的其它重要存儲(chǔ)器區(qū),如另一線程堆棧。這不僅在線程之間,還在同一地址空間之間增加了存儲(chǔ)器保護(hù)。
      存儲(chǔ)器保護(hù)(包括這類堆棧溢出檢測(cè))在應(yīng)用程序開(kāi)發(fā)中通常非常有效。采用了存儲(chǔ)器保護(hù),程序錯(cuò)誤將產(chǎn)生異常并能被立即檢測(cè),它由源代碼進(jìn)行跟蹤。如果沒(méi)有存儲(chǔ)器保護(hù),程序錯(cuò)誤將導(dǎo)致一些細(xì)微的難以跟蹤的故障。實(shí)際上,由于在扁平存儲(chǔ)器模型中,RAM通常位于物理地址的零頁(yè)面,因此甚至NULL指針引用的解除都無(wú)法檢測(cè)到

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多