招商加盟网站大全汇总竞价推广员月挣多少
招商加盟网站大全汇总,竞价推广员月挣多少,免费引流软件下载,厦门网站开发网络公司进程优先级 基本概念查看系统进程修改进程的优先级Linux2.6内核进程调度队列的简要介绍和进程优先级有关的概念进程切换 基本概念
为什么会存在进程优先级#xff1f; 进程优先级用于确定在资源竞争的情况下#xff0c;哪个进程将被操作系统调度为下一个运行的进程。进程… 进程优先级 基本概念查看系统进程修改进程的优先级Linux2.6内核进程调度队列的简要介绍和进程优先级有关的概念进程切换 基本概念
为什么会存在进程优先级 进程优先级用于确定在资源竞争的情况下哪个进程将被操作系统调度为下一个运行的进程。进程优先级允许操作系统根据进程的相对重要性和需求来分配有限的系统资源。 在操作系统中进程优先级是指操作系统调度器为每个进程分配的优先级级别
查看系统进程
在Linux中可以使用ps -l指令查看有关进程优先级的信息 同时我们需要知道几个比较关键的i信息
UID 表示执行者的身份PID 当前进程的idPPID 当前进程父进程的idPRI 当前进程的优先级NI 当前进程的nice值
修改进程的优先级 当我们需要修改进程的优先级时
输入top指令输入r,然后再输入进程PID最后输入nice值 在 Linux 中执行 top 命令后按下 r 键表示向 top 命令发送一个重新调度进程的信号。这个操作通常会让 Linux 内核尝试重新分配 CPU 时间片给进程以优化系统的性能。 PRI还是比较好理解的就是进程的优先级(这个值越小就表示优先级越高) NI就是nice值表示的就是进程可被执行的优先级的修正数值 PRI计算规则如下 P R I ( n e w ) P R I ( o l d ) n i c e PRI(new)PRI(old)nice PRI(new)PRI(old)nice 所以当nice值为负数的时候就会使得PRI变小从而使优先级变高。所以调整进程优先级实质上就是调整进程的nice值 nice的取值范围是[-20,19]一共40个级别
为什么调整进程优先级要受限制 如果不加以限制将某个进程调整的很高而其他的进程调整得很低优先级高得进程会优先获得资源但是后续产生的常规进程就很难享受到CPU等资源就会产生进程饥饿问题
注意
进程的nice值不是进程的优先级它们不是一个概念但是进程NI会影响到进程优先级的变化
Linux2.6内核进程调度队列的简要介绍 以上就是Linux2.6内核中进程调度队列的数据结构 一个CPU只有一个runqueue 首先看到活跃进程进程中queue[140]是一个指针数组这个数组中下标从0到99是不使用的只会使用下标100到139这也正好对应了进程优先级一共有40个优先级。 queue中每个元素都是指针指针指向的是一个链表的头节点而链表的每个结点都是一个task_struct的结构体也就是pcb对象相同优先级的进程的pcb对象就会被放到同个队列中。因此我们可以将这个queue看作是这样的结构 这样判断活跃进程中是否还有进程就只需要判断数组下标从100到139位置上是否还存在有效的队列地址就可以了 但是如果每次都是遍历整个数组的话效率上又不太高于是又添加了一个数组bitmap,这个数组有5个元素且每个元素的类型都是int。由于int类型有32个bit位所以整个数组就相当于是拥有了160个bit位这个数组的意义就是通过bit位的位置来记录数组中所对应下标所指向的队列是否为空。若队列不为空则对应的bit位为1否则为0 举个例子将整个数组所对应的bit为看作是一个整体若第120个bit位为1则说明queue数组中下标为120的元素所指向的队列中还存在进程因为数组中一共有140个元素,所以需要至少140个bit位才能表示,变量nr_active表示当前是否有进程需要运行 所以CPU维护进程队列中的进程大致过程如下首先看nr_active,看是否有进程如果有的话就会去数组bitmap中查看数组queue中哪个下标存在需要运行的进程最后直接去对应的下标所指向的队列中拿到对应进程的pcb并开始运行工作。 当CPU正在执行活跃进程内的进程时若后面又有了新的进程或者是当前进程的时间片已经被耗尽为了不妨碍CPU的执行就会将该进程放到过期队列中。通过上图的进程调度队列我们可以看到所谓的活跃进程和过期进程实际上是被放到一个数组array上面的且该数组的元素都是结构体类型。调度队列runqueue中还有两个变量分别是active和expirea,这两个变量都是结构体指针类型它们分别指向活跃队列和过期队列。 随着时间的推进活跃进程中的进程会不断减少过期进程的进程会不断增多。操作系统并不会通过数组下标判断哪个是活跃队列哪个是过期队列而是直接通过active和expirea两个指针来判断所以当活跃进程中的进程全部被执行完之后要轮到过期队列了是只用交换active和expirea两个指针的内容即可 总结一下 优先级
普通优先级100139实时优先级099不关心
活动队列
时间片还没有结束的所有进程都按照优先级放在该队列nr_active: 总共有多少个运行状态的进程queue[140]一个元素就是一个进程队列相同优先级的进程按照FIFO规则进行排队调度,所以数组下标就是优先级
从该结构中选择一个最合适的进程过程是怎么的呢
从0下表开始遍历queue[140]找到第一个非空队列该队列必定为优先级最高的队列拿到选中队列的第一个进程开始运行调度完成遍历queue[140]时间复杂度是常数但还是太低效了 bitmap[5]:一共140个优先级共140个进程队列为了提高查找非空队列的效率就可以用5*32个bit位表示队列是否为空这样便可以大大提高查找效率
过期队列
过期队列中的放置的进程都是新增的进程或者是时间片被耗尽的进程当活动队列中的进程被处理完之后会对过期队列中的进程重新计算
active指针和expired指针
active永远指向活动队列而expired永远指向过期队列随着时间的推进活动队列中的进程逐渐变少而过期进程中的进程逐渐变多当活动队列上的进程被执行完就会发生两个指针内容的交换这样过期队列就变成了新的活动队列
O(1)调度 在系统中查找一个最合适调度的进程的算法的时间复杂度是常数级别的所以被称之为是进程调度的O(1)算法
和进程优先级有关的概念
竞争性竞争性: 系统进程数目众多而CPU资源只有少量甚至1个所以进程之间是具有竞争属性的。为了高效完成任务更合理竞争相关资源便具有了优先级 独立性多进程运行需要独享各种资源多进程运行期间互不干扰 并行多个进程在多个CPU下分别同时运行 并发多个进程在一个CPU下采用进程切换的方式在一段时间内让多个进程得以推进称之为并发
进程切换 当一个进程在CPU上运行时CPU上所有的寄存器就要为该进程服务由此在运行期间CPU中的寄存器会存储大量的临时数据(比如执行到哪一行、返回值是多少…)。在pcb对象中存在一个字段称之为时间片这个字段中存的是当前进程还剩多长运行时间当时间片上的时间被耗尽时,也就是说CPU不会为该进程继续运算这个时候就需要进行进程切换。 进程切换之前首先要做的就是保存CPU寄存器中的临时变量因为下一个进程运算时产生的临时数据会覆盖上一个进程的临时数据这些临时变量最终都会被暂时保存到pcb中将CPU内部寄存器与该进程相关的所有数据都称之为该进程的硬件上下文数据这些数据保存在pcb中就叫做保护上下文。 一般进程的调度有两种情况
如果时首次调度将代码放到寄存器eip中逐步去执行并将中间产生的临时变量填充到寄存器中如果时二次被调度先将pcb中保存的硬件上下文数据恢复然后代码从上次最后一次执行的位置后面开始执行
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/88258.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!