Linux:35.其他IPC和IPC原理+信號量入門

通過命名管道隊共享內存的數據發送進行保護的bug:
命名管道掛掉后,進程也掛掉了。

6.systemV消息隊列

原理:進程間IPC:原理->看到同一份資源->維護成為一個隊列。

過程:

進程A,進程B進行通信。
讓操作系統提供一個隊列結構,A數據放在隊列結點,把結點放在OS內部,B也這么干
消息隊列可以實現雙向通信

進程A放數據,還要放type,
進程A那數據,只拿type和自己不一樣的數據。來區分自己和別的數據

結論:

結論1:消息隊列,提供了一種進程給另一種進程發送有類型數據塊的方式。區分那個數據是我要的,那個數據是我發的。

方法:入隊列,出隊列,

結論2:消息隊列存在多個,OS要對消息隊列進行管理->先描述,再組織。
::


消息隊列的結構體:


struct msgid_ds
{
}消息隊列
struct node{
}結點。


結論3:兩個進程怎么保證自己看到是同一個消息隊列,兩個進程約定一個key,再把key放在消息隊列里面。跟共享內存一樣。

消息隊列的調用接口:

msgget:創建消息隊列
?? ?key_t key ? ?:
?? ?int msgflag:
跟共享內存是一樣的。
msgctl:刪除消息隊列

消息隊列:結構體


消息隊列結構體:
struct msgid_ds{
stryct ipc_prem sg perm

}

perm信息
struct perm
{
?? ?key_t key
}
共享內存的創建基本是保持一致的,除了需要type進行區別


msgsnd:發數據

msgrcv:收數據,msgtype!!!

三種ipc通信

ipcs -q:就看消息隊列

下面那個是刪除?

?msgsize():msgdata的大小,type必須大于0

---------------------------------------------------------------------------------------------------------------------------------
這種相似性,叫做system V標準。?

---------------------------------------------------------------------------------------------------------------------------------

7.system V信號量

為什么要信號量

解決保護機制引入->信號量?

基本概念

? 多個執?流(進程),能看到的同?份公共資源:共享資源

? 被保護起來的資源叫做臨界資源

? 保護的?式常?:互斥與同步

? 任何時刻,只允許?個執?流訪問資源,叫做互斥

? 多個執?流,訪問臨界資源的時候,具有?定的順序性,叫做同步

? 系統中某些資源?次只允許?個進程使?,稱這樣的資源為臨界資源或互斥資源。

? 在進程中涉及到互斥資源的程序段叫臨界區。你寫的代碼=訪問臨界資源的代碼(臨界區)+不訪問 臨界資源的代碼(?臨界區)

? 所謂的對共享資源進?保護,本質是對訪問共享資源的代碼進?保護

互斥:

怎么保護:只允許一個執行流訪問資源->互斥
?

保護臨界區的一種手段

!!!!!!!!!!!!!!

多個執行流,訪問臨界資源的時候,具有一定的順序性,叫做同步。->一個人訪問完后,通知下一個人繼續訪問,保證臨界區的安全。

原子性:要么做,要么就不做


申請資源,申請鎖。
訪問資源,鎖是要共享的

誰來保證鎖的安全->申請鎖的時候,就需要原子性的概念了。

7-2信號量

1.信號量是什么?

本質是一個計數器,用來表示,臨街資源中,資源的數量是多少。

2.理解信號量?


電影院就是共享內存,把共享內存按照不同的區域,部分使用,
1.不要訪問同一個位置
2.不要放過多的進程進來

信號量本質是個計數器,表述的是臨界資源中,資源數量的多少

所有進程,訪問臨界資源中的一小塊,就修現申請信號量
進程訪問資源前,現申請信號量,本質是:對資源的預定機制


過程:進程訪問資源,先對信號量進行申請,申請后,信號量--,如果信號量為0,那么就不會給你
?

細節1:信號領本身就是共享資源
申請 -- ,原子性--> p操作

sem ++,原子性-->v操作,歸還資源

細節2:
信號量只有1或者0的兩態的信號量叫做二元信號量。--->這就是互斥
二元信號量的本質就是互斥?

3.共享資源使用的問題

信號量和通信有什么關系???
1.先訪問信號量P,每個進程都得先看到同一個信號量!!
system V可以解決這個問題
2.不是傳遞數據,是通信IPC,通知,同步互斥,也算
傳遞控制信息

?4.信號量接口

