进程管理-操作系统(一)

本文详细介绍了操作系统中进程与线程的概念、状态转换、控制与通信,强调了线程在并发执行上的优势。处理器调度部分讲解了不同调度算法,如FCFS、SJF、RR和多级反馈队列,并讨论了调度的评价标准。同时,提到了并发与同步的问题,以及死锁的特征、预防和处理方法。
摘要由CSDN通过智能技术生成

操作系统
处理器、存储器、文件、设备等系统资源的管理者


一、进程与线程

OS发展历程:

  • 1.手工操作:一次装入并运行一个“作业”
  • 2.简单批处理:一次装多个”程序“,串行执行
  • 3.多道程序批处理:一次装多个程序,并发执行,仅当等待I/O时切换进程
  • 4.分时处理:一次装多个程序,并发执行,程序切换条件:执行时间长度or IO等待

进程


1. 五个基本特征
  • 动态性 : 因创建而产生,由调度而执行,因得不到资源而暂停执行, 最后因完成或撤销而消亡(进程生命周期)
  • 并发性 : 引入进程的目的就是为了使多个程序并发执行,提高资源利用率(主要CPU)
  • 独立性 : 进程是一个能独立运行的基本单位,也是系统进行资源分配和调度的基本单位
  • 异步性 : 进程以各自独立的、不可预知的速度向前推进
  • 结构性 : 进程 = 程序 + 数据 + 进程控制块(PCB)

进程的组成

  • 程序与数据:描述进程本身所应完成的功能
  • 进程控制块PCB:进程的动态特征,该进程与其他进程和系统资源的关系

描述进程与其他进程、系统资源的关系以及进程在各个不同时期所处的状态的数据结构
内容包括:

  • 进程描述信息
  • 进程控制和管理信息
  • 资源分配清单
  • 处理器相关信息
2. 三种基本状态
  • 就绪状态 : 进程分配了必要的资源,等待获得CPU执行的状态(进程获得了除了CPU外所需的一切资源)
  • 运行状态: 已分配到必要资源和cpu,正在CPU上执行时的状态
  • 阻塞状态 : 程序正在等待某一事件而暂停运行,放弃CPU而处于暂停状态。
    CPU空闲,但是并未等到所需资源时,该进程也不能运行
  • 新建,终止,挂起
  • 新建(new) – 建立PCB,但进程相关的其他内容可能未调入主存
  • 终止(terminated) – 进程已经终止,但资源等待父进程或系统回收
3. 进程的控制
  • 1.fork 创建进程 父进程通过调用fork函数创建一个新的运行状态的子进程

允许一个进程创建另一个进程。创建者为父进程,被创建者为子进程。子进程可以继承父进程所拥有的资源,当子进程被撤销时,应将其从父进程那里获得的资源归还给父进程。

  1. 并发执行:不能预测父子进程的执行顺序
  2. 调用一次,返回两次值
    • 调用者(父进程): 返回子进程的PID(出错的话返回-1)
    • 新建的子进程 : 返回0
  • 2.exit 终止进程
    • 正常结束返回0,错误时返回非0值
    • 只会被调用一次,并且不会再次返回

引起终止的事件有:

  • 正常结束
  • 异常结束
  • 外界干预 : OS 、父进程终止 、父进程请求
  • 3.阻塞与唤醒
    • 正在执行的进程,由于期待的事情未发生,会使自己由运行态变为阻塞态。(进程自身的一种主动行为)
    • 当阻塞等待的条件被满足时,进程会被唤醒从阻塞态进入就绪态。(一般是由另一个和被唤醒进程相关的合作进程实现的)

引起进程阻塞的事件

  • ✓ 请求系统服务
  • ✓ 等待I/O操作
  • ✓ 等待数据到达
  • ✓ 无新工作可做:服务进程
  • 4.切换
    进程切换的过程:
    • 保存处理机上下文,包括程序计数器和其他寄存器
    • 更新PCB信息
    • 把进程的PCB移入相应的队列,如就绪、在某事件阻塞等队列
    • 选择另一个进程执行,并更新其PCB
    • 更新内存管理的数据结构
    • 恢复处理机上下文

