概念
优先级和权限的区别
- 权限决定的是——能不能执行
- 优先级决定的是——已经能执行了,但是问题是谁先谁后

优先级的基本概念
- CPU资源分配的先后顺序,就是指进程的优先级(priority)
- 优先权高的进程有优先执行权利。配置进程优先权对多任务环境的Linux有用,可能改善系统的性能(实际中不一定)
- 也可以将进程运行到指定的CPU上,这样就可以将不重要的进程安排到某个CPU,以此改善系统整体性能。
因为资源是有限的,而进程存在很多数量,多个进程之间是存在竞争关系的——竞争性。所以操作系统必须需要保证大家良性竞争,确认优先级,让进程先后访问资源。(如果存在优先级不合理或者调度算法不合理,导致进程长时间得不到CPU资源,该进程的代码长时间无法得到推进,也就造成了该进程的饥饿问题)
查看进程的优先级
在Linux或者Unix系统中,使用指令ps -l 查看进程的优先级
【注意】ps -l 只能看的当前终端的进程优先级,添加-a选项即可查看多个终端的进程优先级,即指令 ps -al可以将用户级的所有进程都打开

注意下面几个重要的信息:
- UID:代码指执行者的身份
- PID:代表这个进程的id号码
- PPID:代表这个进程是由哪个进程发展衍生而来的,即父进程的id号码
- PRI:代表这个进程可被执行的优先级,其值越小越早被执行
- NI:代表这个进程的nice值
PRI和NI
- PRI(priority优先级)代表的是进程的优先级
- NI(nice)代表的是进程优先级的修正数据
- PRI是程序被CPU执行的先后顺序,PRI越小进程的优先级别越高
- 一个进程执行过程中真正的优先级取决于:PRI(new) = PRI(old)+nice
- 调整优先级需要调整nice值,当nice为负值的时候,进程的优先级值PRI变小,优先级会变高,也就越快被执行
- 在Linux中即调整进程的优先级,就是调整进程的nice值
- nice的取值范围是-20至19,一共20个级别
【注意】进程的nice值不是进程的优先级,这两者不是一个概念,但是进程的nice值会影响到进程的优先级变化
Linux不能过多的让用户参与优先级的调整,只能在规定的范围内进行调整,nice的取值范围是[-20,19]。
【注意】一般来说,不建议修改进程的优先级
调整优先级的指令
调整进程优先级的指令(只能root用户调整优先级):
- nice
- renice
- top
【这里介绍使用top命令更改优先级】

虽然这里修改的nice值是-30,但是系统只允许最大修改-20
【注意】PRI不是只要调整就会变小,PRI(new) = PRI(old)+nice,这里PRI(old)每次都是80,而PRI被调整之后最大是99,最小是60.
进程的其他概念
- 竞争性:系统进程数目众多,而CPU资源只有少量,甚至只有1个,所有进程之间是具有竞争性质的。
为了高效完成任务,更加合理地竞争相关资源,便有了优先级
- 独立性:多个进程运行,需要独享各种资源,多进程运行期间互不干扰
- 并行:多个进程在多个CPU下分别,同时进行运行,称之为并行
- 并发:多个进程在一个CPU下采用进程切换地方式,在一段时间之内,让多个进程都得以推进,称之为并发

【基于进程切换基于时间片轮转的调度算法】进程在运行过程中存放着两个运行队列,当一个在CPU处于进程切换的时候,同一个运行优先级运行结束之后,会将这个进程放在等待队列中同一优先级的位置,等第一个运行队列将所有优先级的进程在进程中切换一遍后,会切换到另外一个运行队列中。
问题:为什么函数的返回值可以被外部获取到?/系统是如何知道代码中语句运行到哪一行?
【答1:】函数中return 这条语句进行执行的时候,会转换成汇编语句:mov eax 10【eax是一种寄存器】,return语句返回的时候,会将对应的数据保存到寄存器中。
【答2:】CPU中有一种概念:程序计数器(PC指针、eip),可以用来记录当前进程正在执行指令的下一行指令的地址。不管是代码中的顺序语句,循环语句,递归语句,都会将CPU下一次需要进行的指令保存在eip这个程序计数器中,这个程序计数器也是CPU中的一个寄存器。

通常我们的CPU中存储着大量的寄存器,有通用寄存器、栈帧寄存器、状态寄存器等等。为了提高效率,CPU会将进程的一些高频数据保存在CPU中的寄存器中。
CPU内的寄存器里面保存的是进程相关的数据,这些数据是随时有可能会被CPU进行访问和修改的。也就是说,CPU寄存器里面保存的是进程的临时数据——我们将这一部分数据称为进程的上下文。
进程在从CPU上离开的时候,需要将自己进程的上下文数据保存到自己的task_struct(PCB)中【保存的目的是为了以后再次运行该程序的时候恢复这部分数据】。
【总结】进程在被切换的时候,主要进行两部分工作:
- 保存上下文
- 恢复上下文
保存上下文会将CPU中寄存器保存的上下文数据保存到自己进程的PCB结构体中,当进程再次被CPU调度时,恢复上下文的时候会将这部分数据重新放到CPU寄存器中。
729

被折叠的 条评论
为什么被折叠?



