Linux 下的COW機制(copy-on-write)

????????

????????Linux通過MMU進行虛擬地址到物理地址的轉換,當進程執行fork()后,會把頁中的權限設置為RD-ONLY(只讀)。

MMU(內存管理單元)

·???????MMU本質是一個集成在CPU核心的硬件電路模塊,其核心任務是實現和管理虛擬內存機制,主要是進行虛擬地址到物理地址的實時、高效轉換。
在Linu系統中,MMU的作用是:

  1. 提供虛擬地址空間抽象:采用虛擬的思想,讓每個進程都感覺自己擁有一個連續的,獨立的,巨大的內存空間(這個空間從0開始)
  2. 內存保護和隔離:防止一個進程無意或惡意地訪問或修改另一個進程的內存
  3. 內存利用:只加載程序實際需要的部分到物理內存
  4. 共享內存:允許多個進程安全地共享相同的物理內存頁

工作流程:

  • 頁表管理:Linux內核負責創建,修改和銷毀進程的頁表結構。在進程創建、內存分配、缺頁處理、進程切換時執行這些操作
    • CPU發出虛擬地址
    • MMU基于頁表將虛擬地址轉換物理地址
    • 訪問頁表
      • 缺頁處理:當MMU在地址轉換過程中無法找到有效的PTE或遇到權限錯誤時,它會觸發一個Page Fault中斷給一個CPU。CPU陷入內核模式
    • 虛擬地址解析:MMU將地址分為兩部分:
      • 高階位:用作進入頁表的索引
      • 低階位:頁內偏移量

COPY-ON-WRITE

  1. 最開始,當一個新進程通過fork被創建,或者創建共享內存映射(mmap)時,父子進程(或映射共享區域)最初共享相同的物理內存頁。內核將進程/映射的頁表項標記為只讀或設置COW標志。此時沒有發生實際的物理內存復制。

    • 復制頁表:Linux內核會為字進程創建一份父進程頁表的副本。此時,父子進程都指向相同的物理頁框。
    • 修改權限:內核不僅會將父子進程頁表中指向共享物理頁的頁表項權限設置為 RD-ONLY,還會設置一個專門的標記位來標志這是一個COW頁(并非所有RD-ONLY頁都是COW頁),這個標記能告訴內核缺頁處理程序——如果該頁發生了寫保護錯誤,別直接報錯,可能是一個COW頁
  2. 進程嘗試寫入

    • ??CPU 嘗試執行寫指令:?? P1 執行一條向該共享虛擬地址(比如 Virtual Address 1, VA1)寫入數據的指令。
      ?? * MMU 觸發 Page Fault:??
      ?? * 原因1:寫操作檢測:?? MMU 發現當前指令要求寫入一個權限為 RO 的內存頁。
      ?? * 原因2:權限沖突:?? RO 權限不允許寫入,違反了頁表項中的權限設置。
    • ??中斷:?? MMU 產生一個 ??Page Fault 異常 (中斷)??。CPU 停止當前用戶態代碼的執行,切換到內核態,調用 Linux 內核的缺頁中斷處理程序 (Page Fault Handler)。
    • 執行COW
      • 分配新物理頁面:內核從空閑物理頁面中分配新的物理頁面
      • 復制內容:內核將原始物理頁框的內容完整復制到這個新分配的物理頁框
      • 更新頁表:內核修改進程的頁表,及那個該頁表項指向新的物理頁框地址,并設置權限為可讀寫或其他,然后清除COW標志
    • 恢復執行
      (如果有)內核完后缺頁處理,CPU恢復用戶態進程的執行,重新執行那條發生缺頁的指令

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/83258.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/83258.shtml
英文地址,請注明出處:http://en.pswp.cn/web/83258.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

客戶案例 | 短視頻點播企業海外視頻加速與成本優化:MediaPackage+Cloudfront 技術重構實踐

01技術背景與業務挑戰 某短視頻點播企業深耕國內用戶市場,但其后臺應用系統部署于東南亞印尼 IDC 機房。 隨著業務規模擴大,傳統架構已較難滿足當前企業發展的需求,企業面臨著三重挑戰: ① 業務:國內用戶訪問海外服…

