zoukankan      html  css  js  c++  java
  • 操作系统02-进程管理

    操作系统

    第二章:进程管理

    进程与线程

    • 进程的基本概念

      • 功能: 为了描述并发执行程序的动态特性,引进的新的概念

      • 程序的顺序执行及其特征

        • 单批道处理系统的执行方式,按照前趋图的顺序执行
        • 顺序性、封闭性、可再现性
      • 程序的并发执行及其特征

        • 指若干个程序同时在系统中运行,在执行时间上是重叠的

        • 重叠是指运行程序的长度有重叠

        • 特征

          • 间断性

          • 失去封闭性:共享性

          • 不可再现性

      • 进程的特征与状态

        • 特征

          • 结构性:进程实体由程序段、数据段及进程控制块组成,又称为进程映像

          • 动态性

            • 数据
            • 代码
            • 控制信息
          • 并发性

            • 多个进程实体同存于内存中中
          • 独立性

            • 地址空间相互独立
          • 异步性

            • 互相制约
        • 进程实体

          • 程序段+数据段+PCB
          • 线程是操作系统进行运行调度的最小单位
          • 包含在进程之中,是进程中实际运行工作的单位
          • 一个进程可以并发多个线程,每个线程执行不同的任务

    • 状态

      - 基本状态
        
        - 就绪:进程已获得除处理机以外的所有资源,一旦分配了处理机就可以立即执行,此时进程所处的状态为就绪状态
        
        - 执行:进程在处理机上运行
        
        - 阻塞:等待资源
        
      - 图解
      - 挂起
        
      	- 优先级的引入
        
      		- 把进程从内存转到外存
        
      	- 优点
        
      		- 提高处理机的效率
      		- 为运行的进程提供足够的内存
      		- 用于调试
        
      	- 请求种类
        
      		- 终端用户的请求
      		- 父进程请求
      		- 负荷调剂的需要
      		- 操作系统的需要
        
      	- 种类
        
      		- 就绪挂起
      		- 阻塞挂起
      		- 运行到就绪挂起
        
      			- 抢占式
      - 激活
        
      	- 进程从外存转到内存
      	- 种类
        
      		- 就绪激活
      		- 阻塞激活
      - 收容
        
      	- 收容一个新进程
        
      		- 进入就绪状态/就绪挂起
      - 图解
      

      • 进程控制块

        • 用于描述和管理进程的数据结构,是进程实体的一部分,进程和PCB是一一对应的,可以参照UNIX中的进程控制块

        • 进程标识信息

            	- 进程标识符、进程名、用户标识符、父进程标识符和子进程标识符
          
        • 处理机状态信息

            	- 用来保存现场
          
            		- 通用寄存器、指令计数器、程序状态字(含执行结果状态、中断屏蔽码)、栈指针(每个进程都有与之相关的栈,保存过程和系统调用的地址和参数)
          
        • 进程调度和状态信息

            	- 进程状态、进程优先级、进程调度的其他信息、等待事件(进程处于等待状态的原因)
          
        • 进程控制信息

            	- 程序和数据地址、进程同步及通讯机制、资源清单、链接指针(处于同一状态的进程组成一个队列),链接指针指向队首
          
        • 组织方式

            	- 链接方式
          
            		- 将处于同一状态的所有进程控制块链接在一起,这样的数据结构称为进程队列
          
          		- 索引方式
          
            		- 系统根据进程状态建立几张索引表,登记具有相应状态的PCB地址
          
    • 线程

      • 引入目的

        • 减少程序并发执行所付出的时空开销,使操作系统具有更好的并发性
        • 提高资源的利用率 和系统吞吐量 增加并发程度
      • 线程的基本概念

        • 是进程内的一个执行单元

        • 资源分配的实体还是进程

        • 线程是调度和分派的基本单位

        • 将进程的两个属性分开

        • 属性

          • 轻型实体

          • 独立调度和分派的基本单位

          • 可并发执行

          • 共享进程资源

          • 状态

            • 执行
            • 阻塞
            • 就绪
        • 线程控制块

          • 寄存器
          • 堆栈
          • 线程运行状态
          • 优先级
          • 线程专有存储器
          • 信号屏蔽
      • 线程和进程关系

        • 一个线程必须有一个父进程
        • 一个进程可以有多个线程
      • 线程间的同步与通信

        • 互斥锁
        • 条件变量
        • 信号量机制
      • 线程的实现方式

        • 内核支持线程

        • 用户级线程

        • 两者结合的办法

        • 用户级线程和内核支持线程比较

          • 线程的调度和切换速度
          • 系统调用
          • 线程执行时间
          • 适应性
      • 线程的实现

        • 内核支持线程

        • 用户级线程

          • 运行在中间系统之上

            • 运行时系统
            • 内核控制线程
    • 可以和内核支持线程相互关联

    6WIbzs

    • 进程通信

      • 进程通信的类型

        • 共享存储器系统

          • 共享数据结构

          • 共享存储区

            • 建立
            • 附接
            • 断接
        • 管道通信系统

          • 互斥
          • 同步
          • 确定对方是否存在
        • 消息传递系统

          • 直接通信方式
          • 间接通信方式
        • 客户机-服务器系统

          • 套接字

            • 基于文件型
            • 基于网络型
          • 远程过程调用

          • 远程方法调用

      • 消息传递通信的实现方式

        • 直接消息传递系统

          • 发送原语

          • 接受原语

          • 过程

            • 在自己的工作区设置一个发送区
            • 适用发送原语发送给接收进程,将其挂在接收进程的消息队列上
            • 调用接收原语从自己的消息队列中摘下第一个消息,将内容复制到自己的消息接收区
          • 消息缓冲区

          • 增加的数据结构

          • 对称寻址方式

        • 信箱通信

          • 私用邮箱

            • 用户进程创建、其余进程只可发送
          • 公用邮箱

            • 操作系统创建
          • 共享邮箱

            • 用户创建,可共享
          • 非对称寻址方式

          • 结构

            • 信箱头
            • 信箱体
          • 信箱原语

            • 创建和撤销
            • 消息的发送和接收
        • 管道通信

          • 以管道方式
    • 进程控制

      • 前置概念

        • 原语

          • 原子操作,有若干条机器指令构成,用以完成特定的功能,是不可分割的
      • 进程的创建

        • 引起事件

          • 用户登录、
            作业调度、
            OS服务、
            应用需求
        • 创建原语

          • 创建一个空闲PCB结构
          • 为新进程分配资源
          • 初始化新的PCB结构
          • 将PCB结构插入相应的队列
        • 进程图

          • 描述进程家族关系的一棵有向树
      • 进程的终止

        • 引起事件

          • 中断-正常结束
          • 异常结束
          • 外界干预:父进程可以请求终止子进程
        • 终止原语

          • 根据进程标识符,找到相应的PCB,读取状态
          • 如果正处于进行状态,则停止进程的执行
          • 如果有子进程,终止子进程
          • 归还资源到父进程或者系统
          • 撤销PCB
      • 进程的阻塞与唤醒

        • 引起事件

          • 造成阻塞

            • 请求系统服务(如请求分配资源但没有资源分配)
            • 启动某种操作(进程必须在某种操作执行之后才能继续执行)
            • 新数据未到达
            • 无新工作可做
          • 在满足条件之后就会唤醒

        • 阻塞原语

          • 根据当前执行进程的标识符找到PCB
          • 停止执行进程,改状态为阻塞
          • 保存进程的现场到PCB结构
          • 将该进程PCB插入等待队列
          • 转进程调度程序
          • block 原语
        • 唤醒原语

          • 从等待队列中取出相应进程
          • 改程序状态为就绪,将进程插入就绪队列
          • 转进程调度或返回
          • wakeup原语
      • 进程的挂起与激活

        • 挂起引起事件

          • 用户进程请求将自己挂起
          • 父进程请求将自己的某个子进程挂起
        • 挂起原语

          • 根据被挂起进程的标识符,找到PCB

          • 取PCB的状态

            • 运行状态
            • 就绪状态
            • 等待状态
          • suspend 原语

        • 激活原语

          • 系统将外存上被挂起的进程换入内存
          • 将进程状态由挂起改为激活后的状态
          • 有需要转进程调度
          • active原语

    处理机调度

    • 处理机调度的层次

      • 高级调度

        • 决定后备队列中调入主存的作业
        • 多少作业:取决于多道程序度
        • 接纳哪些作业:取决于调度算法
      • 中级调度

        • 闪存中把暂时不运行的换出外存

        • 决定那些进程被允许参与竞争CPU

        • 处于挂起状态

        • 引入原因

          • 换出

            • 紧缩:是空闲区间和占用区间分开到两端
            • 内存空间紧张
            • 就绪队列进程太多
            • 等待I/O可能要一段时间
            • 便于紧缩
          • 换入

            • 内存中有足够的空间
            • 外存中进程的优先级高于内存中进程
      • 低级调度

        • 进程调度

          • 方式

            • 抢占式

              • 原则

                • 优先权
                • 短作业优先
                • 时间片
            • 非抢占式

              • 简单、系统开销小、无法处理紧急情况
        • 就绪队列中分配处理机

      • 作业状态

        • 提交状态

          • 用户作业由输入设备向系统外存输入时作业所处的状态
        • 后备状态

        • 执行状态

        • 完成状态

      • 只有低级调度是必须的

    • 调度队列模型和调度准则

      • 调度队列模型

        • 一级
        • 二级
        • 三级
      • 选择调度方式和调度算法的若干准则

        • 面向系统的准则

          • 系统吞吐量
          • CPU利用率
          • 各类资源的平衡利用
        • 面向用户的准则

          • 周转时间短

            • 等待时间和运行时间之和
            • 带权周转时间:和实际时间的比值
          • 相应时间快

          • 截止时间的保证

        • 算法的性能准则

          • 易于实现
          • 执行开销比
          • 稳定性
    • 调度算法

      • 先来先服务和短作业(进程)优先调度算法

        • 短作业优先是当前时刻的短时间
        • 多个作业同时到达时,短作业优先调度算法的平均周转时间最小
      • 最短剩余时间优先调度算法

        • 即当一个新进程进入就绪队列时,若其需要的运行时间比当前运行进程的剩余时间短,则它将抢占CPU

        • 缺点

          • 对长作业不利 并且长作业容易出现饥饿现象
          • 未考虑紧迫程度
          • 只是根据用户的估计运行时间 容易造假
      • 高优先权优先调度算法

        • 抢占式

        • 非抢占式

        • 优先权

          • 静态优先权 开销小但是不准确
          • 动态优先权
      • 最高相应比优先调度算法

        • 响应比 = (等待时间+要求服务时间 )/ 要求服务时间
      • 基于时间片的轮转调度算法

        • 最开始的在队首,执行完时间片到队尾

        • 时间片过大 太大退化为先来先服务,会让队尾的进程等待过久

        • 时间片过小 进程切换过于频繁,系统的开销过大

        • 多级反馈队列调度算法

          • 设置多个队列
          • 优先级越高,执行时间越短
          • 在第一个队列执行完以后再执行第二个队列
          • 执行过的进程放到最后一个队列的末尾
    • 实时调度

      • 实现实时调度的基本条件

        • 提供必要的信息
        • 系统处理能力强
        • 采用抢占式调度机制
        • 具有快速切换机制
      • 实时调度算法的分类

        • 非抢占式调度算法

          • 非抢占式轮状调度算法
          • 非抢占式优先调度算法
        • 抢占式调度算法

          • 基于时钟中断的抢占式优先权调度算法
          • 立即抢占的优先权调度算法
      • 常用的几种实时调度算法

        • 最早截止时间优先

        • 最低松弛度优先

          • 松弛度
          • 抢占式的

    进程同步

    • 进程同步的基本概念

      • 进程制约关系

        • 相互协作关系
        • 资源共享关系
      • 临界资源与互斥

        • 临界资源

          • 一段时间内仅允许一个进程使用的资源
        • 互斥

        • 临界区

          • 访问临界资源的那段代码称为临界区

            • entry section 进入区
            • critical section 临界区
            • exit section 退出区
        • 同类临界区

          • 所有与同一临界资源相关联的临界区
      • 互斥与同步

        • 互斥

          • 解决进程间竞争关系的手段
        • 同步

          • 解决进程间协作关系的手段
      • 同步原则

        • 空闲让进:资源无占用,允许使用
        • 忙则等待:资源有占用,请求进程等待
        • 有限等待:保证有限等待时间能够使用资源
        • 让权等待:等待时,进程需要让出CPU
      • 临界区互斥

        • 基本方法

          • 软件方法

            • 单标志法

              • 违背 空闲让进
            • 双标志先检查法

              • 违背 忙则等待
            • 双标志法后检查

              • 会导致 饥饿
            • 皮特森算法

              • 单标志法和双标志后检查法的结合
          • 硬件方法

            • 中断屏蔽法

              • 进区关中断
              • 出区开中断
            • 硬件指令法

              • 设置立原子操作指令

                • 测试与设置指令TS test and set
                • swap 指令
          • 信号量

            • 一种有效的进程同步机制

            • 整型信号量

              • Wait(S) P操作 信号量减一(仅仅对信号量大于0有效 小于0的时候不做操作)

              • signal(S) V操作 信号量加一

              • 缺点

                • 在信号量小于等于0的时候会不停的测试
                • 没有做到“让权等待的原则”
            • 记录型信号量

              • 增加记录资源数目的整型变量value值
              • 增加一个进程链表指针L 链接所有等待进程
              • signal和wait原语操作
              • 记录型数据结构包含value值和链表L
            • AND型信号量集

              • 全部分配或全不分配
              • 适合同时需要多种资源,且每种占用一个时的情况
            • 信号量集

              • 和AND型信号量集一样

              • 加判断条件后全分配或全不分配

              • 适合于同时需要多种资源,且每种占用的数目不同,且可分配的资源还存在临界值

              • 特殊应用

                • Swait(S,d,d)。此时在信号量集中只有一个信号量S,但允许它每次申请d个资源,当现有资源数少于d时,不予分配。
                • Swait(S,1,1)。此时的信号量集已蜕化为一般的记录型信号量(S>1时)或互斥信号量(S=1时)。
                • Swait(S,1,0)。这是一种很特殊且很有用的信号量操作。当S≥1时,允许多个进程进入某特定区;当S变为0后,将阻止任何进程进入特定区。换言之,它相当于一个可控开关。
    • 经典进程的同步问题

      • 生产者--消费者问题

        • 用记录型信号量解决

          • 用empty和full分别表示空缓冲区的数量和满缓冲区的数量

            • empty初值为n
            • full初值为0
          • 临界资源mutex 初值为1

          • 过程

            • 生产一个产品:

              • 看到先要求一个空缓冲区然后要求临界资源
              • 生产完成以后,释放临界资源,生成一个满缓冲区
            • 取出产品:

              • 需要一个满缓冲区和临界资源
              • 取出后,释放临界资源并生成一个空缓冲区
        • 用AND信号量解决

          • 可以将2步wait和signal合成一个,可以避免出现wait顺序颠倒的情况
      • 哲学家进餐问题

        • 算法描述

        • 存在问题

          • 当五个哲学家同时感觉饥饿,并同时拿起自己左边的筷子,则会出现死锁
        • 尝试解决

          • 至多允许四个哲学家同时进餐 还是有可能存在死锁的问题
          • 同时使用左右筷子 采用AND信号量解决问题
          • 奇数号哲学家先拿左边筷子再拿右边筷子,偶数号哲学家相反
      • 读者--写者问题

        • 共享整型变量 readcount 记录当前正在读数据的读者数量

          • 初值为0
        • wmutex 用于写者与写者、写者与读者之间的互斥

          • 初值为1
        • rmutex 用于读者互斥地访问共享变量readcount

          • 初值为1
        • 算法描述

          • 读者描述
          • 写者描述
        • 使用信号量集解决

          • 至多允许RN个读者同时读
          • 引入信号量L 初值为RN
          • 信号量mx 初值为1
    • 信号量的应用

      • 实现互斥

        • wait(mutex)
        • 临界区
        • signal(mutex)
      • 实现前趋关系

        • S1
        • signal(S)
        • wait(S)
        • S2
    • 管程机制

      • 管程

        • 管程名字
        • 局部于管程的共享数据结构(变量)
        • 对共享数据结构进行的一组操作(函数)
        • 对局部于管程的数据设置初始值的语句
      • 基本特性

        • 共享变量仅能由管程内定义函数访问
        • 一个进程只有通过调用管程内函数才能访问共享变量
        • 管程互斥进入
        • 由编译程序在编译时自动添加上
      • 入口等待队列

      • 紧急等待队列

        • x.wait
        • x.signal
      • 条件变量

        • 说明

          • 同步原语

            • x.wait
            • x.signal
          • condition x

        • 作用

      • 生产者、消费者

    进程死锁

    • 死锁

      • 多个进程因竞争系统资源而造成的一种僵局,如果没有外力作用,这些进程永远不能向前推进

        • 死锁: 缺资源不缺CPU
        • 饥 饿 : 缺资源 不缺CPU

    • 产生死锁的原因

      • 竞争资源

        • 可剥夺资源与不可剥夺
        • 永久性和临时性
        • 不可剥夺、永久性和临时性资源可造成死锁
      • 进程推进顺序不当

      • 产生死锁的必要条件

        • 互斥条件
        • 请求和保持条件
        • 不可剥夺条件
        • 环路等待条件
    • 处理死锁的基本方法

      • 预防死锁

        • 预防死锁的方法

          • 破坏 互斥条件

            • 是设备本身固有的属性
            • 不可修改
          • 破坏“不可剥夺”

            • 已有该资源的进程要求释放资源
            • 只可用于状态可以保存和恢复的资源
          • 破坏 请求和保持条件

            • 静态资源分配法
            • 一次分配所用的全部资源
            • 资源利用率低,进程延迟
          • 破坏“环路等待”

            • 有序资源分配

              • 进程申请一个资源的时候,必须释放其占有序号大于该资源的其他资源
            • 资源利用率提高(还是存在浪费)

            • 限制了用户编程

            • 限制了设备的增加

      • 避免死锁

        • 系统安全状态

          • 只要系统始终都处于安全状态便可避免死锁的发生
        • 利用银行家算法避免死锁

            1. 通过对资源分配进行分析
            1. 如果有任何一个进程的资源需求满足现有资源储备量,则可分配,并释放占用的资源 重复1
          • 如果所有进程可全部被释放,则处于安全状态
      • 检测死锁和解除

        • 死锁的检测

          • 资源分配图

            • 用圆圈代表进程
            • 方框表示一类资源
            • 方框中一个点代表一类资源的一个实例
            • 从进程到资源表示进程请求一个该类资源
            • 从资源指向进程表示有一个资源分配给该进程
          • 检测

            • 不可完全简化即死锁
            • 完全简化即形成孤立结点
            • 可以获取到想要的资源则移除请求边和分配边
        • 死锁的解除

          • 资源剥夺法
          • 撤销进程法

  • 相关阅读:
    css基础1
    js基础
    定位与浮动
    最新学习
    前端初学第一天
    js2
    js1
    html加css
    js三元表达式
    java script的学习
  • 原文地址:https://www.cnblogs.com/hiszm/p/13435826.html
Copyright © 2011-2022 走看看