成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

內(nèi)存那點(diǎn)事:讓我們一點(diǎn)點(diǎn)的搞懂它

系統(tǒng) Linux 存儲
今天我們從概念開始,一點(diǎn)點(diǎn)的展開講了關(guān)于內(nèi)存映射的兩種內(nèi)存分配機(jī)制,以及特點(diǎn),講了內(nèi)存分配和回收。

內(nèi)存是計(jì)算機(jī)系統(tǒng)中至關(guān)重要的組成部分,它不僅儲存了運(yùn)行中的程序和數(shù)據(jù),還直接關(guān)系到系統(tǒng)的性能和穩(wěn)定性。讓我們一起深入探討Linux系統(tǒng)下內(nèi)存管理的核心原理,揭開它的神秘面紗。

基礎(chǔ)概念

物理地址

  • 概念:物理地址是指計(jì)算機(jī)內(nèi)存中實(shí)際的硬件地址,它對應(yīng)著計(jì)算機(jī)中的物理存儲單元(如RAM),物理地址是唯一的。內(nèi)存的一個(gè)地址的容量是一個(gè)字節(jié)(Byte)
  • 特點(diǎn): 物理地址是唯一的,每個(gè)物理存儲單元都有一個(gè)對應(yīng)的物理地址。

虛擬地址

  • 概念:虛擬地址是在程序執(zhí)行過程中由操作系統(tǒng)提供的地址空間,它不直接對應(yīng)物理硬件,而是經(jīng)過虛擬內(nèi)存系統(tǒng)的映射,最終映射到物理地址上。每個(gè)運(yùn)行的進(jìn)程都有自己的虛擬地址空間,這使得每個(gè)進(jìn)程認(rèn)為它擁有整個(gè)系統(tǒng)的內(nèi)存。
  • 特點(diǎn): 虛擬地址具有抽象性,它使得程序無需關(guān)心實(shí)際的硬件細(xì)節(jié),而是可以使用一個(gè)相對于程序自身的地址空間。

內(nèi)存布局

  • 32位操作系統(tǒng):持32位的地址空間,最多可以尋址2^32個(gè)地址,即4GB的內(nèi)存。
  • 64位操作系統(tǒng): 支持64位的地址空間,最多可以尋址的地址數(shù)量為2^64,即128TB。
  • 不同位寬的操作系統(tǒng)地址空間的范圍也不同,下面的兩張圖來分別表示它們的虛擬地址空間:
  • 每個(gè)進(jìn)程的虛擬內(nèi)存空間都包括用戶空間和內(nèi)核空間,每個(gè)進(jìn)程都認(rèn)為它擁有整個(gè)系統(tǒng)的內(nèi)存資源。
  • 每個(gè)進(jìn)程的內(nèi)核空間,其實(shí)關(guān)聯(lián)的都是相同的物理內(nèi)存(公用的)。

內(nèi)存映射

既然每個(gè)進(jìn)程都有一個(gè)這么大的地址空間,那么所有進(jìn)程的虛擬內(nèi)存加起來,自然要比實(shí)際的物理內(nèi)存大得多。所以,并不是所有的虛擬內(nèi)存都會分配物理內(nèi)存,只有那些實(shí)際使用的虛擬內(nèi)存才分配物理內(nèi)存,內(nèi)存分配的機(jī)制是通過內(nèi)存映射來管理的,內(nèi)存映射支持按段分配和按頁分配。

按段分配

分段是比較早提出的,它將整個(gè)物理內(nèi)存劃分為若干個(gè)不同用途的段,每個(gè)段用于存放特定類型的數(shù)據(jù),這些邏輯分段包括只讀段、數(shù)據(jù)段、堆段、棧段組成。

  • 只讀段:包括代碼和常量等。
  • 數(shù)據(jù)段:包括全局變量等。
  • 堆段:包括動態(tài)分配的內(nèi)存,從低地址開始向上增長。
  • 文件映射段: 包括動態(tài)庫、共享內(nèi)存等,從高地址開始向下增長。
  • 棧段:包括局部變量和函數(shù)調(diào)用的上下文等。棧的大小是固定的,一般是 8 MB

