1.进程
1.1 进程的初步认识
- 程序和进程的区别?
- 程序表现为系统的一个可执行文件(静态的)(说明:双击打开某个文件,不意味着这个文件就是程序,右键——>打开方式——>里边的才是程序)
- 进程:程序(静态的可执行文件)运行起来之后就是一个进程(运行态的程序)(说明:操作系统把程序代码加载到内存,调用cpu执行程序的代码。系统再把进程管理起来)
- 进程是作为分配资源的最小单位(CPU,内存等等)
- 一个进程,系统是分配有唯一的id标识(pid)
- java代码的运行机制:
- 进程是担当分配系统资源(CPU时间,内存)的实体,是具有动态特性的,这样的任务是一直都是存在且状态变更的。
1.2 时间片
- 现在操作系统比如Mac OS X ,UNIX ,Windows等,都是支持"多任务"的操作系统,所谓的多任务,就是操作系统可以同时运行多个任务。
- 操作系统的任务调度是采用时间片轮转的抢占式调度方式,也就是说任务执行一小段时间后强制暂停去执行下一个任务,每个任务轮流执行。
- 操作系统的调度算法(系统调度cpu执行进程中的代码):时间片轮转调度。
- cpu执行某个进程,在执行一定时间后,会切换到下一个进程。
- 时间片:就是某个进程在该次cpu执行时,所用的时间。
- 轮转调度:cpu轮流执行某个进程。
- 任务正在执行时的状态叫做运行状态,时间执行一段时间后强制暂停去执行下一个任务,被暂停的任务就处于就绪状态等待下一个属于他的时间片的到来。
- 每个任务都能得到执行,由于CPU的执行效率非常高,时间片非常短,在各个任务之间快速的切换,给人的任务在"同时进行",就是并发。
1.3并行和并发
- 并发:在系统调度一个cpu,采用时间片轮转调度的方式,在一个时间范围内,执行多个进程的代码。对人肉眼来说,这个时间是不可感知的,就认为是同时在进行。
- 人的角度看,是同时在执行进程,cpu的角度,就是一个时间点,执行一个进程。
- 并行:多个cpu在同一个时间点,同时执行多个进程的代码(真同时)。
1.4 内核态与用户态
- 进程涉及的:
- 系统加载进程的程序代码到内存;
- 系统调度CPU执行程序代码指令(CPU执行指令有运算,控制,数据传输);
- 执行的部分指令就涉及权限问题:
- 系统操作权限最高,如果一个程序执行某个指令,没有权限,就需要调用系统接口来执行,此时用户进程就进入"内核态"或者叫做"核心态"。
- 用户进程来说,权限是最低的,称为"用户态"。
- 以上两种状态就涉及相互转换的问题:进程执行权限高的指令(如IO操作),用户态——>内核态,执行完毕,返回:内核态——>用户态
- 用户态转变为内核态,是比较消耗资源的。
1.5进程的上下文
- 上下文简单来说就是一个环境,进程在时间片轮转时,由于进程运行环境不同,就涉及到转换前后前后的上下文环境切换:
- 就是一个进程在执行的时候,CPU的所有寄存器的值,进程的状态以及堆栈上的内容;
- 切换时需要保存当前进程的所有的状态,即保存当前进程的进程上下文,以便再次执行该进程时,能够恢复切换时的状态,继续执行。
- 上下文,这个名词不是进程线程独有的,而是环境不同,要切换的时候,都需要的词汇;
- 在环境切换进程1的时候,保存进程1上文环境,切换到进程2,再切换回来时,需要恢复进程1的上文环境。
- 认识上下文环境的作用:切换出去时,保存上下文环境,切换进行时,恢复上下文环境。
1.5进程的状态:
- 就绪:进程处于可运行状态,只有CPU时间片还没有轮转到该进程,则该进程处于就绪状态;
- 运行:进程处于可运行的状态,且时间片轮转到该进程,该进程正在执行代码,则该进程处于运行状态;
- 阻塞:进程不具备运行条件,正在等待某个事件的完成。
- 系统调度到才能进入到运行态。
- 对应系统调度从进程1切换到进程2来说:
- 进程1从运行态——>就绪态;
- 进程2从就绪态——>运行态;
- 运行——>终止:1.正常执行完毕;2.异常退出
- 阻塞的表现:程序暂停,一直等到满足某种条件,才能继续执行,或无条件等待。