(java) 进程调度

目录

进程 

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

那如何管理进程?

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.mzph.cn/news/54933.shtml

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

相关文章

mongodb聚合排序的一个巨坑

现象: mongodb cpu动不动要100%,如下图 分析原因: 查看慢日志发现,很多条这样的查询,一直未执行行完成,占用大量的CPU [{$match: {"tags.taskId": "64dae0a9deb52d2f9a1bd71e",grnty: …

全流程R语言Meta分析核心技术应用

Meta分析是针对某一科研问题,根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法,对来源不同的研究成果进行收集、合并及定量统计分析的方法,最早出现于“循证医学”,现已广泛应用于农林生态,资源环境等方面。…

什么是静力水准仪?它用到哪些领域?

什么是静力水准仪 静力水准仪是测量两点间或多点间相对高程变化的仪器。由储液器、芯体和定制电路模块、保护罩等部件组成。沉降系统由多只同型号传感器组成,储液罐之间由通气管和通液管相连通,基准点置于一个稳定的水平基点,当测点相对于基…

【Qt学习】05:自定义封装界面类

OVERVIEW 自定义封装界面类1.QListWidget2.QTreeWidget3.QTableWidget4.StackedWidget5.Others6.自定义封装界面类-显示效果(1)添加设计师界面类(2)在ui中设计自定义界面(3)在需要使用的界面中添加&#xf…

TiCDC Canal-JSON 消息接收示例(Java 版)

1.引言 业务程序经常会通过各式各样的缓存来提升用户的访问速度。 由于存在缓存,在一些实时性要求较高的场景中,需要在数据变更的同时将数据缓存进行更新或删除。 如果数据本身由其他业务部门提供,就无法在写入的同时做缓存的一致性处理。…

小区物业业主管理信息系统设计的设计与实现(论文+源码)_kaic

摘 要 随着互联网的发展,网络技术的发展变得极其重要,所以依靠计算机处理业务成为了一种社会普遍的现状。管理方式也自然而然的向着现代化技术方向而改变,所以纯人工管理方式在越来越完善的现代化管理技术的比较之下也就显得过于繁琐&#x…

Linux vmstat命令

vmstat命令是一个可用于报告系统虚拟内存、进程、CPU活动和输入输出统计信息的工具。以下是vmstat命令的详细解释说明: 用法: vmstat [选项] [时间间隔] [重复次数]常用选项: -a:显示所有模式(虚拟内存、进程和IO&am…

ReoGrid.NET集成到winfrom

ReoGrid一个支持excel操作的控件,支持集成到任何winfrom项目内。 先看效果图: 如何使用: 使用ReoGrid自带excel模版设计工具先设计一个模版,设计器如下: 具体例子看官方文档 代码示例如下: var sheet reoGridControl1.CurrentWorksheet; …

Unity光照相关

1. 光源类型 Unity支持多种类型的光源,包括: 1. 点光源(Point Light):从一个点向四周发射光线,适用于需要突出物体的光源。 2. 平行光(Directional Light):从无限远处…

live555server环境搭建

live555环境搭建详解(ubuntu18.04) 1.环境依赖 openssl可选安不安 安装(选择好版本) sudo apt-get update sudo apt-get install openssl sudo apt-get install libssl-dev使用头文件是否可用时编译测试时记得链接&#xff08…

JavaScript快速入门

JavaScript简介 JavaScript(简称:js)是一门跨平台,面向对象的脚本语言,是用来控制网页行为的,它能使网页可交互。 JavaScript和java是完全不同的语言,不论是概念还是设计,但是基础语…

大数据时代的软件开发实践:利用云计算和AI赋能创新

文章目录 云计算的赋能弹性资源管理远程协作与分布式开发持续集成和持续交付成本效益 人工智能的赋能数据驱动的决策自动化智能预测和优化自适应系统 创新的实践方法数据驱动的创新智能化产品开放式创新迭代和反馈 🎈个人主页:程序员 小侯 🎐…

TypeError: ‘set‘ object is not subscriptable

问题出现的背景:写了一个python脚本,在脚本里用到了 pyexcel_xlsx 这个包,这个包可以读取excel文件。在本地运行可以运行成功,在Linux服务器上面运行报这个错。两边python都是用到3.8版本的,pyexcel_xlsx 版本也相同…

软考:中级软件设计师:OSI/RM七层模型,网络技术标准与协议

软考:中级软件设计师:OSI/RM七层模型 提示:系列被面试官问的问题,我自己当时不会,所以下来自己复盘一下,认真学习和总结,以应对未来更多的可能性 关于互联网大厂的笔试面试,都是需要细心准备的…

Vue2学习笔记のvue-router

这里写目录标题 vue-router路由1.基本使用2.几个注意点3.多级路由&#xff08;多级路由&#xff09;4.路由的query参数5.命名路由6.路由的params参数7.路由的props配置8.<router-link>的replace属性9.编程式路由导航10.缓存路由组件11.两个新的生命周期钩子12.路由守卫13…

java: 无法访问org.springframework.boot.SpringApplication 错误的类文件

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 错误1&#xff1a; java: 无法访问org.springframework.boot.SpringApplication 错误的类文件: /D:/Software/env-java/apache-maven-3.6.1/repository/org/springframework/boot/spring-boot/3.1.2/sp…

MySQL—MySQL的NULL值是怎么存放的

一、引言 1、MySQL数据存放在哪个文件&#xff1f; 创建一个数据库会产生三种格式的文件&#xff0c;分别是.opt格式、.frm格式、.ibd格式。 opt格式&#xff1a;用来存储当前数据库的默认字符集和字符校验规则。 frm格式&#xff1a;该文件是用来保存每个表的元数据信息的&…

【uniapp】微信小程序 , 海报轮播图弹窗,点击海报保存到本地,长按海报图片分享,收藏或保存

uivew 2.0 uniapp 海报画板 DCloud 插件市场 第一步&#xff0c;下载插件并导入HbuilderX 第二步&#xff0c;文件内 引入 海报组件 <template><painter ref"haibaorefs"></painter> <template> <script>import painter from /comp…

Node.js-Express框架基本使用

Express介绍 Express是基于 node.js 的web应用开发框架&#xff0c;是一个封装好的工具包&#xff0c;便于开发web应用&#xff08;HTTP服务&#xff09; Express基本使用 // 1.安装 npm i express // 2.导入 express 模块 const express require("express"); // 3…

线程的生命周期

线程的生命周期 与人有生老病死一样&#xff0c;线程也同样要经历开始&#xff08;等待&#xff09;、运行、挂起和停止四种不同的状态。这四种状态都可以通过Thread类中的方法进行控制。下面给出了Thread类中和这四种状态相关的方法。 // 开始线程 public void start( ); …