您的位置:首页 > 汽车 > 新车 > 进程调度的基本过程

进程调度的基本过程

2024/12/21 20:17:50 来源:https://blog.csdn.net/qrwitu142857/article/details/139827980  浏览:    关键词:进程调度的基本过程

文章目录

  • CPU执行指令过程
  • 进程
    • PCB
    • “分时复用”
  • ☁️结语


CPU执行指令过程

一个CPU能执行那些指令,可以认为是cpu最初设计的时候就已经写死了。有一个“表格”描述了都有哪些指令。
在这里插入图片描述

以上的表格只是一个简化版本,真实的cpu指令表要复杂很多。此处假设每个指令只有8bit(实际上更长)。
RAM即内存,它的全称叫做随机访问存储器。

8 bit的指令可以分成两个部分,前4个bit 是 操作码,表示指令是干啥的,后4bit 是操作数。
在这里插入图片描述
CPU中存在了一个特殊的寄存器,“程序计数器”,它保存了接下来要从哪个内存位置来执行指令。随着指令的执行,这里的值也会随着更新,默认情况下就是+1自增过程(顺序执行),如果遇到“跳转类语句”(if、while、for、函数调用…)那么它就会设为其他的值。

执行指令的三个阶段:

  1. 取指令,cup从内存中读取到指令内容到cpu内部
  2. 解析指令,识别出这个指令是干啥的,以及对应的功能和操作数
  3. 执行指令

  1. 初始情况下,程序计数器的值是0

    1. 读取指令
      在这里插入图片描述
    2. 解析指令
      把读到的指令一分为二
      左边这里就是操作码
      在这里插入图片描述
      右边这里就是操作数
      在这里插入图片描述

    操作码表示它是干啥的指令;操作数表示这个指令是对谁操作的。
    我们可以去指令表中看这个操作码是啥意思。这个指令是LOAD A指令,并且后面的 1110 表示了一个内存地址。这个指令的工作就是把 1110 这个地址的数据,读取到寄存器 A 中。
    3. 执行指令
    把1110 (十进制的14) 地址的内存数据读取出来,放到寄存器A中。第一条指令执行完毕,系统会自动把程序计数器中的值++

  2. 执行为1的指令

    1. 读取指令
      在这里插入图片描述
      2. 解析指令
      把指令拆成 0001(操作码) 和 1111(操作数)。
      这个指令是LOAD B,就要把1111(十进制的15)地址上的数据读到寄存器B中。
      3. 执行指令
      找到15这个地址上的数据,读到B寄存器中。之后程序计数器++(1 -> 2)。

进程

进程就是正在执行的应用程序。
谈的一个应用程序,有两种状态

  1. 没有运行的时候,是一个 exe 文件,躺在硬盘上。
  2. 运行的时候,exe 就会被加载到内存中,并且cup执行里面的指令了

执行进程里的指令,需要硬件资源。
在这里插入图片描述
进程是操作系统进行资源分配的基本单位。

由于一个系统上进程比较多,所以需要管理

  1. 描述:通过 结构体/类,把进程中的各种属性表示出来
  2. 组织 :通过数据结构,把多个上面的结构体串起来,并进一步的进行各种增删查改。

对于Linux操作系统来说,它使用“PCB(进程控制块)”这样的结构体来描述进程信息的。
我们可以简单认为,通过链表的方式,把上述多个PCB串到一起。
创建新的进程,就相当于创建了一个PCB结构体,并且插入到链表中;销毁进程,就是把PCB从链表上删除掉,并且释放这个PCB结构体;查看进程列表,就是中遍历这个链表,依次显示出对应的信息。

注意:以上只是简化版本,方便理解,实践的情况要更复杂,不只是一个链表...

PCB

PCB有啥信息?
PCB是一个非常复杂的结构体,里面包含了非常多的属性。我们在这里只讨论一些关键的信息~

  1. PID 进程的标识符
    同一时刻,一个机器上的多个进程之间PID是唯一的,不会重复,系统内部的很多操作,都是通过PID找到对应的进程的。
    在这里插入图片描述
    2. 内存指针(一组)
    它描述进程依赖的指令和数据都在内存的哪个区域
    操作系统运行exe就会读取exe中的指令和数据,并把它们加载到内存中(内存地址)。
    (侧面表示出,进程的执行需要一定的内存资源)
    3. 文件描述符表(顺序表/数组)
    它描述了进程打开了那些文件(对于到硬盘上的数据),进程中打开了某个文件,就会在顺序表中添加一项。
    (侧面表示出,进程的执行需要一定的硬盘资源)
    4. 进程状态
    5. 进程的优先级
    6. 进程的上下文
    7. 进程的记账信息

4、5、6、7这几个属性共同决定了进程调度。我们把他们放在一块分析。

计算机上同时存在百八十个进程,这么多进程都是要执行的。
CPU负责执行,CPU每个核心可以执行一个进程。我这台电脑CPU是6核12线程(6个物理核心,12个逻辑核心),只能同时执行12个进程呀~其他进程咋办呢?

这就不得不提到操作系统进程调度的关键——“分时复用”了

“分时复用”

这个时刻CPU运行进程1,运行一会,CPU运行进程2,过一会运行进程3…
由于CPU运算速度非常快,使上述的切换速度也非常快,肉眼察觉不到,站在宏观角度(人),就好像是同时执行了,这叫做“并发执行”。

现在有有了多核心CPU,每个核心和核心之间,微观上也能同时执行不同的进程,这叫做“并行执行”。

并发/并行,都是操作系统内核统一调度的,程序员/普通用户感知不到~
因此,平时也把并行和并发统称为“并发”,对于的编程的手法也就称为“并发执行”。

  1. 进程状态
    可以随时被调度到CPU上执行指令的,称为“就绪状态”。
    因为要做一些其他的工作,比如进行IO操作(读写硬盘/读写网卡…),无法调度到CPU上执行,这称为“阻塞状态”。
    其实进程还有其他的状态,此处就不展开了~

  2. 进程优先级
    进程优先级就是来解决谁先来,谁后来,谁多执行,谁少执行的问题的。

  3. 进程的上下文
    分时复用,一个进程执行一会之后,就要从CPU上调度走,过一段时间,还会调度回CPU,此时就要沿着上次执行的结果,继续往后执行~
    进程的上下文对于进程来说就是寄存器中的值,CPU有很多寄存器,这些寄存器共同描述了上下文。
    PCB是内存的数据,把寄存器中的值都保存到PCB特定属性中,下次调度PCB就可以从这里的属性中把数据恢复到对应的寄存器中了。

  4. 进程的记账信息
    在优先级的加持之下,就会使不同的进程吃到的资源差异越来越大。
    操作系统会去统计每一个进程在CPU上执行的时间,系统就会根据这个来进一步的调整调度的策略。

这几个属性相互配合,共同构成了进程调度的核心逻辑~
上述的调度过程,都是系统内核负责完成的,虽然是在系统内核完成的,但是我们写程序的时候还是会受到影响的,因此还是需要了解上述的调度过程的!

本文到这里就结束啦~


☁️结语

山外青山楼外楼,莫把百尺当尽头。
保持空杯心态加油努力吧!


都看到这里啦!真棒(*^▽^*)

可以给作者一个免费的赞赞吗,这将会鼓励我继续创作,谢谢大家

如有纰漏或错误,欢迎指正


版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com