中升乙源建设工程有限公司网站,关于网站开发的个人小结,怎么做网页小猪佩奇,二手房网站建设书文章目录进程优先级Linux下优先级用top命令更改已存在进程的nice#xff1a;其他概念进程切换进程优先级
我们作为使用者一般不关心优先级#xff0c;它跟我们的调度器有很大的关系#xff0c;调度器是为了跟均衡的调度进程。 什么叫做优先级#xff1f; 优先级和权限是两…
文章目录进程优先级Linux下优先级用top命令更改已存在进程的nice其他概念进程切换进程优先级
我们作为使用者一般不关心优先级它跟我们的调度器有很大的关系调度器是为了跟均衡的调度进程。 什么叫做优先级 优先级和权限是两码事权限决定的是能还是不能的问题优先级前提是已经能了决定的是能的时候先做还是后做的问题。 优先级就是先还是后获得某种资源的能力先获得优先级高。 为什么存在优先级 因为资源太少了。系统可能存在几十个进程但CPU只有一个系统可能存在十几二十几个进程都要访问网卡但是网卡只有一个。所以在任何系统里硬件资源一定是少数软件资源要用硬件资源的跟多所以要争即确认优先级排队。
Linux下优先级 Linux优先级的特点 优先级本质就是PCB里面的一个整数数字也可能是几个在Linux中是用两个整数来确定优先级的这两个整数叫PRI和NI。
首先写一个进程 用ps -la就可以查到我这个用户所能查到的指令 Linux支持进程运行中进行优先级调整调整的策略就是更改nice完成的。 我们可以看到Linux下的优先级是80那么它一般的范围是多少呢优先级受nice值的影响换句话说nice值的范围决定最终优先级的范围。 所以我们运行一个进程然后去调整它的优先级下面试着调一下
用top命令更改已存在进程的nice
先改一下代码并运行 第一步先top
然后输入rr就是rnice的意思rnice就是重新设置默认的进程的pid就是29788 我要改的是21837 所以就输入21837
回车后发生改变 就变成了 Renice PID 21837 to value所以我们此时就相当于调整了nice值一般在优先级当中优先级的PRI数字越小代表优先级程度越高。 此时给nice值改成 -100 设置的时候调优先级本来就会影响调度器的效率所以在设置的时候可能要进行权限的设置。所以我们sudo top
再去操作Renice PID 21837 to value -100,然后查看进程优先级 PRI优先级变成了60优先级被调高了。
我们继续操作Renice PID 21837 to value 100 此时nice值变成了19。得到下结论nice的范围
nice [-20,19] 所以我们的nice值有上下限。
继续操作Renice PID 21837 to value 100 PRI的优先级为89如果是按照 最终优先级 老的优先级 nice就发现出现了问题按理优先级应该为 99 19 但是结果是89那么就得出另一个结论每一次设置的时候老的优先级都是从80开始的。这样就更好的限制了最终优先级一定在 [80-20, 8019] 不会出现奇怪的情况。
其他概念 竞争性资源有限必须确定优先级。 独立性多进程运行多进程运行期间互不干扰各进程独享自己的资源。 修改代码
刚开始子进程肯定是在跑的跑一会就退了 发现子进程退出了 变僵尸了但是父进程还在跑这就证明进程具有独立性。代价就是花费跟多的资源。 并行 对我们来讲我们的笔记本一般就一个CPU不考虑多核当我们只有一个CPU的时候任何时刻我们只能有一个进程正在运行。有的大的云服务器双CPU那么意味着它在任何一个时刻它可以有两个进程同时运行这种同时在运行的进程我们称为并行。 并发 那我们发现我们计算机好像有多个进程在跑只有一个CPU的时候这个进程不是在CPU跑完了才能被从CPU拿下来当代计算机采用的是时间片轮转的策略也就是说我们不管进程未来执行完花多少时间我们只给这一次10ms的时间让进程占有CPU那么时间到了进程就必须从CPU剥离下来要么等吧要么就去进程队列尾部重新排队。多进程在同一个CPU下我们采用进程不断切换的方式那么就可以让一个系统内的一个单CPU的计算机采用进程切换的方式在一个时间段内同时让多个进程代码可以推进的行为叫做并发。
进程切换
进程在切换的时候可以让多个代码同时推进那么如何切换呢
一个CPU内部存在大量的寄存器虽然寄存器很多但是只有一套硬件寄存器这些寄存器里有用户可见和用户不可见的状态寄存器、权限寄存器当计算机调度某个进程的时候CPU把这个进程的PCB的地址加载进寄存器CPU里的寄存器就能找到进程的PCB也就能找到代码和数据。pc/eip 指令计数器是一个关键的寄存器。对我们来讲CPU一直做着三件事情1.取指令 2.分型指令 3.执行指令这里的指令就是我们代码中的指令所以eip中就保存着当前正在执行指令的下一条指令的地址相当于CPU里面有一个专门用来标识下一次从当前进程什么位置去读去对应代码或指令的寄存器。读进去之后会参与计算计算的时候也有一些寄存器参与计算eb、ec、ed、ex当我们的进程在运行的时候一定会产生非常多的临时数据这份数据属于当前进程。 CPU内部虽然只有一套寄存器硬件但是寄存器里面保存的数据是属于当前进程的。
寄存器硬件 ! 寄存器内的数据 进程在运行的时候占有CPU但是进程不是一直要占有到进程结束。例如while(1)。进程在运行的时候都有自己的时间片。因为进程有时间片所以每个进程在单CPU上跑的时候有可能出现进程没跑完就被拿下去当一个进程没跑完被拿下去了肯定要考虑下次被拿回来。 举个在校生当兵的例子 离开学校保留学籍上下文保护 回到学校回复血迹上下文恢复 为什么要保留和恢复
保留的手段恢复是目的。所以完成保留和恢复就相当于进程完成了一次切换。学校就是CPU我就是进程那么部队就相当于某种等待队列所以当进程从CPU被剥离的时候首先要做的就是保留CPU的内寄存器的数据注意不是寄存器而是寄存器里的数据。
进程在切换的时候要进行进程的上下文保护CPU的内寄存器的数据当进程在恢复运行的时候要进行上下文的恢复。
在任何时刻CPU里面的寄存器里面的数据看起来是在大家都能看到的寄存器上但是寄存器内的数据只属于当前运行的进程
寄存器被所有进程共享寄存器内的数据是每一个进程各自私有的------上下文数据。