開發Vue.js組件的二三事

Vue.js作為一款漸進式JavaScript框架,其組件化開發模式是其核心優勢之一。在多年的Vue開發實踐中,我積累了一些組件開發的經驗和思考,在此與大家分享。 組件設計原則 單一職責原則 每個組件應該只關注一個特定的功能或UI部分。如果一個組件…

實現多路視頻截圖預覽之后上傳到后臺系統

********************父組件********************** <div class"camera-box" v-loading"i.loading"> <div class"camera-box-inner" v-for"(x, y) in i.children" :key"y children x.featureCode" v-show"…

分布式鎖-Redisson實現

目錄 本地鎖的局限性 Redisson解決分布式鎖問題 在分布式環境下&#xff0c;分布式鎖可以保證在多個節點上的并發操作時數據的一致性和互斥性。分布式鎖有多種實現方案&#xff0c;最常用的兩種方案是&#xff1a;zookeeper和redis&#xff0c;本文介紹redis實現分布式鎖方案…

【辦公類-48-04】202506每月電子屏臺賬匯總成docx-5(問卷星下載5月范圍內容,自動獲取excel文件名,并轉移處理)

背景需求&#xff1a; 1-4月電子屏表格&#xff0c;都是用這個代碼將EXCEL數據整理成分類成3個WORD表格。 【辦公類-48-04】20250118每月電子屏臺賬匯總成docx-4&#xff08;提取EXCLE里面1月份的內容&#xff0c;自制月份文件夾&#xff09;-CSDN博客文章瀏覽閱讀1.2k次&…

【websocket】安裝與使用

websocket安裝與使用 1. 介紹2. 安裝3. websocketpp常用接口4. Websocketpp使用4.1 服務端4.2 客戶端 1. 介紹 WebSocket 是從 HTML5 開始支持的一種網頁端和服務端保持長連接的 消息推送機制。 傳統的 web 程序都是屬于 “一問一答” 的形式&#xff0c;即客戶端給服務器發送…

微算法科技(NASDAQ:MLGO)基于信任的集成共識和灰狼優化(GWO)算法,搭建高信任水平的區塊鏈網絡

隨著數字化轉型的加速&#xff0c;區塊鏈技術作為去中心化、透明且不可篡改的數據存儲與交換平臺&#xff0c;正逐步滲透到金融、供應鏈管理、物聯網等多個領域&#xff0c;探索基于信任的集成共識機制&#xff0c;并結合先進的優化算法來提升區塊鏈網絡的信任水平&#xff0c;…

【項目實戰】通過多模態+LangGraph實現PPT生成助手

PPT自動生成系統 基于LangGraph的PPT自動生成系統&#xff0c;可以將Markdown文檔自動轉換為PPT演示文稿。 功能特點 Markdown解析&#xff1a;自動解析Markdown文檔結構PPT模板分析&#xff1a;分析PPT模板的布局和風格智能布局決策&#xff1a;匹配內容與合適的PPT布局自動…

貝葉斯優化+LSTM+時序預測=Nature子刊!

貝葉斯優化與LSTM的融合在時間序列預測領域取得了顯著成效&#xff0c;特別是在處理那些涉及眾多超參數調整的復雜問題時。 1.這種結合不僅極大提高了預測的精確度&#xff0c;還優化了模型訓練流程&#xff0c;提升了效率和成本效益。超參數優化的新篇章&#xff1a;LSTM因其…

AWSLambda之設置時區

目標 希望Lambda運行的時區是東八區。 解決 只需要設置lambda的環境變量TZ為東八區時區即可&#xff0c;即Asia/Shanghai。 參考 使用 Lambda 環境變量

RAG系統向量數據庫選型與Prompt Engineering魯棒性測試實踐

引言 在AI應用不斷落地的今天&#xff0c;RAG&#xff08;Retrieval-Augmented Generation&#xff0c;檢索增強生成&#xff09;和Prompt Engineering&#xff08;提示工程&#xff09;成為大模型工程師和測試工程師的核心武器。 一方面&#xff0c;RAG系統依賴強大的向量數據…

