Linux多進程 寫時拷貝 物理地址和邏輯地址

如果不采用寫時拷貝技術 直接fork子進程 會發生什么?

如上圖所示 橙色為父進程所占內存空間? ?綠色為子進程所占內存空間。

如果子進程只是需要做出一點點和父進程不一樣的 其余和父進程均為相同

第一 就會出現復制開銷比較大;第二占用內存空間

所以 對fork復制進程的過程進行了優化 寫時拷貝技術;

子進程講共用父進程的地址,在fork的時候 子進程直接把父進程的表頁復制過來,只有子進程發生寫入(修改)的時候,才會分配內存復制,然后進行相對應的修改

這里進行補充:父子進程復制后 邏輯地址是完全相同的 但是物理地址不一定相同

寫時拷貝技術是一種可以推遲甚至免除拷貝數據的技術

????????傳統的 fork() 系統調用直接把所有的資源復制給新創建的進程。這種實現過于簡單并且效率低下,因為它拷貝的數據也許并不共享,更糟的情況是,如果新進程打算立即執行一個新的映像,那么所有的拷貝都將前功盡棄。Linux 的 fork() 使用寫時拷貝(copy-on-write)頁實現。寫時拷貝是一種可以推遲甚至免除拷貝數據的技術。內核此時并不復制整個進程地址空間,而是讓父進程和子進程共享同一個拷貝。

????????只有在需要寫入的時候,數據才會被復制,從而使各個進程擁有各自的拷貝。也就是說,資源的復制只有在需要寫入的時候才進行,在此之前,只是以只讀方式共享。這種技術使地址空間上的頁的拷貝被推遲到實際發生寫入的時候才進行。在頁根本不會被寫入的情況下(舉例來說,fork() 后立即調用 exec())它們就無須復制了。

????????fork() 的實際開銷就是復制父進程的頁表以及給予進程創建唯一的進程描述符。在一般情況下,進程創建后都會馬上運行一個可執行的文件,這種優化可以避免拷貝大量根本就不會被使用的數據(地址空間里常常包含數十兆的數據)。由于 Unix 強調進程快速執行的能力,所以這個優化是很重要的。

?解釋物理地址和邏輯地址的區別

我們平時所看見的地址 叫做邏輯地址。就如同目錄一樣,而每一個邏輯地址都指向一個物理地址 就如同目錄所對應的頁碼一樣

這里我們可以看出來 父子進程的邏輯地址是完全一樣的,但是物理地址不一樣

只有一個進程的時候,不需要顧慮太多,也不用去想邏輯地址和物理地址有什么不一樣的。

如果是多進程的情況下,邏輯地址相同 對應的物理地址并不一定相同,需要具體的去看各自的表頁是否相同(也就是看具體的映射關系)

不同進程的邏輯地址是沒有任何比較的意義的;


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

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

相關文章

【TTS回顧】Bert-VITS2深度解析:融合BERT的多語言語音合成模型

一、基本介紹 Bert-VITS2是基于VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的改進版本,通過整合BERT語義編碼能力,顯著提升了語音合成的自然度和表現力。項目地址:https://github.com/fishaudio/Bert-VITS2 語種自然度相似度流…

win11下docker 的使用方案

Windows 11 Docker 使用方式對比 特性Docker Desktop (使用 WSL 2 后端)直接在 WSL 2 中安裝 Docker Engine安裝與易用性極簡,一鍵安裝,提供直觀的 GUI 界面 管理容器、鏡像、卷等相對復雜,需手動在 Linux 環境中安裝 Docker Daemon 并配置G…

配合本專欄前端文章對應的后端文章——從模擬到展示:一步步搭建傳感器數據交互系統

對應文章:進一步完善前端框架搭建及vue-konva依賴的使用(Vscode)-CSDN博客 目錄 一、后端開發 1.模擬傳感器數據 2.前端頁面呈現數據后端互通 2.1更新模擬傳感器數據程序(多次請求) 2.2🧩 功能目標 …

牛客網NC209794:使徒襲來

牛客網NC209794:使徒襲來 題目背景 問題分析 數學建模 設三位駕駛員的戰斗力分別為 a, b, c已知條件:a b c n (n為輸入的正整數)目標:求 a b c 的最小值 解題思路 根據算術-幾何平均值不等式(AM-GM不等式),對于任意正實數a, b, c&a…

動態規劃之爬樓梯模型

文章目錄 爬樓梯模型LeetCode 746. 使用最小花費爬樓梯思路Golang 代碼 LeetCode 377. 組合總和 Ⅳ思路Golang 代碼 LeetCode 2466. 統計構造好字符串的方案數思路Golang 代碼 LeetCode 2266. 統計打字方案數思路Golang 代碼 爬樓梯模型 爬樓梯模型是動態規劃當中的一個經典模型…

【每天一個知識點】湖倉一體(Data Lakehouse)

“湖倉一體”(Data Lakehouse)是一種融合了數據湖(Data Lake)與數據倉庫(Data Warehouse)優勢的新型數據架構。它既繼承了數據湖對多類型數據的靈活存儲能力,也具備數據倉庫對結構化數據的高效查…

