[Linux系統編程]進程間通信—system V

進程間通信—system V

  • 1. System V 共享內存(Shared Memory)
    • 1.1 共享內存的建立過程
    • 1.2 共享內存函數
  • 2. System V 消息隊列(Message Queues)
  • 3. System V 信號量(Semaphores)
  • 4. 總結

前言:
之前所提的管道通信是基于文件的,OS沒有做過多的設計工作。
system V 進程間通信:OS特地設計的通信方式。想盡一切辦法讓不同的進程看到同一份資源(由OS提供)。

system V通信方式為:共享內存、消息隊列、信號量。
共享內存、消息隊列是以傳送數據為目的;信號量是為了保證進程同步與互斥而設計的,屬于通信范疇。

以下是 System V IPC 的三種主要組件的詳細講解:

1. System V 共享內存(Shared Memory)

在進程間通信(IPC進程間通信)中,共享內存(Shared Memory)是一種非常高效的方式,它允許不同的進程直接訪問同一塊內存區域,從而避免了數據復制和大量的上下文切換。使用共享內存,多個進程可以直接訪問同一份內存資源,使得它們之間的通信速度非常快,通常用于高性能的系統和應用中。故共享內存允許多個進程共享同一塊物理內存區域。所有進程都可以直接讀寫共享內存,這樣就能避免復制數據,提高效率。它是 System V IPC 中速度最快的通信方式。

共享內存的工作原理基于內存映射:

系統創建一個特定的內存區域,并將該區域映射到多個進程的地址空間。每個進程可以通過直接訪問這塊內存區域來讀寫數據。共享內存區域通常會在進程的地址空間中作為一個特殊的內存區域被映射,可以由多個進程并發訪問。為了使得多個進程能夠看到同一份資源,需要通過操作系統提供的 API 來創建、映射和訪問共享內存區域。
在這里插入圖片描述

上圖所示講解:

1、物理內存映射到進程的地址空間中
現代操作系統使用虛擬內存技術,讓每個進程有獨立的虛擬地址空間,而不直接使用物理內存的地址。這使得進程在訪問內存時,只知道自己的虛擬地址,而操作系統會負責將這些虛擬地址映射到實際的物理內存地址。這個過程叫做 內存映射。

2、如何實現——修改頁表,在虛擬地址空間中開辟空間

在現代操作系統中,每個進程都擁有一張頁表,用于記錄虛擬地址與物理地址之間的映射關系。頁表將虛擬地址空間劃分為一個個頁,每一頁有對應的物理內存頁。

虛擬地址:這是程序運行時使用的地址,進程看到的地址。
物理地址:這是實際內存中數據的存儲位置。

當一個進程需要訪問某個虛擬地址時,操作系統通過頁表查找該虛擬地址對應的物理地址。如果映射已經建立,硬件可以直接訪問物理內存。如果沒有映射,操作系統會觸發 頁面錯誤(Page Fault),并負責加載數據或分配新的物理內存頁。
修改頁表 就是指操作系統在管理虛擬內存時,動態地更新頁表,將某個虛擬地址映射到一個物理地址。這種修改通常發生在操作系統進行內存分配、程序加載時,或者進程在運行過程中需要更多內存時。

3、有沒有能力?——用系統接口,完成所謂的開辟空間,建立映射

操作系統通過一組 系統調用(System Calls) 來提供管理虛擬內存的能力。這些系統調用允許程序請求操作系統為其分配虛擬內存,并為該內存區域建立物理內存的映射。

內存分配:當一個程序或進程需要更多的內存時,它會調用操作系統提供的內存分配函數(比如 malloc(),brk(),mmap() 等),操作系統根據進程的請求,為它分配一塊 虛擬內存。

映射物理內存:操作系統會在物理內存中找到一塊可用區域,然后通過更新頁表,將這塊虛擬內存區域與物理內存頁進行映射。操作系統通過頁表來管理這些映射關系,確保進程訪問虛擬地址時能正確地映射到物理地址。

4、用系統接口,完成所謂的開辟空間,建立映射,開辟虛擬空間后返回給用戶,都是OS做的

在操作系統中,進程無法直接操作硬件或內存。所有關于虛擬內存的管理和分配都由操作系統負責。操作系統為進程提供了 系統調用接口,通過這些接口,進程可以請求內存分配、釋放內存等操作。

例如,mmap() 是一種常用的內存映射系統調用,能夠請求操作系統將一個文件或一塊物理內存映射到進程的虛擬地址空間中。操作系統收到這些請求后,會根據需要分配或映射合適的內存塊,并更新頁表。

