网站规划与开发,在苏州注册公司流程是什么,面向对象网站开发,济南市网站建设企业目录
一、进程优先级
二、Linux调度与切换
1.背景
2.进程切换 一、进程优先级 背景#xff1a;在计算机中#xff0c;软硬件资源是有限的#xff0c;而进程想要访问某一种资源#xff0c;就得通过排队来保证访问资源的过程是有条不紊的。 Linux下对优先级的定义。执行命…目录
一、进程优先级
二、Linux调度与切换
1.背景
2.进程切换 一、进程优先级 背景在计算机中软硬件资源是有限的而进程想要访问某一种资源就得通过排队来保证访问资源的过程是有条不紊的。 Linux下对优先级的定义。执行命令ps -la得到以下打印结果。
[eutoVM-4-13-centos 24921]$ ps -la
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1001 29067 28781 0 80 0 - 1054 hrtime pts/1 00:00:00 myprocess
1 S 1001 29068 29067 0 80 0 - 1054 hrtime pts/1 00:00:00 myprocess
0 R 1001 29078 28979 0 80 0 - 38332 - pts/2 00:00:00 psUID代表执行者的身份PRIpriority的缩写代表这个进程的优先级Linux下优先级就是一个整型变量默认值为80取值范围为值越小优先级越高。NInice的缩写用来代表相对默认值的增量。 Linux下进程的优先级可以人为手动修改但是需要我们手动修改优先级的场景几乎没有。 下面演示如何修改优先级首先可执行程序myprocess已经被运行了起来执行ps -la查看。
[eutoVM-4-13-centos 24921]$ ps -la
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1001 2310 28781 0 80 0 - 1054 hrtime pts/1 00:00:00 myprocess
0 R 1001 2330 28979 0 80 0 - 38332 - pts/2 00:00:00 ps执行top命令进入任务管理器。 进入任务管理器后输入r。 得到一行提示大致意思是“输入要重新设置nice值的PID”。
PID to renice [default pid 5375] 当前要修改优先级的程序myprocess的PID为2310于是输入2310。 弹出一行提示大致意思是“输入新的nice值”我们暂时输入10。
Renice PID 2310 to value 退出任务管理器后再执行ps -la命令查看。
[eutoVM-4-13-centos 24921]$ ps -la
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1001 2310 28781 0 90 10 - 1054 hrtime pts/1 00:00:00 myprocess
0 R 1001 7772 28979 0 80 0 - 38332 - pts/2 00:00:00 ps我们发现myprocess的PRI值由80变成了90而NI值由0变成了10。 因此可以总结出来Linux下修改优先级不能直接修改而是通过加减某一个量来修正。 NI值是用来表示当前PRI值相对默认PRI值的增量由于PRI的范围是默认PRI值是80故NI值的取值范围是。 PRI 默认PRI80 NI。 NI可以取范围外的值吗如果可以PRI会被修改为多少 在top中修改NI值的时候输入100。 执行ps -la查看结果。
[eutoVM-4-13-centos 24921]$ ps -la
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1001 2310 28781 0 99 19 - 1054 hrtime pts/1 00:00:00 myprocess
0 R 1001 13253 28979 0 80 0 - 38332 - pts/2 00:00:00 ps可以总结出来修改的NI值会被操作系统做检测如果超出范围则修正到范围之内。 在上面结果的基础上将NI值设置为-20预期结果应该是99-2079。 执行结果如下。
[eutoVM-4-13-centos ~]$ ps -la
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1001 16994 16006 0 60 -20 - 1054 hrtime pts/1 00:00:00 myprocess
0 R 1001 18523 16091 0 80 0 - 38332 - pts/2 00:00:00 ps这里我中断进程后重新启动了程序所以PID发生了变化但是前提条件是一样的不难看出来NI值变成了-20说明NI值是覆盖原来的值但是PRI并不是我们预期的79而是60。原因是每次调整优先级的NI值都是在默认的PRI值80上做加减。 为什么要让优先级的修改受限 操作系统中存在很多必要的常规进程如果进程的优先级可以无限大必然会造成多数用户进程的优先级比常规进程的优先级高导致常规进程获取资源的优先度下降造成系统卡顿。 而把一个进程获取资源优先度不高的情况称为进程饥饿。
二、Linux调度与切换
1.背景
CPU在执行一个进程的时候是直接一次性把代码跑完吗 不是现代操作系统设计的CPU执行代码都是基于时间片轮转执行的。假设时间片大小是1ms那么一个进程在CPU上执行1ms后CPU会马上开始执行另外一个进程。
竞争性系统进程数目众多而CPU资源少量甚至只有一个所以进程之间是具有竞争性的为了高效完成任务合理竞争相关资源便有了优先级。而为了保证优先级便设计了调度器基于时间片轮转执行每一个进程。独立性进程之间具备独立性多个进程运行期间互不影响这种不影响指的是一个进程不影响另一个进程的执行。并行多个进程在多个CPU下同时运行称为并行。并发多个进程在一个CPU下通过高频进程切换的方式让多个进程都得以推进运行称为并发。 如今多数人的个人电脑都只有一个CPU因此多个进程之间是并发运行如果把时间精确到CPU的一个时间单元上那么CPU在这个时间单元上执行的指令是确定的只有一条而用户感知到的是我们的电脑可以打游戏的同时听音乐原因就在于我们的CPU非常快多核其实就是CPU内部有一个控制器多个运算器
2.进程切换 CPU有一个运行队列CPU要轮转切换多个进程。
CPU内部有大量寄存器这些寄存器的种类不一。进程A正在CPU上被执行时该时间片内寄存器上会产生许多临时数据这些临时数据是和当前的进程A相关的这些大量临时数据称为进程的硬件上下文。时间片结束CPU要执行下一个进程B在此之前要把寄存器的数据拷贝到进程A的PCB内部也有部分数据拷贝到了其他地方这个过程称为保护上下文。CPU开始执行进程B那么就有两种情况如果进程B是首次被调度那么进程B直接开始执行在执行期间所产生大量临时数据直接覆盖寄存器原来的数据。如果进程B是非首次被调度那么进程B会先把PCB保存的数据恢复到寄存器中然后开始执行。这个过程称为恢复上下文。 CPU的寄存器只有一套但是寄存器要处理的数据有多套这些大量临时数据不属于寄存器而是属于进程