(java) 进程调度

news2024/9/24 13:20:14

目录

进程 

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

那如何管理进程?

PCB中比较重要的属性

进程调度

为什么要进行进程调度?

状态

优先级

上下文

拓展介绍一下寄存器

记账信息


进程 

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

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

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

 

那如何管理进程?

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

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

PCB中比较重要的属性

1.pid进程标识符
2.内存指针进程持有的内存资源
3.文件描述符表进程持有的硬盘资源
4.状态

这些用来完成’‘进程调度”,

和进程持有的CPU资源密切相关

5.优先级

6.上下文
7.记账信息

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

进程调度

为什么要进行进程调度?

因为进程太多,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 执行多久了),就可以作为操作系统调度进程的参考依据

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/935560.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

window下jdk安装及更换jdk版本的一些问题。

目录 jdk安装jdk的选择。oracle的jdk怎么安装。openjdk怎么安装。 jdk的版本控制。更换jdk的一些问题。 jdk安装 jdk的选择。 目前有两种可选的jdk,oracle的和开源的Openjdk,这两种jdk的区别可以自行查阅,就结果而言,openjdk开源…

2023年浙大MEM提面/复试录取考生笔试成绩分布图一览

如果真要给备战浙大mem项目一个理由的话,我想本文的两张图基本算是之一吧!几乎每年的上半年时间里,浙江本省连带附近一些省市的考生对浙大mem项目的报考热情都很满,但经历过八月提面之后,部分考生可能会因为提面的结果…

在安装pyhttpx过程中:ImportError: DLL load failed: 找不到指定的模块。

错误 ImportError: DLL load failed: 找不到指定的模块。 解决方案 我先尝试着去重新安装了下brotli 但是并没有成功 最终解决 安装 vc_redist.x64.exe 下载地址:https://learn.microsoft.com/en-GB/cpp/windows/latest-supported-vc-redist?viewmsvc-170 如果…

什么是 TF-IDF 算法?

简单来说,向量空间模型就是希望把查询关键字和文档都表达成向量,然后利用向量之间的运算来进一步表达向量间的关系。比如,一个比较常用的运算就是计算查询关键字所对应的向量和文档所对应的向量之间的 “相关度”。 简单解释TF-IDF TF &…

【Java基础增强】Stream流

1.Stream流 1.1体验Stream流【理解】 案例需求 按照下面的要求完成集合的创建和遍历 创建一个集合,存储多个字符串元素 把集合中所有以"张"开头的元素存储到一个新的集合 把"张"开头的集合中的长度为3的元素存储到一个新的集合 遍历上一步得…

打架斗殴行为识别算法

打架斗殴行为识别算法通过yolov7网络模型深度学习算法,打架斗殴行为识别算法对提取到的信息进行分析和比对,判断是否存在打架斗殴行为。打架斗殴行为识别算法一旦打架斗殴行为识别算法识别到打架斗殴行为,系统会立即生成预警信息,…

java八股文面试[多线程]——为什么不能用Excuters创建线程池

DelayedWorkQueue 也是一个无界队列。 如何根据实际需要,定制自己的线程池: 知识点: 【并发与线程】为什么大厂规定不能使用Executors去创建线程池?_哔哩哔哩_bilibili 【并发与线程】如何根据实际需要,定制自己的线…

uniapp iOS打包证书申请流程——window

uniapp 如何在 window 创建 iOS打包证书? 文章目录 uniapp 如何在 window 创建 iOS打包证书?下载 Appuploader安装创建证书相关入口创建证书创建描述文件运行调试账号过期提示 前提: 下载 Appuploader工具 Appuploader辅助工具,解…

<七> objectARX开发:创建自定义实体

1、介绍 在某些情况下,CAD中的实体对象无法满足需求,我们需要针对实际情况来设计并绘制自定义的实体,下面就用一个简单的例子来介绍一下自定义实体绘制。 实体形状:包括实体夹点和文字夹点拖动实现。 2、效果 3、创建自定义实体的步骤 新建一个从AcDbEntity继承的类,如C…

