进程【JavaEE初阶】

news2025/3/1 15:22:07

目录

一、操作系统

二、进程

2.1 进程的概念

2.2 进程的管理

2.3 PCB

2.3.1 PCB里面的一些属性

2.3.2 进程的调度

2.3.3 进程的虚拟地址空间

2.3.4 进程间通信 


一、操作系统

CPU、存储器、输入设备、输出设备,这些实物看得着摸得到的,都属于 "硬件" 设备。

这些硬件是怎么为我们服务的呢?发明了 操作系统

操作系统的核心功能:

  • 对下,要管理各种硬件设备
  • 对上,要给各种软件提供稳定的运行环境

如:Windows、Mac、Android、IOS 都是常见的操作系统,虽然厂商不同,细节上有所差别,但是核心操作都是这两条 

操作系统本身就是一个非常复杂的软件,包含了如:内存管理、文件管理、设备管理、进程管理等等操作。其中,"进程管理" 是一个非常重要的概念。

二、进程

2.1 进程的概念

        "进程(process)", 有些地方也叫做 "任务(task)"都是同一个意思,是操作系统里面的一个非常重要的概念。

一个正在运行的程序,都是以 "进程" 的方式来体现出来的

        通过双击可执行文件(.exe文件),操作系统就会把可执行文件的核心信息加载到内存上,并且开始运行里面的代码,从而形成了一个进程,这个进程就是可执行程序跑起来的模样 

现在的电脑,可以有多个进程一起执行起来的,可以打开任务管理器,看看此时电脑的进程:

注意区分"进程" 和 "程序(可执行文件)"  之间的区别:

如:

 这是一个 进程,是QQ所跑起来的模样(是动态的,被加载到内存中的)

 这是一个 可执行文件,是静态的,躺在硬盘上的~~ 

一个计算机的硬盘上,躺着很多的可执行文件,但只有一小部分在运行(变成了进程)

点击可执行文件,那么这个文件在内存上跑起来了,就成了进程


2.2 进程的管理

一个操作系统上,同时跑着许多个进程,有的进程是自己开的,还有的是电脑操作系统自动开的。

既然有这么多的进程,操作系统是怎么进行管理的? 

管理的思路就是:先描述再组织

  1. 先描述:使用一个类/结构体,把这个东西有啥特征都表示出来~~
  2. 再组织:使用一个数据结构,把很多个这样的对象/结构体给整理到一起~~

        比如说,现在有一个需求场景:需要给同学发奖品

        那么,首先需要把这些同学的信息给描述出来,虽然信息有很多,但是我们只需要知道这些同学的学号、姓名就可以了(至于说同学的性别、身高、体重啥的都不关心);然后可以用数据结构把这些同学组织在一起,然后就可以发奖品啦~~ 

        类似的,操作系统在进行管理进程的时候,首先用一个结构体把很多进程相关的特征都去进行了一些描述;再用数据结构把这些结构体变量组织在一起。


2.3 PCB

        PCB,叫做 "进程控制块" 。它就是一个结构体,这个结构体里就包含了一些表示进程的核心信息。在操作系统内核中,把若干个 PCB 串成了一个双向链表,这就是进程管理的核心模块。

        在任务管理器中,看到了许多的进程,本质上每一个进程都是一个PCB,进程与进程之间是通过双向链表串起来的,当我们运行一个进程,就是在链表里面新增一个节点,当我们销毁一个进程,就是在链表里面删除一个节点。 


2.3.1 PCB里面的一些属性

pid:进程的身份标识,唯一,类似于 "学号"

一些基本概念:

内存指针:操作系统要把一些必要的数据加载到内存中.

必要的数据:有些是运行的指令(代码),有些是运行时依赖的数据(全局变量)

内存指针就描述了该进程中哪些部分是指令,哪些部分是数据

文件描述符表:表示了当前进程都打开了哪些文件,进程每打开一次文件,就会在文件描述表上记录一些重要的信息。

在代码中打开一个文件,就会在进程的 文件描述符表 里给这个文件分配一个表项。

可以看作 数组,每个元素代表了一个打开的文件,它对应的数组下标就是 "文件描述符"。 

所以说,内存指针 和 文件描述符表 就描述了进程有哪些系统的资源,也认为 进程是操作系统中 "资源分配" 的具体单位!!!  


2.3.2 进程的调度

进程里面还有一组比较关键的属性,用来实现进程的调度。

  1. 进程的优先级
  2. 进程的状态
  3. 进程的记账信息
  4. 进程的上下文

什么是调度:

        本质问题:当前计算机 CPU 能力是有限的,但是进程的数量却比较多,每个进程都需要消耗一定的 CPU资源, 操作系统要做到尽可能的公平,这时候就需要进行 "调度"。


        类似于高铁站的 "调度"工作,铁轨就只有几根,但是每天在上面跑的高铁 确实有许多的,那么 "调度" 就是要规划好 高铁什么时候开,从哪条铁轨上开,从哪里开到哪里......"调度"工作就是需要保证 这些高铁之间需要有条不紊的开,相互之间不可以打架~~ 


        这里的解决方法,就是 "轮流来",虽然进程的运行速度会受到一定的影响,但是 受到的影响相对来说是比较小的,毕竟,CPU的主频是 XX GHz,1秒钟有上几十亿个时钟周期,人是感受不到这么快的切换的。