1.創建信號量:
semeget:
key:
nsems:信號量的個數
semflag:權限

返回值:信號量級別的返回值semid
?


2.查看信號量資源:
ipc -s:
semid:返回值
ower:誰創建的
perms:權限
nsem:數量
?

3.刪除信號量:?

4.對信號量進行操作
semop

sembuf:結構體
sem_op:操作P/V
flg:暫時不管
?

5.初始化信號量:

cmd->SETVAL

細節信號量的初始值是多少???

semctl:還
對信號量新進參數初始化。

setval:設計在信號量集中第幾個信號量的值

senum:信號量集里面信號量的下標

...:可變參數,可傳入結構體semun

senum = 0,cmd = SETCAL,對信號量集中下標為0的用“...”指向的結構體進行初始化

查看信號量ipc -s

OS內部存在大量的信號量集

操作系統也要對信號量進行掛歷->先描述在,在組織。

信號量結構體:
struct ipc_perm_sem_perm

ipc_perm:第一個資源都是key

struct XXXid_ds的結構!!! - >key!

大圖總結:(手機再看一遍)

?加餐:基于簡單建造者模式的消息隊列

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

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

相關文章

【數據結構】紅黑樹超詳解 ---一篇通關紅黑樹原理(含源碼解析+動態構建紅黑樹)

一.什么是紅黑樹 紅黑樹是一種自平衡的二叉查找樹,是計算機科學中用到的一種數據結構。1972年出現,最初被稱為平衡二叉B樹。1978年更名為“紅黑樹”。是一種特殊的二叉查找樹,紅黑樹的每一個節點上都有存儲表示節點的顏色。每一個節點可以是…

2024年第十五屆藍橋杯CC++大學A組--成績統計

2024年第十五屆藍橋杯C&C大學A組--成績統計 題目: 動態規劃, 對于該題,考慮動態規劃解法,先取前k個人的成績計算其方差,并將成績記錄在數組中,記錄當前均值,設小藍已檢查前i-1個人的成績&…

vue2使用ezuikit-js播放螢石視頻

需求:需要在大屏上播放螢石視頻,用到官方的ezuikit-js插件實現,并實現視頻播放切換功能。有個問題至今沒有解決,就是螢石視頻的寬高是固定的,不會根據大屏縮放進行自適應。我這邊做了簡單的刷新自適應。 1.下載ezuikit…

愛普生TG-5510CA和TG-5510CB晶振成為服務器中的理想之選

在數字化時代,服務器作為數據存儲、處理與傳輸的核心樞紐,其性能的優劣直接影響著整個信息系統的運行效率與穩定性。從企業內部的數據中心到云計算服務提供商的大規模集群,服務器需要應對海量數據的高速處理與頻繁交互。而在服務器復雜精密的…

使用opentelemetry 可觀測監控springboot應用的指標、鏈路實踐,使用zipkin展示鏈路追蹤數據,使用grafana展示指標

