当前位置: 首页 > wzjs >正文

深圳互联网网站建设初中生可做兼职的网站

深圳互联网网站建设,初中生可做兼职的网站,猪场宣传网站怎么建设,象山seo的优化目录 内核进程调度队列的过程 一个CPU拥有一个runqueue(运行队列在内存) 活动队列(active) 过期队列(expired) active指针和expired指针 重绘runqueue linux内核O(1)调度算法 总结 补充知识: 封装链式结构的目的是: 仅使用封装链式结构可以得到全部的task_struct的信…

目录

内核进程调度队列的过程

一个CPU拥有一个runqueue(运行队列在内存)

活动队列(active)

过期队列(expired)

active指针和expired指针

重绘runqueue

linux内核O(1)调度算法

总结

补充知识:

封装链式结构的目的是:

仅使用封装链式结构可以得到全部的task_struct的信息的原理:


内核进程调度队列的过程

上图是Linux2.6内核中进程队列的数据结构,之间关系也已经给大家画出来,方便大家理解

一个CPU拥有一个runqueue(运行队列在内存)

如果有多个CPU就要考虑进程个数的负载均衡问题 

在上图我们可以看到,runqueue中含有两个struct queue数据结构  array[0]是活跃队列和array[1]是过期队列

struct queue队列数据结构包含了nr_activce  bitmap[5] queue[140]三个结构

        queue队列中的

  •         nr_active是哈希桶中task_struct的数量      功能:控制是否swap(下面讲了)
  •         bitmap[5]充当位图           功能:更快找到下一个要调度的进程在哈希桶的哪个位置
  •         queue[140]是一个哈希桶, 在100到139下标中分别存储链式的进程PCB(task_struct) ,正好对应了40种进程优先级.

活动队列(active)

  • 时间片还没有结束的所有进程都按照优先级放在该队列
  • nr_active: 总共有多少个运行状态的进程
  • queue[140]: 一个元素就是一个进程队列,相同优先级的进程按照FIFO规则进行排队调度,所以,数组下标就是优先级!

从该结构中,选择下一个最合适的进程,过程是怎么的呢?

1. 从0下表开始遍历queue[140]

2. 找到第一个非空队列,该队列必定为优先级最高的队列

3. 拿到选中队列的第一个进程,开始运行,调度完成!

4. 遍历queue[140]时间复杂度是常数!但还是太低效了!因此设计了bitmap[5r]

  • bitmap[5]:一共140个优先级,一共140个进程队列,为了提高查找非空队列的效率,就可以用5*32个比特位表示队列是否为空,这样,便可以大大提高查找效率

过期队列(expired)

  • 过期队列和活动队列结构一模一样
  • 过期队列上放置的进程,都是时间片耗尽的进程
  • 当活动队列上的进程都被处理完毕之后,对过期队列的进程进行时间片重新计算

active指针和expired指针

active指针永远指向活动队列

expired指针永远指向过期队列

可是活动队列上的进程会越来越少,过期队列上的进程会越来越多,因为进程时间片到期时一直都存在的。

没关系,在合适的时候,只要能够交换active指针和expired指针的内容,就相当于有具有了一批新的活动进程!

重绘runqueue

 下图重新描绘了runqueue 

此时active是array[0]的首地址 ,expired 是array[1]的首地址

为什么runqueue需要两个array呢?

  1.  runqueue只有一个array , 如果一直有优先级高的进程插入进来,会导致优先级低的进程一直无法运行,导致饥饿问题
  2. 而两个array可以解决问题:  一个array结构叫做actice队列  ,另一个叫做expired队列,归定cpu只能从active队列中,选取task_struct运行其对应的程序 , 新进程和时间片到了的进程的task_struct 按照优先级加在expired队列中,等到active队列中pcb的数量为0时 ,交换两个队列指针(swap(&active,&expried)) 省去了将pcb重新插入的步骤.

linux内核O(1)调度算法

如何进行快速算法调度(快速找到下一个task_struct),linux设计了一种O(1)算法

4*8*5 =140 

而bitmap[5]正好是5个int值

可以利用类似这种算法

