进程

1. 三个概念

工程(project):

新建一个工程
编写+编译阶段用到的,
组织代码结构、资源(图片、视频...)结构用到

程序(program):

片面的:一个可执行的文件
编译完成,运行之前
一个程序可以同时起多个任务(进程)

进程(process)/任务(task):

对于操作系统来说,一个任务就是一个进程(Process)。
程序的一次执行过程(开始和结束)(运行期)
任务之间是有父子关系(子任务)
进程是操作系统进行资源分配的最小单位

一个程序刚开始就是一个在硬盘上的程序,加载运行时,是为了完成某些任务(如迅雷完成下载任务),而要完成任务,就需要操作系统为该任务提供足够做的资源(如内存和CPU资源),而这一整套任务的执行,可以叫做进程
进程是担当分配系统资源(CPU时间,内存)的实体,是具有动态特性。

进程的切换:

常见的发生进程切换的场景:
	1.有一个更高优先级的进程过来----抢占式OS
	2.任务完成(进程结束,自然而然会切换到下一个进程)
	3.每个进程都是先分配好时间片,时间到达后,就切换
	4.当前进程正在等待一个外部事件----阻塞
实例:

一个 java 进程:

public class Test{
	publci static void main(Stirng[] args) throws Throwable{
		Thread.sleep(99999999);
	}
}

在 cmd 中编译并运行:

processor是0代表什么意思 process是什么意思?_时间片


运行之后会启动java程序(进程),可以在任务管理器中查看到该进程:

processor是0代表什么意思 process是什么意思?_时间片_02


PID代表这个进程的代号,而java虚拟机,本质上只是一个系统中的进程而已。

2. 时间片

操作系统(如Windows、Linux)的任务调度是采用时间片轮转的抢占式调度方式,即一个任务执行一小段时间后强制暂停去执行下一个任务,每个任务轮流执行。

任务执行的一小段时间叫做时间片,任务正在执行时的状态叫运行状态,任务执行一段时间后强制暂停去执行下一个任务,被暂停的任务就处于就绪状态等待下一个属于它的时间片的到来。

这样每个任务都能得到执行,由于CPU的执行效率非常高,时间片非常短,在各个任务之间快速地切换,给人的感觉就是多个任务在“同时进行”,这也就是并发

3. 并发与并行

并发:多个进程在一个CPU下采用时间片轮转的方式,在一段时间之内,让多个进程都得以推进。
并行:多个进程在多个CPU下分别,同时进行运行。

并发性(单处理机的情况下,多个进程在同一时间间隔运行的)
并行性(多处理机的情况下,多个进程同时运行)

并发是假同时,并行是真同时

4. 内核态与用户态

一般的操作系统对执行权限进行分级:用户态和内核态。

操作系统内核作为直接控制硬件设备的底层软件,权限最高,称为内核态,或核心态
用户程序的权限最低,称为用户态

5. 进程中的上下文

上下文:就是一个环境,进程在时间片轮转切换时,由于每个进程运行环境不同,就涉及到转换前后的上下文环境的切换。

  • 就是一个进程在执行的时候,CPU的所有寄存器中的值、进程的状态以及堆栈上的内容。
  • 切换时需要保存当前进程的所有状态,即保存当前进程的进程上下文,以便再次执行该进程时,能够恢复切换时的状态,继续执行。

6. 进程状态

processor是0代表什么意思 process是什么意思?_时间片_03

就绪:进程处于可运行的状态,只是CPU时间片还没有轮转到该进程,则该进程处于就绪状态。 
运行:进程处于可运行的状态,且CPU时间片轮转到该进程,该进程正在执行代码,则该进程处于运行状态。 
阻塞:进程不具备运行条件,正在等待某个事件的完成。