Android內存管理(二)操做系統基礎


親愛的,關注我吧


這裏不在詳細的講解操做系統,只是介紹關於內存的幾個關鍵名詞及相關概念:linux

  • 物理內存web

  • 虛擬內存編程

  • 邏輯地址windows

  • 交換空間數組


熟悉以上操做系統名詞對於的後續介紹Android內存管理比較重要,請你們認真閱讀.若是的比較熟悉上述幾個關鍵名詞,此章節能夠跳過微信

物理內存(RAM):

加載到內存地址寄存器中的內存又叫「硬件內存」,是內存單元真正的地址(也叫物理地址)。RAM做爲進程運行不可或缺的資源,對系統和穩定性有着決定性的影響。另外,RAM的一部分被操做系統留做他用,好比顯存等。

邏輯地址:

由CPU控制生成的地址,是一個程序級別的概念。這裏引用一個淺顯的例子——咱們在C語言指針編程中,能夠讀取指針變量自己的值(&操做),這裏取得的值就是邏輯地址——也就是說,這個(&操做)取得的值是CPU控制生成的一個邏輯地址,並非這個指針變量在RAM中的真正地址。  


那麼,咱們爲何要這麼一個並非真正地址的邏輯地址呢?深層次的緣由這裏不予以探究,可是一個比較淺顯的緣由就是,邏輯地址的分配很是靈活——在一個數組中,咱們經過邏輯地址能夠保證數組中元素地址的連續性。固然這個邏輯地址最終仍是要經過必定的方式映射到RAM中的物理地址上,這個物理地址纔是元素存儲的真正地址,而這個物理地址,不必定是連續的。

虛擬內存:

是操做系統級別的概念,指計算機呈現出要比實際擁有的內存大得多的內存量。它使得每一個應用程序都認爲本身擁有獨立且連續的可用的內存空間(一段連續完整的地址空間),這個內存大小跟操做系統的位數有關。好比32位系統,邏輯內存的最大爲2^32。而實際上,它一般是被映射到多個物理內存段(在真正的物理地址上不必定是連續的),還有部分暫時存儲在外部磁盤存儲器上,在須要時再加載到內存中來。  


上一段咱們咱們說了半天的邏輯地址,理解就是虛擬內存中的地址。OK,如今咱們知道了虛擬內存有兩個特色——app

  • 一個是在虛擬內存中虛擬地址/邏輯地址是連續的,便於靈活分配;

  • 二是虛擬內存能夠是計算機呈現出比實際內存大的多的內存。那麼爲何虛擬內存會呈現出這麼大的內存的神奇功能呢?或者說這多出來的額內存是哪來的?這就要用到咱們接下來說的交換(Swap)空間。

交換(Swap)空間:

在系統中運行的每一個進程都須要使用到內存,但不是每一個進程都須要每時每刻使用系統分配的內存空間。當系統運行所需內存超過實際的物理內存,內核會釋放某些進程所佔用但未使用的部分或全部物理內存,將這部分釋放的數據存儲在磁盤上直到進程下一次調用,並將釋放出的內存提供給有須要的進程使用。  
引用一個容易理解但不是很恰當的比喻:你不須要很長的軌道就可讓一列火車從上海開到北京。你只須要足夠長的鐵軌(好比說3千米)就能夠完成這個任務。採起的方法是把後面的鐵軌馬上鋪到火車的前面,只要你的操做足夠快並能知足要求,列車就能像在一條完整的軌道上運行。  
swap和虛擬內存結伴而來的。若是系統是64位,最大虛擬內存能夠是2的64次方,沒有計算機會有這麼大的內存。當內存不夠用的時候只能映射到磁盤。linux專門開闢了一個swap磁盤分區,當物理內存不夠用的時候(程序並不知道),將內存中好久不使用的內存區域交換到swap區。也便是說:用做虛擬內存的磁盤空間稱爲交換空間(swap空間)。