处理机从一个进程的运行转到另一个进程上运行,进程的运行环境发生了实质性的变化

  • 5. 回收子进程

    • 回收原因:进程中止后仍消耗系统资源
    • 回收过程:
      1. 收到子进程退出状态后,父进程执行回收
      2. 内核删除僵尸进程
  • 孤儿进程:父进程退出而子进程还在运行
  • 僵尸进程:子进程退出而父进程没有调用waitwaitpid获取子进程状态信息,则子进程的进程描述符仍保留
4. 进程图
  1. 每个节点表示一条语句的执行
  2. a——>b表示a在b之前发生
  3. fork后先执行子还是主?(随机)
    在这里插入图片描述
5. 进程间通信

为保证安全,各进程拥有的内存地址空间相互独立,不能直接访问其他进程的地址空间。

  • 1.共享内存系统
    共享存储:两个进程对共享空间的访问必须互斥,操作系统提供共享空间与同步互斥工具
基于数据结构基于存储区
实现规定共享空间存放的数据结构在内存中划出一块共享区,数据形式、存放位置都由进程控制
特点低级通信(速度慢、限制多)高级通信
  • 2.管道通信
    管道 连接一个读进程,一个写进程

    • int pipe(int fd[2]):fd[0]为读出,1为写入(没写满不能读,写满后不能再写,读完了才能继续写)
    • 要实现双方通信需定义两个管道,管道只能采用半双工通信,某一时间段内只能单向传输
  • 3.消息传递系统
    进程间的数据交换是以格式化的消息(message,在计算机网络中又称报文)为单位。
    消息头包括:发送进程ID,接收进程ID,消息类型,消息长度等格式化信息

消息缓冲队列机制(直接)信箱通信方式(间接)
描述消息直接挂到接收进程的消息缓冲队列中消息先发到中间实体中,如计网中的电子邮件系统

线程

进程内一个相对独立的可调度执行单元

线程是处理机调度的单位
进程是资源分配的单位


1. 并发性 线程更好的支持并发
  • 1.进程间并发,需要切换进程的运行环境,系统开销大
  • 2.线程间并发,若是同一进程内,不用切换进程环境,开销小
2. 线程属性
  • 处理机调度的单位
  • 多CPU计算机中,各线程占用不用CPU
  • 各线程都有其ID,线程控制块 TCB
  • 线程也有就绪、运行、阻塞三种基本状态
  • 几乎不拥有系统资源
  • 同一进程的不同线程间共享进程资源
  • 进程中线程切换,不会引起进程切换
  • 不同进程中的线程切换,会引起进程切换
  • 切换同进程中的线程,系统开销很小
  • 切换进程,系统开销很大
3. 线程的实现方式
用户级线程内核级线程

多线程模型

并发线程 : 在时间线上控制流有重叠的线程是并行的,否则为顺序执行
单核处理器通过时间片模拟并行
多核处理器能够实现真正的并行


二、 处理器调度

操作系统按照一定的策略从就绪队列当中选择一个进程,将CPU的使用权交给该进程


1. 相关概念

非抢占式调度抢占式调度
解释(任务完成/阻塞)主动让出CPU, 调度程序将CPU分配给某就绪进程的调度方式操作系统将正在运行的进程强行暂停, 由调度程序将CPU分配给其他就绪进程的调度方式
进程任务完成自动终止推出
因等待某些事件(资源)而让出CPU
规定的时间片到了
出现了优先级更高的进程

