首頁 運維 linux運維 linux的虛擬記憶體機制是什麼

linux的虛擬記憶體機制是什麼

May 14, 2023 pm 12:01 PM
linux

linux的虛擬記憶體機制:

1.每個進程都有自己獨立的4G記憶體空間,各個進程的記憶體空間具有類似的結構。

Linux記憶體管理採用的是頁式管理,使用的是多層頁表,動態位址轉換機構與主記憶體、輔存共同實現虛擬記憶體一個新進程建立的時候,

將會建立起自己的記憶體空間,此行程的數據,程式碼等從磁碟拷貝到自己的行程空間,哪些資料在哪裡,

都由進程控製表中的task_struct記錄,task_struct中記錄中一條鍊錶,記錄中記憶體空間的分配情況,

哪些位址有數據,哪些位址無數據,哪些可讀,哪些可寫,都可以透過這個鍊錶記錄每個行程已經分配的記憶體空間,都與對應的磁碟空間映射。

2.每個程式都能看到一片完整連續的位址空間,這些空間並沒有直接關聯到實體內存,而是作業系統提供了記憶體的一種抽象概念,

使得每個行程都有一個連續完整的位址空間,在程式的運作過程,再完成虛擬位址到實體位址的轉換。

我們同樣知道,進程的位址空間是分段的,存在所謂的資料段,程式碼段,bbs段,堆,棧等等。每個段都有特定的作用。

同時電腦沒有那麼多的記憶體(n個進程就需要對應n*4G記憶體),建立一個進程,就要把磁碟上的程式檔案拷貝到進程對應的記憶體中去,

# 對於有一個程式對應多個進程這種情況,浪費記憶體。

linux的虛擬記憶體機制是什麼

# 3.每個行程的4G記憶體空間只是虛擬記憶體空間,每次存取記憶體空間的某個位址,都需要把位址翻譯為實際物理位址所有行程共享相同實體內存,

每個進程只把自己目前需要的虛擬記憶體空間映射並儲存到實體記憶體上進程要知道哪些記憶體位址上的資料在實體記憶體上,哪些不在,還有在實體記憶體上的哪裡,

需要頁表記錄頁表的每個表格項目分為兩部分,第一部分記錄此頁是否在實體記憶體上,第二部分記錄實體記憶體的位址當行程存取某個虛擬位址,

去查看頁表,如果對應的資料不在實體記憶體中,,則缺頁異常缺頁異常的處理過程,就是把進程需要的資料從磁碟拷貝到實體記憶體中,

如果記憶體已經滿了 ,沒有空地方,那就找一個頁來覆蓋,當然如果被覆蓋的頁曾經被修改過,需要將此頁寫回磁碟。

linux的虛擬記憶體機制是什麼

# 4.竟然每個行程的記憶體空間都是一致且固定的,所以連結器在連結執行檔時,可以設定記憶體位址,而 不用去管這些資料最終實際的記憶體位址,

這是有獨立內存 空間的好處當不同的程序使用同樣的程式碼時,例如庫檔案中的程式碼,物理記憶體中可以只儲存一份這樣的程式碼,

不同的進程只要要把自己的虛擬記憶體映射過去就可以了,節省內存在程式需要分配連續的記憶體空間的時候,

只需要在虛擬記憶體空間分配連續空間,而不需要實際實體記憶體的連續空間,可以利用碎片。

以上是linux的虛擬記憶體機制是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1665
14
CakePHP 教程
1424
52
Laravel 教程
1322
25
PHP教程
1270
29
C# 教程
1249
24
Linux體系結構:揭示5個基本組件 Linux體系結構:揭示5個基本組件 Apr 20, 2025 am 12:04 AM

Linux系統的五個基本組件是:1.內核,2.系統庫,3.系統實用程序,4.圖形用戶界面,5.應用程序。內核管理硬件資源,系統庫提供預編譯函數,系統實用程序用於系統管理,GUI提供可視化交互,應用程序利用這些組件實現功能。

git怎麼查看倉庫地址 git怎麼查看倉庫地址 Apr 17, 2025 pm 01:54 PM

要查看 Git 倉庫地址,請執行以下步驟:1. 打開命令行並導航到倉庫目錄;2. 運行 "git remote -v" 命令;3. 查看輸出中的倉庫名稱及其相應的地址。

vscode上一步下一步快捷鍵 vscode上一步下一步快捷鍵 Apr 15, 2025 pm 10:51 PM

VS Code 一步/下一步快捷鍵的使用方法:一步(向後):Windows/Linux:Ctrl ←;macOS:Cmd ←下一步(向前):Windows/Linux:Ctrl →;macOS:Cmd →

notepad怎麼運行java代碼 notepad怎麼運行java代碼 Apr 16, 2025 pm 07:39 PM

雖然 Notepad 無法直接運行 Java 代碼,但可以通過借助其他工具實現:使用命令行編譯器 (javac) 編譯代碼,生成字節碼文件 (filename.class)。使用 Java 解釋器 (java) 解釋字節碼,執行代碼並輸出結果。

sublime寫好代碼後如何運行 sublime寫好代碼後如何運行 Apr 16, 2025 am 08:51 AM

在 Sublime 中運行代碼的方法有六種:通過熱鍵、菜單、構建系統、命令行、設置默認構建系統和自定義構建命令,並可通過右鍵單擊項目/文件運行單個文件/項目,構建系統可用性取決於 Sublime Text 的安裝情況。

Linux的主要目的是什麼? Linux的主要目的是什麼? Apr 16, 2025 am 12:19 AM

Linux的主要用途包括:1.服務器操作系統,2.嵌入式系統,3.桌面操作系統,4.開發和測試環境。 Linux在這些領域表現出色,提供了穩定性、安全性和高效的開發工具。

laravel安裝代碼 laravel安裝代碼 Apr 18, 2025 pm 12:30 PM

要安裝 Laravel,需依序進行以下步驟:安裝 Composer(適用於 macOS/Linux 和 Windows)安裝 Laravel 安裝器創建新項目啟動服務訪問應用程序(網址:http://127.0.0.1:8000)設置數據庫連接(如果需要)

git軟件安裝 git軟件安裝 Apr 17, 2025 am 11:57 AM

安裝 Git 軟件包括以下步驟:下載安裝包運行安裝包驗證安裝配置 Git安裝 Git Bash(僅限 Windows)

See all articles