1. ps详解
ps : 只列出当前用户的进程
ps -ef : e表示有效, f 表示全面, 所以是列出后台的所有有效进程。
ps -ef | more : 列出后台所有的有效进程,并且分屏显示
ps -aux | more : 可以查看进程占用CPU 和 内存的百分比 、 进程状态
详细参数参考列表:
进程处于运行态时,STAT(标识进程状态)列为R。
等待状态可以分为可中断等待和不可中断等待,
前者可被例如ctrl+c的信号中断,而后者往往是由于系统内部需要等待硬件状态的,不可中断,例如一些IO操作内的等待。
进程STAT为S,表示是可中断等待状态。
进程STAT为D,表示是不可中断等待状态。
停止状态,进程STAT为T,例如进程处于调试时,会处于停止状态,但是可以被唤醒,唤醒后进程可以继续执行。
僵尸状态:进程已经结束,但是进程表项内仍有记录。 其进程STAT为Z 。
2. 进程调度
- 先来先服务调度算法:先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。当在作业调度中采用该算法时,每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入内存,为它们分配资源、创建进程,然后放入就绪队列。在进程调度中采用FCFS算法时,则每次调度是从就绪队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行。该进程一直运行到完成或发生某事件而阻塞后才放弃处理机。
- 短作业(进程)优先调度算法:短作业(进程)优先调度算法SJ(P)F,是指对短作业或短进程优先调度的算法。它们可以分别用于作业调度和进程调度。短作业优先(SJF)的调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。而短进程优先(SPF)调度算法则是从就绪队列中选出一个估计运行时间最短的进程,将处理机分配给它,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机时再重新调度。
- 高优先权优先调度算法:为了照顾紧迫型作业,使之在进入系统后便获得优先处理,引入了最高优先权优先(FPF)调度算法。此算法常被用于批处理系统中,作为作业调度算法,也作为多种操作系统中的进程调度算法,还可用于实时系统中。当把该算法用于作业调度时,系统将从后备队列中选择若干个优先权最高的作业装入内存。当用于进程调度时,该算法是把处理机分配给就绪队列中优先权最高的进程,这时,又可进一步把该算法分成如下两种。
- 3.1) 非抢占式优先权算法:在这种方式下,系统一旦把处理机分配给就绪队列中优先权最高的进程后,该进程便一直执行下去,直至完成;或因发生某事件使该进程放弃处理机时,系统方可再将处理机重新分配给另一优先权最高的进程。这种调度算法主要用于批处理系统中;也可用于某些对实时性要求不严的实时系统中。
- 3.2) 抢占式优先权调度算法:在这种方式下,系统同样是把处理机分配给优先权最高的进程,使之执行。但在其执行期间,只要又出现了另一个其优先权更高的进程,进程调度程序就立即停止当前进程(原优先权最高的进程)的执行,重新将处理机分配给新到的优先权最高的进程。因此,在采用这种调度算法时,是每当系统中出现一个新的就绪进程i 时,就将其优先权Pi与正在执行的进程j 的优先权Pj进行比较。如果Pi≤Pj,原进程Pj便继续执行;但如果是Pi>Pj,则立即停止Pj的执行,做进程切换,使i 进程投入执行。显然,这种抢占式的优先权调度算法能更好地满足紧迫作业的要求,故而常用于要求比较严格的实时系统中,以及对性能要求较高的批处理和分时系统中。
- 3.3)容易出现优先级倒置现象( 优先级翻转 ):低优先级进程A持有高优先级进程C所需要的共享资源,而此时恰好来了一个中等优先级的进程B且不需要任何共享资源,那么B就会打断A,也就是说,只有B执行完毕了,才轮到A执行,A执行完毕了,才轮到C执行。如果B还没执行完毕,那么此时即使C来了,C也得不到执行,这就是优先级翻转。
- 3.4)优先级倒置解决方案:
- 3.4.1)设置优先级上限,给临界区一个高优先级,进入临界区的进程都将获得这个高优先级,如果其他试图进入临界区的进程的优先级都低于这个高优先级,那么优先级反转就不会发生。
- 3.4.2)优先级继承,当一个高优先级进程等待一个低优先级进程持有的资源时,低优先级进程将暂时获得高优先级进程的优先级别,在释放共享资源后,低优先级进程回到原来的优先级别。嵌入式系统VxWorks就是采用这种策略。
进程状态变化关系