一.什么是进程

进程概念:

进程(Process),是一个具有必定独立功用的程序关于某个数据调集的一次运转活动,是体系进行 『资源分配和调度』 的一个独立单位。

进程的结构

  • 操控块(PCB):进程唯一标识
  • 数据段:存放原始数据与中心数据
  • 程序段:存放在文本区域,可被多个进程同享

进程的特征

  • 动态性:由创立而生,由吊销而亡
  • 并发性:多个进程一起运转
  • 独立性:独立资源分配
  • 异步性:彼此独立、互不干扰

进程与线程

什么是线程?

  • Thread,进程的轻型实体,也叫“轻量级进程”,是一系列活动按事前设定好的次序顺次履行的进程,是一系列指令的调集
  • 是一条履行途径,不能独自存在,有必要包括在进程中
  • 线程是OS中运算调度的最小单位

为什么引入线程?: 进步OS的并发性

线程的特色

  • 轻型实体
  • 独立调度和分派的根本单位
  • 可并发履行
  • 同享进程资源

线程的实现办法

  • 用户级线程
  • 内核级线程

现代操作系统:进程管理

总结:

现代操作系统:进程管理

二.进程是怎样运转的

进程的状态

  • 安排妥当(Ready)
  • 履行(Running)
  • 堵塞(Blocked)
  • 创立(New)
  • 停止(Terminated)

现代操作系统:进程管理

进程操控

即OS对进程实现有效的管理,包括创立新进程、吊销已有进程、挂起、堵塞和唤醒、进程切换等多种操作。OS经过 原语(Primitive) 操作实现进程操控。

那么原语是什么?(前文复习)

由若干条指令组成,完结特定的功用,是一种原子操作(Action Operation)

特色

  • 原子操作,要么全做,要么全不做,履行进程不会被中止
  • 在管态/体系态/内核态下履行,常驻内存
  • 是内核三大支撑功用(中止处理/时钟管理/原语操作)之一

进程操控中的原语操作:

根本操作原语

  • 创立原语:create
  • 堵塞原语:block
  • 唤醒原语:wakeup
  • 吊销原语:destroy

操作如图:

现代操作系统:进程管理

挂起与激活原语

为了体系和用户调查和分析进程

  • 挂起原语: suspend
    • 静止安排妥当:放外存,不调度
    • 静止堵塞:等候事情
  • 激活原语:active
    • 活动安排妥当:等候调度
    • 活动堵塞:等候唤醒

现代操作系统:进程管理

处理机调度

根据必定的算法和准则将处理机资源进行从头分配的进程。

条件:作业/进程数远远大于处理机数

目的:进步资源使用率,削减处理机闲暇时刻

调度程序:一方面要满足特定体系用户的需求(快速呼应),另一方面要考虑体系全体功率(体系均匀周转时刻)和调度算法自身的开支

调度的层次

高档调度/作业调度

  • 把后备作业调入内存
  • 只调入一次,调出一次

中级调度/内存调度

  • 将进程调至外存,条件适宜再调入内存
  • 在内、外存对换区进行进程对换

初级调度/进程调度

  • 从安排妥当行列选取进程分配给处理机
  • 最根本的调度,频率非常高(相当于一个时刻片完结)

调度办法

掠夺式/抢占式调度

  • 立即暂停当时进程
  • 分配处理机给另一个进程
  • 准则:优先权/短进程优先/时刻片准则

非掠夺/非抢占式调度

  • 若有进程恳求履行
  • 等候直到当时进程完结或堵塞
  • 缺陷:适用于批处理体系,不适用分时/实时体系

调度机遇

  • 进程运转结束
  • 进程时刻片用完
  • 进程要求I/O操作
  • 履行某种原语操作
  • 高优先级进程申请运转(掠夺式调度)

调度进程

  1. 保存镜像:记载进程现场信息
  2. 调度算法:确定分配处理机的准则
  3. 进程切换:分配处理机给其它进程
  4. 处理机回收:从进程收回处理机

调度算法

现代操作系统:进程管理

先来先服务(FCFS)

算法内容:调度作业/安排妥当行列中最先入队者,等候操作完结或堵塞

算法准则:按作业/进程抵达次序服务(履行)

调度办法:非抢占式调度

适用场景:作业/进程调度

优缺陷

有利于CPU繁忙型作业,充分使用CPU资源

不利于I/O繁忙型作业,操作耗时,其它饥饿

现代操作系统:进程管理

短作业优先(SJF)

算法内容:所需服务时刻最短的作业/进程优先服务(履行)

算法准则:追求最少的均匀(带权)周转时刻

调度办法:SJF/SPF非抢占式

适用场景:作业/进程调度

优缺陷

均匀等候/周转时刻最少(算法准则)

长作业周转时刻会添加或饥饿

估计时刻不准确,不能保证急迫任务及时处理

现代操作系统:进程管理

高呼应比优先调度(HRRN)

