1. 概述

2. 进程、线程与信息共享

Unix进程间的信息共享有多种方式:注意下图中内核的位置
  

  • 左边的两个进程共享存留于文件系统中某个文件上的某些信息。为访问这些信息,每个进程都得穿越内核。
  • 中间的两个进程共享存留于内核中的某些信息。管道、System V消息队列和System V信号量都是这种共享类型。
  • 右边的两个进程有一个双方都能访问的共享内存区。每个进程一旦设置好该共享内存区,就能根本不涉及内核而访问其中的数据。
  • 注意:以上的IPC技术可以作用于任意数目的进程

线程

  • 多个进程间的IPC、单个进程中多个线程的IPC
  • 从IPC角度来看,一个给定进程内的所有线程共享共享的全局变量(也就是说共享内存区的概念对这种模型来说是内置的)。
  • 然而我们必须关注的是各个线程间对全局数据的同步访问。
  • 同步尽管不是一种明确的IPC形式,但它确实伴随许多形式的IPC使用,以控制对某些共享数据的访问。

3. IPC对象的持续性

  • 下图展示了三种类型的持续性:决定了IPC对象存在时间的长短
  • 1、随进程持续的IPC对象一直存在到打开该对象的最后一个进程关闭该对象为止。如管道、FIFO
  • 2、随内核持续的IPC对象一直存在到内核重新自举或显式删除该对象为止。如System V的消息队列、信号量和共享内存区。Posix的消息队列、信号量和共享内存区则必须至少是随内核持续的,但也可以是随文件系统持续的,取决于实现。
  • 3、随文件系统持续的IPC对象一直存在到显式删除该对象为止。即使内核重新自举了,该对象还是保持其值。Posix消息队列、信号量和共享内存区如果是使用映射文件实现的,那么它们就是随文件系统持续的。

    多数形式的IPC并没有在系统重新自举后继续存在的打算,因为进程不可能跨越重新自举继续存活。另外,要求它具备随文件系统的持续性可能会降低其性能,而IPC的一个基本设计目标就是高性能。

4. 名字空间

  • 当两个或多个无亲缘关系的进程使用某种类型的IPC对象来彼此交换信息时,该IPC对象必须有一个某种形式的名字或标识符。这样,其中一个进程(往往是服务器)可以创建该IPC对象,其他进程则可以指定同一个IPC对象。
  • 管道没有名字(故不能用于无亲缘关系的进程间)。
  • FIFO有一个在文件系统中的Unix路径名作为其标识符(故可用于无亲缘关系的进程间)。
  • 对于一种给定的IPC类型,其可能的名字的集合称为它的名字空间。名字空间非常重要,对于除普通管道以外的所有形式的IPC来说,名字是客户与服务器彼此连接以交换消息的手段。

  • 下图汇总了不同形式的IPC所用的命名约定

5. fork、exec、exit对IPC对象的影响

  • 1、考虑到无名同步变量(互斥锁、条件变量、读写锁、Posix基于内存的信号量),从一个具有多个线程的进程中调用fork将变得混乱不堪。
  • 2、System V IPC的三种形式没有打开或关闭的说法。访问这三种形式的IPC对象只需要知道其标识符,因此知道该标识符的任何进程都能访问它们。

6. 书中IPC例子索引表

  • 文件服务器:客服-服务器应用程序,客户向服务器发送一个路径名,服务器把该文件的内容返回给客户

  • 生产者-消费者:一个或多个线程或进程(生产者)把数据放到一个共享缓冲区中,另有一个或多个线程或进程(消费者)对该共享缓冲区中的数据进行操作。

  • 序列号持续增1:一个或多个线程或进程给一个共享的序列号持续增1。该序列号有时在一个共享文件中,有时在共享内存中。

7. 小结

  • 4个主要领域:

    1. 消息传递:管道、FIFO、消息队列
    2. 同步:互斥锁、条件变量、读写锁、信号量
    3. 共享内存区:匿名共享内存区、有名共享内存区
    4. 过程调用:Solaris门、Sun RPC

