「JavaEE」初识进程
初识进程
- 🍉进程
- 🍌操作系统的进程管理
- 🍉PCB 重要属性
- 🍌进程的身份标识
- 🍌内存指针
- 🍌文件描述符表
- 🍌进程的状态
- 🍌优先级
- 🍌记账信息
- 🍌上下文
- 🍉内存分配(内存管理)
- 🍉进程间通信
🍉进程
进程是操作系统提供的一种软件资源
我们现在用到的系统,都属于是“多任务操作系统”
,即在同一时刻,可以同时运行多个任务
这里所说的“任务”,就是指正在运行中的程序,也可以称为“进程”
与其对应的就是“单任务操作系统”,它在同一时刻只能运行一个程序
打开任务管理器,我们可以看到:每个任务在执行过程中,都需要消耗一定的硬件资源(内存、硬盘等)
也就是说,计算机的每个进程在运行的时候,都需要给它分配一定的系统资源。可见进程是系统分配资源的基本单位
🍌操作系统的进程管理
操作系统在管理进程时,会先使用类/结构体
把实体属性
给列出来(因为操作系统一般是用C/C++实现的,所以可以使用结构体),这一步称为“描述”
。表示进程信息的结构体,称为PCB
(进程控制块,Process Control Block)
每个正在运行或等待被调度的进程都有一个对应的PCB,操作系统通过访问和操作PCB来实现进程的管理和调度
补充:PCB 是操作系统学科中的通用概念。Windows 上表示进程的结构,可以称为 PCB;Linux 上的也可以称为 PCB
具体到 Linux 上,PCB 是一个叫作 struct task_struct{…}这样的结构体
在描述之后,使用一定的数据结构,把这些结构体/对象串到一起,这一步叫作再组织
在 Linux 中,若干个 task_struct 之间是使用链式结构
串起来的
当我们看到任务管理器中的进程时,系统内部此时在遍历链表,并且打印每个节点的相关信息
如果运行一个新的程序,那么系统中就会多一个进程,多出来的这个进程就需要构造一个新的 PCB,添加到链表上
与之对应的,如果某个运行中的程序退出了,那就需要把对应进程的 PCB 从链表中删掉,并销毁对应的 PCB 资源
注意:此处的表述是一个简化版本,实际上组织的方式更加复杂(内部不是一个链表,而是更加复杂的链式结构)
🍉PCB 重要属性
🍌进程的身份标识
不同进程之间是通过一个简单的不重复整数来区分的,称为 pid
。后续要针对某个进程进行操作时,就可以用 pid 来区分
比如选中某进程,点击“结束任务”,那么此时任务管理器就会获取到你选中的进程的 pid,然后调用一个系统 api,把 pid 作为参数传进去,从而完成杀死进程的操作
🍌内存指针
内存指针是用来描述某个进程能使用哪些内存,即描述了进程使用内存资源的详细情况
进程在运行过程中需要消耗一些系统资源,其中内存就是一种重要的资源
如果要使用内存,那就得先向系统申请,得系统给你分配一块内存之后,你才能使用
一个进程要想跑起来,需要有指令(代码),也需要有数据,而指令和数据都是要加载到内存中的,所以进程需要知道指令和数据分别存在哪里
而内存指针保存着一个内存地址,指向内存中的特定位置。通过内存指针,可以访问和操作内存中的数据和指令(代码)
🍌文件描述符表
文件描述符表是操作系统中的一个数据结构,它描述了某个进程所涉及的硬盘相关的资源
进程经常需要访问硬盘,操作系统对于硬盘这样的硬件设备进行封装,按照文件
的方式来操作(这里的“文件”,指的就是我们电脑里面的文件,它们是存在硬盘中的)
一个进程要想操作文件,就需要先打开文件,这个过程就是在文件描述符表中给这个进程分配一个表项(构造一个结构体),表示这个文件的相关信息
前面我们说进程是系统分配资源的基本单位,像内存、硬盘、网卡等资源就会在 PCB 中有所体现,而且它们在PCB 中都好体现。但是一个进程消耗 CPU 资源,这个要如何看待呢?
一个 CPU 可能有一个核心,也可能有多个,一个核心在同一时刻只能处理一个进程,但是系统上的进程远多于电脑的核心数,此时就涉及到一个关键的概念——分时复用(并发)
就是 CPU 的核心先执行进程1的代码,执行一段时间之后,让进程1下来,换进程2上去……依此类推
而 CPU 一秒可以执行几十亿条指令,也就是说在短时间内可以进行很多次任务切换,在切换进程的速度足够快的情况下,人是感知不到这个切换的过程
而如果是多核 CPU,比如四核,那么就可以同时执行四个不同的进程,这称为并行执行
。虽然有多个核心,但每个核心仍然要分时复用,快速切换
当代计算机,基本是并行和并发同时存在的,两个进程是并行执行还是并发执行,要看系统的调度
我们把并行和并发统称为“并发”
,对应的编程方式(解决一个问题,分成多个任务来执行,这多个任务协作解决)称为并发编程
说到这里,再回到上面的问题,一个进程消耗 CPU 资源代表该进程在 CPU 上消耗的时间
任务管理器中是按百分比算的,就表示某进程在 CPU 上消耗的时间的百分比
如果某个进程把 CPU 占到 100%,那就意味着其他进程都没有执行的时间,相当于这个进程霸占了 CPU,这时候很可能会造成系统卡顿
为了避免发生这种情况,就需要对进程进行调度,使各个进程可以顺利并发执行。PCB 中提供了一些属性来支持系统调度进程,下面我们来看一下
🍌进程的状态
所谓的状态,是描述某个进程能否到 CPU 上执行,主要有两个状态
就绪状态:进程随时准备好到 CPU 上执行
阻塞状态:进程当前不方便去 CPU 上执行,不应该去调度它,比如进程在等待 IO
这里所说的 IO,可能是来自控制台的输入/输出(比如等待 Scanner 的输入,也可能是硬盘的输入/输出、网卡的输入/输出)
🍌优先级
有多个进程等待系统调度,这些进程获得的资源和调度顺序是有优先级的。优先级越高,获得资源的机会就越大,同时一般会优先执行
比如电脑上在运行游戏和微信,显然游戏的优先级更高
🍌记账信息
针对每个进程占据多少 CPU 时间进行统计,然后根据统计结果进一步调整调度的策略。这样做是为了确保每个进程不会出现完全没有到 CPU 上执行的情况
🍌上下文
每个进程在运行过程中,会产生一些中间结果
,这些结果会保存在 CPU 的寄存器
中。因此,在进程调度出 CPU 之前,需要把当前寄存器中的信息单独保存到一个地方。在该进程下次去 CPU 上执行的时候,再把这些寄存器的信息恢复回来
保存上下文:把 CPU 的关键寄存器中的数据,保存到内存中(PCB的上下文属性中)。相当于游戏中的存档操作
恢复上下文:把内存中关键寄存器中的数据,加载到 CPU 对应的寄存器中,使之前的进程能够继续执行。相当于游戏中的读档操作
🍉内存分配(内存管理)
核心结论:每个进程的内存是彼此独立、互不干扰的
也就是说,通常情况下进程A不能直接访问进程B的内存(这也称为进程独立性
),这样做利于系统的稳定性。
如果某个进程的代码出 bug 了,那么只会影响到当前这个进程,不会影响到其他进程
🍉进程间通信
虽然进程之间有独立性,但是有时候也需要多个进程相互配合完成某个工作,所以进程间需要进行通信
进程间通信和进程的独立性不矛盾,因为系统会提供一些公共的空间
(就是多个进程都可以访问到的),让两个进程借助这种公共空间来交互数据
操作系统提供了多种方式供进程进行通信,但本质上都是上述思路
常用的方式有:
- 文件:Java 程序员主要使用的进程间通信方式
- 网络:可以支持同一个主机的不同进程,也能支持不同主机的不同进程(适用性更高)
- 管道
- 共享内存
- 信号量
- 信号
相关文章:

