01 UNIX IPC 第一弹 综述

Posted freeee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了01 UNIX IPC 第一弹 综述相关的知识,希望对你有一定的参考价值。

UNIX IPC 第一弹 综述


 

0. 为什么会有这边文章?

 一直对这方面的技术只有些模棱两可的了解,但又没有个统一完整的认识,在学习了《Modern Operating System》和《Advanced Programming in the UNIX Environmet》的相关章节后,做一个总结。

 

1. 什么是进程(process)?为什么要有进程?

进程是可执行程序加载到内存后,在CPU上执行的代码,包括一些相关的资源及状态,是一个动态的,变化的状态。

进程是系统资源分配的基本单位,一个程序要想执行,则必须要加载到内存中,在执行时要有相关的软硬件资源,所以系统要给“进程”分配好所有的资源后,才能使进程达到ready的状态,进而再在CPU上执行。

两个经典的“进程”定义: 

  • A process is just an instance of an executing program, including the current values of the program counter, registers and variables. -- Modern Operating System v4

   进程是一个可执行程序的实例,包含PC值,寄存器值,变量值。

  • 进程是计算机上关于某数据集合的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统的基础。它的执行需要系统分配资源创建实体后才能运行。

API

  • fork()

  • vfork()

 

2. 什么是线程?为什么要有线程?

线程是执行的最小单位,是在CPU上运行的实体,是轻量级的进程,之所以产生是因为进程创建及销毁带来大量的系统资源损耗。线程的创建及销毁比进程要快10-100倍。

有了线程可以更好的支撑并行编程,更好的支持SMP处理器,减小上下文切换,性能更高。

分类,根据调度者是在核内还是核外分为

  • 用户级线程
  • 内核级线程

Linux使用混合模型。

POSIX线程模型

技术图片

  

3. 什么是进程间通信?为什么要有进程间通信?

进程由于地址空间的隔离,需要某种相互通信的机制,以达到协同工作的目的。

进程通信(Inter Process Communication)存在以下几种:

  • 进程与进程间
  • 线程与线程间
  • 进程与线程间

进程通信主要考虑解决以下问题:

  • 如何进行通信
  • 如何避免竞争
  • 如何保证资源的一致性

经典问题

  • 生产者消费者问题
  • 哲学家就餐问题
  • 读写者问题

 

4. 进程间通信有哪些方式?

进程与进程间通信的方式有:

  1. 共享内存
  2. 消息队列
  3. 信号量
  4. 有名管道(FIFO)
  5. 无名管道(pipe)
  6. 信号
  7. 文件
  8. 套接字socket

线程与线程间通信的方式:

  第一部分是可以使用进程通信的方式:

  1. 共享内存
  2. 消息队列
  3. 信号量
  4. 有名管道(FIFO)
  5. 无名管道(pipe)
  6. 信号
  7. 文件
  8. 套接字socket

  第二部分是线程特有的方式:

  1. 互斥量
  2. 自旋锁
  3. 条件变量
  4. 读写锁
  5. 线程信号
  6. 全局变量

5. IPC方式各有哪些优缺点?

6. IPC通信还有那些不足?

  1. 性能?
  2. 易用性?
  3. 通用性?

以上是关于01 UNIX IPC 第一弹 综述的主要内容,如果未能解决你的问题,请参考以下文章

理论研究漫谈传统IT基础设施01-综述

01丨性能综述:性能测试的概念到底是什么?

[0] CMake综述

[0] CMake综述

Java 并发之Concurrent 包综述

英文综述如何写3