zoukankan      html  css  js  c++  java
  • 操作系统-第三章-进程

    一、进程概念


    1.定义

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

    2.内存中的进程

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

    3.进程和程序

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

    差别和联系

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

    4.进程状态

    • 新建:在创建进程
    • 运行:指令在执行
    • 等待:进程等待某些事件发生
    • 就绪:进程等待分配处理器
    • 终止:进程执行完毕


    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个消息驻留其中
        • 无限容量:队列长度可以无限,因此,不管多少消息都可在其中等待
      • 零容量情况称为无缓冲的消息系统,其他情况称为自动缓冲的消息系统

  • 相关阅读:
    一切都是对象
    对象入门
    同步计算输入的各个数的总和与平均值
    与时间有关的类Date,DateFormat,Calendar
    获取文件信息
    串行化
    分解
    高速缓存
    压缩
    MyCAT实现MySQL的读写分离
  • 原文地址:https://www.cnblogs.com/fangzhiyou/p/13741785.html
Copyright © 2011-2022 走看看