精灵王


  • 首页

  • 文章归档

  • 所有分类

  • 关于我

  • 搜索
设计模式-行为型 设计模式-创建型 设计模式-结构型 设计 系统设计 设计模式之美 分布式 Redis 并发编程 个人成长 周志明的软件架构课 架构 单元测试 LeetCode 工具 位运算 读书笔记 操作系统 MySQL 异步编程 技术方案设计 集合 设计模式 三亚 游玩 转载 Linux 观察者模式 事件 Spring SpringCloud 实战 实战,SpringCloud 源码分析 线程池 同步 锁 线程 线程模型 动态代理 字节码 类加载 垃圾收集器 垃圾回收算法 对象创建 虚拟机内存 内存结构 Java

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

发表于 2021-04-20 | 分类于 操作系统 | 0

进程的定义

  • 程序在处理器上的执行
  • 进程是一个可调度的实体
  • 进程是逻辑上的一段程序,它在每一瞬间都含有一个程序控制点,指出现在正在执行的指令
  • 顺序进程是一个程序及其数据在处理器上顺序地执行时所发生的活动

进程与程序之间的区别

进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。

  • 进程是程序的执行,属于动态概念,而程序是一组指令的有序集合,是静态概念
  • 进程的存在是暂时的,而程序的存在是永久的
  • 进程的组成包括程序和数据,还由“进程控制块(PCB)”组成
  • 一个程序可能对应多个进程
  • 一个进程可以包含多个程序

进程的基本状态

  • 运行状态(Running):正在处理器上运行的状态

  • 就绪状态(Ready):一个进程获得了除处理器外的一切所需资源,一旦得到处理器即可运行的状态

  • 等待/阻塞状态(Blocked):一个进程正在等待某一事件发生而暂时停止运行的状态14

    1

    进程状态的变化

    • 处于运行状态的进程在其运行过程中需等待某一事件发生后才能继续运行,该进程变为等待/阻塞状态;
    • 处于运行状态的进程在其运行过程中,因分给它的处理器时间片已用完而不得不让出处理器,该进程变为就绪状态;
    • 处于就绪状态的进程被进程调度程序选中后,就分配到处理器来运行,变为运行状态;
    • 处于阻塞状态的进程,若其等待的事件已经发生,该进程变为就绪状态。

    增加两个新的状态

    1. 挂起就绪
    2. 挂起等待

    为何引入这两种状态

    • 系统故障或功能受到破坏
    • 用户怀疑自己执行的作业的中间结果时,要检查和改正
    • 调整系统负荷

    挂起命令可由进程自己或其他进程发出,而解挂命令只能由其他进程发出

    进程控制块(PCB)

    进程标识信息

    • 本进程的标识Id
    • 父进程的标识Id
    • 用户标识

    处理器状态信息

    • 用户使用的寄存器
    • 控制和状态寄存器
    • 堆栈指针

    进程控制信息

    • 调度和状态信息
    • 进程在有关队列中的链接指针
    • 进程间的通信信息
    • 主存使用信息
    • 进程使用的其他资源信息
    • 进程得到有关服务的优先级

    PCB结构

    2

    进程管理

    各进程的PCB的组织方法

    • 把所有不同状态的进程的PCB组织在一个表格中
    • 分别把有着相同状态的进程的PCB组织在同一个表格中
    • 分别把具有相同状态的所有进程的PCB按优先数排成一个或多个队列

    进程控制原语

    • 建立一个进程原语

      • 所有进程只能由父进程建立,不是自生自灭的

      • 供进程调用,以建立子进程使用的

      • 主要功能是创建一个指定标识符的进程

      • 主要任务是形成该进程的进程控制块PCB

      • 算法:create(name,priority,start_addr)

        • name为被建立进程的标识符
        • priority为进程的优先级
        • start_addr为某程序的开始地址
      • 输出:

        输出:新创建进程的内部标识符pid
        {
        	在总链队列上查找有无同名的进程;
        	if(有同名进程)
        		return(错误码); //带错误码返回
        	从PCB资源池申请一个空闲的PCB结构;
        	if(无空PCB结构)
        		return(错误码); //带错误码返回
        	用入口参数设置PCB内容;
        	置进程为“就绪”状态;
        	将新进程的PCB入就绪队列;
        	将新进程的PCB入总链队列;
        	return(新进程的pid);
        }
        
    • 撤消一个进程原语

      • 当一个进程完成其任务后,应将其撤消,以便及时释放出它所占用的资源

      • 撤消原语采取的策略:
        只撤消一个具有指定标识符的进程
        撤消它的一个子进程及该子进程的所有子孙

      • 命令形式为kill或exit

      • 算法kill

        输入:无
        输出:无
        {
        	由运行指针得当前进程的pid;
        	释放本进程所占用的资源给父进程;
        	该进程从总链队列中摘除;
        	释放此PCB结构;
        	转进程调度程序;
        }
        
    • 挂起一个进程原语

    • 解除挂起进程原语

    • 改变优先数原语

    • 阻塞一个进程原语

    • 唤醒一个进程原语

    • 调度进程运行原语

    进程调度

    调度算法

    • 时间片轮转调度
    • 优先级调度
    • 最短作业优先
    • 多级队列
    • 保证调度算法
    • 策略与机制
    • 两级调度法

    调度算法应考虑的问题

    • 公平——确保每个进程获得合理的CPU份额
    • 效率——使CPU百分之百地忙碌
    • 响应时间——使交互用户的响应时间尽可能短
    • 周转时间——使批处理用户等待输出的时间尽可能短
    • 吞吐量——使每小时处理的作业数量多

    时间片轮转调度

    • 每个进程被分配一个时间段,称作它的时间片,即该进程允许运行的时间;
    • 如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程;
    • 如果进程在时间片结束前阻塞或结束,则CPU当即进行切换。

    时间片设得太短会导致过多的进程切换,降低了CPU效率;

    而设得太长又可能引起对短的交互请求的响应时间变长;

    优先级调度

    • 基本思想:每个进程被赋予一个优先级,优先级最高的就绪进程被率先执行;

    • 优先级可以为静态或动态;

    • 将一组进程按优先级分成若干类,在各类之间采用优先级调度,而各类进程内部采用时间片轮转调度。

      4

