前言:
大家好,我是良辰丫,今天我们来认识一下进程
的相关概念,当接触到进程,也就意味着我们进入了javaEE的学习阶段,这篇文章主要带大家去学习一些面试题,帮助大家更好的去学习并熟悉进程,跟着我的步伐一起进入学习吧!!!💞💞💞
🧑个人主页:良辰针不戳
📖所属专栏:javaEE初阶
🍎励志语句:生活也许会让我们遍体鳞伤,但最终这些伤口会成为我们一辈子的财富。
💦期待大家三连,关注,点赞,收藏。
💌作者能力有限,可能也会出错,欢迎大家指正。
💞愿与君为伴,共探Java汪洋大海。
1、 进程(任务)是什么
所谓进程
,可以这样理解,一个运行起来的程序就叫进程.也可以把程序比作一个工厂,工厂正在加工运转的即进程.
每个应用程序运行于现代操作系统之上时,操作系统会提供一种抽象,好像系统上只有这个程序在运
行,所有的硬件资源都被这个程序在使用。这种假象是通过抽象了一个进程的概念来完成的,进程可以说是计算机科学中最重要和最成功的概念之一。
进程是操作系统对一个正在运行的程序的一种抽象,换言之,可以把进程看做程序的一次运行过程;同时,在操作系统内部,进程又是操作系统进行资源分配的基本单位。
后缀名为exe的文件叫做可执行文件,在没有点击它运行之前,它只能叫做程序,当我们点击它之后,在它运行的时候,我们就给它有了新的定义,叫做进程.
进程运行的时候需要向操作系统申请资源,需要反复强调的一句话是进程是操作系统进行资源分配的基本单位,此处涉及的资源包括内存,硬盘,CPU等.
2、 进程控制块相关概念
pid
: 进程的唯一标识,相当于一个人的身份证号码.内存指针
: 当前内容使用的内存是那一部分(表示地址指向),进程要跑起来就需要消耗一定的硬件资源,比如内存.文件描述符表
: 硬盘上存储的数据,就是以文件为单位进行整理的,进程每次打开一个文件,就会产生一个文件描述符(标识了这个被打开的文件),一个进程可能会打开许多文件,对应了一组文件描述符,把这样的文件描述符放到一个顺序表这样的结构里面,就构成了所谓的文件描述符.这标识着进程运行的时候使用了哪些硬盘上的资源.进程关联的程序信息
,例如哪个程序,加载到内存中的区域等分配给该资源使用的各个资源
3、 进程与CPU资源的相关属性
程序之所以能运行,全依靠CPU,每个程序,其实就是一组二进制指令的集合,那么我们简单认识一下CPU.
cpu
中文名叫中央处理器(Central Processing Unit,简称CPU),是计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元。CPU是人类科技史上最伟大的成就之一.
3.1 进程状态
进程有许多运行状态,我们主要了解两个状态.
就绪状态
: 进程已经准备好,随时可以在CPU上执行.阻塞状态
: 该进程无法在CPU上执行.
简单了解一下上面两个状态,加入你有一个好朋友A,你们两个约好一起去旅游,但是暂时没有定时间,A也没有其它的事情要干,当你要去旅游的时候,你可以随叫随到,这就相当于就绪状态;你还有一个好朋友B,因为一些特殊的情况,他出差了,你们曾经约定可以一起旅行,但是可能暂时做不到了,这就是所谓的阻塞状态.
3.2 进程的优先级
进程是具有一定的优先级的,在CPU上规定了一系列对进程的优先级约束,比如先来先服务就是按照哪个进程先执行,另一个进程进入阻塞状态.按照优先级的次序进行执行.
3.2 进程的上下文
所谓上下文
,就是描述了进程执行到哪里的存档信息,进程在离开CPU的时候要对当前进程运行的中间结果进行存档,等下次进程回到CPU的时候恢复之前的存档,从上次的结果继续向后执行,这样就不会后台退出,比如王者农药这个游戏,我们挂着后台回复一个消息或者干一些别的事情,我们回到王者,后台依然存在.
- 如果进程结束了,就不必进行存档.
- 在进程中理解上下文,进程在运行的过程中,CPU内部的一系列寄存器的值,其中,寄存器的作用有很多,我们需要记得的是寄存器用来保存当前进程执行的中间结果,包括进程运行到哪一条指令.
存档
,就是进程在离开CPU的时候,就需要把这些寄存器的值存到PCB的上下文字段中;读档
,进程下次回到CPU,再把PCB的值恢复到寄存器中.
3.3 并行与并发
并行
: 同一个时刻,两个核心同时执行两个进程,此时这两个进程就是并行执行的(一起执行).并行可以理解为两个人分别一起做两件事情.
并发
: 一个核心,先执行进程1,执行一会再执行进程2,执行一会儿进程2之后再执行进程3…然后再返回来执行进程1,一会再执行进程2…只要切换的速度快,在我们肉眼看来其实和并行没有什么区别(可以简单的认为同时执行).
很多情况下操作系统的任务通过并行和并发两种方式共同完成的,我们通常把并行+并发的方式统称为并发.当一个核心(主体)并发执行几万甚至几十万个任务的时候,我们把它叫做高并发.
3.4 进程的进账信息
统计每个进程在CPU上执行了多久,可作为进程调度的参考依据.比如在CPU中三个进程ABC,可能进程A执行时间比较少,我们就可以多给它分配一些执行时间.
3.5 组织PCB
操作系统往往通过双向链表组织PCB
- 创建一个进程就是创建一个链表节点.
- 销毁一个进程就是销毁一个链表节点.
- 遍历进程就是遍历进程链表.
3.6 内存分配(内存管理)
操作系统对内存资源的分配,采用的是空间模式 —— 不同进程使用内存中的不同区域,互相之间不会干扰.操作系统给资源分配的内存,是以虚拟地址空间的方式进行分配的,每个进程访问的内存地址,其实并不是真正的内存地址.
3.6.1 直接访问物理内存地址
下面是进程直接访问物理内存地址,此时可能产生问题,如果进程A奔溃了,会把同一内存条上的其它进程也搞奔溃.这就对于操作系统的稳定性产生了一定的挑战.
那么,什么是
稳定性
,可以简单的认为,两个相关联的东西,其中一个坏掉了导致另外一个不能运行,这就是说明这两个相关联的东西形成的整体稳定性较差;反之,如果没有较大的影响,我们就说这个整体稳定性较好.
3.6.2 通过虚拟地址访问物理内存地址
上面两个进程中,通过代码操控自己要访问的物理内存地址,访问的内存会被操作系统自动映射到真正的物理内存上,但是进程自身感知不到真正的物理内存地址是什么.此时进程A奔溃了就不会影响进程B,因为任何一个内存操作都需要通过页表来进行翻译,如果出现野指针,野指针的地址会与页表上的地址进行对比,如果页表上没有这个地址将无法翻译,也就无法访问并修改物理内存,因此呢,也不会对别的进程造成干扰.
这样可以有效的校验,校验当前的地址是否有效.一个进程无法干预另一个进程的内存,表示了每个进程有自己独立的地址空间.这样大大提高了操作系统的稳定性.
3.7 进程间的通信
有些时候进程之间需要相互配合,交互运行.
如果每个进程可以直接访问物理内存(没有隔离性),也就不需要进程通信,进程A直接把结果写到进程B的内存中就可以了.文章来源:https://www.toymoban.com/news/detail-401100.html
所谓进程通信
,就是在隔离性的前提下,找一个公共区域,让两个进程借助这个公共区域完成进程间的数据交换.- 操作系统提供的进程间通信方式有很多种,有管道,消息队列,共享内存,信号等.
- 在java中,我们主要使用文件和socket这两种方式完成进程通信(后续详解).
后序:
今天我们有关的内容就到这里了,我们学习了进程的一些相关概念,学习了进程控制块,进程一些属性等内容,希望本篇小小的文章可以帮到大家💌💌💌文章来源地址https://www.toymoban.com/news/detail-401100.html
到了这里,关于【进程相关概念】面试常见问题,进程状态,进程优先级,并行与并发,进程通信等的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!