「JavaEE」初识进程
初识进程 🍉进程🍌操作系统的进程管理 🍉PCB 重要属性🍌进程的身份标识🍌内存指针🍌文件描述符表🍌进程的状态🍌优先级🍌记账信息🍌上下文 🍉内存…...

计算机视觉——图像特征提取D2D先描述后检测特征提取算法原理
概述 局部特征提取是计算机视觉中的一个重要任务,它旨在从图像中提取出能够代表图像局部结构和外观信息的特征。这些特征通常用于图像匹配、物体识别、三维重建、跟踪和许多其他应用。传统方法,如尺度不变特征变换(SIFT)…...

The “from“ argument must be of type string. Received undefined——vue报错记录
今天在用机器人打包测试环境时,一直报错: The "from" argument must be of type string. Received undefined 啥意思呐? 百度也没有找到对应的问题所在。 下面写一下我的解决方法: vue.config.js 在vue.config.js中…...

汽车4S行业的信息化特点与BI建设挑战
汽车行业也是一个非常大的行业,上下游非常广,像主机厂,上游的零配件,下游的汽车流通,汽车流通之后的汽车后市场,整个链条比较长。今天主要讲的是汽车流通,汽车4S集团。一个汽车4S集团下面授权代…...

JSX 和 HTML 之间的区别
JSX和 HTML 都是用于创建和构建网页的标记语言,但它们有一些关键的区别。 1. JSX 是 JavaScript 的语法扩展,而 HTML 是一种标记语言。 2. JSX 允许您在语法中包含表达式和函数,而 HTML 只允许静态文本。 3. JSX 通常用于 React 应用程序&…...