存在的問題:

  • 外部內(nèi)存碎片:因?yàn)榉侄螜C(jī)制分配的是連續(xù)的內(nèi)存空間,假設(shè)有 1G 的物理內(nèi)存,A程序占用了512MB,B程序占用了128MB,C程序占用了256MB,空閑128MB,B程序關(guān)閉了,因?yàn)閮?nèi)存不連續(xù),導(dǎo)致沒有足夠空間在打開一個(gè)200MB的程序,就會交換到磁盤,從磁盤換入、喚出效率低下(多個(gè)不連續(xù)的物理內(nèi)存空間)。
  • 復(fù)雜性: 程序員需要管理多個(gè)內(nèi)存段,增加了編程的復(fù)雜性。
  • 不同段的交叉訪問: 由于段之間的獨(dú)立性,跨越多個(gè)段的訪問會更加復(fù)雜。

按頁分配

  • 將物理內(nèi)存和虛擬內(nèi)存劃分為固定大小的頁(通常為4KB)
  • 操作系統(tǒng)維護(hù)一個(gè)頁表,將虛擬內(nèi)存的頁映射到物理內(nèi)存的頁上。
  • 頁表(快速、高效)。
  • MMU:頁表實(shí)際上存儲在 CPU 的內(nèi)存管理單元 MMU 中。
  • TLB 是MMU 中頁表的高速緩存,加速虛擬地址到物理地址的轉(zhuǎn)換,減少對主存(RAM)的訪問次數(shù),提高系統(tǒng)性能。
  • 多級頁表:頁的大小是4K,隨著內(nèi)存的增大,頁表記錄會特別多,為了解決頁表項(xiàng)過多的問題,Linux 提供了兩種機(jī)制,也就是多級頁表和大頁(HugePage)。

優(yōu)點(diǎn)

  • 消除外部碎片: 由于頁是固定大小的,減少了外部碎片的產(chǎn)生。
  • 簡化內(nèi)存管理: 操作系統(tǒng)負(fù)責(zé)頁的映射,程序員無需關(guān)心具體的內(nèi)存分配和釋放。
  • 更好的內(nèi)存共享: 易于實(shí)現(xiàn)頁面的共享,不同進(jìn)程可以共享相同的頁。

內(nèi)存分配與回收

內(nèi)存分配

進(jìn)程可以通過調(diào)用malloc等函數(shù)在堆上動態(tài)分配內(nèi)存。這些內(nèi)存塊的管理由C庫提供,但最終涉及到系統(tǒng)調(diào)用,如brkmmap

brk

  • 作用:用于調(diào)整進(jìn)程的數(shù)據(jù)段的結(jié)束地址,即擴(kuò)展或縮小堆的大小。
  • 操作對象:操作的是堆空間,對整個(gè)數(shù)據(jù)段的結(jié)束地址進(jìn)行調(diào)整。
  • 分配粒度:分配的內(nèi)存是以頁為單位的,較大的內(nèi)存請求可能會導(dǎo)致內(nèi)部碎片。
  • 適用場景:適用于較小的內(nèi)存分配,比如動態(tài)內(nèi)存分配。

mmap

  • 作用:用于在進(jìn)程的地址空間中映射文件或匿名內(nèi)存區(qū)域。
  • 操作對象:可以操作文件映射,也可以用于匿名內(nèi)存映射,即映射到無關(guān)聯(lián)文件的內(nèi)存。
  • 分配粒度:可以以頁為單位進(jìn)行內(nèi)存分配,也支持更細(xì)粒度的映射。
  • 適用場景:適用于大塊的內(nèi)存分配,比如映射大文件、共享內(nèi)存、內(nèi)存映射 I/O 等。

