OS

进程

Operating System Notes

Posted by AH on April 18, 2020

第3章 进程

3.1 进程概念

3.1.1 进程

进程是执行中的程序(unformal)

进程包括文本段、数据段、堆、栈

程序不是进程,程序是被动实体,进程是活动实体,当可执行文件载入Mem的时候,程序才会变成进程

进程本身也可以作为其他程序的运行环境(如JVM)

3.1.2 进程状态

3.1.3 进程控制块PCB

  • 进程状态
  • PC
  • CPU Reg
  • CPU调度信息
  • 内存管理信息
  • 记账信息
  • I/O状态信息

3.1.4 线程

3.2 进程调度

3.4 进程间通信(IPC, Interprocess Communication)

系统中的进程可能是独立(independent)或协作(cooperating)的

  • 独立进程和其他进程互不影响

  • 协作进程可能影响其他进程,或被其他进程影响,包括共享数据

协作进程的理由:

  • 信息共享
  • 计算提速
  • 模块化(modularity)
  • 便捷性

协作进程需要IPC

IPC的两种模型:

  • 共享内存(shared memory)
  • 信息传递(message passing)

3.5 共享内存中的IPC

消费者-生产者问题

  • 无限缓冲
  • 有限缓冲

共享内存:

  • 在希望通讯的进程间共享的内存区域
  • 通信在用户进程的控制下,而非OS
  • 主要问题是提供在用户进程访问共享内存时,允许它们同步操作的机制
  • (有关同步的详细内容见Chap 6&7)

3.6 信息传递中的IPC

进程通信和同步操作的机制

消息系统:进程相互通信而不采取共享的变量

进程间通信设施提供两个操作:

  • send(message)
  • receive(message)

message的大小可以固定也可以变化

若P、Q之间想要通信,则它们需要:

  1. 在它们之间建立通信连接(communication link)
  2. 通过send/receive交换消息

通信连接的应用:

  • 物理上的
    • 共享内存
    • 硬件总线
    • 网络
  • 逻辑上的
    • 直接/间接
    • 同步/异步
    • 自动/显式缓冲

3.6.1 命名(Naming)

  • 直接通信

    • 进程必须显式给其他进程命名

      send(P, message):给进程P发送一条消息

      receive(Q, message):从进程Q接收一条消息

    • 通信连接的性质

      • 连接是自动建立的
      • 一个连接只对应一对通信进程
      • 在每一对进程间也只存在一个连接
      • 连接可以单向,但通常是双向的
  • 间接通信

    • 消息通过邮箱(mailbox)(也叫端口port)接收/发送

      • 每个邮箱有一个独一无二的id
      • 仅当进程间共享邮箱时,可以相互通信
    • 通信连接的性质

      • 仅当进程共享邮箱时连接建立
      • 一个连接可能和许多进程相联系
      • 每对进程可能共享多个通信连接
      • 连接可能是单向或双向的
    • 操作

      • 创建一个新邮箱(端口)
      • 通过邮箱发送和接收消息
      • 摧毁邮箱
    • 原语定义为

      • send(A, message) 发送一条消息到邮箱A
      • receive(A, message) 从邮箱A接收一条消息
    • 邮箱共享

      • 多个进程接收消息,谁会得到消息?

        解决方案:

        • 只允许连接和两个进程关联
        • 一次只允许一个进程执行接收操作
        • 允许系统任意选择接收者,通知发送方谁是接收者

3.6.2 同步(Synchronization)

消息传递可以是阻塞或非阻塞的

阻塞被认为是同步的

  • 阻塞发送:发送者被阻塞,直到消息被接收
  • 阻塞接受:接收者被阻塞,直到可以收到消息

非阻塞被认为是异步的

  • 非阻塞发送:发送者发送了消息,继续该干嘛干嘛
  • 非阻塞接收:接收者收到了一条正确的消息或空消息

不同组合都是可能的:

若发送和接收者都被阻塞了,称这种情况为会合(rendezvous)

3.6.3 缓冲(Buffering)

与连接相连的消息队列

三种应用方式:

  1. 0容量(zero capacity):连接的队列里没有消息,发送者必须等待接收者
  2. 有限容量(bounded capacity):有限长度n条消息,若连接满,发送者必须等待
  3. 无限容量:无限长度,发送者从来不等

3.7 IPC系统的实例

3.8 客户-服务器系统中的交流

3.8.1 套接字(Sockets)

套接字是通信的结束点

IP地址和端口(到主机上不同网络服务的消息包的开头所包含的一个数字)的级联

套接字161.25.19.8:1625表示在主机161.25.19.8的1625端口

通信由一对套接字组成

特殊的IP地址127.0.0.1(loopback 回送)指正在运行进程的系统

3.8.2 远程过程调用(Remote Procedure Calls)

抽象了网络系统中进程间的过程调用

  • 仍然用端口来区分服务

存根(stub):服务器上实际程序的客户端代理

客户端存根位于服务器上并编组(marshall)参数

服务器存根接收消息,解组参数,并在服务器上执行过程

在Windows上,存根代码从用MIDL(Microsoft Interface Definition Language)写的规格编译

通过外部数据表示格式(XDL)处理的数据表示以说明不同的体系结构

  • 大端和小端

远程通信比本地更易发生错误

​ 消息只能被传递一次,而不是最多一次

OS一般提供会合(rendezvous)服务(或称matchmaker)来连接客户端和服务器