(java) 进程调度

news/2023/12/1 10:40:59

目录

进程 

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

那如何管理进程?

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.ppmy.cn/news/1065114.html

相关文章

深度强化学习。介绍。深度 Q 网络 (DQN) 算法

马库斯布赫霍尔茨 一. 引言 深度强化学习的起源是纯粹的强化学习,其中问题通常被框定为马尔可夫决策过程(MDP)。MDP 由一组状态 S 和操作 A 组成。状态之间的转换使用转移概率 P、奖励 R 和贴现因子 gamma 执行。概率转换P(系统动…

胖小酱之麻雀虽小

麻雀虽小,五脏俱全的意思:比喻事物的体积或规模虽小,具备的内容却很齐全。释义:比喻事物体积或规模虽小,具备的内容却很齐全。出处:茹志娟《如愿》:你别看我们那个生产小组不大,麻雀…

Python基础知识清单

Python基础知识清单 一、语言基础篇 语言基础篇1——Python概述 二、功能基础篇 三、主要规范篇 四、VM篇 五、三方组件篇

4.22 TCP 四次挥手,可以变成三次吗?

目录 为什么 TCP 挥手需要四次呢? 粗暴关闭 vs 优雅关闭 close函数 shotdown函数 什么情况会出现三次挥手? 什么是 TCP 延迟确认机制? TCP 序列号和确认号是如何变化的? 在一些情况下, TCP 四次挥手是可以变成 T…

在大规模推荐系统中整合 ML 模型的经验教训

一、说明 在这篇博文中,我们分享了将 Netflix 大规模搜索和推荐系统的多个相关机器学习模型整合到一个统一模型中的系统设计经验。给定不同的推荐用例,许多推荐系统将每个用例视为单独的机器学习任务,并为每个任务训练定制的 ML 模型。相比之…

高等数学上册 第十章 重积分 第十一章 曲线积分与曲面积分 知识点总结

重积分 二重积分计算法: 直角坐标下:化为二次积分 { 如果图形是 X Y 型,则都可以,但要考虑哪个计算不定积分方便 如果图形既不是 X 也不是 Y 型,则要拆分 极坐标下: ∬ f ( x , y ) d x d y ∬ f ( ρ cos…

01.基于自定义MVC架构的用户登录与首页展示实现 — OA项目实践

目录 本章节目标:完成OA项目用户登录及首页展示 一.用户登录 User.java UserDao.java IUserDao.java UserAction.java login.jsp(登录界面) userManage.jsp (数据绑定,修改,删除) userEdit.jsp(用…

(动态规划) 剑指 Offer 48. 最长不含重复字符的子字符串 ——【Leetcode每日一题】

❓剑指 Offer 48. 最长不含重复字符的子字符串 难度:中等 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。 示例 1: 输入: “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为…

回归预测 | MATLAB实现TSO-ELM金枪鱼群优化算法优化极限学习机多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现TSO-ELM金枪鱼群优化算法优化极限学习机多输入单输出回归预测(多指标,多图) 目录 回归预测 | MATLAB实现TSO-ELM金枪鱼群优化算法优化极限学习机多输入单输出回归预测(多指标,多图)效…

FTHR-G0001 新手小白的第一块keil开发板

前言 作为从未接触过这类板子的新手,从申请起就十分忐忑,拿到板子的第一印象就是小而又特别,既可以整块板使用,也可以掰开用杜邦线连接的形式具备了灵活与小巧的特点,而核心板的把排针围成一圈的设计就足以让它在树莓…

SSM框架和Spring Boot+Mybatis框架的性能比较?

SSM框架和Spring BootMybatis框架的性能比较,没有一个绝对的答案,因为它们的性能受到很多因素的影响,例如项目的规模、复杂度、需求、技术栈、团队水平、测试环境、测试方法等。因此,我们不能简单地说哪个框架的性能更好&#xff…

go学习-指针 标识符

指针,以及标识符 1.指针 (1).基本介绍 1)基本数据类型,变量存的值,也叫值类型 2)获取变量的地址用&,比如 var num int ,获取num的地址:&num 3)指针类型&…

编码过程中需要注意哪些安全问题?

SQL 安全 注入式(Inject)攻击是一类非常常见的攻击方式,其基本特征是程序允许攻击者将不可信的动态内容注入到程序中,并将其执行,这就可能完全改变最初预计的执行过程,产生恶意效果。下面是几种主要的注入…

Bean 生命周期

Bean 生命周期 一、Bean 实例化的基本流程 Spring容器在进行初始化时,会将xml配置的的信息封装成一个BeanDefifinition对象,所有的BeanDefifinition存储到一个名为beanDefifinitionMap的Map集合中去,Spring框架在对该Map进行遍历&#xff0…

redis报错WRONGTYPE Operation against a key holding the wrong kind of value

在redis中我们一般存储string、list、hash类型的值,对应的方法分别为 db.StringGet(“key”)、db.ListRange、db.HashGetAll 如果取list类型值时使用了string的方法就会报WRONGTYPE Operation against a key holding the wrong kind of value错误。 redis-cli命令窗…

基于Milvus Cloud的相似穿搭推荐系统教程——图像分割

作为一个大众眼中的“非典型程序员”,我喜欢拥抱时尚和潮流,比如我经常在演讲时穿粉色裤子,这甚至已经成为一个标志性打扮。某天又逢主题演讲日,我站在衣柜前挑选上衣的时候,忽然灵光乍现:有没有可能借助 Milvus Cloud找到和我穿搭风格最为相似的明星呢? 这个想法在我脑…

Springboot_Redis

Springboot默认使用lettuce操作redis,底层是netty jdeis并发差些 Redis的Template 分为两种, 一种是StringRedisTemplate,另一种是RedisTemplate 根据不同的数据类型,大致的操作也分为这5种,以StringRedisTemplate为例 stringRedisTempla…

ICCV 2023 Oral | 从无约束图像集合中生成新视角的交叉光线神经辐射场

文章链接:https://arxiv.org/abs/2307.08093 代码链接:https://github.com/YifYang993/CR-NeRF-PyTorch.git 01. 介绍 本工作旨在通过从不受限制的图像集合(例如从互联网中爬取的图像)中合成新视角图片,从而提供3D沉浸…

语言基础篇1——Python概述,Python是什么?Python能干什么?

概述 简介 Python,计算机高级语言,读作/ˈpaɪθən/(英音)、/ˈpaɪθɑːn/(美音),意为蟒蛇,Python的logo为两条缠绕的蟒蛇 特点 Python以开发效率高而运行效率低著称 应用领域…

使用Pillow对图像进行变换

使用Pillow对图像进行变换 from PIL import Image, ImageEnhance# 原图 image Image.open("1.jpg") image.show()# 镜像 mirrored_image image.transpose(Image.FLIP_LEFT_RIGHT) mirrored_image.show() mirrored_image.save(mirror_image.jpg)# 旋转 rotated_imag…
最新文章