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中可看到
- 足够长时间后
- 所有进程都运行了
- 但瞬间仅有一个真正运行
本章假设只有一CPU
- 但逐渐假设就不真
- 新芯片是多核
- 8章介绍多核芯片及多处理器,但现在只考虑一个CPU会更简单
- 当我们说一个CPU只能
- 真正一次运行一个进程时
- 即使有俩核(或CPU),每个核也只能一次运行一个
CPU在进程间快速切,so进程执行其运算的速度是不确定的
- 且当同一进程再次运行,运算速度不可再现
- so在对进程编程时不能对时序做任何想当然的假设
- 如
- 考虑一个I/O进程
- 用流式磁带机恢复备份的文件
- 10000次空循环等磁带机达到正常速度
- 然后发命令读第一个记录
- 若CPU在循环时切到其他进程
- 则 磁带机进程 在第一条记录通过磁头之后还未 被再次运行
- 当一个进程有此类严格的实时要求时
- 也就是一些特定事件一定要在所指定的若干毫秒内发生
- 则必须采取措施保证它们一定在这段时间发生
- 然而,通常大多数进程并
- 不受CPU多道程序设计或
- 其他进程相对速度的影响
- 考虑一个I/O进程
进程和程序间的区别重要
- 科学家为女儿烘蛋糕
- 有食谱
- 原料:面粉、鸡蛋、糖、香草汁
- 食谱是程序(用适当形式描述的算法)
- 科学家是处理器(CPU)
- 各种原料就是输入数据
- 进程就是厨师阅读食谱、取来各种原料以及烘制蛋糕等一系列动作的总和
儿子说头被蜜蜂蛰了
- 科学家就记录照着食谱做到哪了(保存进程当前状态)
- 拿出急救手册
- 按指示处理蛰伤
- 处理机从一个进程(做蛋糕)切换到
- 另一高优先级的进程(实施医疗救治)
- 每个进程有各自的程序(食谱和急救手册)
- 处理完后,科学家又回来做蛋糕,从离开时的那步继续
一个进程是某种类型的一个活动,有程序、输入、输出及状态
- 单个处理器可被若干进程共享
- 它用调度算法决定何时停止一个进程
- 井转而为另一进程服务
若一个程序运行两遍,则算两个进程
- 人们经常两次启动同一软件
- 像“两个进程恰好运行同一个程序”的事实无关紧要
- 它们是不同进程
- OS能使它们共享代码
- 因此只有一个副本放在内存中
- 但那只是个技术性细节
- 不改变有两个进程正在运行的概念
2.1.2 进程的创建
- OS需有方式来创进程
- 只为运行一个程序的系统(微波炉中的控制器),
- 可能在系统启动时
- 以后所需的所有进程都已存在
- 但通用系统中,需有方法在运行时按需创建或撤销jc
- 4种事件会导致进程的创建
- 系统初始化
- 程序执行了创建进程的系统调用
- 用户请求创
- 批处理作业的初始化