無需再擔心記憶體問題——Linux系統記憶體管理簡介
隨著電腦的發展,軟體應用程式的複雜性和資料量越來越大,對系統記憶體的要求也越來越高。身為Linux系統管理員,了解如何正確地管理和分配記憶體資源是必不可少的。本文將為你介紹Linux系統記憶體管理的基礎知識。
早期的程式都是直接運行在物理位址上,也就是說這個程式所需的空間不超過該機器的物理記憶體就不會有問題,但實際場景中都是多任務,多進程的,這種物理位址reserved給各個進程是不可靠的。
舉個栗子:假如有3個程式a,b,c,a需要10M,b需要100M,c需要20M,總記憶體就120M,按照之前的分配方式,前10M給a,10M-110M給b,系統還剩10M,但c需要20M,顯然剩下的記憶體是不夠c用的。怎麼辦?
為什麼要記憶體管理:
#1.效率問題
#可能你會想到當c程式跑的時候把b程式資料寫到磁碟上,等執行b的時候再資料從磁碟寫回來,先不說無法滿足b,c程式並行跑的需求,就連頻繁的io操作帶來的耗時問題也是無法接收的。
2.進程位址隔離問題
#除了效率問題,reserved給進程的空間如果需要被別的進程存取會崩潰。例如a進程存取的空間是前10M,但a程式中有一段程式碼存取10-110M的話就有可能導致b程式的崩潰,所以進程的位址空間需要彼此隔離。
3.重定位問題
#現實場景中不可能是單任務在分好的內存中運行,當多任務並行跑的情況下在動態申請釋放內存的時候有可能申請到其它進程裡的地址,這時候需要重定位到新的地址。
記憶體管理無非就是想辦法解決上面三個問題,如何提升記憶體的使用效率?如何使進程的位址空間隔離?如何解決程式運行時的重定位問題?
記憶體管理如何從虛擬位址對應到實體位址:
記憶體管理從虛擬位址對應到實體位址的過程也就是解決上面3個問題的過程。記憶體管理用分段機制和分頁機制分別解決了上面的3個問題,大概流程如下圖:

分段機制:
只要程式分了段,把整個段平移到任何位置後,段內的地址相對段基址是不變的,無論段基址是多少,只要給出段內偏移地址,cpu就能訪問到正確的指令。於是載入使用者程式時,只要將整個段的內容複製到新的位置,再將段基址暫存器中的位址改成該位址,程式便可準確地執行,因為程式中使用的是段內偏移位址,相對新的段基址,該偏移位址處的內容內容還是一樣的。
可以看出分段機制解決了進程間隔離和重定位的問題。這個動作是在硬體裡做的,但是有的硬體是沒有分段機制的,作為跨平台的linux就用了具有更通用性的分頁機制來解決線性地址到虛擬地址到物理地址的轉換。
分頁機制:
#可以參考《CPU是如何存取記憶體的? 》了解一級頁表的概念,linux為了相容32位元和64位,通常採用四級頁表,頁全域目錄,頁上級目錄,頁中間目錄,頁表:

這裡不詳細解釋linux是如何透過四級頁表來做線性位址(虛擬位址)到實體位址的轉換。
進程在切換的時候就是根據task_struct找到mm_struct裡的pgd字段,取得新進程的頁全域目錄,然後填入CR3暫存器,就完成了頁的切換。
動手看mmu分頁尋址的過程:
上程式碼:
#可以看出虛擬位址ffff99b488d48000對應的實體位址是80000000c8d48000。這個過程也是mmu的過程。
透過本文的介紹,我們了解了Linux系統記憶體管理的基礎知識,包括記憶體分區、虛擬記憶體、交換空間等內容。在實際的工作中,正確的記憶體管理可以提高系統的穩定性和效能,避免因記憶體問題而出現的意外故障。希望本文的介紹可以幫助你更好地理解Linux系統記憶體管理的原理與方法,讓你輕鬆應對各種記憶體管理問題。
以上是無需再擔心記憶體問題——Linux系統記憶體管理簡介的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Linux和Windows在用戶賬戶管理上的主要區別在於權限模型和管理工具。 Linux使用基於Unix的權限模型和命令行工具(如useradd、usermod、userdel),而Windows採用自己的安全模型和圖形用戶界面(GUI)管理工具。

Linux'scommandlinecanbemoresecurethanWindowsifmanagedcorrectly,butrequiresmoreuserknowledge.1)Linux'sopen-sourcenatureallowsforquicksecurityupdates.2)Misconfigurationcanleadtovulnerabilities.Windows'commandlineismorecontrolledbutlesscustomizable,with

本指南說明瞭如何在Linux的啟動下自動安裝USB驅動器,從而節省了時間和精力。 步驟1:確定您的USB驅動器 使用LSBLK命令列出所有塊設備。 您的USB驅動器可能會標記為 /dev /sdb1, /dev /sdc1等

跨平台應用程序已徹底改變了軟件開發,從而在Linux,Windows和MacOS等操作系統上實現了無縫功能。 這消除了根據您的設備切換應用程序的需求,提供一致的體驗

人工智能(AI)正在迅速改變許多部門,從醫療保健和金融到藝術和音樂等創意領域。 Linux具有開源性,適應性和性能功能,已成為首要的Platfo

尋找沒有圖形用戶界面(GUI)的快速,最小和高效的Linux分佈? 輕巧,無GUI-Linux發行版非常適合較舊的硬件或服務器和嵌入式系統(例如服務器和嵌入式系統)。他們消耗較少的res

Wine 10.0穩定版發布:在Linux上運行Windows應用更上一層樓 Wine,這款開源免費的應用程序,讓Linux用戶能夠在Unix/Linux類操作系統上運行Windows軟件和遊戲,迎來了10.0穩定版的發布!此版本已提供源代碼和二進制包下載,支持Linux、Windows和Mac等多種發行版。 這一版本凝聚了一年的辛勤工作和超過8600項改進,帶來了諸多令人興奮的提升。主要亮點包括: 增強對藍牙設備的支持。 提升對HID輸入設備的支持。 優化了32位和64位應用程序的運行性能。

該教程通過在RHEL 8.x或9.x上安裝SQL Server 2022,通過SQLCMD命令行工具,數據庫創建和基本查詢連接。 先決條件 開始之前,請確保: 支持的RHEL版本(RHEL 8或9)。 Sudo


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Atom編輯器mac版下載
最受歡迎的的開源編輯器

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中