【JavaEE学习】初识进程概念

个人主页:兜里有颗棉花糖
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创
收录于专栏【Java系列】【JaveEE学习专栏】
本专栏旨在分享学习JavaEE的一点学习心得,欢迎大家在评论区交流讨论💌

在这里插入图片描述

目录

  • 一、什么是进程
    • 进程和可执行文件的关系
  • 二、计算机如何管理进程
    • 进程管理
    • 并行和并发
  • 三、PCB中关于进程调度的相关属性
  • 四、进程的隔离性和进程间通信

一、什么是进程

我们来看一下进程的概念:进程是操作系统中正在执行的程序的实例。它是计算机执行任务的基本单位。一个进程包含了程序代码、数据和资源,包括内存、文件、网络连接等。

眨眼一看进程概念其实是比较抽象的,我们来举个例子:比如QQ.exe就是一个.exe的可执行程序(存储在硬盘中,属于静态的)。当我们没有双击运行QQ的时候,这个.exe程序肯定是没有在运行的,此时我们就不能称之为是一个进程。
但是一旦我们双击运行QQ.exe这个可执行的程序时,这时才能被称之为是一个进程。再比如如果我们要同时运行多个相同的.exe可执行程序的时候(即一个程序运行多次),此时就可能产生多个进程。

我们看一下下图就是程序运行时候的进程。
在这里插入图片描述
当我们双击程序(即.exe可执行文件)时,操作系统就会把可执行文件中的指令和数据加载到内存中,然后cpu去执行其中的指令并完成一系列的工作,这是一个动态的过程,我们称之为进程。

另外,进程是操作系统中分配硬件资源的基本单位。当一个程序被执行时,操作系统会为其创建一个独立的进程,每个进程都拥有自己的虚拟地址空间、执行堆栈、文件描述符表等资源。进程可以独立地访问和管理这些资源,而不会与其他进程发生冲突。

进程和可执行文件的关系

进程是操作系统中正在运行的程序的一个实例,所以进程是程序的实例化

一个个可执行文件只是存储硬盘上,是一个静态的;而进程之所以是动态的是因为进程会消耗cpu资源、内存资源、硬盘、网络带宽等资源来完成一系列的工作。

进程的运行状态是不断变化的,包括进程的创建、运行、挂起、恢复、终止等操作。操作系统会根据进程的状态和运行环境来调度进程的执行,并分配必要的系统资源,如内存、CPU时间片、I/O操作等。

二、计算机如何管理进程

计算机管理进程的核心思路是先对进程进行描述,然后再对进程进行再组织。

在描述进程方面:

  • 操作系统通常会为每个进程分配一个唯一的标识符(PID),并记录进程的状态、程序计数器、寄存器状态、内存管理信息、打开文件列表以及资源分配信息等。这些描述信息通常会被存储在进程控制块(Process Control Block,PCB)(在Linux中称为task_struct,PCB只是一个通用的叫法)中。

在组织进程方面:

  • 一般是使用双向链表来对进程进行组织的(这里是针对Linux操作系统来说的,比如查看进程列表相当于遍历这个链表,创建进程相当于先创建一个结构体然后再把这个结构体插入到链表中,销毁进程就相当于把这个结构体从链表中删除;当然不同的操作系统所使用的数据结构肯定多多少少是有些区别的)。

进程管理

1.PID进程标识

  • 同一个系统中的同一个时刻,每个进行的PID标识都是不一样的。有时我们运行一个QQ.exe文件时可能会涉及到多个进程。

2.内存指针

  • 内存指针表示该进程所需要所对应的内存资源时怎样的。其中内存资源中最主要的就是从.exe文件加载过来的指令(先将指令从.exe文件中加载到内存中然后进一步交给CPU去执行)和数据(执行指令过程中依赖的一些数据);其中运行过程的一些中间结果也是存储到内存资源中。
  • 总之,内存指针要对指令、数据、以及进程中的一些中间结果要有一个区域划分。