開辟虛擬空間:操作系統根據進程請求開辟虛擬內存空間,將這些虛擬地址空間通過頁表映射到物理內存。

返回給用戶:當操作系統完成內存分配和映射后,會將這塊分配好的虛擬內存區域的地址返回給進程,進程可以在此區域進行讀寫操作。

這些內存管理和映射的過程都是由操作系統通過系統調用來實現的,程序員無需直接操作物理內存,而是通過系統接口請求內存。

1.1 共享內存的建立過程

1、申請共享內存(開辟好物理內存)
2、將共享內存掛接(建立映射關系)到地址空間
3、上述1、2完成即開始通信
4、去關聯(修改頁表,取消映射關系)共享內存
4、釋放共享內存(將內存歸還給OS)

shm 是 共享內存(Shared Memory) 的簡稱,是操作系統中一種用于進程間通信(IPC,Inter-Process Communication)的機制。通過共享內存,多個進程可以訪問同一塊物理內存區域,從而在進程間快速交換數據。

共享內存(Shared Memory)是什

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

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

相關文章

R語言——獲取數據1

參考資料:學習R 數據的來源可以由很多。R內置有許多數據集,而在其他的附件包中能找到更多的數據。R能從各式各樣的來源中讀取,且支持大量的文件格式。 1、內置的數據集 R的基本分發包有一個datasets,里面全是示例數據集。很多其他…

HTTP 請求方法

HTTP 請求方法 引言 HTTP(超文本傳輸協議)是互聯網上應用最為廣泛的網絡協議之一。它定義了客戶端與服務器之間通信的規則。HTTP請求方法,也稱為HTTP動詞,是客戶端向服務器發送請求時使用的操作類型。本文將詳細介紹HTTP請求方法的概念、分類、常用方法及其在實際應用中的…

python函數裝飾器

python函數裝飾器 聲明:博主并沒有系統學習過python語言,在實際項目中遇到關于python不懂的語法,這里僅作為個人學習積累筆記 1.1 python函數相關基礎 深入了解python函數裝飾器移步:Python 函數裝飾器 下面的筆記來源于上述鏈接…

OpenCV 圖形API(7)用于將笛卡爾坐標(x, y)轉換為極坐標(magnitude, angle)函數cartToPolar()

操作系統:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 編程語言:C11 算法描述 計算二維向量的大小和角度。 cartToPolar 函數計算每個二維向量 (x(I), y(I)) 的大小、角度,或同時計算兩者: magnitude…

什么是向量搜索Vector Search?

🧠 向所有學習者致敬! “學習不是裝滿一桶水,而是點燃一把火。” —— 葉芝 我的博客主頁: https://lizheng.blog.csdn.net 🌐 歡迎點擊加入AI人工智能社區! 🚀 讓我們一起努力,共創…

搜索工具Everything下載安裝使用教程(附安裝包)

文章目錄 前言一、搜索工具Everything介紹二、搜索工具Everything使用步驟1.軟件下載2.版本選取3.啟動軟件4.文件搜索 前言 本教程將詳細為您介紹 Everything 的下載、安裝與使用方法,助您快速上手,充分利用這款工具的強大功能,告別文件查找…

element-plus中,Upload上傳組件的使用 + 后端處理

目錄 一. 案例一&#xff1a;用戶更換個人頭像 1.前端實現 2.后端實現 ①引入阿里云oss的依賴 ②編寫AliOSSUtils工具類 ③編寫controller層 ④編寫service層 ⑤編寫mapper層 3.效果展示 4.重點理解 結語 一. 案例一&#xff1a;用戶更換個人頭像 1.前端實現 <…

HarmonyOS-ArkUI Rcp模塊類關系梳理

前言 本文重點解決的是&#xff0c;按照官網學習路徑學習Tcp模塊內容時&#xff0c;越看越混亂的問題。仿照官網案例&#xff0c;書寫代碼時&#xff0c;產生的各種疑惑。比如&#xff0c;類與類之間的關系&#xff0c;各種配置信息究竟有多少&#xff0c;為什么越寫越混亂。那…

【云計算物理網絡】數據中心網絡架構設計

云計算的物理基礎&#xff1a;數據中心網絡架構設計 一、技術背景&#xff1a;從“三層架構”到“云原生網絡”二、技術特點&#xff1a;云數據中心網絡的四大支柱三、技術細節&#xff1a;CLOS架構的實現挑戰四、未來方向&#xff1a;從“連接設備”到“感知服務”結語&#x…

