2进程与线程

2.1 进程

all modern计算机常同时做多事

  • 个人计算机上工作的人不注意此事实
  • 举个例子
  • 网络服务器
    • 一些网页请求从各处进入
    • 当一个请求进入时,
    • 服务器检查 其要的网页 在缓存吗?
    • 若是,把网页发回去
    • 若不,则启动一个磁盘请求获取网页
      • 从CPU的角度看,磁盘请求要漫长时间
    • 当等待磁盘请求完成时,其他更多的请求将会进入
    • 若有多磁盘存在,可在满足第一个请求之前
      • 就对其他的磁盘发请求
  • 要一些方法去模拟并控制这种并发
  • 进程(特别线程)在这里就发挥作用

现考虑只有一用户的PC

  • 一般人不知道,启动系统时,会秘密启动许多进程
  • 如,
    • 进程用来等待进入的电子邮件:
    • 防病毒进程周期性检査有病毒库更新吗?
  • 某个用户进程可能会在所有用户上网的时候
    • 打印文件以及刻录CD-ROM。
  • 这些活动都要管理
  • so一个支持多进程的多道程序系统就显得有用

多道程序设计系统中,CPU由一个进程快速切换至另一个进程,使每个进程各运行几十毫秒

  • 在某一瞬间

    • CPU只运行一进程
    • 但1秒内能运行多个
    • 就产生并行的错觉
  • 所说的伪并行就是指这种情形

    • 以此来区分
    • 多处理器系统
    • 该系统有多个CPU共享一个物理内存
    • 的真正硬件并行
  • 很难对多个并行活动跟踪,

    • 因此,经过多年的努力,
    • OS的设计者开发了用于描述并行的一种概念模型(顺序进程),
    • 使并行更易处理。
  • 该模型的使用及它的影响是

    • 本章主题

2.1.1 进程模型

在进程模型中

  • 计算机上所有可运行的软件
    • 包括OS
    • 被组织成若干顺序进程sequential process
    • 简称进程(process)
  • 进程
    • 是一个正在执行程序的实例,包括PC和变量的当前值
  • 概念上,
    • 每个进程有自己的虚拟CPU。
    • 实际真正的CPU在各进程间切换
  • 但为理解这种系统
    • 考虑在(伪)并行情况下运行的进程集,
    • 要比试图眼踪CPU如何在程序间来回切换简单得多。
  • 如在1章所看到的,
    • 这种快速切换叫多道程序设计

2-1a中,一台多道程序计算机的内存中有4程序

  • 2-1b中,4程序被抽象为
    • 各自有自己控制流程
    • (即每个程序自己的逻辑PC)的进程,
    • 且都独立运行
  • 实际上只有一个物理PC,
    • 所以在每个程序运行时,
    • 它的逻辑PC被装入实际的PC。
  • 当该程序结東(或暂停)时,
    • 物理PC被保存在内存中该进程的逻辑PC。
  • 图2-1c中可看到
    • 足够长时间后
    • 所有进程都运行了
    • 但瞬间仅有一个真正运行

2进程与线程

本章假设只有一CPU

  • 但逐渐假设就不真
  • 新芯片是多核
  • 8章介绍多核芯片及多处理器,但现在只考虑一个CPU会更简单
  • 当我们说一个CPU只能
    • 真正一次运行一个进程时
    • 即使有俩核(或CPU),每个核也只能一次运行一个

CPU在进程间快速切,so进程执行其运算的速度是不确定的

  • 且当同一进程再次运行,运算速度不可再现
    • so在对进程编程时不能对时序做任何想当然的假设
    • 考虑一个I/O进程
      • 用流式磁带机恢复备份的文件
      • 10000次空循环等磁带机达到正常速度
      • 然后发命令读第一个记录
    • 若CPU在循环时切到其他进程
      • 则 磁带机进程 在第一条记录通过磁头之后还未 被再次运行
    • 当一个进程有此类严格的实时要求时
      • 也就是一些特定事件一定要在所指定的若干毫秒内发生
      • 则必须采取措施保证它们一定在这段时间发生
    • 然而,通常大多数进程并
      • 不受CPU多道程序设计或
      • 其他进程相对速度的影响

进程和程序间的区别重要

  • 科学家为女儿烘蛋糕
    • 有食谱
    • 原料:面粉、鸡蛋、糖、香草汁
    • 食谱是程序(用适当形式描述的算法)
    • 科学家是处理器(CPU)
    • 各种原料就是输入数据
  • 进程就是厨师阅读食谱、取来各种原料以及烘制蛋糕等一系列动作的总和

儿子说头被蜜蜂蛰了

  • 科学家就记录照着食谱做到哪了(保存进程当前状态)
    • 拿出急救手册
    • 按指示处理蛰伤
  • 处理机从一个进程(做蛋糕)切换到
    • 另一高优先级的进程(实施医疗救治)
    • 每个进程有各自的程序(食谱和急救手册)
  • 处理完后,科学家又回来做蛋糕,从离开时的那步继续

一个进程是某种类型的一个活动,有程序、输入、输出及状态

  • 单个处理器可被若干进程共享
    • 它用调度算法决定何时停止一个进程
    • 井转而为另一进程服务

若一个程序运行两遍,则算两个进程

  • 人们经常两次启动同一软件
    • 像“两个进程恰好运行同一个程序”的事实无关紧要
    • 它们是不同进程
  • OS能使它们共享代码
    • 因此只有一个副本放在内存中
    • 但那只是个技术性细节
    • 不改变有两个进程正在运行的概念

2.1.2 进程的创建

  • OS需有方式来创进程
  • 只为运行一个程序的系统(微波炉中的控制器),
    • 可能在系统启动时
    • 以后所需的所有进程都已存在
    • 但通用系统中,需有方法在运行时按需创建或撤销jc
    • 4种事件会导致进程的创建
      • 系统初始化
      • 程序执行了创建进程的系统调用
      • 用户请求创
      • 批处理作业的初始化