3.文件描述符表
首先我们要知道硬盘是硬件,而应用程序是没法直接接触到硬盘的。实际上是操作系统把硬件抽象成文件,程序操作的是文件,而文件是存储在硬盘上的,这样的话相当于应用程序间接接触到硬盘这一层面了。
另外每个文件都会有文件描述符表来记录当前进程正在使用哪个文件。操作系统每打开一个文件就会产生一个文件描述符(这个文件描述相当于文件的身份标识,同时要注意这个文件描述符只在当前进程内部生效)。操作系统会使用文件描述符表(类似于数组)把文件描述符组织起来。

并行和并发

并行:同一时刻,两个进程同时运行再两个cpu逻辑核心上。

并发:两个进行在同一个cpu逻辑核心上轮着运行。但是由于cpu切换进程的速度极快,在微观上是串行执行,但是在宏观上是同时进行的。注意:并发执行并不意味着进程在同一时间点上真正地同时运行。它更强调的是在一段时间内交替执行,而每个进程只是在短时间内运行。

操作系统在调度这些进程的时候可能是按照并行的方式,也可能是按照并发的方式;但是无论是并行的方式还是并发的方式在应用程序这一层面是感知不到的,只有在cpu内核中才可以感知的到。

所以由于在应用程序方面感知不到到底是用哪种方式进行调度的,所以宏观上并行和并发这两种调度方式的体现方式是一样的,所以我们一般用“并发”来代指并行并发。所以我们平时看到并发的话如果不进行特殊说明的话我们一般将其理解为并行和并发

三、PCB中关于进程调度的相关属性

PCB中关于进程调度相关的属性描述了对应的CPU资源的使用情况。

1.进程状态(Process State):描述进程当前的状态,例如就绪(Ready)(即一个进程已经做好了随时在CPU中执行的准备)、运行(Running)、阻塞(Blocked)(有些时候进程没有准备好被调度到CPU中)等状态(进程在系统中的状态有很多种,其中最关键的状态就是运行和阻塞)。

2.优先级(Priority):标识进程的优先级,通常以数字或其他形式表示,较高的优先级将更容易获得 CPU 时间片,以便把系统资源调配给更重要的进程上。

3.上下文切换:为了确保进程能够在下次 CPU 运行时从上次的位置继续往后运行,操作系统会使用一种称为"上下文切换"的机制。
当一个进程的时间片用完或者遇到某个阻塞事件时,操作系统将触发上下文切换,将当前进程的状态保存到其对应的 PCB 中,并选择下一个要执行的进程进行调度。下次轮到该进程运行时,操作系统会从其 PCB 中恢复之前保存的状态,并从上次的位置继续执行。上下文切换过程中,PCB 记录了进程执行过程中 CPU 的寄存器中相关的数据。
这些寄存器中有的是存储的是中间过程的一些结果,有的是存储的一些特殊含义的数据(比如说下一条指令在哪里、当前函数的调用关系是什么),这些寄存器中的数据需要在进程离开CPU之前要保存好,即保存到对应进程的PCB中的上下文字段中(也就是内存中)。这样的话就方便该进程下次再次回到CPU中运行了,即把CPU上下文字段中(也就是内存中)的数据恢复到寄存器中,此时,进程就和上次执行的状态一模一样了。

4.通过查看每个进程的 PCB,可以获取其总执行时间和指令计数器的值,即可统计每个进程在 CPU 上执行的时间和指令数。

四、进程的隔离性和进程间通信

虚拟地址空间并非是物理内存上真是存在的地址,而只是在进程内存在。不同的进程中可以存在相同的虚拟地址空间,但实际上对应到的是不同的真实物理地址。

这样的话进程使用该虚拟地址的内存都需要操作系统进行一个把虚拟地址转换为真实物理地址的一个过程,在这个转换过程中就可以针对虚拟地址是否有效做出一个校验

另外,操作系统在执行进程过程中会检查是否存在非法内存的使用,如果进程访问了未被分配的内存,或者越界访问了已经分配的内存,那么操作系统就会通知这个进程,甚至是强制终止该进程,以避免对其它进程产生影响。

