王道操作系统考研笔记——2.1.4 进程通信

如果这篇博客对您有用的话,可以给我点个赞吗,这对我很重要,谢谢!❤️

2.1.4 进程通信

知识总览

image-20220121153108933

2.1.4.1 什么是进程通信

顾名思义,进程通信就是指进程之间的信息交换。

进程是分配系统资源的单位(包括内存地址空间),因此各进程拥有的内存地址空间相互独立。

为了保证安全,一个进程不能直接访问另一个进程的地址空间。

image-20220121153334463

但是进程之间的信息交换又是必须实现的,为了保证进程之间的安全通信,操作系统提供了一些方法。

image-20220121153448941


2.1.4.2 共享存储

使用共享存储的方式进行进程通信的话,操作系统会在内存中开辟一个共享空间,让两个进程进行通信。

需要注意的是:两个进程对共享空间的访问必须是互斥的(互斥访问通过操作系统提供的工具实现);并且操作系统只负责提供共享空间和同步互斥工具(如P、V操作)

共享存储可以分为两种:一种是基于数据结构的共享,一种是基于存储区的共享

  • 基于数据结构的共享:比如共享空间里只能放一个长度为10的数组。这种共享方式速度慢、限制多,是一种低级通信方式。

  • 基于存储区的共享:在内存中画出一块共享在存储区、数据的形式、存放位置都由进程控制,而不是操作系统。相比之下,这种共享方式速度更快,是一种高级通信方式。


2.1.4.3 管道通信

管道是指用于连接读写进程的一个共享文件,又名pipe文件。其实就是在内存中开辟一个大小固定的缓冲区。

image-20220121154909861

需要知道的是:

  1. 管道只能采用半双工通信,某一个时间段内只能实现单向的传输。如果要实现双向同时通信,则需要设置两个管道。
  2. 各进程要互斥地访问管道
  3. 数据以字符流的形式写入管道,当管道写满时,写进程的write()系统调用将被阻塞,等待读进程将数据取走。当读进程将数据全部取走后,管道变空,此时读进程的read()系统调用将被阻塞。
  4. 如果没写满,就不允许读;如果没读空,就不允许写。
  5. 数据一旦被读出,就从管道中被抛弃,这就意味着读进程最多只能有一个,否则可能会有读错数据的情况。

2.1.4.4 消息传递

进程间的数据交换以格式化的消息为单位。进程通过操作系统提供的“发送消息/接受消息”两个原语进行数据交换。

一个格式化的消息可以分为消息头消息体。消息头包括:发送进程ID、接受进程ID、消息类型、消息长度等格式化的信息(计算机网络中发送的“报文”其实就是一种格式化的消息)。

消息传递也分为两种方式:

通信方式详情
直接通信方式消息直接挂到接受进程的消息缓冲队列上
间接通信方式消息要先发送到中间实体(信箱)中,因此也称为“信箱通信方式”。如:计网中的电子邮件系统。

两种方式如图所示:

image-20220121160747694


2.1.4.5 小结

image-20220121160922366

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/398767.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

paper 35 :交叉验证(CrossValidation)方法思想

交叉验证(CrossValidation)方法思想简介以下简称交叉验证(Cross Validation)为CV.CV是用来验证分类器的性能一种统计分析方法,基本思想是把在某种意义下将原始数据(dataset)进行分组,一部分做为训练集(train set),另一部分做为验证集(validation set),首先用训练集对分类器进行…

strerror和perror函数详解

/*#include <string.h> char *strerror(int errnum); 它返回errnum的值所对应的错误提示信息&#xff0c;例如errnum等于12的话&#xff0c;它就会返回"Cannot allocate memory"。 测试程序&#xff1a;*/ #include <stdio.h> #include <string.h>…

【2018-01-28】HTML-布局

位置&#xff1a; position&#xff1a;fixed 固定 absolute 绝对位置 relative 相对位置 top right     bottom left 流&#xff1a; float&#xff1a;left 向左流 right 向右流 both 清掉流 z-index分层&#xff1a; 值越大越靠上转载于:https://www.cnblogs.com/zqyyx…

关于设计模式——策略模式-Strategy Pattern

文章目录1 策略模式1.1 模拟鸭子1.2 设计原则1.3 整合行为1.4 模拟鸭子代码的代码1.5 动态设定行为1.6 重新查看整体1.7 继承和组合1.8 总结1.9 优劣期间应用场景2.0 参照资料1 策略模式 在我们什么都不会的情况下&#xff0c;我们先无需知道什么是策略模式&#xff0c;我们要…

python (3):wxPython打包app,报错

1&#xff0c;打包app报错 如图&#xff1a; 使用py2app&#xff0c;mac下打包成app。异常。程序直接退出。 没有详细的错误信息&#xff0c;client程序直接崩溃了。 2。原因 代码没有几行&#xff1a; #!/usr/bin/python # -*- coding: utf-8 -*- import wxapp wx.App(False…

.NET Framework 工具

您可以使用 .NET Framework 工具轻松创建、部署和管理面向 .NET Framework 的应用程序和组件。 此节中介绍的大部分 .NET Framework 工具将自动随 Visual Studio 一起安装。 &#xff08;有关安装信息&#xff0c;请参阅 Visual Studio 下载。&#xff09; 可以从命令行运行除程…

