• 操作系统概念 进程调度


    1. 并发进程的切换

    在这里插入图片描述


    2. 中断技术

    在这里插入图片描述


    在这里插入图片描述
    图解:

    1) 中断主要分为两种类型:来自 CPU 外部的 Interrupt ,称为中断来自 CPU 内部的 Exception,称为异常

    2)当 发生中断 的时候,会 中止 CPU 上正在运行的程序,之后进入 kernel 模式

    3)随后在 kernel 模式下,执行该事件的处理程序

    4)执行完中断处理程序,重新回到 user 模式,重新执行用户程序。

    注意:中断的执行依靠的是:陷阱机制。


    3. 中断源

    在这里插入图片描述
    图解:

    1)外中断(Interrupt),是 来自处理器之外的硬件中断信号。由于是来自处理器外部的中断,所以 外部中断是不可预知的,属于随机中断,又称为异步中断。外中断的类型有:

    • 时钟中断
    • 键盘中断
    • 外围设备中断

    2)内中断(异常Exception),来自处理器内部的中断,是指令执行过程中发生的中断,属于同步中断。内中断的类型有:

    • 硬件异常:掉电、奇偶校验错误等
    • 程序异常;非法操作、地址越界、断点、除数为0
    • 系统调用

    4. 系统调用是一种内部中断,所以系统调用也是采用陷阱机制

    我们在前面可以看到,中断的实现,依靠的就是陷阱机制,从 user 模式进入 kernel 模式执行中断处理程序;之后再从 kernel 模式进入到 user 模式,继续应用程序的执行。

    而系统调用是属于内部异常,是指令执行过程中发生的中断,所以系统调用的实现,依靠的也是陷阱机制。


    5. 中断处理过程

    在这里插入图片描述
    在这里插入图片描述
    图解:

    当从 kernel 模式进入到 user 模式,会做 3 个事情:

    1)选择一个进程 恢复进程上下文和唤醒;

    2)恢复选中的进程的上下文信息;

    3)恢复该进程的运行状态;

    在这里插入图片描述


    6. 特权指令和非特权指令

    在这里插入图片描述
    图解:

    1)操作系统一般支持双模式(dual mode),即用一个硬件 bit 来表示:该 bit 为 0 ,表示 kernel mode,该 bti 为 1,表示当前是 user mode。

    2) 特权指令:仅在 kernel mode 运行的指令,称为特权指令。其中 process Switching(进程切换)属于特权指令,因此需要从 user mode 切换到 kernel mode。

    3)非特权指令:仅在 user mode 运行的指令,称为非特权指令。


    7. 模式切换

    陷阱机制中,处理器从 user mode 切换到 kernel mode,也能从 kernel mode 切换到 user mode,这个过程称为模式切换。

    注意:中断是用户态向内核态转换的唯一途径。

    OS提供Load PSW指令装载用户进程返回到用户状态。

    在这里插入图片描述


    8. 进程切换

    在这里插入图片描述
    图解:

    1)进程切换的时间有两点:

    主动切换:进程需要等待获得某些资源,还没获取到资源之前,进程将主动切换出来,让出 CPU,进入等待状态

    被迫切换:由于时间片到达,或者被高优先级的进程抢占,当前进程将被迫让出 CPU,进入就绪状态

    2)切换过程

    进程切换属于特权指令,所以进程切换的第一步,就是从 user mode 切换到 kernel mode.

    接下来所有的步骤,保存上下文,修改被中断进程的控制信息等,都是在 kernel mode 下进行。

    在这里插入图片描述


    9. 进程控制块(PCB)

    在这里插入图片描述

    图解:

    1)进程控制块(PCB)包含了该进程本身相关的许多控制信息:

    • process state:进程状态,运行态/就绪态/等待态…;
    • process number :进程ID,即 pid 号;
    • program counter:程序计数器,该值指示当前进程下一条需要运行的指令的地址。在该进程获得 CPU 开始运行的时候,CPU 会把 PCB program counter 拷贝到 CPU 中的 PC 寄存器,这样 CPU 就可以执行该进程下一条应该执行的指令;
    • registers:寄存器值,该进程被切换的时候,需要记录此刻记录在 CPU 寄存器中的值,这些 CPU 内部寄存器记录了当前进程运行过程中的状态和许多中间结果值;当下次该进程恢复运行时,就把 registers 中的值恢复到 CPU 的内部寄存器,确保该进程能继续正常执行;
    • memory limits:内存限制,即该进程在内存中的布局:起始地址,地址长度等;
    • list of open files:该进程所打开的所有文件描述符(即打开的文件);

    2) PCB,进程控制块,只包含进程的控制信息;PCB 不会包含任何可执行的指令和代码;

    3)text 段,data 段,heap 段,stack 段等,这些被称为“进程实体”;


    10. 进程上下文

    在这里插入图片描述

    注意:进程上下文,指的是两部分,分别是 进程控制块(PCB)和 进程实体。


    11. 进程在物理内存

    在这里插入图片描述


    12. 进程队列(PROCESS QUEUES)

    在这里插入图片描述

    图解:

    1) 就绪状态的进程,都放在就绪队列中;等待状态的进程,根据等待不同的 I/O 设备,可能会被分派在不同类型的等待队列中;在单处理器的系统中,由于一个时刻只能有 1 个进程在运行,所以不需要有运行队列存在运行态的进程;

    2)进程队列保存的是进程控制块 PCB,一方面是减小了内存空间的使用,另外通过 PCB 的 memory limits 等信息,就能根据 PCB 找到对应的进程实体和进程上下文;


    13 . 进程调度(PROCESS SCHEDULING)

    在这里插入图片描述

    图解:

    1)新创建的进程,已经具备了运行条件,就会从 new 状态进入 ready 就绪队列;

    2)ready 就绪队列的进程可以占用 CPU ,进入运行态;

    3)运行态的进程运行结束,就会终止(Terminated);

    4)运行态中的进程,可以主动或者被动的让出 CPU ,之后进入 ready 就绪队列或者 等待队列。


    注:源自B站up主:Y4NGY

  • 相关阅读:
    深入理解MySQL索引:从原理到最佳实践
    【CSS】React项目如何在CSS样式文件中使用变量
    小程序的自定义组件
    指针函数、函数指针、指针函数数组
    MySQL高级9-锁
    DocuWare文档管理系统保护客户数据,改进审计流程
    逆向工程:Python反编译工具的一点介绍(如何还原pyc文件)
    小黑宿舍楼边又有阳性了,纠结回不回家,不戴口罩又挨老黑说了的leetcode之旅:530. 二叉搜索树的最小绝对差
    开源消息引擎系统 Kafka 3新特性,一文带你了解
    Mysql优化器-mysql详解(六)
  • 原文地址:https://blog.csdn.net/weixin_42109053/article/details/127577783