1.进程的概念

进程(Process)是操作系统对程序进行操作的概念分离,可以理解为程序一次执行的过程,同时进程是系统进行分配资源的最小单位。

1.1 进程控制块

进程控制块(Process Contral Block)可以理解为进程中执行操作的部分,例如,实现一个Test类,程序在执行到该类时,此时这一个类表示的就是一个进程块。

class Test{
    private int a;
    private String s;
    
    //----方法一
    
    // ---- 方法二

    //----
}

1.2 进程调度

进程调度(Process Scheduling)也称进程分配,指的是操作系统执行进程时所分配的资源。

2.进程的关键要点

2.1 进程的标识符

操作系统给进程分配资源时需要先找到进程,而每一个进程系统都会分配一个PID作为进程的ID,
打开电脑的任务管理器(Ctrl + Shift + Esc)就可以找到当前的执行的进程和进程ID。
在这里插入图片描述

2.2 内存指针

系统在执行进程的过程本质上是在执行指令,进程的指令的构成由指令码和操作数组成,而这一些指令存储在一个容器中,当需要执行指令,需要找到存储容器的地址,而这个地址就保存在内存指针中(可以是一组)。

例如,进程执行的是一个加法的过程,操作数是 1 和 2;

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

系统执行进程的指令是从上到下执行,先执行第一条指令,获取到指令码:0001ff01,由IR读取后交给系统进行解析,通常指令码由4为操作码和4位操作数组成,解析完成后进行操作,0001是将操作数存放在寄存器A上,操作数是在RAM(Random Access Memory)地址上获取,ff01地址上的数据是1,将数据1存储在寄存器A中,完成第一条指令,程序计数器变为1;

在这里插入图片描述
同样的执行第二条指令,将操作数存放在寄存器B中。
在这里插入图片描述

第三条指令是将寄存器A和寄存器B存储的两个值相加,将相加的结果存放在寄存器A中,指令后的操作数是寄存器的编号,00表示的是寄存器A,01表示的是寄存器B。

在这里插入图片描述
第四条指令是将寄存器A的内容存放在指定的RAM位置。

在这里插入图片描述
通过内存地址就可以获取进程执行的指令信息和执行流程。

2.3 文件描述符

在操作系统中,并不会每时每刻都只执行一个进程,进程的执行需要系统分配资源,当系统暂时不执行进程时,可能进程的所有指令还未执行完成,等系统再次分配资源时,需要继续往下执行进程的指令,但是需要知道进程上一次执行的位置在那里,此时就可以使用文件描述符,文件描述符记录了进程执行的指令数(PC来查询),进程的PID,指令的执行结果等信息,等再次执行该进程,通过文件描述表就可以恢复到原来的进程执行的位置。

在这里插入图片描述

2.4 进程的状态

进程常见的状态有两种:
就绪状态:进程可以随时到CPU上运行;
堵塞状态:系统分配资源给进程,但是进程不一定能在CPU上运行。

2.5 进程的优先级

系统在给进程分配资源时,会根据进程使用的频率优先给使用频率高的进程分配资源,每一次使用进程,系统都会记录下进程的使用次数。

2.6 进程的上下文

进程执行过程中并不是每次都能一次执行完成,当遇到进程中断时,就需要保存进程的上下文,将进程的一些属性(如:PID,PC,内存指针)从寄存器读取后存放在内存中,当需要再次执行进程时,从内存中读取相关属性重新存放到寄存器中。

2.7 进程的记账信息

每一次进程的执行系统都会统计,当系统发现一些进程长时间未被执行时,系统就会向该进程分配多一些资源,去执行该进程。

3.线程

线程可以理解为一个执行流,不同的线程按照各自的顺序执行各自控制的模块,多个线程控制着多个模块。

在这里插入图片描述

3.1 为什么需要线程?

1)并发编程的需要;单核cpu的算法遇到瓶颈,无法满足同一个时刻执行多个线程,而在多核心的情况下并发编程可以解决这种问题;

2)在进行读取操作时有时会有等待时间,可以在等待时间内执行其他的线程,提升资源利用率;

3)线程的创建,销毁,执行都比进程轻量级;

3.2 进程与线程的联系与区别

1)进程是系统进行资源分配的最小单位,而线程是系统进行调度的最小单位;

2)进程至少包含一个线程(main线程);

3)进程与进程将的资源是相对独立的,不会占用彼此的空间,当一个进程出现执行错误,通常不会影响其他进程,而同一个进程内的线程是占用同一内存空间的,当一个线程出现执行错误,可能导致进程内的所有线程都执行出错。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