最近发现每天都在写业务代码,好多基础的东西都忘了,今天开始每天复习一点基础知识。今天先复习多进程
进程是具有一定功能的程序的一次运行活动,是系统资源分配和调度的基本单位
孤儿进程:父进程退出,子进程没有退出,被init进程收养
init进程:是内核启动后运行的第一个进程,是所有孤儿进程的子进程。init进程会循环的wait退出的孤儿进程,因此孤儿进程不会变成僵尸进程,不会造成危害
僵尸进程:进程结束了,但是父进程没有wait或waitpid判断他的状态,那么子进程描述符仍然在系统中,就会变成僵尸进程,造成资源浪费
僵尸进程处理办法:1.子进程退出的时候给父进程一个信号,父进程通过wait或waitpid等待子进程退出 2.杀死父进程,让子进程变成孤儿进程,让init进程进行回收
进程的三个状态:
运行态 ------> 就绪态 1.占用时间太长,时间片用完了 2.抢占式调度的系统中,高优先级的进程要运行时,低优先级的进程让出cpu,状态由运行态变为就绪态
运行态 ------> 阻塞态 正在执行的进程由于某等待事件而无法继续执行,状态由运行态变为阻塞态,如发生了io请求
就绪态 ----->运行态 正在运行的进程时间片用完,调度在就绪队列选择合适的进程分配cpu,被选中的进程由就绪态变为运行态
阻塞态 ------->就绪态 阻塞态进程的等待事件发生了,就由阻塞态转为就绪态
死锁:
两个或两个以上的进程在执行的过程中,由于竞争资源或由于彼此通信而造成的一种阻塞现象
集合中的每一个进程都在等待只能由集合中的其他进程才能引发的事件,那么该组进程是死锁的
死锁产生的原因:
系统资源的竞争
进程运行的推进顺序不得当
死锁的必要条件:
互斥条件
循环等待条件
不剥夺条件
请求和保持条件
避免死锁的一种有效算法:银行家算法