最短作业优先(SJF)

一个最短作业优先调度的例子
(a)平均作业时间为14分钟((8+12+16+20)/ 4)
(b)平均作业时间为11分钟((4+8+12+20)/ 4)

3

精 灵 王 wechat
👆🏼欢迎扫码关注微信公众号👆🏼
  • 本文作者: 精 灵 王
  • 本文链接: https://jinglingwang.cn/archives/system03
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!
# 设计模式-行为型 # 设计模式-创建型 # 设计模式-结构型 # 设计 # 系统设计 # 设计模式之美 # 分布式 # Redis # 并发编程 # 个人成长 # 周志明的软件架构课 # 架构 # 单元测试 # LeetCode # 工具 # 位运算 # 读书笔记 # 操作系统 # MySQL # 异步编程 # 技术方案设计 # 集合 # 设计模式 # 三亚 # 游玩 # 转载 # Linux # 观察者模式 # 事件 # Spring # SpringCloud # 实战 # 实战,SpringCloud # 源码分析 # 线程池 # 同步 # 锁 # 线程 # 线程模型 # 动态代理 # 字节码 # 类加载 # 垃圾收集器 # 垃圾回收算法 # 对象创建 # 虚拟机内存 # 内存结构 # Java
(二)操作系统-运行环境
(四)操作系统-多线程
  • 文章目录
  • 站点概览
精 灵 王

精 灵 王

青春岁月,以此为伴

106 日志
14 分类
48 标签
RSS
Github E-mail
Creative Commons
Links
  • 添加友链说明
© 2023 精 灵 王
渝ICP备2020013371号
0%