1.安裝docker,docker-compose (1)安裝依賴包 yum install -y yum-utils device-mapper-persistent-data lvm22.2、部署dockertar xvf docker-20.10.19.tgz cp docker/* /usr/bin/vim /usr/lib/systemd/system/docker.service[Unit] Descript…

5. 藍橋公園

題目描述 小明喜歡觀景,于是今天他來到了藍橋公園。 已知公園有 N 個景點,景點和景點之間一共有 M 條道路。小明有 Q 個觀景計劃,每個計劃包含一個起點 stst 和一個終點 eded,表示他想從 stst 去到 eded。但是小明的體力有限&am…

虛幻基礎:碰撞幀運算

能幫到你的話,就給個贊吧 😘 文章目錄 碰撞碰撞盒線段檢測 幀運算:每個程序流就是一幀的計算結果速度過快時(10000),導致每幀移動過大(83),從而導致碰撞盒錯過而沒有碰撞速度快的碰撞要用線段檢測 碰撞 碰撞盒 線段檢…

Qt 入門 3 之對話框 QDialog

Qt 入門 3 之對話框 QDialog 本文從以下幾點分開講述: - 對話框的基本原理介紹 - 兩種不同類型的對話框 - 一個由多個窗口組成并且窗口間可以相互切換的程序 1.模態和非模態對話框 QDialog 類是所有對話框窗口類的基類。對話框窗口是一個經常用來完成短小任務或者…

數據結構——哈希技術及鏈地址法

目錄 一、哈希的定義 二、哈希沖突定義 三、構造哈希函數的方法 四、四種解決哈希沖突的方法 4.1 開放地址法 4.2 鏈地址法 4.3 再散列函數法 4.4 公共區溢出法 五、鏈地址法結構體設計 六、基本操作的實現 6.1 哈希函數 6.2 初始化 6.3 插入值 6.4 刪除值 6.5 查…

算法思想之前綴和(二)

歡迎拜訪:霧里看山-CSDN博客 本篇主題:算法思想之前綴和(二) 發布時間:2025.4.11 隸屬專欄:算法 目錄 滑動窗口算法介紹核心思想大致步驟 例題和為 K 的子數組題目鏈接題目描述算法思路代碼實現 和可被 K 整除的子數組題目鏈接題目…

開源的7B參數OCR視覺大模型:RolmOCR

1. 背景介紹 早些時候,Allen Institute for AI 發布了 olmOCR,這是一個基于 Qwen2-VL-7B 視覺語言模型(VLM)的開源工具,用于處理 PDF 和其他復雜文檔的 OCR(光學字符識別)。開發團隊對該工具的…

移動端六大語言速記:第14部分 - 數據庫操作

移動端六大語言速記:第14部分 - 數據庫操作 本文將對比Java、Kotlin、Flutter(Dart)、Python、ArkTS和Swift這六種移動端開發語言在數據庫操作方面的特性,幫助開發者理解和掌握各語言的數據庫編程能力。 14. 數據庫操作 14.1 SQL查詢 各語言SQL查詢實現方式對比: 特性Ja…

有哪些反爬機制可能會影響Python爬取視頻?如何應對這些機制?

文章目錄 前言常見反爬機制及影響1. IP 封禁2. 驗證碼3. 請求頭驗證4. 動態加載5. 加密與混淆6. 行為分析 應對方法1. 應對 IP 封禁2. 應對驗證碼3. 應對請求頭驗證4. 應對動態加載5. 應對加密與混淆6. 應對行為分析 前言 在使用 Python 爬取視頻時,會遇到多種反爬…

ESP32開發入門:基于VSCode+PlatformIO環境搭建指南

前言 ESP32作為一款功能強大的物聯網開發芯片,結合PlatformIO這一現代化嵌入式開發平臺,可以大幅提升開發效率。本文將詳細介紹如何在VSCode中搭建ESP32開發環境,并分享實用開發技巧。 一、環境安裝(Windows/macOS/Linux&#xf…

DeepSeek:穿透行業知識壁壘的搜索引擎攻防戰

DeepSeek:穿透行業知識壁壘的搜索引擎攻防戰 文 / 產業智能觀察組(人機協同創作) 一、搜索引擎的"認知折疊"危機 2024年Q1數據顯示,百度搜索結果前10頁中,61.7%的內容存在"偽專業化"現象——看似…

SQL 外鍵(Foreign Key)詳細講解

1. 什么是外鍵??? ??定義??:外鍵是數據庫表中的一列(或一組列),用于??建立兩個表之間的關聯關系??。外鍵的值必須匹配另一個表的主鍵(Primary Key)或唯一約束(Unique Con…

5G中的DU和CU的作用

在5G網絡架構中,CU(Centralized Unit,集中單元) 和 DU(Distributed Unit,分布單元) 是無線接入網(RAN)的重要組成部分,它們的分工和作用如下: 1.…

深度解析 n8n:強大的開源工作流自動化平臺

在數字化時代,企業和個人面臨著日益復雜的工作流程和多樣化的應用工具,如何高效整合這些資源、實現工作流的自動化成為提升效率的關鍵。n8n 作為一款開源的工作流自動化平臺,憑借其強大的功能、廣泛的應用集成能力和靈活的部署方式&#xff0…

ruby超高級語法

以下是 Ruby 中一些 極度硬核 的語法和底層特性,涉及元編程的深淵、虛擬機原理、語法黑魔法等,適用于追求極限的 Ruby 開發者: 高級語法一 一、語法核彈級操作 1. 動態修改繼承鏈 class A; def foo; "A"; end end class B; def …

flutter 獲取通話記錄和通訊錄

Dart SDK version is 3.7.01 dependencies:flutter:sdk: flutterpermission_handler: ^11.0.1 # 權限管理flutter_contacts: ^1.1.92call_log: ^5.0.5cupertino_icons: ^1.0.8dev_dependencies:flutter_test:sdk: flutterflutter_lints: ^5.0.0 2 contact_and_calls_page.da…