本篇文章主要从进程的定义,进程的管理和进程的调度是如何进行的几个角度来对进程做出解释.
1.进程是什么?
言简意赅的讲进程就是跑起来的程序.每个应用程序运行于现代操作系统之上时,操作系统会提供一种抽象,好像系统上只有这个程序在运行,所有的硬件资源都被这个程序在使用。这种假象是通过抽象了一个进程的概念来完成的。进程是操作系统对一个正在运行的程序的一种抽象,换言之,可以把进程看做程序的一次运行过程;同时,在操作系统内部,进程又是操作系统进行资源分配的基本单位。
2.进程如何控制?
进程主要通过进程控制块(PCB)来进行管理.PCB里面包含了:(1)进程的唯一标识pid也就是进程的id,(2)内存指针,指明了这个进程要执行的代码/指令存储在哪里,以及这个进程执行过程中依赖的数据都存储在哪里,(3)文件描述符表,进程每次打开一个文件,就会在文件描述符表上多增加一项.这个文件描述符表就可以视为一个数组,里面的每一个元素都是一个结构体,对应一个文件相关信息.(4)进程的调度信息.
此处还有两个比较容易混淆的概念:并行和并发.并行是,两个CPU核心,同时执行两个任务的代码.而并发是一个CPU核心,先执行一会任务1,再执行一会任务2…,再执行任务1,只要切换的够快,就好像多个任务同时执行.
3.进程调度
进程调度就是让有限的核心去尽可能的的多执行任务.进程调度的过程中涉及到的几个概念:
状态:描述当前这个进程接下来应该怎么调度.就绪状态:随时可以去CPU上执行.阻塞状态(睡眠状态):暂时不可以去CPU上执行;
优先级:先给谁分配以及分配多少的问题;
记账信息:统计了每个进程,都分别被执行了多久,分别执行了哪些指令.分别都排队等了多久;
上下文:表示上次进程被调度出CPU的时候,当时程序的转态,下次进程上CPU就可以恢复之前的状态,进程被调度出CPU 之前会把寄存器中的数据保存到内存中.
4.如何让创建线程?
Thread类是Java中对于系统提供多线程api进行封装,其构造方法主要是:创建线程(五种):继承Thread,实现Runnable,继承Thread(匿名内部类),实现Runnable(匿名内部类),lambda表达式;系统中创建线程 start;中断线程,核心思路让线程run执行完;等待线程 join ,使一个线程等待另一个线程执行完毕之后再执行;获取线程引用current Thread哪个线程调用这个方法,就获取哪个线程的Thread实例,休眠线程 sleep.
JAVAEE(1)--(1)进程调度过程和原理
于 2022-06-23 15:37:29 首次发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)