算法内容:结合FCFS和SJF,归纳考虑等候时刻和服务时刻核算呼应比,高的优先调度

算法准则:归纳考虑作业/进程的等候时刻和服务时刻

调度办法:非抢占式

适用场景:作业/进程调度

呼应比核算: 呼应比=(等候时刻+服务时刻)/服务时刻, ≥1 只要当时进程放弃履行权(完结/堵塞)时,从头核算全部进程呼应比 长作业等候越久呼应比越高,更简单取得处理机

现代操作系统:进程管理

优先级调度(PSA)

算法内容:又名优先权调度,按作业/进程的优先级(急迫程度)进行调度

算法准则:优先级最高(最急迫)的作业/进程先调度

调度办法:抢占/非抢占式(并不能取得及时履行)

适用场景:作业/进程调度

优先级设置准则

  • 静态/动态优先级
  • 体系>用户;交互型>非交互型;I/O型>核算型
  • 低优先级进程或许会发生“饥饿”

现代操作系统:进程管理

时刻片轮转调度(RR)

算法内容:按进程抵达安排妥当行列的次序,轮番分配一个时刻片去履行,时刻用完则掠夺

算法准则:公正、轮番为每个进程服务,进程在必定时刻内都能得到呼应

调度办法:抢占式,由时钟中止确定时刻到

适用场景:进程调度

优缺陷

公正,呼应快,适用于分时体系(人人都有饭吃)

时刻片决定因素:体系呼应时刻、安排妥当行列进程数量、体系处理才能

时刻片太大,相当于FCFS;太小,处理机切换频繁,开支增大

现代操作系统:进程管理

多级反应行列调节(MFQ)

算法内容

  • 设置多个按优先级排序的安排妥当行列
  • 优先级从高究竟,时刻片从小到大
  • 新进程选用行列降级法
    • 进入第一级行列,按FCFS分时刻片
    • 没有履行完,移到第二级,第三级。。。
  • 前面行列不为空,不履行后续行列进程

算法准则:集前几种算法优点,相当于PSA+RR

调度办法:抢占式

适用场景:进程调度

优点

  • 对各类型相对公正;快速呼应;
  • 终端型作业用户:短作业优先
  • 批处理作业用户:周转时刻短
  • 长批处理作业用户:在前几个行列部分履行

总结

现代操作系统:进程管理

现代操作系统:进程管理

进程之间是怎样协作的

进程通讯

概念:进程通讯即进程间的信息交流

进程是资源分配的根本单位,各进程内存空间彼此独立

一个进程不能随意拜访其它进程的地址空间

特色

  • 同享存储(Shared-Memory)
  • 消息传递(Message-Passing)
  • 管道通讯(Pipe)

同享存储

根据同享数据结构的通讯办法

  • 多个进程共用某个数据结构(OS供给并操控)
  • 由用户(程序员)担任同步处理
  • 初级通讯:能够传递少量数据,功率低

根据同享存储区的通讯办法

  • 多个进程共用内存中的一块存储区域
  • 由进程操控数据的形式和办法办法
  • 高档通讯:能够传递很多数据,功率高

消息传递

直接通讯:点到点发送

  • 发送和接纳时指明两边进程的ID
  • 每个进程保护一个消息缓冲行列

直接通讯:播送信箱

  • 以信箱为媒介,作为中心实体
  • 发进程将消息发送到信箱,收进程从信箱读取
  • 能够播送,简单建立双向通讯链

管道通讯

管道

  • 用于衔接读/写进程的同享文件,pipe文件
  • 本质是内存中固定大小的缓冲区

半双工通讯

  • 同一时段只能单向通讯,双工通讯需求两个管道
  • 以先进先出(FIFO)办法安排数据传输
  • 经过体系调用read()/write()函数进行读写操作

进程同步

和谐进程间的彼此约束联系,使它们按照预期的办法履行的进程

条件

  • 进程是并发履行的,进程间存在着彼此约束联系
  • 并发的进程对体系同享资源进行竞赛
  • 进程通讯,进程中彼此发送的信号称为消息或事情

两种彼此约束形式

  • 直接彼此约束联系(互斥):进程排他性地拜访同享资源
  • 直接彼此约束联系(同步):进程间的协作,比方管道通讯

互斥的拜访临界资源

拜访进程

  1. 进入区:测验进入临界区,成功则加锁(lock)
  2. 临界区:拜访同享资源
  3. 退出区:解锁(unlock),唤醒其它堵塞进程
  4. 剩下区:其它代码

拜访准则

  • 闲暇让进:临界区闲暇,允许一个进程进入
  • 忙则等候:临界区已有进程,其它进程等候(堵塞状态)
  • 有限等候:处于等候的进程,等候时刻有限
  • 让权等候:等候时应让出CPU履行权,避免“忙等候”

软件实现办法

  • 单标志法:违反“闲暇让进”
  • 双标志法先查看
  • 双标志法后查看
  • 皮特森算法(Peterson’s Algorithm)

