做课件的网站网站建设app端
做课件的网站,网站建设app端,网易博客搬家wordpress,界面设计与制作是做什么的目录
优先级
概念
举例
UID
优先级
修改优先级
竞争、独立、并行、并发
切换
死循环如何运行
寄存器
切换
介绍
Linux中真实调度算法 优先级
概念 优先级是进程得到CPU资源的先后顺序。其原因是目标资源稀缺#xff0c;所以要通过优先级来确定先后顺序。 优先级…目录优先级概念举例UID优先级修改优先级竞争、独立、并行、并发切换死循环如何运行寄存器切换介绍Linux中真实调度算法优先级概念优先级是进程得到CPU资源的先后顺序。其原因是目标资源稀缺所以要通过优先级来确定先后顺序。优先级其实是一个数字值越低就代表它的优先级越高考虑到公平性该值的变化幅度不会太大。举例下面我来带大家看看在Linux具体是什么样的。UID不过我先补充一点我们在访问文件时系统是怎么知道我是谁它是通过UIDuser id来确认。系统不是通过名字字符来确认身份而是通过它的UID所对应的编码来确定身份。比如下面的一个进程ll - n 可以查看用户对应的UID。可以看到zzg所对应的UID就是1000 。其实在在Linux中访问任何资源都是进程访问进程就代表用户。识别权限不是识别用户的而是识别进程和文件的权限。优先级好了现在我来带大家看看优先级长什么样子解释-l表示以长格式显示进程信息它会提供比默认格式更详细的信息PRI进程的优先级默认80NI进程优先级的修正数据nice值默认0修改优先级优先级是可以修改的可以用top或者nice和renice。进程真实的优先级PRI(默认) NI进入top后按“r”‒输入进程PID‒输入nice值来更改进程优先级。操作如下结果nice是在启动进程时就设置优先级renice是用来调整已启动的进程优先级。我主要介绍renice。下面是它的语法格式renice [优先级值] [选项] [进程ID或用户名]选项-p是指定要调整的进程ID-u是指定要调整优先级的用户名会对该用户所有正在运行的进程进行优先级调整可以看到当我设置100时nice是19系统是不允许你频繁改优先级的否则就会像上面这样。当我设置-100时nice是-20为什么会这样呢原因是我在上面提到的保证其公平性防止进程长时间得不到CPU资源而饥饿。所以Linux里优先级的范围就是[60, 99]。我在上面提到的计算优先级公式中PRI后有个默认这是什么意思呢假设我先对优先级加10然后我减去10从上面可以看到PRI并没有变成80而是70所以每次修改都是对它的默认值修改。竞争、独立、并行、并发竞争性简单来说就是进程多资源少所以它才会存在。独立性多进程运行需要独享各种资源多进程运行期间互不干扰。并行多个进程在多个CPU上同时运行。并发多个进程在一个CPU上采用进程切换的方式在一段时间内让多个进程得以推进。其原因就是一个CPU只能执行一个进程。切换在具体了解之前我先介绍几个补充知识。死循环如何运行如果CPU是把进程执行完在执行下一个那死循环进程就会一直占有CPU那我们就做不了其它事但现实是我们可以做其它事。实际上一个进程一旦占有CPU并不会把自己跑完除非它本身很短它只有一个时间片的时间时间一到就会被放到运行队列然后下一个进程会被加载到CPU里。时间片一般是毫秒级别由于时间很短暂会让用户觉得是同时运行的。这其实就是上面提到的并发。其实Linux就是基于时间片的分时操作系统。时间片其实是计时器。寄存器当进程被加载到CPU时寄存器会记录正在执行进程的临时数据。像程序计数器PC它是保存即将要执行的下一条指令的地址。如果该进程要被切换则该进程的状态即寄存器里的内容会被保存在进程自己的堆栈中。当再次把该进程再次加载到CPU时它会把上次的状态给加载到寄存器里。然后从上次被结束的地方开始再次执行。像上图进程A会带走自己的内容进程B会把自己的内容写到寄存器里。寄存器是CPU的临时空间寄存器是一段空间只有一份而寄存器里的数据它是内容有多份。不要把它们给搞混。切换介绍进程切换的本质保存和恢复进程的硬件上下文数据即CPU里的寄存器里的内容它被称为TSS任务状态段以前是靠硬件来存TSS现在是存到PCB里。其实不只有分时还有实时操作系统简单来说对于特定的进程它会把它直接执行完后或者该进程在等待资源时才会执行其他进程。像在智能交通就会有它的身影。Linux中真实调度算法它是通过调度器来实现的主要作用就是切换选择进程并载入CPU。下面我来简单介绍调度器。不过要先明确一个CPU只有一个运行队列解释active活跃队列nr_activequeue里还有多少未执行的进程bitmap[5]位图一共有5*32个比特位因为queue有140个元素。用于快速查找未被执行的进程queue[140]里面的一个元素就是一个进程队列相同优先级的进程按照FIFO规则进行排队调度。所以数组下标就是优先级之所以有140个元素是因为在Linux里其实是有实时的前100元素个表示实时的优先级后面的40个元素表示分时的优先级。分时的优先级区间里的数量正好有40个通过 x-60(140-40) 对应到queue的分时优先级里当执行完某个进程时该进程会放到哪里还是活跃队列吗如果是活跃队列那如果它后面有进程但它的优先级没变那还不是执行它吗很显然这并不合适。根据这种情况提出了过期队列。过期队列expired是用来存放已经被执行过进程的队列它和活跃队列一模一样。活跃队列和过期队列它们都在一个数组里。当1执行后就如下其大概过程是先活跃队列里通过位图快速查找进程然后把它加载到CPU里当执行完后把该进程放入过期队列里当活跃队列里的进程使用完之后会通过swap函数交换两个指针然后在从新开始执行。在系统当中查找一个最合适调度的进程的时间复杂度是一个常数不随着进程增多而导致时间成本增加这被称为进程调度O(1)算法