一、进程的概念
进程:顾名思义,就是一个完整执行程序的过程。没错,就是这么简单,但是在程序执行的过程之中,系统会为这个执行的程序分配内存资源,这些过程也包含在进程当中。
进程是动态的,是程序的一次执行过程,有开始,有结束,包含了进程的创建、调度、消亡,是在内存空间中
程序是静态的,没有执行的概念,一串二进制指令,在外存上存储的二进制文件
如下图所示,每个进程都被CPU调度执行
- 第一步:操作系统 管理程序的入队顺序,这个入队有操作系统管理分配
- 第二步:CPU分配时间片给在队列中的程序,这个时间片控制程序运行的时间
- 第三步:当程序拿到CPU配的时间片之后就执行该程序,否则程序在队列中就绪,不执行
二、进程中的状态切换
1、就绪态/运行态
就绪态 是指进程已经准备好执行,只等待 CPU 的分配。此时,进程已经拥有了所有它执行所需的资源和条件,如程序代码、数据、以及系统资源等,只是因为 CPU 还没有分配给它,进程没有真正运行。
运行态 :进程正在 CPU 上执行。就绪态拿到时间片运行后的状态
2、阻塞态/休眠态
不可中断阻塞
当资源有效时,由操作系统唤醒,否则一直处于阻塞等待状态,此时处于休眠态,进程不占用 CPU 资源,操作系统可以将 CPU 分配给其他需要执行的进程
可中断阻塞
当资源有效时,由操作系统唤醒,与不可中断阻塞的区别:处于可中断阻塞态进程可以被其他进程唤醒
唤醒:当进程在休眠态时,它会被操作系统的某些事件唤醒。例如,当 I/O 操作完成、定时器到期,或者其他事件发生时,进程会从休眠态变为就绪态,重新进入调度队列,等待 CPU 的分配。
3、终止态/僵尸态
终止态:表示进程结束但尚未消亡的一种状态,此时进程已经结束运行并释放大部分资源,比如还未释放进程控制块
僵尸态:指的是一个进程已经终止执行,但仍然在系统的进程表中保留着其信息。这些信息包括进程的退出状态和一些统计信息,供其父进程在调用 wait
系统调用时获取
4、停止态
停止运行,暂时挂起,进程被暂停,通过其他进程唤醒
三、进程分配的资源
以进程为单位申请释放内存空间
以进程为单位分配CPU资源和时间片
以进程为单位管理自己的虚拟内存空间,在需要的时候映射到物理内存地址上
以进程为单位分配文件描述符:1024个
四、进程的内存管理
操作系统为每个进程都分配4G的内存空间(虚拟内存空间)
0~3G是用户内存空间(所有进程相互独立),3G~4G是内核内存空间(所有进程共享)
注意:分配的内存是虚拟内存。虚拟内存是计算机系统内存管理的一种技术,旨在使应用程序在执行时能够使用比实际物理内存更大的内存空间。虚拟内存为每个运行的程序提供了一个统一的、连续的地址空间,独立于实际的物理内存。操作系统会为每个进程分配一个虚拟地址空间,这个地址空间可以远大于实际的物理内存。
在用户空间里面,会为进程运行分配资源,这些资源分配如下图:
五、进程标识
操作系统会给每个进程都分配一个编号,编号唯一,这个编号称之为进程号
操作系统标识进程不是通过程序名,而是通过进程号(pid)
主要进程标识:
进程号:PID(process id)
父进程号:PPID(parent process id)
进程组号:PGID,进程组:若干个进程的集合称之为进程组,默认情况下,新创建的进程会进程父进程的进程组ID
会话组号:SID,会话组:若干个进程组的集合称之为会话组,默认情况下,新创建的进程会继承父进程的会话ID
特殊的进程号:
0:idle进程,操作系统引导程序进程,创建1 和2 进程
1:init进程 初始化内核的各个模块,当内核启动完毕后,用于收养孤儿进程(没有父进程的进程)
2:kthread进程 用于进程调度