进程隔离性

所以在虚拟地址空间的加持下,每个进程都有自己独立的虚拟地址空间,并且每个进程无法直接访问或者修改其它进程的虚拟地址空间,进而提高了系统的稳定性。

进程间通信

在进程隔离性的基础上,进程之间是可以进程有限制的通信的。进程之间进行通信之间的方式是由很多种的,但是无论是哪一种方式,都是找到一块共同的区域,即多个进程都可以访问到的区域,那么这多个进程就可以通过这个公共的区域来进行数据的交换

好了,本文到这里就结束了,希望友友们可以支持一下一键三连哈。嗯,就到这里吧,再见啦!!!

在这里插入图片描述

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

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

相关文章

python:五种算法(GA、OOA、DBO、SSA、PSO)求解23个测试函数(python代码)

一、五种算法简介 1、遗传算法GA 2、鱼鹰优化算法OOA 3、蜣螂优化算法DBO 4、麻雀搜索算法SSA 5、粒子群优化算法PSO 二、5种算法求解23个函数 (1)23个函数简介 参考文献: [1] Yao X, Liu Y, Lin G M. Evolutionary programming made…

百度文库下载要用券?Kotlin爬虫几步解决

百度作为国内知名的网站,尤其是文库里面有各种丰富的内容,对我们学习生活都有很大的帮助,就因为其内容丰富,如果看见好用有意思的文章还用复制粘贴等方式就显得有点落后了,今天我将用我所学的爬虫知识给你们好好上一课…

基于51单片机的语音识别控制系统

0-演示视频 1-功能说明 (1)使用DHT11检测温湿度,然后用LCD12864显示,语音播放,使用STC11l08xe控制LD3320做语音识别, (2)上电时语音提示:欢迎使用声音识别系统&#xf…

【vue实战项目】通用管理系统:信息列表,信息的编辑和删除

本文为博主的vue实战小项目系列中的第七篇,很适合后端或者才入门的小伙伴看,一个前端项目从0到1的保姆级教学。前面的内容: 【vue实战项目】通用管理系统:登录页-CSDN博客 【vue实战项目】通用管理系统:封装token操作…

实验制备高纯酸PFA酸纯化器材质分析,SCH亚沸蒸馏器特点是什么

.酸纯化器:也称酸蒸馏器、高纯酸提取系统、酸纯化系统、亚沸腾蒸馏器、高纯酸蒸馏纯化器。常规实验室分析中,各种酸及试剂被广泛应用于日常的样品处理及分析中。那么应该选用什么材质的酸纯化器呢 氟塑料酸纯化器,提纯酸效果好,避…

基于Python+WaveNet+MFCC+Tensorflow智能方言分类—深度学习算法应用(含全部工程源码)(四)

目录 前言引言总体设计系统整体结构图系统流程图 运行环境模块实现1. 数据预处理2. 模型构建3. 模型训练及保存4. 模型生成 系统测试1. 训练准确率2. 测试效果 相关其它博客工程源代码下载其它资料下载 前言 博主前段时间发布了一篇有关方言识别和分类模型训练的博客&#xff…

蓝桥杯小白赛第一场(1~6)(期望DP)

1、模拟 2、贪心 3、前缀和 4、猜结论 5、双指针 6、期望DP 1. 蘑菇炸弹 思路&#xff1a;一个简单的暴力模拟。 #include <bits/stdc.h> using namespace std; int main() {int n;cin >> n;vector<int>a(n , 0);for(int i 0 ; i < n ; i )cin &…

智能优化算法应用:基于群居蜘蛛算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于群居蜘蛛算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于群居蜘蛛算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.群居蜘蛛算法4.实验参数设定5.算法结果6.…

Linux---Ubuntu操作系统