分析:32位系統最大隻能支持4GB內存緣由

你們確定都看過本身系統的內存,估計你們都遇到過下面的狀況(都是32位系統):編輯器

  • 本身裝的是4G內存條,但是操做系統顯示的內存倒是3.75Gide

  • 本身裝的是8G內存條,但是操做系統顯示的內存也是3.75G大數據


上面這兩種狀況爲何呢,下面分析其中的原因,在分析原因以前,先了解下計算機系統結構方面的知識。

1.認識計算機總線

其實你們在生活中常常用到總線,就是USB接口,其實就是一種總線,叫作USB總線。

1.1 爲何須要總線

上圖是馮諾依曼計算機結構圖,由五大部分組成: 邏輯運算器、控制器、存儲器、輸入設備、輸出設備

若是輸入或者輸出設備想把數據存儲到存儲器或者從存儲器取數據,則須要經過邏輯運算器(CPU中),則CPU會中止工做,影響CPU的效率,爲了提升CPU工做效率,出現了總線的概念。

上圖是計算機中的一種總線結構,若是想了解更多的總線設計結構,能夠查看計算機組成原理相關書籍,這裏主要是爲了說明爲何須要總線。

總線是鏈接多個部件的信息傳輸線,是各部件共享的傳輸介質。輸入輸出設備能夠和主存通訊而不用影響CPU的工做,這樣CPU的工做效率獲得了很大的提高。

  • 系統總線: 用於IO接口、主存、CPU之間的信息傳輸,IO和CPU之間只傳輸指令信息。

  • 主存總線: 專門用於主存和CPU之間的信息傳輸

1.2 系統總線的分類

  • 數據總線:

數據總線用來傳輸各功能部件之間的數據信息,它是雙向傳輸總線,其位數就是數據總線的寬度。總之是用來傳輸數據的。
  • 地址總線:

地址總線主要用來指出數據總線上的源數據或目的數據在主存單元的地址或者I/O設備的地址。總之就是傳輸數據所在地址。
  • 控制總線:

因爲數據總線、地址總線都是被掛在總線上的全部部件共享的,如何使各部件能在不一樣時刻佔有總線使用權,需依靠控制總線來完成,所以控制總線是用來發出各類控制信號的傳輸線。總之是用來傳輸控制指令的。

2.分析問題原因

問題:

  • 本身裝的是4G內存條,但是操做系統顯示的內存倒是3.75G

  • 本身裝的是8G內存條,但是操做系統顯示的內存也是3.75G

在使用計算機時,其支持的最大內存是由操做系統和硬件兩方面決定的。

硬件方面

上面介紹總線的時候已經介紹了地址總線,是用來傳輸數據所在地址的,而32位系統通常有32根地址總線,那麼所能傳輸的最大數據地址就是2^32,這裏所指的地址是真實的數據地址,即物理地址,CPU在執行指令時須要先將指令的邏輯地址變換爲物理地址才能執行。

地址總線數目 最大支持內存
32位系統 32 2的32次方 = 4G
64位系統 36或40 2的36次方 = 64G 或 2的40次方= 1024G = 1T

系統方面

用戶在使用計算機時可以訪問的最大內存不單是由CPU地址總線的位數決定的,還須要考慮操做系統的實現。實際上用戶在使用計算機時,進程訪問到的地址都是邏輯地址,並非真實的物理地址,邏輯地址是由操做系統提供的,並維護了邏輯地址和物理地址的映射。
對於32位的windows操做系統,提供的邏輯地址尋址範圍是4G,可是對於這4G的邏輯地址,又要劃分出來一份給CPU寄存器、ROM的這些物理地址進行映射,那麼剩下和內存條的物理地址進行映射的空間確定沒有4G了,以下圖所示:

其實操做系統顯示的內存3.75G,是邏輯地址。



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

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

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

免費小說APP 漫品客戶端歡迎下載



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

相關文章
相關標籤/搜索