window11 通過cmd命令行安裝 oh my zsh 的教程

步驟 1&#xff1a;安裝 WSL 2 和 Ubuntu 1. 以管理員身份打開 CMD wsl --install -d Ubuntu此命令會自動安裝 WSL 2 和 Ubuntu 發行版。 安裝完成后重啟系統。 初始化 Ubuntu 在開始菜單中打開 Ubuntu&#xff0c;設置用戶名和密碼。 步驟 2&#xff1a;在 WSL 的 Ubunt…

gdb 調試命令記錄

啟動調試 gdb ./待調試的程序 #不帶參數 (gdb) run #帶參數 gdb --args ./your_program arg1 arg2 arg3 (gdb) run arg1 arg2 arg3 #圖形化代碼界面 (gdb) layout src基礎調試命令 命令縮寫作用run [args]r運行程序&#xff08;可帶命令行參數&#xff09;break <locatio…

STM32F103低功耗模式深度解析:從理論到應用實踐(上) | 零基礎入門STM32第九十二步

主題內容教學目的/擴展視頻低功耗模式什么是低功耗&#xff0c;模式介紹&#xff0c;切換方法。為電池設備開發做準備。 師從洋桃電子&#xff0c;杜洋老師 &#x1f4d1;文章目錄 一、低功耗模式概述1.1 為什么需要低功耗模式&#xff1f;1.2 基本實現原理 二、低功耗模式的本…

JavaScript instanceof 運算符全解析

JavaScript instanceof 運算符全解析 核心語義: 判斷一個對象(object)是否屬于某個構造函數(constructor)或類的實例,基于原型鏈(prototype chain)實現類型檢測。 一、JavaScript 中的基礎用法 1. 語法結構 object instanceof constructor 返回值:布爾值(true/fal…

電腦基礎之word基礎操作

word是常用的辦公軟件之一&#xff0c;用于文檔編輯&#xff0c;如合同/報告撰寫、論文等?。 一、簡介 word文檔最早由微軟推出&#xff0c;通過Microsoft Office Word軟件創建和編輯。由于涉及版權付費問題&#xff0c;大多數個人使用盜版軟件。后來金山出了WPS office免費軟…

深度解析Python代碼中的廣告信息提取與JSON處理

哈嘍,大家好,我是木頭左! 在當今數字化時代,廣告無處不在,而從廣告中提取關鍵信息并進行處理則成為了一項重要的技能。本文將深入剖析一段Python代碼,該代碼旨在從給定的JSON格式字符串中提取廣告相關信息,并對其進行解析和處理。通過這段代碼,將展示如何運用Python的j…

base64在線解碼工具

我們經常會用到base64編碼&#xff0c;相應的base64解碼成為日常必備&#xff0c;所有我們需要擁有一個base64在線解碼工具 base64在線解碼工具

Linux——進程信號(3)(信號保存與信號捕捉)

進程信號3 信號保存信號相關概念詳解信號集&#xff08;sigset_t&#xff09;及操作函數詳解 信號捕捉信號捕捉的詳細流程解析信號捕捉的核心概念信號捕捉的完整流程&#xff08;以 SIGQUIT 為例&#xff09; 信號保存 信號相關概念詳解 1.核心概念 (1) 信號遞達&#xff08…

批量在 txt 記事本文件的指定位置插入行,如在最末尾位置插入行

我們在網上下載的小說經常可以看到內容中每隔多少行都會現一些網站名稱和聯系方式等廣告信息&#xff0c;這些都是固定或者隨機插入在小說正文中的。那是怎么樣實現在文本文件中指定位置插入這些行的呢&#xff1f;今天就給大家介紹一下如何在 txt 記事本文件或者其它類型的文本…

python的內存管理機制

目錄 內存分配方式自動內存管理內存分配策略 垃圾回收機制引用計數垃圾回收對象創建和引用關系引用計數的狀態刪除變量 標記 - 清除垃圾回收 內存分配的區域劃分棧內存堆內存 內存管理的優化內存池技術對象共享 Python 的內存管理機制是其運行效率和安全性的重要保障&#xff0…

火山引擎coze用戶市場

火山引擎 **Coze**&#xff08;扣子&#xff09;的用戶市場主要集中在 **需要快速構建和部署智能對話應用的企業及開發者群體**&#xff0c;覆蓋多個行業與場景。以下是具體分析&#xff1a; --- ### **一、核心用戶群體** 1. **企業用戶** - **互聯網/科技公司**&#…