单标志法:违反“闲暇让进”

现代操作系统:进程管理

双标志法先查看:违反“忙则等候”

现代操作系统:进程管理

双标志法后查看:违反“闲暇让进”,“有限等候”

现代操作系统:进程管理

皮特森算法:违反“让权等候”,“忙等”

现代操作系统:进程管理
硬件实现办法

  • 中止屏蔽办法:关中止/开中止
    • 制止全部中止,CPU履行完临界区之前不会切换
    • 关中止或许会被乱用
    • 关中止时刻长影响功率
    • 不适用于多处理机,无法避免其它处理机调度其它进程拜访临界区
    • 只适用于内核进程(该指令运转在内核态)

Test-And-Set(TS指令/TSL指令)

  • 读出标志并设置为true,回来旧值,原子操作
  • 也被称作TSL指令( Test-And-Set-Lock )
  • 违反“让权等候”,会发生忙等

现代操作系统:进程管理

Swap指令( EXCHANGE,XCHG指令)

  • 交流两个变量的值,原子操作
  • 违反“让权等候”

现代操作系统:进程管理

信号量(Semaphore)机制

PV操作:

  • P操作:wait原语,进程等候
  • V操作:signal原语,唤醒等候进程

整型信号量:违反“让权等候”,会发生忙等

记载型信号量:进程进入堵塞状态,不会忙等

管程(Monitor,监视器)

“管理进程”,即用于实现进程同步的工具。是由代表同享资源的数据结构和一组进程(进行PV操作的函数)组成的管理程序(封装)。

管程的组成

  • 管程称号
  • 部分于管程内部的同享数据结构
  • 对该数据结构操作的一组进程(函数)
  • 管程内同享数据的初始化句子

管程的根本特性

  • 是一个模块化的根本程序单位,能够独自编译
  • 是一种抽象数据类型,包括数据和操作
  • 信息掩蔽,同享数据只能被管程内的进程拜访

条件变量/条件对象

  • 进入管程的进程或许因为条件不满足而堵塞
  • 此时进程应开释管程以便其它进程调用管程
  • 进程被堵塞的条件(原因)有多个,移入不同的条件行列
  • 进程被移入条件行列后,应开释管程

总结

现代操作系统:进程管理

四.怎么处理死锁问题

死锁的概念

死锁界说:多个进程因为竞赛资源而形成的堵塞现象,若无外力作用,这些进程将无法继续推动。

相似概念:饥饿 等候时刻过长以至于给进程推动和呼应带来显着影响,“饿而不死” 死锁发生的原因

  • 体系资源的竞赛
  • 进程推动次序非法 死锁发生的必要条件 互斥条件:同享资源的排他性拜访 不掠夺条件:拜访时该同享资源不会被掠夺 恳求并保持条件:保持当时资源时恳求另一个资源 循环等候条件:存在同享资源的循环等候链

死锁的处理战略

死锁预防

损坏互斥条件

  • 将只能互斥拜访的资源改为一起同享拜访
  • 将独占锁改为同享锁
  • 缺陷:不是全部资源都能改成可同享的

损坏不掠夺/不行抢占条件

  • 恳求新资源无法满足时有必要开释已有资源
  • 由OS帮忙强制掠夺某进程持有的资源

缺陷

  • 实现复杂,代价高
  • 此操作过多导致原进程任务无法推动

损坏恳求并保持条件

进程开始运转时一次性申请所需资源

缺陷

  • 资源糟蹋
  • 进程饥饿

阶段性恳求和开释资源

损坏循环等候条件

对全部资源现行排序,按序号恳求资源

  • 恳求时先低再高
  • 开释时先高再低

缺陷

  • 对资源的编号应相对稳定,约束了新设备添加
  • 进程运用资源的次序或许与体系编号次序不同
  • 约束了用户编程

死锁避免

安全性算法

体系安全状态

  • 安全状态必定不会出现死锁
  • 不安全状态或许出现死锁

银行家算法

  • 体系预判进程恳求是否导致不安全状态
  • 是则拒绝恳求,否则答应恳求

死锁的检测与解除

死锁检测

  • 需求一种数据结构,保存有关资源的恳求和分配信息
  • 供给一种算法,使用这些信息检测是否形成了死锁

死锁解除

  • 资源掠夺
  • 吊销进程
  • 进程回退

死锁的检测

资源分配图(G=(N, E)):

  • 两种资源
  • 两种节点

死锁定理(死锁状态的充分条件):

  • 当且仅当此状态下资源分配图是不行完全简化的
  • 简化进程类似于“拓扑排序”算法(注意数据结构考察)

死锁的解除

资源掠夺

  • 挂起死锁进程
  • 掠夺其资源
  • 将资源分配给其它(死锁)进程

吊销进程

进程回退

  • 回退到足以避免死锁的境地
  • 需求记载进程前史信息,设置还原点

总结

现代操作系统:进程管理