《Unix网络编程》卷2 读书笔记 第1章-简介的更多相关文章

  1. 《Java并发编程实战》读书笔记-第1章 简介

    并发简史 在早期的计算机中不包含操作系统,从头至尾都只执行一个程序,并且这个程序能访问计算机所有资源.操作系统的出现使得计算机每次能运行多个程序,并且不同的程序都在单独的进程中运行:操作系统为各个独立 ...

  2. [转载] 读《UNIX网络编程 卷1:套接字联网API》

    原文: http://cstdlib.com/tech/2014/10/09/read-unix-network-programming-1/ 文章写的很清楚, 适合初学者 最近看了<UNIX网 ...

  3. 《Linux/Unix系统编程手册》读书笔记 目录

    <Linux/Unix系统编程手册>读书笔记1  (创建于4月3日,最后更新4月7日) <Linux/Unix系统编程手册>读书笔记2  (创建于4月9日,最后更新4月10日) ...

  4. 《Linux/Unix系统编程手册》读书笔记9(文件属性)

    <Linux/Unix系统编程手册>读书笔记 目录 在Linux里,万物皆文件.所以文件系统在Linux系统占有重要的地位.本文主要介绍的是文件的属性,只是稍微提及一下文件系统,日后如果有 ...

  5. 《Linux/Unix系统编程手册》读书笔记8 (文件I/O缓冲)

    <Linux/Unix系统编程手册>读书笔记 目录 第13章 这章主要将了关于文件I/O的缓冲. 系统I/O调用(即内核)和C语言标准库I/O函数(即stdio函数)在对磁盘进行操作的时候 ...

  6. 《Linux/Unix系统编程手册》读书笔记7 (/proc文件的简介和运用)

    <Linux/Unix系统编程手册>读书笔记 目录 第11章 这章主要讲了关于Linux和UNIX的系统资源的限制. 关于限制都存在一个最小值,这些最小值为<limits.h> ...

  7. 《Linux/Unix系统编程手册》读书笔记6

    <Linux/Unix系统编程手册>读书笔记 目录 第9章 这章主要讲了一堆关于进程的ID.实际用户(组)ID.有效用户(组)ID.保存设置用户(组)ID.文件系统用户(组)ID.和辅助组 ...

  8. 《Linux/Unix系统编程手册》读书笔记5

    <Linux/Unix系统编程手册>读书笔记 目录 第8章 本章讲了用户和组,还有记录用户的密码文件/etc/passwd,shadow密码文件/etc/shadow还有组文件/etc/g ...

  9. 《Linux/Unix系统编程手册》读书笔记4

    <Linux/Unix系统编程手册>读书笔记 目录 第7章: 内存分配 通过增加堆的大小分配内存,通过提升program break位置的高度来分配内存. 基本学过C语言的都用过mallo ...

随机推荐

  1. 2014多校第十场1002 || HDU 4972 A simple dynamic programming problem

    题目链接 题意 : 每次无论哪个队投进一个篮球,就记下现在两队比分的差值,问你最后的结果有多少种情况. 思路 : 该题实在是不好理解,最后的结果有多少种情况就是说不管中间过程怎么来的,只要最后结果不一 ...

  2. 简易解说拉格朗日对偶(Lagrange duality)(转载)

    引言:尝试用最简单易懂的描述解释清楚机器学习中会用到的拉格朗日对偶性知识,非科班出身,如有数学专业博友,望多提意见! 1.原始问题 假设是定义在上的连续可微函数(为什么要求连续可微呢,后面再说,这里不 ...

  3. OSX Mavericks下使用Synergy进行多台主机通过wifi共享键鼠问题的解决方法

    转帖: OSX 10.9 几天用下来还是遇到几处问题的:之前先是遇到了OSX Mavericks GM598无法从Appstore升级到完全正式版的问题,下载无反应,后来找到了解决方法,发在以下链接: ...

  4. cojs 疯狂的字符串 题解报告

    首先这道题是GT考试的加强版本QAQ 当n<k的时候,答案显然是10^n 当n=k的时候,答案显然是10^n-1 这样就有20分辣 之后我们考虑k<=20的做法 显然设f(i,j)表示前i ...

  5. 关于CStdioFile的使用问题

    在win32控制台调试如下程序 #include "stdafx.h"#include <afx.h>//#include <iostream>//usin ...

  6. Spring框架学习之第6节

    bean的生命周期 为什么总是一个生命当做一个重点? Servlet –> servlet生命周期 Java对象生命周期 往往笔试,面试总喜欢问生命周期的问题? ①   实例化(当我们的程序加载 ...

  7. CentOS下对Apache的中文乱码处理

    # vi /etc/sysconfig/i18nLANG="en_US.UTF-8"SYSFONT="latarcyrheb-sun16" 默认的语言是英文,如 ...

  8. javascript 网络是否连接的几种方案

    js   网络是否连接的几种方案 1.通过html5的新属性: window.onload = function () {            var isOnLine = navigator.on ...

  9. 测试 float

    关于blog上对 float的许多讨论,这个函数不对,那个运算出错. 其实原因不在这里,根源是计算机没有向你保证你看到的就是真实的,都是一厢情愿而已. 废话不说.下面是测试,一看就明白.再不明白的看看 ...

  10. Weblogic控制器的部署

    WebLogic的安装 一 WebLogic安装 1.  打开WebLogic安装程序:oepe11_wls1031.exe(我们选用的是WebLogic 10.3g).如图1-1所示: 图1-1   ...