【JavaEE学习】初识进程概念-LMLPHP

一、什么是进程

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

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

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

进程和可执行文件的关系

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

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

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

二、计算机如何管理进程

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

在描述进程方面:

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

在组织进程方面:

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

进程管理

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

并行和并发

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

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

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

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

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

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

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

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

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

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

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

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

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

【JavaEE学习】初识进程概念-LMLPHP

12-13 13:33