Android內存管理(三)內存管理基礎


因此咱們只須要了解上面主機部分的內容(上圖主機部分)web

概述

CPU只能訪問其寄存器(Register)和內存(Memory), 沒法直接訪問硬盤(Disk)。存儲在硬盤上的數據必須首先傳輸到內存中才能被CPU訪問。從訪問速度來看,對寄存器的訪問很是快,一般爲1納秒;對內存的訪問相對較慢,一般爲100納秒(使用緩存加速的狀況下);而對硬盤驅動器的訪問速度最慢,一般爲10毫秒。緩存

寄存器(Register):CPU內部的高速存儲區域微信

當一個程序加載到內存中時,它由四個內存區域組成:app

堆棧(Stack):存儲由該程序的每一個函數建立的臨時變量 堆(Heap):該區域特別適用於動態內存分配 數據(Data):存儲該程序的全局變量和靜態變量 代碼(Code):存儲該程序的指令編輯器

主要的內存管理技術ide

  • Base and limit registers(基址寄存器和界限寄存器)函數

  • Virtual memory(虛擬內存)ui

  • Swapping(交換)spa

  • Segmentation(分段)操作系統

  • Paging(分頁)

Base and limit registers(基址寄存器和界限寄存器)

必須限制進程,以便它們只能訪問屬於該特定進程的內存位置。

每一個進程都有一個基址寄存器和限制寄存器:

  • 基址寄存器保存最小的有效存儲器地址

  • 限制寄存器指定範圍的大小

例如,process 2的有效內存地址是300040到420940

那麼每一個來自用戶進程的內存訪問都將首先針對這兩個寄存器進行一次檢查:

操做系統內核能夠訪問全部內存位置,由於它須要管理整個內存。

Virtual memory(虛擬內存)

虛擬內存(VM)是OS爲內存管理提供的基本抽象。

  • 全部程序都使用虛擬內存地址

  • 虛擬地址會被轉換爲物理地址

  • 物理地址表示數據的實際物理位置

  • 物理位置能夠是內存或磁盤

  

虛擬地址到物理地址的轉換由存儲器管理單元(MMU - Memory Management Unit)處理。MMU使用重定位寄存器(relocation register),其值在硬件級別上被添加到每一個內存請求中。

Swapping(交換)

交換是一種能夠暫時將進程從內存交換到後備存儲,而以後又能夠將其返回內存以繼續執行的技術。

後備存儲一般是一個硬盤驅動器,其訪問速度快,且大小足以存儲內存映像的副本。

若是沒有足夠的可用內存來同時保留內存中的全部正在運行的進程,則某些當前未使用CPU的進程可能會被交換到後備存儲中。

交換是一個很是緩慢的過程。主要耗時部分是數據傳輸。例如,若是進程佔用10MB內存而且後備存儲的傳輸速率爲40MB/秒,則須要0.25秒來進行數據傳輸。再加上將數據交換回內存的時間,總傳輸時間多是半秒,這是一個巨大的延遲,所以,有些操做系統已經再也不使用交換了。

Segmentation(分段)

分段是一種將內存分解爲邏輯片斷的技術,其中每一個片斷表明一組相關信息。例如,將每一個進程按照堆棧,堆,數據以及代碼分爲不一樣的段,還有OS內核的數據段等。

將內存分解成較小的段會增長尋找空閒內存的機會。

每一個段都有一對寄存器:

  • 基址寄存器:包含段駐留在內存中的起始物理地址

  • 限制寄存器:指定段的長度

段表(Segment table) 存儲每一個段的基址和限制寄存器信息。

使用分段時,虛擬內存地址是一對:<段號,偏移量>

段號(Segment Number):用做段表的索引以查找特定條目 偏移量(Offset):首先與限制寄存器進行比較,而後與基址結合以計算物理內存地址

Paging(分頁)

有時可用內存被分紅許多小塊,其中沒有一塊足夠大以知足下一個內存需求,然而他們的總和卻能夠。這個問題被稱爲碎片(Fragmentation) ,許多內存分配策略都會受其影響。

分頁是一種內存管理技術,它容許進程的物理內存不連續。它經過在稱爲頁面(Page)的相同大小的塊中分配內存來消除碎片問題,是目前比較優秀的內存管理技術。

分頁將物理內存劃分爲多個大小相等的塊,稱爲幀(Frame) 。並將進程的邏輯內存空間也劃分爲大小相等的塊,稱爲頁面(Page)

任何進程中的任何頁面均可以放入任何可用的幀中。

頁表(Page Table) 用於查找此刻存儲特定頁面的幀。

使用分頁時,虛擬內存地址是一對:<頁碼,偏移量>

  • 頁碼(Page Number):用做頁表的索引,以查找此頁面的條目

  • 偏移量(Offset):與基址相結合,以定義物理內存地址

舉一個分頁地址轉換的例子:

虛擬內存地址爲0x13325328,頁表項0x13325包含的值是0x03004,那麼物理地址是什麼?

答案:物理地址是0x03004328 頁碼爲0x13325,偏移量爲0x328 相應的幀號是0x03004



夯實基礎,關注前沿,娛樂生活

掌握更多前沿技術,獲取更多笑點 

請關注--------喘口仙氣



本文分享自微信公衆號 - 喘口仙氣(gh_db8538619cdd)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索