AI日报:GPT-4-Turbo正式版自带读图能力;Gemini1.5Pro开放API;SD3将于4月中旬发布;抖音宫崎骏AI特效爆火
欢迎来到【AI日报】栏目!这里是你每天探索人工智能世界的指南,每天我们为你呈现AI领域的热点内容,聚焦开发者,助你洞悉技术趋势、了解创新AI产品应用。 新鲜AI产品点击了解:AIbase - 智能匹配最适合您的AI产品和网站 ὏…...

IDEA 宝贝插件
1. Codota— 代码智能提示 Codota还包含一个网站:https://www.codota.com/code 2.Alibaba Java Code Guidelines— 阿里巴巴 Java 代码规范 3. SequenceDiagram —— 调用链路自动生成时序图 4. google-java-format —— 代码自动格式化...

[C语言][数据结构][链表] 单链表的从零实现!
目录 零.必备知识 1.一级指针 && 二级指针 2. 节点的成员列表 a.数据 b.指向下一个节点的指针. 3. 动态内存空间的开辟 (malloc-calloc-realloc) 一.单链表的实现与销毁 1.1 节点的定义 1.2 单链表的尾插 1.3 单链表的头插 1.4 单链表的尾删 1.5 单链表的头删 1…...

oracle rac打补丁后sqlplus / as sysdba ora-12537
sqlplus / as sysdba 报错: ORA-12537: TNS:connection closed 检查用户属组: [rootrac1 ~]# id oracle uid1102(oracle) gid1101(oinstall) groups1101(oinstall),1102(dba) [rootrac1 ~]# id grid uid1101(grid) gid1101(oinstall) groups1101(oin…...

TCP-IP详解卷一:协议——阅读总结
该内容适合程序员查看 第1章 概述 1.1 引言 WAN全称是 Wide Area Network,中文名为广域网。 LAN全称是 Local Area Network,中文名为局域网。 1.2分层 ICP/IP协议族通常被认为是一个四层协议系统 分层协议应用层Telnet、FTP和e-mail运输层TCP和UDP网…...

【带源码】如何开发一个视频打赏,付费观看视频的系统?
【带源码】如何开发一个视频打赏,付费观看视频的系统?开发指南来了 最近非常火爆的视频打赏系统,有用户端,管理端,代理端 风口来了,系统部署简单,需要详细部署教程的可以留下评论哦!…...

Linux--进程的概念(一)
目录 一、冯诺依曼体系结构二、操作系统2.1 什么是操作系统2.2 操作系统的意义 三、进程3.1 进程的基本概念3.2 描述进程——PCB3.3 进程和程序的区别3.4 task_struct-PCB的一种3.5 task_struct的内容分类 四、如何查看进程4.1 通过系统文件查看进程4.2 通过ps指令查看进程 五、…...

大话设计模式——15.观察者模式(Observer Pattern)
简介 也称发布订阅模式(Publish/Subscribe),定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新 UML图: 应用场景: 消息通知组件&#x…...

MySQL 主从复制部署(8.0)
什么是主从数据库 主从数据库是一种数据库架构模式,通常用于提高数据库的性能、可用性和可伸缩性。 它包括两种类型的数据库服务器: 1)主数据库(Master):主数据库是读写数据的主要数据库服务器。所有写操…...

大话设计模式——16.命令模式(Command Pattern)
简介 请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的对象进行执行。命令模式是一种特殊的策略模式,体现多个策略执行的问题,而不是选择的问题 UML图 应用场景 界面选择、键盘、按钮、事件操作都类似命令模式 …...

react17+18 中 setState是同步还是异步更新
在类组件中使用setState,在函数式组件中使用hooks的useState。 setstate目录 1. 类组件1.1 react 17版本1.2 react 18版本 2、函数式组件 1. 类组件 1.1 react 17版本 参考内容:第十一篇:setState 到底是同步的,还是异步的&…...