Linux | mdadm 創建軟 RAID

注:本文為 “Linux mdadm RAID” 相關文章合輯。 略作重排,未整理去重。 如有內容異常,請看原文。 Linux 下用 mdadm 創建軟 RAID 以及避坑 喵??ﻌ?? Oct 31, 2023 前言 linux 下組軟 raid 用 mdadm 命令,multi…

Unity自定義shader打包SpriteAtlas圖集問題

Unity打包圖集還是有一些坑的,至于圖集SpriteAtlas是什么請參考我之前寫的文章:【Sprite Atlas】Unity新圖集系統SpriteAtlas超詳細使用教程_spriteatlas 使用-CSDN博客 問題: 今天碰到的問題是,shader繪制的時候,因…

如何用 OceanBase 的 LOAD DATA 旁路導入進行大表遷移

前言 在日常工作中,我們時常會遇到需要將某個大數據量的單表進行遷移的情況。在MySQL中,針對這樣的大表,我們通常會選擇先將原表導出為csv格式,然后利用LOAD DATA語法來導入csv文件,這種方法相較于mysqldump在效率上有…

VR 互動實訓的顯著優勢?

(一)沉浸式學習,提升培訓效果? 在 VR 互動實訓中,員工不再是被動的知識接受者,而是主動的參與者。以銷售培訓為例,員工戴上 VR 設備,就能置身于逼真的銷售場景中,與虛擬客戶進行面對…

OpenCV 第6課 圖像處理之幾何變換(重映射)

1. 概述 簡單來說,重映射就是把一副圖像內的像素點按照規則映射到到另外一幅圖像內的對應位置上去,形成一張新的圖像。 因為原圖像與目標圖像的像素坐標不是一一對應的。一般情況下,我們通過重映射來表達每個像素的位置(x,y),像這樣: g(x,y)=f(h(x,y)) 在這里g()是目標圖…

Java虛擬機 - 程序計數器和虛擬機棧

運行時數據結構 Java運行時數據區程序計數器為什么需要程序計數器執行流程虛擬機棧虛擬機棧作用虛擬機棧核心結構運行機制 Java運行時數據區 首先介紹Java運行時數據之前,我們要了解,對于計算機來說,內存是非常重要的資源,因為內…

MySQL數據庫——支持遠程IP訪問的設置方法總結

【系列專欄】:博主結合工作實踐輸出的,解決實際問題的專欄,朋友們看過來! 《項目案例分享》 《極客DIY開源分享》 《嵌入式通用開發實戰》 《C語言開發基礎總結》 《從0到1學習嵌入式Linux開發》 《QT開發實戰》 《Android開發實…

CSS- 4.6 radiu、shadow、animation動畫

本系列可作為前端學習系列的筆記,代碼的運行環境是在HBuilder中,小編會將代碼復制下來,大家復制下來就可以練習了,方便大家學習。 HTML系列文章 已經收錄在前端專欄,有需要的寶寶們可以點擊前端專欄查看! 點…

排序算法之基礎排序:冒泡,選擇,插入排序詳解

排序算法之基礎排序:冒泡、選擇、插入排序詳解 前言一、冒泡排序(Bubble Sort)1.1 算法原理1.2 代碼實現(Python)1.3 性能分析 二、選擇排序(Selection Sort)2.1 算法原理2.2 代碼實現&#xff…

第十節第一部分:常見的API:Math、System、Runtime

Math類介紹及常用方法(了解知道即可) System類介紹及常用方法(了解知道即可) Runtime類介紹及常用方法(了解知道即可) 代碼: 代碼一:Math類 package com.itheima.d14_math;public …

智能體間協作的“巴別塔困境“如何破解?解讀Agent通信4大協議:MCP/ACP/A2A/ANP

AI 智能體的興起觸發了AI應用協作的新領域。這些智能體不再局限于被動的聊天機器人或獨立的系統,它們現在被設計用于推理、計劃和協作ーー跨任務、跨域甚至跨組織。但隨著這一愿景成為現實,一個挑戰很快浮出水面: 智能體如何以一種安全、可伸…

項目進度延誤,如何按時交付?

項目進度延誤可以通過加強計劃管理、優化資源分配、強化團隊溝通、設置關鍵里程碑和風險管理機制等方式來實現按時交付。加強計劃管理、優化資源分配、強化團隊溝通、設置關鍵里程碑、風險管理機制。其中,加強計劃管理尤為關鍵,因為明確而詳細的計劃能提…

詳解ip地址、子網掩碼、網關、廣播地址

1. IP 地址 定義:IP 地址是網絡設備在網絡中的唯一標識,用于標識設備的網絡位置,類似于現實中的門牌號。它分為 IPv4(如 192.168.1.5)和 IPv6(如 240e:305:3685:8100:a00:27ff:fefb:56b8)。 示…

為 Windows 和 Ubuntu 中設定代理服務器的詳細方法

有時下載大模型總是下載不出來,要配置代理才行 一、Windows代理設置 ① 系統全局代理設置 打開【設置】→【網絡和Internet】→【代理】。 在【手動設置代理】下,打開開關,輸入: 地址:10.10.10.215 端口:…