比如说,此时 我正在打开 CSDN,但是 QQ也照样是开着的,表面上看,这些进程在同时执行,其实不然,而是以 "轮流" 的方式占用 CPU 执行。这种方式,我们称之为 "并发式的执行"

由于 CPU 上有多个核心,每个核心上都可以跑一个进程,某一时刻两个进程在两个 CPU 核心上同时执行,这时宏观上和微观上都是同时执行的。这种方式,称之为 "并行式的执行"

那么,现在就可以来解释 进程里的那些关键属性了~

进程的优先级cpu资源分配的优先顺序,就是指进程的优先权(priority)。

进程的状态:对于 进程 来说,有很多的状态,其中最典型的,就是 就绪状态 和 堵塞状态:

  • 就绪状态:进程是准备就绪的,随时都可以让 CPU 执行~
  • 阻塞状态:进程在等待某个任务结束之后,才可以让 CPU 执行;在完成之前,就没法继续执行~

进程的记账信息:记录以往每个进程在 CPU 上执行的时间,当然,也不一定是以执行的时间为单位,也可能是以执行的指令数为单位。

进程的上下文:具体指的就是 CPU 里的一堆寄存器里面的值,上下文 就会在进程被切出 CPU 的时候,把寄存器的状态保存到内存里;下次进程回到 CPU 上,就把 PCB 里的上下文读取出来,恢复到 CPU 寄存器中,做到无缝连接


2.3.3 进程的虚拟地址空间

进程,需要调用一些系统的资源,其中的内存资源,就是一个很关键的资源。

每个进程都只能访问到自己的地址空间,相互之间都不会有影响了,哪怕指针指错,操作系统也能及时发现,不会影响到其他的进程。这是一个非常重要的特性:隔离性!!!

现在又引出一个问题:

每个进程都有一个 "虚拟地址空间",那么 一个系统里面的进程有那么多,这些虚拟地址空间加到一起,比物理内存大了,那怎么办呢?


虽然系统里面的进程有很多,但实际上同一时刻进行的进程没有几个!!!
即使同一时刻,有好几个进程在跑,这些进程也不是同时把所有的虚拟内存地址空间的内存都用上了(假设 同时有6个进程在跑,很可能每个进程只用了 1M 的内存空间,虽然每个进程的虚拟空间很大,但实际使用的内存只有一小部分,物理内存只需要把真实使用的这部分内存数据给表示出来即可)!!!
极端情况下,同时跑的几个进程同时吃了很多的真实内存,会导致物理内存不够,此时 出现这种情况,算 bug,程序员需要想出办法来优化一下内存占用,或者扩容换一个内存更大的机器。


2.3.4 进程间通信 

进程引入了隔离性,确实使得系统更稳定了,但是也带来了其他的问题:

如果多个进程之间想要配合工作,就麻烦了,

操作系统又引入了 "进程间通信",在隔离行的前提下 开了个口子,让多个进程之间能相互通信。

操作系统提供的进程通信方式有很多种,但是本质上都是一样的:搞一个多个进程之间都能访问到的公共资源,借助公共资源来进行通信!!! 


就类似于之前疫情比较严重的时候,点外卖的时候要求 "无接触配送",外卖小哥直接把外卖放到一个专门的 集中放置的地点,点外卖的人直接去那个地点去取外卖~~

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

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

相关文章

web前端-javascript-switch条件分支语句(语法,执行流程,补充)

文章目录条件分支语句(switch 语句)1. 语法;2. 执行流程:2.1. 在执行时会依次将 case 后的条件表达式的值和 switch 后的条件表达式的值进行全等比较2.2. 如果比较结果为 true,则从当前 case 处开始执行代码2.3. 如果比较结果为 false&#x…

【知识网络分析】研究机构合作网络(co-investigator institution)

研究机构合作网络(co-investigator institution) 1 网络数据集读取2 网络最大子群数据获取与精简3 中心点指定网络半径子群获取4 节点中心度相关指标计算1 网络数据集读取 使用GC.networkCoInvestigatorInstitution()方法快速生成研究结构合作网络数据集,其中GC代表着读入p…

解析华为OSPF协议

文章目录 前言一、pandas是 目录 文章目录 OSPF基础 一、报文类型 二、LSA类型 三.LSA在各区域中传播的支持情况 四.邻居状态机 邻居关系 邻接关系 8种状态机: OSPF报文认证 OSPF缺省路由 2.读入数据 总结 什么?二、使用步骤 1.引入库2.读入数…

卷积神经网络CNN各层基本知识

