大多数人的电脑都是一个CPU,一次只能处理一个进程任务,但是进程又有很多个。这也就导致的CPU的资源不足,为了更合理的利用CPU资源,就存在进程优先级来确定进程获取CPU资源的顺序。 就要生活中的排队,进程在CPU中也是需要排队的,除了遵循先来后到的排队原理,还存在优先级更高的进程是可以进行插队的,这也可以理解,在医院排队时,如果碰到急诊病人是可以优先挂号的。 提问:有没有可能因为大量的优先级更高的进程插队导致低优先级的进程迟迟得不到执行。 回答:这就涉及到了进程饥饿的问题了,在Linux下是有相关解决方法的,Linux会维护两个队列,一个为活跃队列,另一个为过期队列,这里就不细讲了。
可能有人会把进程的优先级和权限进行类比,其实两者还是很不同的:
优先级决定的是顺序问题。 权限决定的能不能的问题。
在Linux或者unix系统中,输入ps -l
会出现以下内容:
下面我们来介绍各个符号的意义
通过公式PRI(NEW) = PRI(OLD)+nice。我们知道,调整进程的优先级的本质就是调整nice的值。 指令:top
进入top后按“r”->输入进程PID->输入nice值
演示:修改niec值为100.
通过演示我们可以发现,尽管nice的值被修改为100,PRI的值就值变成了99.由此也可以证明PRI的范围。 值得注意的是,每次都是直接给nice赋值,而不是在原有nice的基础上加减。 提问:为什么调整优先级是要受限制的? 回答:如果不加限制,将自己进程的优先级调整的非常高,别人的优先级调整的非常低,优先级较高的进程,优先得到资源,后续源源不断的进程产生。常规进程很难享受到CPU的资源,也就造成的进程饥饿问题。
提问:在进程运行时,CPU会直接把进程代码跑完吗? 答案:是不会的,现代操作系统就是基于时间篇进行轮流执行的,假设每个进程执行1ms,那么CPU在每1ms都会切换进程来执行。 一些其他概念