2.Socket 編程 UDP

1.UDP網絡編程 0.背景知識 自實現IP轉化 相關函數理解 IP相關理解 1. V2版本 - DictServer封裝版 實現一個簡單的英譯漢的網絡字典 Dict.hpp dictionary.txt InetAddr.hpp ? 在 InetAddr 中&#xff0c;重載一下方便對用戶是否是同一個進行比較 Log.hpp makefile Mutex.hpp…

數據可視化交互

目錄 【實驗目的】 【實驗原理】 【實驗環境】 【實驗步驟】 一、安裝 pyecharts 二、下載數據 三、實驗任務 實驗 1&#xff1a;AQI 橫向對比條形圖 代碼說明&#xff1a; 運行結果&#xff1a; 實驗 2&#xff1a;AQI 等級分布餅圖 實驗 3&#xff1a;多城市 AQI…

【MATLAB去噪算法】基于CEEMDAN聯合小波閾值去噪算法(第四期)

CEEMDAN聯合小波閾值去噪算法相關文獻 一、EMD 與 EEMD 的局限性 &#xff08;1&#xff09;EMD (經驗模態分解) 旨在自適應地將非線性、非平穩信號分解成一系列 本征模態函數 (IMFs)&#xff0c;這些 IMFs 從高頻到低頻排列。 核心問題&#xff1a;模態混合 (Mode Mixing) 同…

大話軟工筆記—架構模型

1. 架構模型1—拓撲圖 &#xff08;1&#xff09;拓撲圖概念 拓撲圖&#xff0c;將多個軟件系統用網絡圖連接起來的表達方式。 &#xff08;2&#xff09;拓撲圖分類 總線型結構 比較普遍采用的方式&#xff0c;將所有的系統接到一條總線上。 星狀結構 各個系統通過點到…

24-Oracle 23 ai ?Lock-Free Reservations?(無鎖列值保留)

數據庫領域為了解決ACID的平衡&#xff0c;嘗試了各種鎖、各種模式&#xff0c; 引擎技術特性、廠家實現方式各放異彩&#xff0c;被各種鎖折磨的小伙伴&#xff0c;是不是感同身受。 一、數據庫鎖 1. 鎖的類型與特點 ?全局鎖?&#xff1a;鎖定整個數據庫實例&#xff0c;備…

OpenPrompt 和直接對提示詞的嵌入向量進行訓練有什么區別

OpenPrompt 和直接對提示詞的嵌入向量進行訓練有什么區別 直接訓練提示詞嵌入向量的核心區別 您提到的代碼: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding

從零寫一個ALSA聲卡驅動學習(1)

前言&#xff1a; 本文檔描述了如何編寫 ALSA&#xff08;高級 Linux 音頻架構&#xff09;驅動程序。文檔主要聚焦于 PCI 聲卡的實現。對于其他類型的設備&#xff0c;可能會使用不同的 API。不過&#xff0c;至少 ALSA 的內核 API 是一致的&#xff0c;因此本文檔在編寫這些驅…

鏈結構與工作量證明7??:用 Go 實現比特幣的核心機制

鏈結構與工作量證明:用 Go 實現比特幣的核心機制 如果你用 Go 寫過區塊、算過哈希,也大致理解了非對稱加密、數據序列化這些“硬核知識”,那么恭喜你,現在我們終于可以把這些拼成一條完整的“區塊鏈”。 不過別急,這一節我們重點搞懂兩件事: 區塊之間是怎么連接成“鏈”…

深入理解 React 樣式方案

React 的樣式方案較多,在應用開發初期,開發者需要根據項目業務具體情況選擇對應樣式方案。React 樣式方案主要有: 1. 內聯樣式 2. module css 3. css in js 4. tailwind css 這些方案中,均有各自的優勢和缺點。 1. 方案優劣勢 1. 內聯樣式: 簡單直觀,適合動態樣式和…