1.什么是进程?
对用户来说,进程是正在运行的程序。
进程由程序,数据,和PCB组成。
对操作系统来说,进程就是PCB,PCB包含了正在运行程序的全部信息。
比如标识符,状态,优先级,内存指针,上下文数据等
Linux下PCB叫task_struct。
2.进程的描述信息
内存指针: 程序和数据运行起来后被加载到内存中的位置
标识符pid: 唯一标识系统中的各个进程
上下文数据: 进程执行时的状态和资源
程序计数器: 保存程序切换时的位置
3.进程的状态
三大基本状态 :
运行态:占有CPU,并在CPU上运行
就绪态: 已经具备运行条件,但由于没有空闲CPU,而暂时不能运行
阻塞态: 因等待某一事件而暂时不能运行
4.特殊状态的进程
1.僵尸进程: 处于僵死状态的进程
产生:子进程先于父进程退出,为了保存退出原因,因此子程序资源不会被完全释放,操作系统检验到子进程退出,这时候通知父进程,这时候父进程可以获取子进程退出原因,允许操作系统释放资源,这种情况子进程资源才会被完全释放。如果父进程没有理这个通知,也就意味着父进程没有允许操作系统释放子进程的资源,那么这时候子进程将处于僵死状态成为僵尸进程。
一个终止了但未被回收的进程称作僵尸进程。
危害 :资源泄露
避免 : 进程等待
解决 : 父进程退出 (因为僵尸子进程的本质原因是要保存退出原因给父进程看的,然而父进程退出了,那么僵尸子进程也就没有存在的意义了,因此操作系统就直接释放了。)
2.孤儿进程: 父进程先于子进程退出,那么子进程就成为孤儿进程。(运行在后台)
孤儿进程并不是没有父进程了,而是父进程变为init进程,意味着子进程退出后,将由init进程来处理它的身后事,而init进程就会直接允许操作系统释放资源,因此不会成为僵尸进程。
3.守护进程: 特殊的孤儿进程。(运行在后台,并且跟终端以及会话完全脱离)
5.进程的优先级
进程优先级决定了进程获取CPU资源的优先权。
优先级实际上就是一个数组, 这个值越小, 优先级越高。
为什么要有优先级 : 让操作系统运行的更加合理。
如何设置优先级 : 优先级无法直接设置, 但是可以通过设置nice值进而设置优先级的值
PRI = PRI + NI NI的取值范围 : -20~19
设置命令 : renice - n ni_val - p pid nice - n ni_val . / main
6.进程调度
CPU调度是操作系统的基本功能,如果CPU空闲,操作系统会选择就绪队列的优先级高的程序执行
7.进程的特点
竞争性 : 因为操作系统上的进程都是一直在竞争资源, 因此进程之间具有竞争性
独立性 : 为了使一个进程的操作不对另一个进程造成影响, 进程之间需要具有独立性
并行 : CPU资源足够多的情况, 多个进程可以同时运行
并发 : CPU资源不够的情况, 多个进程切换调度运行