內(nèi)存回收

  • 手動回收:調(diào)用 free() 或 unmap() 來釋放這些不用的內(nèi)存。
  • 自動回收(內(nèi)存緊張時(shí)系統(tǒng)觸發(fā))。
  • 回收緩存:比如使用 LRU(Least Recently Used)算法,回收最近使用最少的內(nèi)存頁面。
  • 回收不常訪問的內(nèi)存:把不常用的內(nèi)存通過交換分區(qū)直接寫到磁盤中(Swap)。
  • 殺死進(jìn)程:內(nèi)存緊張時(shí)系統(tǒng)還會通過OOM(Out of Memory)直接殺掉占用大量內(nèi)存的進(jìn)程。
  • 一個(gè)進(jìn)程消耗的內(nèi)存越大,oom_score 就越大。
  • 一個(gè)進(jìn)程運(yùn)行占用的 CPU 越多,oom_score 就越小。
# oom_adj 的范圍是 [-17, 15],數(shù)值越大,表示進(jìn)程越容易被 OOM 殺死
# -17 表示禁止 OOM
echo -16 > /proc/$(pidof sshd)/oom_adj

結(jié)束語

今天我們從概念開始,一點(diǎn)點(diǎn)的展開講了關(guān)于內(nèi)存映射的兩種內(nèi)存分配機(jī)制,以及特點(diǎn),講了內(nèi)存分配和回收,留下幾個(gè)問題,系統(tǒng)大家一起討論學(xué)習(xí):

  • 按頁分配下會存在內(nèi)存碎片嗎?為什么?
  • Linux 操作系統(tǒng)采用了哪種方式來管理內(nèi)存呢?
責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2011-10-27 16:11:46

后PC時(shí)代

2010-09-16 09:19:17

2018-01-09 21:47:17

2021-07-02 09:24:23

Windows 11操作系統(tǒng)微軟

2014-07-24 13:32:01

Google NowSiri

2019-04-01 10:20:29

技術(shù)研發(fā)指標(biāo)

2015-12-28 16:17:32

華為

2015-11-05 09:29:53

程序員進(jìn)步

2021-02-24 09:54:53

4G5G運(yùn)營商

2025-02-19 10:48:15

2019-06-26 05:14:32

性能優(yōu)化程序系統(tǒng)

2010-05-20 15:29:43

優(yōu)化IIS

2019-11-19 10:28:22

AWS虛擬機(jī)入門

2017-02-06 13:25:40

.NET視頻

2021-04-29 22:11:28

Python排序算法

2021-09-01 14:41:43

域名自定義IP

2012-03-27 08:49:19

Json

2009-09-14 19:44:27

LINQ To SQL

2009-07-09 15:09:05

JDK卸載
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 91麻豆精品国产91久久久久久 | 欧美日韩高清在线一区 | 日韩一区在线观看视频 | 成人在线观看免费 | 三级av在线 | 亚洲一区二区在线播放 | 欧美日韩亚洲系列 | 日韩欧美三区 | 精品区 | 成人一区二区三区在线观看 | 国产欧美久久精品 | 国产精品1区 | 精品一区二区三区电影 | av片在线观看 | 日韩午夜场 | 国产精品s色 | a级毛片毛片免费观看久潮喷 | 久久91 | 激情一区二区三区 | 99热精品在线 | 成人免费毛片在线观看 | 91在线色视频 | 一区二区三区高清 | 午夜不卡一区二区 | 国产精品一区二区三区免费观看 | 国产乱码精品一品二品 | 成人福利视频 | 国产欧美日韩一区二区三区 | 成人欧美一区二区三区在线播放 | 国产精品a一区二区三区网址 | 亚洲成人网在线播放 | 国产午夜视频 | 午夜免费网 | 福利av在线 | 欧美日韩精品一区二区 | 国产a爽一区二区久久久 | 91麻豆精品国产91久久久更新资源速度超快 | 亚洲毛片 | 国产中文视频 | 久久99视频免费观看 | 亚洲精品国产成人 |