从传统软件开发到云原生转型:大数据和AI如何引领软件开发的新趋势

文章目录 **1. 数据驱动的开发:****2. 智能化的用户体验:****3. 云原生的可扩展性:****4. 实时处理和决策:****5. 自动化和效率提升:****6. 持续集成和交付的加速:****7. 数据安全和隐私:****8.…

linux和python轻松实现短信和邮件的秒发!四大实战脚本大揭秘!

引言 作为Linux和Python技术持续学习者,我们不仅要了解基础知识,还需要实际运用技术解决问题。本文将分享四个实用的Python和Linux运维脚本,帮助我们轻松实现短信和邮件的秒发功能。 要求环境 一台运行Linux操作系统的服务器(可以…

【Qt学习】02:信号和槽机制

信号和槽机制 OVERVIEW 信号和槽机制一、系统自带信号与槽二、自定义信号与槽1.基本使用student.cppteacher.cppwidget.cppmain.cpp 2.信号与槽重载student.cppteacher.cppwidget.cppmain.cpp 3.信号连接信号4.Lambda表达式5.信号与槽总结 信号槽机制是 Qt 框架引以为豪的机制之…

Yolo系列-yolov2

YOLO-V2 更快!更强! YOLO-V2-BatchNormalization BatchNormalization(批归一化)是一个常用的深度神经网络优化技术,它可以将输入数据进行归一化处理,使得神经网络更容易进行学习。在YOLOv2中,B…

C++学习记录——이십칠 C++11(3)

文章目录 1、lambda1、捕捉列表2、简述C线程3、lambda对象大小 2、C线程1、整体了解2、锁1、互斥锁2、递归互斥锁3、时间控制锁4、lock_guard 3、atomic(原子)4、条件变量 1、lambda 在之前写排序时,用到过排升序,排降序&#xf…

leetcode438. 找到字符串中所有字母异位词(java)

滑动窗口 找到字符串中所有字母异位词滑动窗口数组优化 上期经典 找到字符串中所有字母异位词 难度 - 中等 Leetcode 438 - 找到字符串中所有字母异位词 给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出…

msvcp140.dll丢失的解决方法,win10系统dll报错的解决方法

今天,我将为大家分享一个关于msvcp140.dll丢失的解决方法,特别是针对在Windows 10系统上遇到这个问题的朋友们。在开始之前,我想先简要介绍一下msvcp140.dll文件的作用。msvcp140.dll是Microsoft Visual C运行时库的一部分,它包含…

基于Java+SpringBoot+Vue前后端分离智慧图书管理系统设计和实现

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

【【萌新的STM32学习-18 中断的基本概念3】】

萌新的STM32学习-18 中断的基本概念3 EXTI和IO映射的关系 AFIO简介(F1) Alternate Function IO 复用功能IO 主要用于重映射和外部中断映射配置 1.调试IO配置 来自AFIO_MAPR[26:24] , 配置JTAG/SWD的开关状态 (这个我们并不用太过深刻的关注&…

使用实体解析和图形神经网络进行欺诈检测

图形神经网络的表示形式(作者使用必应图像创建器生成的图像) 一、说明 对于金融、电子商务和其他相关行业来说,在线欺诈是一个日益严重的问题。为了应对这种威胁,组织使用基于机器学习和行为分析的欺诈检测机制。这些技术能够实时…

【C++11新特性】可变参数模板

文章目录 1. 认识可变参数模板2. 可变参数模板的定义方式3. 参数包的展开方式3.1 递归展开参数包3.2 逗号表达式展开参数包 1. 认识可变参数模板 可变参数模板是C11新增的最强大的特性之一,它对参数高度泛化,能够让我们创建可以接收可变参数的函数模板和…