1. Ubuntu操作系统的介绍 Ubuntu操作系统是属于Linux操作系统中的一种&#xff0c;它是免费、稳定又可以拥有绚丽界面的一个操作系统 2. Ubuntu图形界面的介绍 任务栏 窗口操作按钮 窗口菜单条 任务栏效果图: 窗口操作按钮效果图: 窗口菜单条效果图: 3. 与Windows目录结…

嵌入式系统复习--ARM技术概述

文章目录 上一篇ARM体系结构Thumb技术介绍ARM处理器工作状态ARM的异常响应过程ARM存储器接口及存储器层次下一篇 上一篇 嵌入式系统复习–概述 ARM体系结构 ARM体系结构的技术特征 ARM的体系结构采用了若干Berkeley RISC处理器的特征 Load/store体系结构固定的32为指令3地址…

5. PyTorch——数据处理模块

1.数据加载 在PyTorch中&#xff0c;数据加载可通过自定义的数据集对象。数据集对象被抽象为Dataset类&#xff0c;实现自定义的数据集需要继承Dataset&#xff0c;并实现两个Python魔法方法&#xff1a; __getitem__&#xff1a;返回一条数据&#xff0c;或一个样本。obj[in…

ros的slam建图和导航(含工作空间)

工作空间的结构 准备工作 创建工作空间&#xff08;ros_zy&#xff09; mkdir ros_zy进入工作空间 cd ros_zy创建src文件夹&#xff08;放源程序&#xff09; mkdir src编译工作空间 catkin_make打开vscode&#xff08;从终端打开此工程&#xff09; code .进入工作空间的…

分页存储管理

页框和页面 将内存空间分为一个个大小相等的分区 (比如:每个分区4KB)&#xff0c;每个分区就是一个“页框”(页框页内存块物理块物理页面)。每个页框有一个编号&#xff0c;即“页框号”(页框号页帧号内存块号物理块号物理页号)&#xff0c;页框号从0开始。 为了将各个进程的数…

LeetCode(56)两数相加【链表】【中等】

目录 1.题目2.答案3.提交结果截图 链接&#xff1a; 两数相加 1.题目 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和…

Word插件-好用的插件-批量插入图片-大珩助手

现有100张图片&#xff0c;需要批量插入word中&#xff0c;并在word中以每页6张图片的形式呈现&#xff0c;请问怎样做&#xff1f; 使用word大珩助手&#xff0c;多媒体-插入图片&#xff0c;根据图片的长宽&#xff0c;选择连续图片、一行2个图或一行3个图&#xff0c;可一次…

Java EE 多线程之 JUC

文章目录 1. Callable 接口2. ReentrantLock3. 信号量4. CountDownLatch JUC这里就是指&#xff08;java.util.concurrent&#xff09; concurrent 就是并发的意思 这个包里的内容&#xff0c;主要就是一些多线程相关的组件 1. Callable 接口 Callable 也是一种创建线程的方式…

BeautifulSoup学习

前期准备&#xff1a; pip install bs4 pip install lxml bs解析器 从上面的表格可以看出&#xff0c;lxml解析器可以解析HTML和XML文档&#xff0c;并且速度快&#xff0c;容错能力强&#xff0c;所有推荐使用它。 节点选择器 获取名称 soup BeautifulSoup(<b class&…

计算机毕业设计 基于SpringBoot的乡村政务办公系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

持续集成交付CICD:Jenkins流水线操作Harbor仓库

目录 一、实验 1.Jenkins主节点安装Docker 2.Jenkins主节点安装Harbor 3.Jenkins从节点安装Docker 4.Jenkins流水线操作Harbor仓库 二、问题 1.Jenkins主节点登录Harbor仓库报错 2.Jenkins流水线里从节点操作docker报错 3.Jenkins流水线里从节点远程登录Harbor仓库报错…

thinkphp 使用array_reduce 处理返回的数据格式

我想要的效果&#xff1a; 不使用array_reduce 的效果 &#xff1a; 代码&#xff1a; public function teamList($userId,$good_id){$nowbuyers $this->order->where(good_id,$good_id)->count();$data GroupTotalOrder::alias(t_order)->where(merchant_Id,$u…