评价标准

  • 吞吐量: 单位时间完成的任务数量

  • 周转时间: 从任务提交到任务结束的时间,即为任务完成时刻减去任务到达就绪队列的时刻。
    T 周转时间 = T 完成时刻 – T 到达时刻 T_{周转时间} = T_{完成时刻}– T_{到达时刻} T周转时间=T完成时刻T到达时刻

  • 等待时间:就绪队列中等待的时间总和

  • 响应时间:从用户输入到产生反应的时间,即从任务到达就绪队列到首次运行的时间:
    T 响应时间 = T 首次运行时刻 – T 到达时刻 T_{响应时间} = T_{首次运行时刻}– T_{到达时刻} T响应时间=T首次运行时刻T到达时刻


2. 调度算法

  • 1.先到先服务FCFS

调度的顺序是任务到达就绪队列的顺序(就绪了就运行)

  • 2.最短作业优先调度SJF

最短的作业(CPU区间长度最小)最先调度

  • 3.最短剩余作业优先调度SRJF

SJF的可抢占版本。
抢占显然具有优点,但CPU区间必须是已知! 需要预测下一CPU区间的大小

  • 4.轮询法调度RR
    时间片来轮转调度
  • 时间片太大则响应时间太长
  • 时间片太小则吞吐量变小,周转时间变长
  • 5.多级反馈队列MLFQ

之前的FCFS 、SJF、RR算法任务的缺陷:都在单个队列中,可能要O(n)搜索
MLFQ按任务优先级分成多个队列,每次从level高的队列选择任务

  • 多级队列的缺陷:若任务优先级无法改变,可能存在饥饿进程

解决:根据任务的CPU周期将任务放在不同队列中,运行任务在队列间移动

  • 使用太多CPU时间的任务放在低优先级队列

  • 优先级队列中过久的任务移到高优先级(防止“老化”)

  • 6.彩票算法


三、 并发与同步


1. 信号

内核发出的一个消息,用来通知进程:系统中发生了某种类型的事件。

  • 1.每种信号用一个整数ID标识
  • 2.内核将ID发往进程或另一个进程发起
  • 3.使用信号的目的
    • 通知进程某种特殊的事件发生了
    • 迫使进程执行信号处理程序

2. 同步

3. 并发


四、 死锁

多个进程(线程)因循环等待资源而造成无法执行的现象

  • 造成进程(线程)无法执行
  • 造成系统资源浪费

1. 特征分析——四个必要条件

  • 1.互斥使用 多个进程因等待资源才造成死锁
  • 2.不可抢占
  • 3.请求和保持
  • 4.循环等待

2. 处理方法

  • 1.死锁预防

    破除死锁的四个必要条件, 会引入不合理因素

    • 破坏互斥使用 : 资源的固有特性,通常无法破除,如打印机
    • 破坏不可抢占
    • 破除请求和保持 : 在进程执行前,一次性申请所有需要的资源
    • 破除循环等待
  • 2.死锁避免 :防止系统进入不安全状态

    检测每个资源请求,如果会造成死锁就拒绝

    银行家算法 : 判定安全状态。系统的所有进程中存在一个可完成的执行序列(安全序列

可用的资源可以满足某个进程的资源请求,则分配,然后寻找安全序列,找到,分配成功,找不到,已分配资源收回

例:有A,B,C三类资源,当前可利用资源Available(3, 3, 2)表示当前可用的各类资源数量。下表为各进程已分配的各类资源量与最大需求量

进程Max 资源最大需求Allocation 当前已分配资源数
P17, 5, 30, 1, 0
P23, 2, 22, 0, 0
P39, 0, 23, 0, 2
P42, 2, 22, 1, 1

用max-allocation得到need资源743,122,600,011
存在一个安全序列:P2->P4->P3->P1

  • 3.死锁检测+恢复
    由于银行家算法执行效率低 O ( m ∗ n 2 ) O(m*n^2) O(mn2),不好预判是否会发生死锁,于是只要资源够就分配,遇到死锁再撤销。

对策:只要可用资源足够就分配,允许运行时发生死锁。定时检测/当资源利用率较低时检测,检测到死锁再处理(撤销/挂起进程,回收资源)

  • 4.死锁忽略

鸵鸟算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值