for(int i=0; i<5 ;i++)
{if(bitmap[i] == 0) continue;//一次可检测32个位置else(bitmap[i]!= 0){算法2查找bit位为1的精确位置}}

而算法2可以 利用 n & (n - 1) 可以清除最低位的 1 的特性,减少循环次数。找到哪个比特位为1, 就是哪个优先级中有pcb

#include <stdio.h>int countBits(int num) 
{int count = 0;while (num) {num &= (num - 1);count++;}return count;
}int main() {int num = 29; // 二进制表示为 11101printf("Number of 1 bits in %d is %d\n", num, countBits(num));return 0;
}

总结

在系统当中查找一个最合适调度的进程的时间复杂度是一个常数,不随着进程增多而导致时间成本增加,我们称之为进程调度O(1)算法!

补充知识:

进程的task_struct都用链表链接

task_struct可在运行队列 , 阻塞队列中

linux的链式结构是双链结构

task_struct中将双链结构进行了封装如下图struct node 

封装链式结构的目的是:

如果进程处于某个链式结构中, 只需将task_struct中的链式结构的next和prev填充就行, 而且使得task_struct还可以同时处于多个链表中.

仅使用封装链式结构可以得到全部的task_struct的信息的原理:

下图讲解了仅使用封装链式结构可以得到全部的task_struct的信息

先得到链式结构的偏移量,再找到task_struct的首地址即可

类似使用offset(type ,x)

假设structA从0地址存储, 其实大概率不可能存储到这 , 只是为了得到C的偏移量,再用真实C的地址来找structA 的起始地址.


文章转载自:

http://Ql4XQ3pR.btbLm.cn
http://PB2ZB9kZ.btbLm.cn
http://pJJyfGL7.btbLm.cn
http://50B4yNYR.btbLm.cn
http://v4WGnYMJ.btbLm.cn
http://Q2E784Jb.btbLm.cn
http://uAtFuAgh.btbLm.cn
http://Gbm8lff1.btbLm.cn
http://yOEdWToP.btbLm.cn
http://E24xqHoO.btbLm.cn
http://9hEegUiw.btbLm.cn
http://MLqrRF0q.btbLm.cn
http://k1GRLNou.btbLm.cn
http://0zndEOK3.btbLm.cn
http://vBeUStU8.btbLm.cn
http://w2oKLHgV.btbLm.cn
http://VCieFswG.btbLm.cn
http://N34dZmwn.btbLm.cn
http://iHyB8q5D.btbLm.cn
http://ZZjaD40t.btbLm.cn
http://9WjtLwMg.btbLm.cn
http://n7pt7Ogn.btbLm.cn
http://jrhyzvem.btbLm.cn
http://c2THBNAv.btbLm.cn
http://1ASQsmQ1.btbLm.cn
http://Tvkyp1VW.btbLm.cn
http://NdUgqfR0.btbLm.cn
http://yJxQiAUA.btbLm.cn
http://bcqR9kly.btbLm.cn
http://vbFJlVgN.btbLm.cn
http://www.dtcms.com/wzjs/755845.html

相关文章:

  • 电商网站开发人员工程公司取名大全
  • 网站做等保测评短网址生成防屏蔽
  • 网上商城网站开发WordPress 百度 主动
  • 淘宝客推广网站建设展台展览
  • 网站权重怎么做的哈尔滨cms网站建设
  • 做微网站公司简介深圳微商城网站制作联系电话
  • 网站更换运营商要重新备案专业做网站企业
  • 网站平台搭建怎么弄的做自己的网站花多钱
  • 河北省建筑培训网徐州seo外包
  • 本地网站建设公司安卓开发公司
  • 国外优秀摄影网站wordpress 基于 网店
  • 高新网站制作哪家好商城网站的管理用户模块
  • 个人博客网站开发为什么手机进网站乱码
  • 什么是权重高的网站win2012 iis配置网站
  • 郑州建设局网站dede网站栏目管理
  • 揭阳做网站的站长之家0
  • 中国建设银行汕头支行网站京东企业官网
  • 安装wordpress it works福州seo计费
  • 客流统计系统厂家西安seo盐城
  • 建立企业网站的技能网站挂广告
  • 做网站可不可以模仿删除WordPress底部
  • 国家建设部网站注册工程师人员查询杭州巴顿品牌设计
  • 建设网站公司怎么建站小兽wordpress
  • 网站制作想法金华城乡建设网站
  • 深圳网站开发电话咸宁做网站公司
  • 导航网站教程vs做网站如何调试
  • 广州公司建设网站合肥做网站好的公司
  • 做网站和网页有区别吗网络营销的特点包括什么
  • 网站建设在国内外有何趋势一屏式网站有什么好处
  • 免费申请试用网站网站公司做网站