1. 什么是进程?

  • 进程(Process)是一个具有独立功能的程序关于某个数据集合的一次运行活动,是系统进行资源分配和调度的一个独立单位或者说是基本单位.

1.1 进程的结构

  • 控制块(PCB: Process Control Block, 进程唯一标识)
  • 数据段
  • 程序段: 存放在文本区域,可以被多个进程共享。例如微信多开,程序段一致,数据段不一致。

1.2 进程的特征

  • 动态性:由创建而生,由撤销而亡。
  • 并发性:多个进程同时运行。
  • 独立性:独立资源分配。
  • 异步性:相互独立,互不干扰。

1.3 进程与线程

1.3.1 什么是线程?
  • Thread,进程的轻量型实体,是一系列活动按照设定好的顺序依次执行的过程,是一系列指令的集合。
  • 是一条执行路径,不能单独存在,必须包含在进程中。
  • 线程是OS中运算调度的最小单位。
1.3.2 线程的属性
  • 轻型实体
  • 独立调度和分配的基本单位
  • 可并发执行
  • 共享进程资源
1.3.3 进程线程的区别
  • 调度
  • 拥有资源
  • 系统开销
  • 地址空间与其他资源
  • 通信

线程相对于进程,大大降低了创建,撤销和切换可执行实体的成本和难度

2. 进程是怎么运行的?

2.1 进程的状态

  • 就绪状态
  • 执行状态
  • 阻塞状态
  • 创建状态
  • 终止状态

2.2 进程的控制

2.3 进程的调度

  • 剥夺式/抢占式调度: 立即暂停当前进程, 分配处理机给另一个进程。 原则:优先权/短进程优先/时间片原则。
  • 非剥夺/非抢占式调度:若有进程请求进行,等待当前进程完成或者阻塞。适用于批处理系统。

2.4 调度的时机

  • 进程处理完成
  • 时间片耗尽
  • 进程进行I/O
  • 执行原语操作
  • 高优先级进程申请运行

2.5 调度过程

  • 保存镜像:记录进程现场信息
  • 调度算法:确定分配处理机的原则
  • 进程切换:分配处理机给其他进程
  • 处理机回收:从进程收回处理机

2.6 调度算法指标

  • CPU利用率
  • 系统吞吐量
  • 周转时间: 作业完成时间-提交时间

带权周转时间: 周转时间/实际运行时间

  • 等待时间
  • 响应时间

2.7 常见调度算法

  • 先来先服务FCFS, First Come First Served
  • 短作业优先SJF, Shortest Job First

所需服务时间最短(估算)的作业/进程优先服务,追求最少的的平均(带权)周转时间

  • 高响应比优先调度HRRN, Highest Response Ration Next

响应比:(等待时间 + 服务时间) / 服务时间
只有当前进程放弃执行权,重新计算所有进程响应比

  • 优先级调度 PSA, Priority-Scheduling Algorithm

镜头/动态优先级
系统 > 用户
交互型 > 非交互型
I/O型 > 计算型

  • 时间片轮转调度RR, Round-Robin
  • 多级反馈队列调度MFQ, Multileveled Feedback Queue

3. 进程怎么协作

3.1 进程通信

  • 共享存储(Shared-Memory)

共享数据结构
共享存储区

  • 消息传递(Message-Passing)

直接通信:点到点通信,发送和接受时指明双方进程ID,每个进程维护一个消息缓冲队列
间接通信:以信箱为媒介,作为中间实体,发送进程将消息发送到信箱,收进程从信箱读取,可以广播,容易建立双向通信链。

  • 管道通信(Pip)

用于连接读写进程的共享文件,本质是内存中固定大小的缓冲区
半双工通信:单向通信,双工通信需要两个管道。

3.2 消息同步

3.2.1进程同步的基本概念

协调进程间的相互制约关系,使他们按照预期的方式执行的过程
前提

  • 进程是并发进行的,进程间存在相互制约关系
  • 并发的进程对系统共享资源进行竞争
  • 进程通信过程中相互发送的信号称为为消息或事件

两种相互制约形式

  • 互斥
  • 同步

进程同步访问原则

  • 空闲进入
  • 忙则等待
  • 有限等待
  • 让权等待:等待时应让出CPU执行权,防止忙等待

4. 如何处理死锁?

4.1 什么是死锁?

多个进程由于竞争资源而造成的阻塞现象,若无外力作用,这些进程将无法继续推进

4.2 死锁产生的原因

  • 系统资源竞争
  • 进程推进顺序非法
4.3 死锁产生的必要条件
  • 互斥条件,共享资源的排他访问性
  • 不剥夺条件,访问时该共享资源不会被剥夺
  • 请求并保持条件,保持当前资源时请求另一个资源
  • 循环等待条件,存在共享资源的循环等待链。
posted on 2022-12-07 22:31  雨竹枫  阅读(74)  评论(0编辑  收藏  举报