并发无锁队列学习(概念介绍)

1、前言 队列在计算机中很重要的一种数据结构&#xff0c;尤其在操作系统中。队列典型的特征是先进先出&#xff08;FIFO&#xff09;&#xff0c;符合流水线业务流程。在进程间通信、网络通信之间常常採用队列做缓存&#xff0c;缓解数据处理压力。结合自己在工作中遇到的队列…

王道操作系统考研笔记——2.1.5 线程概念与多线程模型

文章目录2.1.5 线程概念与多线程模型2.1.5.1 线程的来源2.1.5.2 线程机制带来的变化2.1.5.3 线程的属性2.1.5.4 线程的实现方式2.1.5.5 多线程模型2.1.5.6 小结2.1.5 线程概念与多线程模型 2.1.5.1 线程的来源 在很久以前还没有引入进程之前&#xff0c;系统中的各个程序只能…

mybatis处理集合、循环、数组和in等语句的使用

2019独角兽企业重金招聘Python工程师标准>>> 在Mybatis的xml配置中使用集合&#xff0c;主要是用到了foreach动态语句。 foreach的参数&#xff1a;foreach元素的属性主要有 item&#xff0c;index&#xff0c;collection&#xff0c;open&#xff0c;separator&…

#if defined 和 #if ! defined 的用法

背景&#xff1a;MFC初学&#xff0c;头文件中有#if !defined(AFX_HELLOMFC_H__706D36F5_2F1B_40AC_8BE9_0BD6A1D7BBDE__INCLUDED_)#define AFX_HELLOMFC_H__706D36F5_2F1B_40AC_8BE9_0BD6A1D7BBDE__INCLUDED_// Info : Other content #endif // !defined(AFX_HELLOMFC_H__706D…

Jmeter 通过Groovy保存数据到CSV

def outnew File("D:/pathdt.csv").append("\n"${__threadNum},${要导出的变量},) 转载于:https://www.cnblogs.com/Curious-wang/p/8378373.html

王道操作系统考研笔记——2.1.6 处理机调度的概念和层次

文章目录2.1.6 处理机调度的概念和层次2.1.6.1 调度的基本概念2.1.6.2 高级调度2.1.6.3 中级调度2.1.6.4 进程的挂起态和七状态模型2.1.6.5 低级调度2.1.6.6 三层调度的联系、对比2.1.6.7 小结2.1.6 处理机调度的概念和层次 知识总览 2.1.6.1 调度的基本概念 实际上&#xff…

CocoaPods详解之----使用篇

作者&#xff1a;wangzz 原文地址&#xff1a;http://blog.csdn.net/wzzvictory/article/details/18737437 转载请注明出处 如果觉得文章对你有所帮助&#xff0c;请通过留言或关注微信公众帐号wangzzstrive来支持我&#xff0c;谢谢&#xff01; 一、什么是CocoaPods 1、为什…

placeholder=请输入用户名(六位数字加英文字母)

placeholder"请输入用户名&#xff08;六位数字加英文字母&#xff09;" 转载于:https://www.cnblogs.com/nc-blog/p/4122768.html

文章集锦

不甘平庸的年轻人&#xff0c;全都有同一个特质&#xff1a;http://mp.weixin.qq.com/s/cQhS1nPxbsF3tini0-qvUA转载于:https://www.cnblogs.com/tianboblog/p/8383474.html

数据结构杂谈(五)——栈

本文的所有代码均由C编写 引用及参考资料&#xff1a; 王道数据结构大话数据结构超硬核十万字&#xff01;全网最全 数据结构 代码&#xff0c;随便秒杀老师/面试官&#xff0c;我说的_hebtu666-CSDN博客 5 栈 5.1 引入 在前面学习线性表的时候&#xff0c;我们给出了线性表的…

cocos3.2中如何创建一个场景

1.可以将一些比较通用的东西放到Common.h中,这是一个.h文件,必须手动添加,且保证在classes目录里 #ifndef __COMMON_H__ #define __COMMON_H__#include "cocos2d.h" USING_NS_CC;#define winSize Director::getInstance()->getWinSize() #define CCLog cocos2d::l…

每日一题——Leetcode203 移除链表元素

如果您是第一次看我写的博客&#xff0c;可以给我点个赞并关注我吗&#xff0c;我会持续分享更多有意思的干货。 文章目录1 题目2 思路3 代码4 小结1 题目 Leetcode203 移除链表元素 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val …

Linux入门之常用命令(15) lsof

查看磁盘空间&#xff1a; [rootticketb ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 981M 203M 729M 22% / none 16G 0 16G 0% /dev/shm /dev/sda9 2.9G 37M 2.7G 2% /tmp /dev/…

大话重构7:重构是一系列的等量变换

毫无疑问&#xff0c;系统重构是一件如履薄冰、如坐针毡、你必须时时小心应对的工作&#xff0c;你就像走在钢丝上的人&#xff0c;每一步你都必需要保证正确&#xff0c;一个不经意的失误就可能让你万劫不复。虽然如此&#xff0c;仅仅要你掌握了正确的方法。即使站在钢丝上也…