操作系统-第三章-进程

一、进程概念


1.定义

  • 操作系统执行各种程序
    • 批处理系统——作业(Job:被组装成一个整体运行的一组计算步骤)
    • 分时系统——用户程序或任务(Task:进程或线程)
  • 进程
    • 执行中的程序
    • 进程的执行必须以顺序方式进行
    • 一个程序在一个数据集上的一次运行

2.内存中的进程

  • 进程包括
    • 代码(Text)
    • 当前活动
      • 程序计数器(PC)——指向当前要执行的指令(地址)
      • 堆栈(Stack)——存放函数参数、临时变量等临时数据
      • 数据(Data)——全局变量,处理的文件
      • 堆(Heap)——动态内存分配

3.进程和程序

  • 进程是程序的一个实例,是程序的一次执行
  • 一个程序可对应一个或多个进程
  • 一个进程可对应一个或多个程序
  • 程序是进程的代码部分
  • 进程是活动实体,程序静止(被动)实体
  • 进程在内存,程序在外存

差别和联系

  • 程序是指令的有序集合,其本身没有任何运行的含义,它是一个静态的概念;进程是程序在处理机上的一次执行过程,它是一个动态概念。
  • 程序的存在是永久的,而进程则是有生命期的,它因创建而产生,因调度而执行,因得不到资源而暂停,因撤销而消亡。
  • 程序仅是指令的有序集合。而进程则由程序、数据和进程控制块组成。
  • 在传统的操作系统中,进程是资源分配和调度运行的基本单位,而程序不是。
  • 进程与程序之间不是一一对应的,即同一程序同时运行于若干不同的数据集合上,它将属于若干个不同的进程;而一个进程至少对应执行一个程序。

4.进程状态

  • 新建:在创建进程
  • 运行:指令在执行
  • 等待:进程等待某些事件发生
  • 就绪:进程等待分配处理器
    • 当发生中断时,CPU处理中断,中断是代码片,此时,n个进程最多有n个进程在就绪
  • 终止:进程执行完毕


5.进程控制块(PCB)

  • PCB包含同进程有关的信息
    • 进程状态
    • 程序计数器
    • CPU寄存器
    • CPU调度信息
    • 内存管理信息
    • 计账信息
    • I/O状态信息
  • 组织方式
    • 线性
    • 链接
    • 索引

6.上下文切换

  • 进程的并发执行需要PCB保存和恢复现场


二、进程操作


1.进程创建

  • 父进程创建一个子进程,如此轮流创建进程下去,构成一个进程树
  • 系统内的每一个进程都有一个唯一进程标识符(pid),可由它作为索引访问内核中的进程的各种属性
  • 进程创建是原子操作
    • 不会被打断的操作
    • 一旦开始就一直运行到结束,中间不会有任何上下文切换
    • 必须要硬件的支持
    • 由若干条机器指令组成
  • 资源共享模式
    • 1.父进程子进程共享所有的资源
    • 2.子进程共享父进程资源的子集
    • 3.父进程和子进程无资源共享
  • 执行模式
    • 1.父进程和子进程并发执行
    • 2.父进程等待,直到子进程终止
  • 地址空间模式
    • 1.子进程复制父进程的数据
    • 2.子进程加载另一个新程序

2.进程终止

  • 进程执行最后一项并退出(exit)
    • 从子进程向父进程输出数据(通过wait)
    • 操作系统回收进程的资源
  • 父进程可中止子进程的执行(abort)
    • 子进程超量分配资源
    • 赋予子进程的任务不再需要
    • 如果父进程结束
      • 若父进程终止,一些系统不允许子进程继续存在,其所有子进程终止(级联终止)
  • 父进程可以等待子进程结束
    • 调用wait()系统调用

三、进程间通信(IPC)


1.进程分类

  • 独立进程:不会影响另一个进程的执行或被另一个进程执行影响
  • 协同进程:可能影响另一个进程的执行或被另一个进程执行影响
  • 进程协同的优点:
    • 信息共享
    • 加速运算
    • 模块化
    • 方便

2.进程间通信模型

  • 用于进程通信的机制,同步其间的活动
  • 两种基本模式:共享内存、消息传递


共享内存

  • 一块内存在多个进程间共享
  • 通信由应用程序自己控制
  • 一般用于大数据通信
  • 实现手段:
    • 文件映射
    • 管道


消息传递

  • 消息传递在微内核中的应用
  • 远程通信无法采用共享内存
  • 两个操作:
    • 发送send(message):固定或可变大小消息
    • 接收receicve(message)
  • 若P与Q要通信,需要:
    • 建立通信连接
    • 通过send/receive交换消息
  • 通信连接的实现
    • 物理的(如,共享存储,硬件总线)
    • 逻辑的(如,逻辑特性)
      • 直接或间接通信
      • 同步或异步通信
      • 自动或显式通信
  • 直接通信
    • send(P,message):向进程P发消息
    • receive(Q,message):从进程Q收消息
    • 通信连接的特性:
      • 连接自动建立
      • 连接精确地与一对通信进程相关
      • 在每一对通信进程间存在一个连接
      • 连接可单向,但通常双向
  • 间接通信
    • 消息导向至信箱并从信箱接收
      • 每一个信箱有一个唯一地ID
      • 仅当共享一个信箱时进程才能通信
    • 通信连接的特性
      • 仅当进程共有一个信箱时连接才能建立
      • 连接可同多个进程相关
      • 每一对进程可共享多个通信连接
      • 连接可是单向或多向的
    • 操作
      • 创建新的信箱(信箱可以为进程或系统拥有)
      • 通过信箱发送和接收消息
      • 销毁信箱
  • 同步
    • 消息传递可阻塞或非阻塞
    • 阻塞(同步):
      • 阻塞send:发送进程阻塞,直到消息被接收
      • 阻塞receive:接收者进程阻塞,直到有消息可用
    • 非阻塞(异步):
      • 非阻塞send:发送进程发消息并继续操作
      • 非阻塞receive:接收者收到一个有效消息或无效消息
    • 不同组合的send()和receive都有可能
  • 缓存
    • 通信进程交换的消息总是驻留在临时队列中
    • 队列的实现:
      • 零容量:队列的最大长度为0,因此,链路中不能有任何消息处于等待
      • 有限容量:队列长度为有限的n,因此,最多只能有n个消息驻留其中
      • 无限容量:队列长度可以无限,因此,不管多少消息都可在其中等待
    • 零容量情况称为无缓冲的消息系统,其他情况称为自动缓冲的消息系统

posted @ 2020-09-29 21:50  方知有  阅读(486)  评论(0编辑  收藏  举报