跳转至

进程

进程的基本概念

[!note] 顺序执行 顺序执行的特征: 1. 顺序性: 处理机严格按照程序规定的顺序指定程序 2. 封闭性: 程序独占所有资源, 不受其他程序影响 3. 可再现性:

顺序执行的问题: 1. 整体资源利用率低 - 并发执行的基本概念: 多道程序设计技术image.png - 并发执行的问题: 不可再现性image.png - 并发执行的特征: 1. 间断性: 由于资源共享, 程序执行具有"执行-暂停-执行"的特点 2. 失去封闭性: 程序不在独占所有资源, 运行收到其他程序的影响 3. 不可再现性: 程序执行结果收到其他程序的影响, 结果不定

进程

  • 进程的特征:
    1. 动态性
    2. 并发性
    3. 独立性
    4. 异步性
    5. 结构特征: image.png
      • 程序段
      • 数据段
      • [[进程控制块]]
  • 进程: 是系统进行资源分配和调度的独立单位
  • 进程的三种基本状态:
    1. 就绪状态: 进程已经获得了处处理机之外的所有出资源, 一旦获得处理机就可以立即执行
    2. 执行状态: 一个进程已经获得了必要的资源, 正在处理机上运行
    3. 阻塞状态: 正在执行的进程, 由于发生了某些事件而暂停

      [!note] 进程的状态 进程并非固定处于某种状态, 其状态会随着自身的运行和外界条件的变化而变化

  • 基本状态之间的转换: image.png
  • 挂起状态的引入: image.png
  • [[进程的状态与转换|不同系统的进程的状态与转换]]

进程控制块(Process Control Block)

  • 基本概念:
    • OS管理进程的数据结构
    • 进程控制块是进程存在的唯一标志
    • 进程控制块所在的位置: 操作系统内核

      [!note] PCB位于操作系统内核 只允许操作系统访问, 不允许进程本身访问, 因此存放在系统内核中

  • PCB中的基本内容:
    • 进程标志符
    • 处理机状态
    • 进程调度信息
    • 进程控制信息
  • PCB的两种组织方式:
    • 链接方式image.png
    • 索引方式image.png

进程控制

[!attention] 原语 指若干指令组成的程序段, 用来实现某个特定功能, 在执行过程不可被中断

进程的创建

  • 引起创建的事件:
    • 用户登录
    • 作业调度
    • 提供服务
    • 应用请求
  • 进程创建原语: create()
  • 进程创建的流程: image.png
    • 申请PCB
    • 初始化PCB中的信息
    • 设置状态为"就绪"
  • 进程树:image.png

    [!note] 不同系统对进程的清理 - linux: - 删除一个进程, 是删除了进程树中的一棵子树 - windows: - 删除一个进程, 仅仅删除其本身 - 也可以选择删除进程树

进程的撤销

  • 引起进程撤销的事件:
    • 正常结束
    • 异常结束
    • 外界干预
  • 进程撤销原语: exit()
  • 进程撤销的流程:
    • 根据PCB获得该进程的状态
    • 终止正在执行中的进程, 置调度标志为true, 指示被终止后应该重新进行调度
    • 终止其子孙进程, 防止其称为不可控的进程
    • 资源回收
    • 移除PCB

进程的阻塞

  • 引起阻塞的事件:
    • 请求系统服务
    • 请求操作
    • 等待数据、资源
    • 等待工作任务
  • 进程阻塞原语: block() image.png

    [!note] 阻塞 阻塞是由进程自己控制的 在程序编写时候, 由程序员添加到代码中, 用来获取进程运行所需要的资源等

进程的唤醒

  • 引起进程环境的事件:
    • 允许系统服务
    • 允许操作
    • 数据、资源到达
    • 工作任务到达
  • 唤醒的原语: wakeup()
  • image.png

    [!note] 唤醒 唤醒是由其他的进程进行的 进程被唤醒后并不是进入"执行"状态, 而是进入挂起状态, 重新与其他进程争夺处理机资源

进程的挂起

  • 引起挂起的事件:
    • 调试系统
    • 暂停程序执行
  • 进程挂起的原语: suspend()

进程的激活

  • 引起进程激活的事件:
    • 调试系统结束
    • 程序继续执行
  • 进程激活的原语: activate()

进程同步

[!note] 进程同步问题的产生 在多道程序的环境中, 系统中的多个进程可以并发执行, 同时他们又要共享系统中的资源, 这些资源有些是可共享使用的, 如磁盘, 有些是以独占方式使用的, 如打印机. 因此将会产生错综复杂的进程间相互制约的关系 - 两种形式的制约关系: - 间接相互制约关系: 共享某种系统资源 - 直接相互制约关系: 主要原语进程间的合作

  • 临界资源: 不同进程间共享的资源
    • 硬件资源: 打印机
    • 软件资源: 共享内存, 文件, 消息队列
  • 临界区: 进程中访问临界资源的代码称为临界区
  • 临界区的访问控制模型:
    repeat
        entry section;            // 进入临界区
            critical section;     // 临界区执行
        exit section;             // 退出临界区
        remainder section;
    until false
    
  • OS重点同步机制所遵循的原则:

    • 空闲让进: 当无进程处于临界区时, 请求进入临界区的进程可立即进入
    • 忙则等待: 当已有进程进入临界区时, 其他试图进入临界区进程须等待
    • 有限等待: 对要求访问临界资源进程, 保证能在有限时间内进入临界区
    • 让权等待: 当进程不能进入临界区时, 应当释放处理机

实现线程同步的早期方法

按需访问

  • 设置资源空闲标志busyimage.png
  • 问题:
    • 当进程1通过while(busy)后, OS将处理机交给了进程2, 而因为此时busy==false, 进程2同样可以正常运行, 当OS将处理机交回给进程1时, 就出现了冲突
  • 违背: 忙则等待, 让权等待, 有限等待

轮询

  • 设置一个轮流标志turn:image.png
    • turn == 1->P1
    • turn == 2->P2
  • 问题: 访问的顺序固定: ...->1->2->1->2->...
  • 违背: 让权等待, 有限等待

访前先看

  • 愿望标志: pturnqturnimage.png
  • 问题: 如果两个进程在进入循环之前, 都将turn设置为了true, 则会产生没有任何一个进程可以进入临界区
  • 违背: 空闲让进, 让权等待, 有限等待

Peterson算法