Unity框架,ET框架8.1版本的打包流程记录
目录 打包代码前置1.必须要安装Visusal Studio 2022的组件,如下图,必须都要进行安装,不然会在代码重构的时候报错,丢失SDK。Rider的版本必须2023及以上 步骤一、使用Rider编辑器打开项目后进行重构项目步骤二、使用HybirdCLR生成A…...

windows访问wsl中的docker
1、启动windows路由转发功能: 找到任务管理器 --》服务–》打开服务–》 ROUTing and Remote Access 2、关闭wsl中linux的防火墙 3、查看docker系统和linux系统的ip和网关 以下面为例 # docker系统 eth0: flags4163<UP,BROADCAST,RUNNING,MULTICAST> mtu…...

golang主要优缺点
优点 1)采用协程机制,可以很方便的支持高并发,性能还不错。 2)非常易于使用,产出效率很高。 缺点 也是协程机制。程序中一切皆协程,并且自己做了协程调度机制,而不是传统的 线程机制。导致需…...

浅谈Redis和一些指令
浅浅谈一谈Redis的客户端 Redis客户端 Redis也是一个客户端/服务端结构的程序。 MySQL也是一个客户端/服务端结构的程序。 Redis的客户端也有多种形态 1.自带命令行客户端 redis-cli 2.图形化界面的客户端(桌面程序,web程序) 像这样的图形…...

AI大模型探索之路-应用篇1:Langchain框架概述—快速构建大模型应用
目录 一、什么是LangChain? 二、LangChain解决了哪些问题? 三、LangChain总体架构 四、代码实践样例 总结 一、什么是LangChain? 为大模型应用提供简便之道。 LangChain,专为构建庞大的语言模型应用程序设计的框架࿰…...

Google Chrome 常用设置
Google Chrome 常用设置 References 转至网页顶部 快捷键:Home 转至内容设置 chrome://settings/content 清除浏览数据 历史记录 -> 清除浏览数据 关于 Chrome 设置 -> 关于 Chrome chrome://settings/help References [1] Yongqiang Cheng, https:/…...

如何提高旋转花键运行稳定性?
现代化精密仪器设备中,精密仪器的稳定工作性能对于生产效率和产品质量至关重要,运行效率和精度是常见问题。旋转花键作为机械传动系统中的重要组成部分,其稳定性也是直接影响到机械装配的质量和使用寿命,那么我们应该如何提升旋转…...

每日一题 第八十七期 洛谷 [蓝桥杯 2018 省 AB] 全球变暖
[蓝桥杯 2018 省 AB] 全球变暖 题目描述 你有一张某海域 N N N \times N NN 像素的照片,. 表示海洋、 # 表示陆地,如下所示: ....... .##.... .##.... ....##. ..####. ...###. .......其中 “上下左右” 四个方向上连在一起的一片陆地组…...

AI技术创业有哪些机会?
文章目录 ✍探索AI技术创业的机会与挑战💎引言💎AI技术的快速发展与应用💎🌹AI技术创业的机会与方向🌹1. 行业解决方案🌹2. 智能产品和服务🌹3. 教育和培训 💎AI技术创业的挑战与应对…...

TensorFlow学习之:基础概念和操作
TensorFlow简介 TensorFlow是一个开源的深度学习框架,由Google的研究团队Google Brain Team开发,并在2015年发布。它是基于DistBelief,Google之前的一个深度学习项目,但被重新设计以便更灵活、更强大、更适应于研究和生产。 历史…...

最新在线工具箱网站系统源码
内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 系统内置高达72种站长工具、开发工具、娱乐工具等功能。此系统支持本地调用API,同时还自带免费API接口, 是一个多功能性工具程序,支持后台管理、上…...

c# InvokeRequested delegate解决线程访问界面
说明 界面操作的代码应该写在界面(Form/Dialog)里 方法定义 private void Method1(string s) {...... }delegate定义 private delegate void Method1Delegate(string s);界面调用代码 private void op(){string sText"hello";if (this.In…...

使用 Web Workers 作为setInterval的替代方案
使用 Web Workers 作为setInterval的替代方案 在 Vue 项目中,为了避免 setInterval 在标签页非激活状态下的不准确问题,我们可以使用 Web Workers 作为一个替代方案 Web Worker 介绍: Web Workers : 浏览器后台为网页运行的一个小助手&…...

python实现将日期文本化
环境:python3.8.10 需要:有些时候,需要在一段文本的后面,添加上日期,尤其是文本重复的情况下,添加上每天的日期更为重要。 代码实现: import datetimetodaydatetime.date.today() date_textto…...