linux內存和windows內存的區別:1、linux優先使用物理內存,內存不夠時才放在交換分區上,而windows則是內存和虛擬內存一起使用;2、windows總是給內存留下一定的空閒空間,啟動新的程序比較快,而linux內存常處於全部被使用的狀態,需要先清理出一塊內存再分配給新的程序,啟動新程序比較慢。
本教學操作環境:windows10&&linux7.3系統、Dell G3電腦。
Linux 優先使用實體內存,當物理記憶體還有空閒時,linux是不會釋放記憶體的,即時佔用記憶體的程式已經被關閉了(這部分記憶體就用來做快取了)。也就是說,即時你 有很大的記憶體,用過一段時間後,也會被佔滿。這樣做的好處是,啟動那些剛開啟的程式、或是讀取剛訪問過得資料會比較快,對於伺服器很有好處。
區別
windows則總是給記憶體留下一定的空閒空間,即時記憶體有空閒也會讓程式使用一些虛擬內存,這樣做的好處是,啟動新的程式比較快,直接分給它些空閒記憶體就可以了,
而linux下呢?由於記憶體經常處於全部被使用的狀態,則要先清理出一塊內存,再分配給新的程式使用,因此,新程式的啟動會慢一些。
linux核心基本上是先把資料都放在記憶體上的,記憶體不夠才放到交換分割區(虛擬記憶體)上,細節是,只有頻繁使用的資料才會放到記憶體上,不頻繁操作的資料會漸漸放到交換分割區上,適當時寫回硬碟裡。
而windows的處理方式是?記憶體和虛擬記憶體一起使用,不是以記憶體運算為主,這樣的結果是IO的負擔比較大,有時會拖慢處理速度。 linux的哲學是,盡可能使用內存,因為內存的速度比硬碟速度快100倍以上。
擴充知識
Linux把物理記憶體分割成三個層次來管理
系統的實體記憶體被分割成幾個節點(node),一個node對應一個記憶體簇bank,即每個記憶體簇被認為是一個節點。 (可以使用NODE_DATA(node_id)來找出系統中編號為node_id的節點)
記憶體被分割成節點,每個節點關聯到系統的一個處理器,核心中用pg_data_t來實例,系統中每個節點被連結到以NULL為結尾的pgdat_list鍊錶中,其中每個節點使用pg_data_tnode_next欄位連結到下一個節點。對於UMA結構,只使用contig_page_data的靜態pg_data結構,此時NODE_DATA直接指向全域的contig_page_data.
節點被分割成記憶體管理區。一個記憶體管理區使用struct zone_struct描述,zone_t,用以表示記憶體的某個範圍,低端範圍的16MB被描述為ZONE_DMA,然後是可直接映射到內核的普通記憶體域ZONE_NORMAL,最後是超出內核段的物理位址域ZONE_HIGHMEM(0xF8000000~0xFFFFFFFF),高階內存,是系統中預留的可用記憶體空間,不能被核心直接映射。 (為了相容於熱插拔以及記憶體碎片化的處理,核心引入一些邏輯上的記憶體區:
1、核心定義一個偽記憶體區ZONE_MOVEABLE,在防止物理記憶體碎片的機制mmeory mirgation中需要使用此記憶體區域以供記憶體碎片的極致使用
2、ZONE_DEVICE:為支援熱插拔裝置而分配的Non Volatile Memory,非揮發性記憶體)。
頁幀(page frame):代表記憶體的最小單元,堆記憶體中每頁都會建立一個struct page的實例。傳統上,把記憶體視為連續的位元組,即記憶體為位元組數組,記憶體單元的編號(位址)可作為位元組數組的索引。分頁管理時,將若干位元組試為一頁,例如4K byte,此時內存變成連續頁,即內存為頁數組,每一頁物理內存為頁幀,以頁為單位對內存進行編號,此編號可作為頁數組的索引,稱為頁幀號。 (頁的資料結構物件都保存在mem_map全域數組中,該數組通常被存放在ZONE_NORMAL的首部,或者就在小內存系統中裝入內核映像而預留的區域之後,在載入內核的低地址至記憶體區域的後面記憶體區域,也就是ZONE_NORMAL開始的地方的記憶體的頁的資料結構的對象,都保存在這個全域數組中)。
分頁單元可以實現把線性位址轉換成實體位址,線性位址被分割成固定長度大小的群組,稱為頁,頁內部的線性位址被對應到連續的實體位址。這樣核心可以指定一個頁的實體位址和其儲存權限,而不會使用指定頁的全部線性位址的儲存權限。
分頁單元把所有RAM分成固定長度的頁幀(也叫頁框,page frame),每一個頁幀包含一個頁,也就是說頁幀和頁的長度是一樣的。頁框屬於記憶體的一部分,因此也是一個儲存區域。 ----mm_types.h struct page結構體中的mapping,不只保存一個指針,還保存一些額外的信息,用於判斷頁是否屬於未關聯地址空間的某個匿名內存區。透過mapping恢復anon_vma的方法:anon_vma=(struct anon_vma *)(mapping-PAGE_MAPPING_ANON)。
推薦學習:Linux影片教學
#以上是linux和windows的記憶體有什麼差別的詳細內容。更多資訊請關注PHP中文網其他相關文章!