(java) 进程调度

目录

进程

首先我们要了解一下什么是进程?

那如何管理进程?

PCB中比较重要的属性

进程调度

为什么要进行进程调度?

状态

优先级

上下文

拓展介绍一下寄存器

记账信息


进程

首先我们要了解一下什么是进程?

简单来说,进程:跑起来的程序

我们打开任务管理器,每一个跑起来的进程都是一个应用程序

那如何管理进程?

1.先描述:使用PCB结构(进程管理块 )表示出进程的各种属性。

2.后组织:使用双向链表,把这些PCB结构串起来。

PCB中比较重要的属性

|--------------|----------------------------------------|
| 1.pid | 进程标识符 |
| 2.内存指针 | 进程持有的内存资源 |
| 3.文件描述符表 | 进程持有的硬盘资源 |
| 4.状态 | 这些用来完成''进程调度", 和进程持有的CPU资源密切相关 |
| 5.优先级 | 这些用来完成''进程调度", 和进程持有的CPU资源密切相关 |
| 6.上下文 | 这些用来完成''进程调度", 和进程持有的CPU资源密切相关 |
| 7.记账信息 | 这些用来完成''进程调度", 和进程持有的CPU资源密切相关 |

接下来我们具体介绍用来完成进程调度的这几个属性

进程调度

为什么要进行进程调度?

因为进程太多,CPU核心数太少(分不过来,狼多肉少)****。

这就需要让这些进程轮番在CPU上执行。只要轮转速度够快,那在用户眼中(宏观上),这些进程看起来就是**"同时"**执行的。

**这个"同时"只是看起来同时,实际上并不是同时的,**这个就叫做 "并发";那如果两个进程同时在两个CPU上执行,在微观上也是同时的,这个叫做 "并行"。

但在程序员的角度来看,是感受不到到底是"并发"执行,还是"并行"执行,我们通常用"并发"这个概念来表示"并行"和"并发"。

状态

1.就绪状态

这个进程随时可以去CPU上执行或者这个进程正在CPU上执行

一个CPU同一时刻只能有一个进程执行,那其他进程就得排队,那一个进程下车,下一个进程就立即补上来。

2.阻塞状态

程序有时候要等待一些其他的条件,其他条件必备,才能执行,比如说等待用户输入,这个用户一直不输入,那就得等待(阻塞了),直到用户输入,我们才能获取到数据。

还有一些其他的状态,不太重要,就不介绍了。

优先级

优先把资源分配给谁谁,

这个好理解,就比如现在同时运行一个游戏,和一个QQ,那此时我们就希望游戏持有更多的运算资源,保证流畅,QQ的话,能收到消息就好,那游戏的优先级就高于QQ

上下文

进程从CPU离开之前,需要保持现场,把当前CPU中各种寄存器的状态记录到内存中

等到下次进程回到CPU上执行的时候,此时就可以把保存的这些寄存器的值,恢复回去,进程就会沿着上次执行到的位置,继续往后执行

就像玩游戏里的****存档,读档。

拓展介绍一下****寄存器

CPU中有一些寄存器,没有特殊含义,就只是用来保存运算的中间结果的,

还有一些寄存器,有特定含义,特定作用

  1. 保存当前执行到哪个指令**(也叫程序计数器(是一个2字节/4字节/8字节 的整数,这个整数保存的是一个内存地址,这个地址就是程序下一条要执行的指令的所在位置)**
  2. 维护栈相关的寄存器 (有了这个 才知道一个方法执行完毕后,要回到哪里执行) 通过这一组(一般是两个)维护当前程序的"调用栈",(栈,也是一块内存,这个内存里就保存当前这个程序方法调用过程中的一系列的关系,也包含局部变量和方法参数......)
  3. 其他的通用寄存器 一般是用来保存计算的中间结果的。

ps(程序计数器): exe里面就包含了指令 和 数据,把exe 运行起来,操作系统就会把指令和数据加载到内存中(就会有一个内存地址),

那此时CPU就会从内存中取指令,然后在执行指令,

初始情况下,程序计数器就指向进程指令的入口,

每次取完一条指令,程序计数器的值都会自动更新,

默认情况下,直接指向下一条(顺序执行)

但是如果遇到 跳转类指令(jmp(无条件跳转),jcmp(有条件跳转),call(函数调用)),就会被设置成跳转到的地址)

这些都是操作系统自动的。

记账信息

通过优先级机制,对不同的进程分配了不同权重的资源,

但这个机制有可能会出现极端的情况,所有的资源都给了某个进程,其他进程一点都没分着

**那就要用到记账信息,**记账信息,会记录当前进程持有 CPU 的情况(在CPU 执行多久了),就可以作为操作系统调度进程的参考依据

╰(*°▽°*)╯╰(*°▽°*)╯╰(*°▽°*)╯╰(*°▽°*)╯╰(*°▽°*)╯完╰(*°▽°*)╯╰(*°▽°*)╯╰(*°▽°*)╯╰(*°▽°*)╯╰(*°▽°*)╯

相关推荐
爱敲代码的小冰6 分钟前
【Excel】 Power Query抓取多页数据导入到Excel
android·java·excel
心流时间20 分钟前
[Java基础] JVM常量池介绍(BeanUtils.copyProperties(source, target)中的属性值引用的是同一个对象吗)
java·开发语言·jvm
lqlj223326 分钟前
Linux常用命令
linux·运维·服务器
瑞金彭于晏37 分钟前
通俗易懂版 Maven 科普,maven是什么?
java·maven
好看资源平台40 分钟前
Java Web开发实战与项目——Spring Boot与Spring Cloud微服务项目实战
java
obboda1 小时前
使用haproxy实现MySQL服务器负载均衡
服务器·mysql·负载均衡
.猫的树1 小时前
Java集合List快速实现重复判断的10种方法深度解析
java·开发语言·list·集合
littlegirll1 小时前
命令行方式安装KFS同步KES到KADB
java·大数据·数据库
wanhengidc1 小时前
怎样分辨是否是高防服务器?
运维·服务器·网络
itachi-uchiha1 小时前
深入理解 Linux 中的 last 和 lastb 命令
java·linux·服务器