內存管理&&地址映射

先來簡單的介紹下電腦的硬件,主要分爲五個部分:
  1. 控制器(Control):是整個計算機的中樞神經,其功能是對程序規定的控制信息進行解釋根據其要求進行控制,調度程序、數據、地址,協調計算機各部分工作及內存與外設的訪問等。
  2. 運算器(Datapath):運算器的功能是對數據進行各種算術運算和邏輯運算,即對數據進行加工處理。
  3. 存儲器(Memory):存儲器的功能是存儲程序、數據和各種信號、命令等信息,並在需要時提供這些信息。
  4. 輸入(Input system):輸入設備是計算機的重要組成部分,輸入設備與輸出設備合稱爲外部設備,簡稱外設,輸入設備的作用是將程序、原始數據、文字、字符、控制命令或現場採集的數據等信息輸入到計算機。常見的輸入設備有鍵盤、鼠標器、光電輸入機、磁帶機、磁盤機、光盤機等。
  5. 輸出(Output system):輸出設備與輸入設備同樣是計算機的重要組成部分,它把外機的中間結果或最後結果、機內的各種數據符號及文字或各種控制信號等信息輸出出來。微機常用的輸出設備有顯示終端CRT、打印機、激光印字機、繪圖儀及磁帶、光盤機等。


       CPU是中央處理器,是控制器和運算器。
  內存和硬盤都是存儲器,受CPU的指揮。一般是從硬盤中讀取程序,在內存中處理,然後再寫回到硬盤中。
  I/O是輸入/輸出的接口。硬盤就是通過I/O接口,把數據送到內存中供CPU處理的。

計算機簡單體系爲:                                          存儲數據的幾種設備

          

虛擬內存器:虛擬管理技術,不是一種技術;

爲了屏蔽一些差異統一管理,我們使用進程來運行,讓計算機來計算運行,我們不用在意cpu的計算,數據的讀取等問題。

cpu計算的數據不直接放在I/O,先放在內存。

操作系統對內存的管理

1.內存分區

      1)固定分區

       分爲兩種:大小相等的固定分區大小不等的固定分區。

       缺點: 都存在內部碎片,不能執行太大的程序。

       大小不等的固定分區的兩種放置策略:

       1.將程序放到能夠容納它的最小的分區;

       2.將程序放到當前能夠容納它的空閒的最小分區。

       2)動態分區

        三種方式

        a.首次適配:按分區在內存的先後次序,從上次分配的分區起查找(到最後{區時再從頭開始},找到符合要求的第一個分區進行分配。

        b.臨近適配: 從上一次放置的地方開始掃描,選擇下一個合適的空閒分區進行分配。

        c.最佳適配:按分區在內存的先後次序從頭查找,找到其大小與要求相差最小的空閒分區進行分配。從個別來看,外碎片較小;但從整體來看,會形成較多外碎片優點是較大的空閒分區可以被保留。

        缺點:產生外部碎片(太小了,無法分出去),可以進行碎片整理,壓縮。

2.夥伴系統

      夥伴系統是一個結合了2的方冪個分配器和空閒緩衝區合併計技術的內存分配方案,

      其基本思想很簡單:內存被分成含有很多頁面的大塊, 每一塊都是2個頁面大小的方冪.。如果找不到想要的塊, 一個大塊會被分成兩部分, 這兩部分彼此就成爲夥伴。其中一半被用來分配, 而另一半則空閒。這些塊在以後分配的過程中會繼續被二分直至產生一個所需大小的塊。當一個塊被最終釋放時, 其夥伴將被檢測出來, 如果夥伴也空閒則合併兩者。可以使用二叉樹做映射,每個葉子節點對應一塊內存區域,一分爲二,合併的時候看左右兄弟。最終合併成一個。
3.分頁

         首先操作系統把內存分區(系統區和用戶區)。每個區裏又分頁,每個頁裏又分表。 一個進程可以佔據多個頁幀,加載的空間可以不連續。

        分頁 是一種操作系統裏存儲器管理的一種技術,可以使電腦的主存可以使用存儲在輔助存儲器中的數據。操作系統會將輔助存儲器(通常是磁盤)中的數據分區成固定大小的區塊,稱爲“頁”。當不需要時,將分頁由主存(通常是內存)移到輔助存儲器;當需要時,再將數據取回,加載主存中。相對於分段,分頁允許存儲器存儲於不連續的區塊以維持文件系統的整齊。分頁是磁盤和內存間傳輸數據塊的最小單位。

         通過訪問頁表寄存器得到外層頁表的頁號,根據頁表寄存器得到對應的的偏移地址是內存頁表的頁號,再根據頁號訪問頁表寄存器得到物理塊。也可以在各個有頁表寄存器的地方加快表減小開銷。

簡單分頁的特點:

1:分頁的內容少,產生的碎片少。

2:一個進程可以佔有多個分頁。

3:佔用多個分頁不需要連續。充分利用空閒分頁。

4.分段

        分段也是類似分頁的實現,一個進程所佔的段有多個,段和段之間不需要連續。每個段和物理地址之間有一個映射關係,叫做段表。類似於頁表。段表中記錄了段的基址和段長。訪問段表的時候先查看是否大於該段的長度,如果大於則越界。訪問失敗。如果小於,則用該段的始址加上段內地址得到對應的物理地址。

分頁和分段的區別:

1:頁是信息的物理單位,爲了方便管理內存。對於用戶來說是透明的。段是信息的邏輯單位,分段是邏輯的要求。對用戶是可見的

2:頁的大小是固定的,是由操作系統設計的。段的大小是不固定的,是由用戶程序本身決定的。

3:分頁的地址空間是一維的,分段的地址空間是二維的。
 

       頁式和段式系統有許多相似之處。比如,兩者都採用離散分配方式,且都通過地址映射機構來實現地址變換。但概念上兩者也有很多區別,主要表現在:

      1)   需求:是信息的物理單位,分頁是爲了實現離散分配方式,以減少內存的碎片,提高內存的利用率。或者說,分頁僅僅是由於系統管理的需要,而不是用戶的需要。段是信息的邏輯單位,它含有一組其意義相對完整的信息。分段的目的是爲了更好地滿足用戶的需要。

    一條指令或一個操作數可能會跨越兩個頁的分界處,而不會跨越兩個段的分界處。

     2)   大小:頁大小固定且由系統決定,把邏輯地址劃分爲頁號和頁內地址兩部分,是由機器硬件實現的。段的長度不固定,且決定於用戶所編寫的程序,通常由編譯系統在對源程序進行編譯時根據信息的性質來劃分。

     3)   邏輯地址表示:頁式系統地址空間是一維的,即單一的線性地址空間,程序員只需利用一個標識符,即可表示一個地址。分段的作業地址空間是二維的,程序員在標識一個地址時,既需給出段名,又需給出段內地址。

     4)   段表比頁表短,可以縮短查找時間,提高訪問速度。