卷积神经网络 卷积神经网络(CNN)由输入层、卷积层、激活函数、池化层以及全连接层构成。 INPUT(输入层)-CONV(卷积层)-RELU(激活函数)-POOL(池化层)-FC(全连接层&#…

[VNCTF2022]easyj4va

看源码 输入 /file?url 1报错 用伪协议可以读取到内容 /file?urlfile:///etc/passwd 然后就是查看java字节码文件的目录 file?urlfile:///usr/local/tomcat/webapps/ROOT/WEB-INF 这里官方给了另外一个协议netdoc,跟file用法是一样的,但是这个netd…

JDK动态代理与Cglib动态代理使用详解

JDK动态代理与Cglib动态代理使用详解一、JDK动态代理准备使用二、Cglib动态代理准备使用Enhancer.create(Class type, Callback callback)Enhancer.create((Class superclass, Class[] interfaces, Callback callback))Enhancer.create(Class superclass, Class[] interfaces, …

【学习笔记35】JavaScript计算两个指定日期的时间差

一、要求 计算两个指定日期的时间差(2023年元旦到来的时间) 二、分析 先获取到两个时间距离1970(格林尼时间)~~~毫秒数计算两个毫秒数的差值 ----> 得到了总毫秒数计算总毫秒数内, 有多少个完整的天 parseInt(总毫秒数 / 一天的…

会话跟踪技术-session和cookie

会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。 Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。 Cookie对象与HttpSession对象简…

nginx(六十七)http_ssl模块 client与nginx的ssl握手

一 HTTPS握手机制 关注点: SSL/TLS握手的细节与nginx配置指令的关系核心: 讲解客户端(下游)与作为server端的nginx之间的握手最佳实践: 建议在http块中通过include ssl.conf把共工部分抽离处理ssl/tls报错原因:可能是客户端或服…

Flutter高仿微信-第56篇-搜索好友

Flutter高仿微信系列共59篇,从Flutter客户端、Kotlin客户端、Web服务器、数据库表结构、Xmpp即时通讯服务器、视频通话服务器、腾讯云服务器全面讲解。 详情请查看 效果图: 实现代码: /*** Author : wangning* Email : maoning20080809163.co…

Java---Stream流详解

目录​​​​​​​ 一、Stream流详解 二、Stream流的获取 (1)单列集合 (2)双列集合 (3)数组 (4)一些零散数据 三、Stream流中常用的API方法 (1)中间…

含可再生能源的热电联供型微网经济运行优化_粒子群PSO算法_matlab程序

含可再生能源的热电联供型微网经济运行优化matlab程序 参考文献:含可再生能源的热电联供型微网经济运行优化 热电联供系统具有节能! 环保! 经济等特点" 有着良好的发展前景和应用价值# 文中针对由 风电机组! 光伏电池! 燃料电池! 余热锅炉! 燃气锅炉! 蓄电池以…

含电热联合系统的微电网运行优化附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

SpringBoot+Vue项目投稿和稿件处理系统

文末获取源码 开发语言:Java 使用框架:spring boot 前端技术:JavaScript、Vue.js 、css3 开发工具:IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库:MySQL 5.7/8.0 数据库管理工具:phpstudy/Navicat JD…

MYSQL中的锁

全局锁 就是对整个数据库进行加锁,加锁之后整个数据库就处于只读状态,后续的DML写语句,DDL语句,以及对更新事务的提交操作都会被阻塞,典型地使用场景就是做整个数据库的逻辑备份,对所有的表进行锁定&#x…

非凡社群管理之如何高效的进行社群管理

一、初始成员的严格筛选 我们建立社群初期,就要严格筛选初始会员,争取让我们找到的第一批种子用户,就是有着共同的连接点。而不是找到一群人之后,再去培养大家的同好。这样不仅吃力不讨好,往往效果也不太高&#xf…

Kafka系列之:实现Kafka Connect集群访问认证

Kafka系列之:实现Kafka Connect集群访问认证 一、Kafka Connect访问控制二、Kafka Connect技术知识三、详细介绍Kafka connect访问认证实现过程四、启动Kafka Connect集群五、测试Kafka Connect集群访问认证一、Kafka Connect访问控制 实现的效果如下所示: 错误的用户名和密…

nginx降权及匹配php

1.nginx降权 1.1 capabilities的介绍与运用 1.2 用普通用户启动nginx 1.3 root用户权限赋予 1.4 查看普通用户的nginx权限 1.5 查看nginx的欢迎网页 2.nginx与php的相互匹配 2.1 安装php及php-fpm包 2.2 检查php-fpm服务运行状态 2.3 php-fpm上的配置 2.4 nginx上的配…

基于matlab的精馏塔作业模拟仿真

欢迎订阅《FPGA学习入门100例教程》、《MATLAB学习入门100例教程》 目录 一、理论基础 二、核心程序 三、测试结果 一、理论基础 原料物性表如下: 表3-1原料物理性质表 组分 质量流率 质量分数 摩尔流率 摩尔分数 分子量 常压沸点 丙烷 472.938 7.567…

SpringBoot SpringBoot 原理篇 1 自动配置 1.9 bean 的加载方式【七】

SpringBoot 【黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)】 SpringBoot 原理篇 文章目录SpringBootSpringBoot 原理篇1 自动配置1.9 bean 的加载方式【七】1.9.1 ImportBeanDefinitionRegistrar1 …