wap网站微信一键登录,网站二级导航,如何做网站收录,淘客网站推广免备案目录
1.进程的优先级
优先级是什么
Linux下优先级的具体做法
优先级的调整为什么要受限
2.Linux下的进程切换
3.Linux下进程的调度 1.进程的优先级
我们在使用计算机的时候#xff0c;通常会启动多个程序#xff0c;这些程序最后都会变成进程#xff0c;但是我们的硬…目录
1.进程的优先级
优先级是什么
Linux下优先级的具体做法
优先级的调整为什么要受限
2.Linux下的进程切换
3.Linux下进程的调度 1.进程的优先级
我们在使用计算机的时候通常会启动多个程序这些程序最后都会变成进程但是我们的硬件设备都只有一套当多个进程需要使用同一个硬件设备的时候就必须进行排队那进程按照什么来排队呢就是按照优先级来排队的。也就是说Linux系统是通过优先级的方式来决定进程享受资源的先后顺序的。
优先级是什么
优先级和标识符一样也是进程的属性进程的属性包含在task_struct结构体中所以进程的优先级其实就是task_struct结构体中的一个变量。 Linux下优先级的具体做法
Linux系统通过 PRI 和 NI 共同决定优先级的大小
PRI 表示进程的优先级PRI的初始值为80。NI表示进程优先级的修正数据NI的初始值为0。PRI PRIold NI。
我们可以通过 ps -l 命令查看进程的优先级 注意PRI的值越小优先级越高。
如果我们想调整进程的优先级我们只能通过修改nice值NI来修改而不能直接修改PRI修改优先级的步骤如下
输入top命令并回车输入r并回车输入要修改进程的pid并回车输入nice值并回车
Linux的优先级是有范围的从60到99一共40个优先级NI的取值范围就是[-20, 19]。NI 更像是进程优先级的修正数据。
优先级的调整为什么要受限
如果优先级的调整不加限制用户就可能会将自己进程的优先级调整的非常高把别人的进程的优先级调整的非常低优先级较高的进程优先得到资源后续还有源源不断的进程产生常规进程就很难享受到资源这样一来就会造成一些进程饥饿。
2.Linux下的进程切换 当程序加载到内存形成进程之后会以双链表的形式组织起来CPU的运行队列的指针会指向其中一个task_structCPU就会从运行队列中拿进程去执行当代计算机系统都有一个时间片也就是进程占有CPU的最大时间当时间片结束之后就需要把当前正在执行的进程从CPU上剥离下来换另一个进程去占有CPU但是进程在运行过程中会产生大量的临时数据这些临时数据存放在CPU上的寄存器中CPU内部所有的临时数据我们称之为进程的上下文剥离当前进程的时候我们需要对进程的上下文进行保存保存在task_struct结构体中的一个结构体变量中保存好当前进程的上下文之后操作系统才能够选择一个新的进程放在CPU上执行当再次执行到保存好上下文的进程的时候操作系统会先将该进程的上下文恢复然后从上一次执行的结束位置开始执行。
进程的切换始终遵守上述过程。
3.Linux下进程的调度 在CPU的运行队列中有一个struct q array[2]array[0]是活动队列array[1]是过期队列struct q 类型的结构如下 task_struct queue[140]表示存放 task_struct 的数组一个元素就是一个进程队列相同优先级的进程按照FIFO规则进行排队调度所以数组下标就是优先级但是[0,99]号下标我们不用我们只使用[100,139]下标一共40个和进程的优先级对应起来了。nr_active表示总共有多少个运行状态的进程。bitmap[5]一共140个优先级一共140个进程队列为了提高查找非空队列的效率就可以用5*32个比特位表示队列是否为空这样便可以大大提高查找效率。
运行队列中的 *active array[0], *expired array[1] 。
操作系统每次调度的时候只会检查活动队列中的内容先看nr_active是否为0不为0的话表示有运行的进程然后通过bitmap按顺序判断进程在queue中所处的下标通过下标直接找到当前优先级的所有进程的PCB然后依次将当前优先级的所有进程运行一定的时间后继续寻找下一个优先级的所有进程。
所有运行之后的进程会按照优先级以及先后顺序放到过期队列中此时可能还会有新的进程到来当活动队列中的进程全部运行结束之后交换*active和*expired中的内容这样一来过期队列中的内容就到活动队列中去了然后操作系统继续调度活动队列中的内容这就是Linux操作系统中关于进程调度的O(1)调度算法。