5.段頁式

      現在通常用的是段頁式管理,就是將段頁兩者結合,提高了更高的效率。

1.  段頁式存儲管理的基本思想

段頁式存儲組織是分段式和分頁式結合的存儲組織方法,這樣可充分利用分段管理和分頁管理的優點。

   (1) 用分段方法來分配和管理虛擬存儲器。程序的地址空間按邏輯單位分成基本獨立的段,而每一段有自己的段名,再把每段分成固定大小的若干頁。

     (2) 用分頁方法來分配和管理實存。即把整個主存分成與上述頁大小相等的存儲塊,可裝入作業的任何一頁。程序對內存的調入或調出是按頁進行的。但它又可按段實現共享和保護。

     想要了解段頁式,得先明白地址映射的一個問題。

2.地址映射

      從我們計算機的發展來看,在x86體系之前我們是16位地址空間,也就是2^16 = 64k,但是在x86之後,變成了20位地址空間,爲了兼容過去的16位,我們將段的大小規定爲16的倍數,段的起始位置也是16的倍數,段的大小範圍就是0--64k。因爲從16開始,低4位沒有使用,因此只使用高16位就可以記錄段的大小,如下圖圖:

       同時我們使用16位的寄存器:CS(代碼段寄存器)、DS(數據段寄存器)、SS(堆棧段寄存器)、ES(附加段寄存器),以及指令指針寄存器IP的值(偏移寄存器),來進行物理地址的計算。

      這也就出現了我們最早的實地址模式

       

       在段的機制中,我們需要記錄段的起始地址,段的長度以及權限但是在32位系統中,16位的寄存器就不夠記錄信息了,這時候我們就引入了32位的兩個寄存器:GDTR全局段描述符表寄存器,LDTR局部段描述符表寄存器。雖說是個表格,但它的保存方式是一個數組。如下圖:

   而16位的寄存區,其中段選擇子爲2^13 = 8192,操作系統用12項,用戶就只能用8180項了,如下圖:

  我們再來看一下這些段的起始位置,段的長度,和權限是怎麼存儲的?這就需要段描述符表項的定義表了,如下:

    這時就形成了我們的保護地址模式,結合下圖: 

       

    

        那什麼叫二級映射呢?舉例:0x080480fe;

         因爲PT是4M比較大,沒必要放在內存中,這時候我們就可以放在交換分區裏,它是磁盤上開闢空間以內存管理方式來管理,作爲對於內存空間的補充。用的時候放在內存上,不用的時候可以放在交換分區,當發送缺頁異常的時候,我們可以依靠MMU,進行頁面置換。常見的頁面置換算法有:OPT、LRU。但多次置換會發生系統抖動。還有我們要知道:程序中變量的虛擬地址在是程序的時候就有地址啦,在磁盤中保存

         上圖就是我們的二級映射,也就是我們的段頁式的映射方法。

         在段頁式系統中,爲了獲得一條指令或數據,須三次訪問內存。第一次訪問是訪問內存中的段表,從中取得頁表始址;第二次訪問是訪問內存中的頁表,從中取出該頁所在的物理塊號,並將該塊號與頁內地址一起形成指令或數據的物理空間;第三次訪問纔是真正從第二次訪問所得的地址中,取出指令或數據

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章