一、进程的基础
1.1 什么是进程
1)进程是程序的一次执行过程
- 程序:是静态的,它是存储在外存上的可执行二进制文件;
- 进程:动态的概念,它是程序的一次执行过程,包括了进程的创建,调度、消亡,是存在于内存中的。
2)进程是独立的,可以被CPU调度的任务
- Linux中的调度机制:时间片轮询机制;
- 操作系统会给每一个进程分配时间片,当时间片结束后,cpu资源会切走,当前进程等待下一次调度。
3)进程在被调度的时候,系统会分配和释放各种资源(CPU资源,内存资源,进程调度块(PCB))。
1.2 进程的五种状态及五态图
五种状态:
- 创建态
- 就绪态
- 运行态
- 阻塞态
- 终止态
ps:进程运行过程中有5种种状态,运行态只是进程运行过程中的一种状态。
五态图:
1.3 进程的内存分布【重点】
1)内存分布
- 在Linux操作系统中,每个进程都会被分配4G的内存空间(虚拟内存);
- 其中0-3G是用户空间代码使用,每个进程相互独立;
- 其中3-4G是内核空间,所有进程共享。
每个进程的用户空间都有自己独立的区:
1> 静态存储区 2> 堆区 3> 栈区
2)虚拟内存和物理内存
虚拟内存和物理内存之间的关系--->映射关系
物理内存:
- 硬件上(内存条上)真正存在的存储空间。
虚拟内存:
- 程序启动后,会分配4G的虚拟地址空间,用户只能访问到虚拟地址空间。当要使用的时候,由虚拟地址映射到物理地址上。
- 32位操作系统,指针变量的大小为4bytes,取值范围为[0, 2^32-1],所以寻址范围为4G
- 64位操作系统,指针变量的大小为8bytes,只取了前48bit存储地址,所以寻址范围是256TB
虚拟内存的目的:
- 动态分配内存。
1.4 进程是资源分配的最小单位【重点】
以进程为单位分配和释放各种资源。
- 内存资源的申请和释放;
- 文件描述符表:每个进程都有自己的1024个文件描述符;
- 时间片;
- 管理自己的虚拟地址空间,使用的时候映射到物理地址上;
... ...
1.5 进程标识
操作系统会给每一个进程分配一个编号,这个编号就是进程号。
主要进程标识
- 进程号:PID (process id)
- 父进程号:PPID (parent process id)
- 进程组号:PGID (process group id) 若干个进程的集合,称之为进程组,默认情况下新创建的进程会继承父进程的组ID
- 会话组号:SID (session id) 若干个进程组的集合,称之为会话组,默认情况下新创建的进程会继承父进程的会话ID
操作系统刚启动的时候,会启动三个进程。三个特殊的进程号:
- 0 idle进程 操作系统引导程序,创建1号,2号进程。
- 1 init进程 初始化内核的各个模块,当内核启动完成后,用于收养孤儿进程(没有父进程的进程)
- 2 kthreadd进程 用于进程间调度。
1.6 进程相关的shell指令
1) ps -aux
功能:显示进程占计算机资源的百分比;
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
2) ps -ajx
功能:显示进程之间的关系
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
父进程 进程号 进程组 会话组
3) pidof
功能:根据进程名字获取PID号;
格式:
pidof a.out
4) pstree
功能:显示进程关系树
5) kill
kill -9 pid 根据pid号杀死进程
killall -9 进程名字 根据进程名字杀死进程
6) 进程的STAT
D 不能被中断的阻塞状态
R 运行状态
S 可以被中断的阻塞状态
T 被信号控制的挂起状态
t 进程被调试的挂起状态
X 死亡态,死亡是一瞬间的,该状态永远看不到
Z 僵尸状态,当前进程退出后,父进程没有为其收尸。
< 高优先级的
N 低优先级的
L 有些页被锁进内存
s 会话组组长
l 多线程
+ 运行在前端