for_each_present_cpu(cpu); 遍历全部可用的CPU。这里对CPU的状态进行区分主要是为了动态管理CPU ,进一步实现虚拟化。
#define for_each_present_cpu(cpu) for_each_cpu((cpu), cpu_present_mask)

for_each_cpu () 函数内核实现了两个版本,一个是单处理器版本,一个是多处理器版本,
其中他还用到了cpu_present_mask 宏。
系统中有四种这类的变量分别叫,cpu_present_mask,cpu_online_mask,cpu_active_mask , cpu_possible_mask;
在Linux内核中默认的SMP是最大支持8CPU,当然你可以加大这个数值。这可以在make menuconfig 中找到相关设置 “CPUS”.
这四个变量来源于四个属性,
cpu_all_bits ,用以表示在 menuconfig 中设置的NR_CPUS的值是多少。
cpu_possible_bits,表示实际在运行时处理器的CPU个数是多少?
cpu_online_bits, 用以表示系统真正在工作的处理器个数/状态。当内核管理处理器时主要是通过这个来进行的,
cpu_present_bits:用以表示系统中present的处理器数量,不一定所有都是Online的,在支持处理器热插拔的系统中,possible与present的关系为“cpu_possible_map = cpu_present_map + additional_cpus” ,present处理器是指系统固有的处理器个数不是外部插入的。
cpu_active_bits, 表示目前处于可工作状态的处理器个数。


在代码中如何获取上述的几个变量呢,如下:

printk("%s,possible bits is %lu\n",__func__,cpu_possible_mask->bits[0]);
printk("%s,online bits is %lu\n",__func__,cpu_online_mask->bits[0]);
printk("%s,present bits is %lu\n",__func__,cpu_present_mask->bits[0]);
printk("%s,active bits is %lu\n",__func__,cpu_active_mask->bits[0]);

Log打印如下:

work_demo_func,possible bits is 15      ------ 1111,cpu0,1,2,3
work_demo_func,online bits is 1            -----0001, cpu0
work_demo_func,present bits is 15        ------1111,cpu0,1,2,3
work_demo_func,active bits is 1             -----0001,cpu0

Linux 内核 SMP 代码追踪 --- cpumask相关推荐

  1. Linux内核汇编代码分析

    Linux内核汇编代码分析 1.vmlinux.lds.S文件分析 1.2 vmlinux.lds.S文件总体框架 1.3 代码段 1.4 只读数据段 1.5 init段 1.6 数据段 1.7 未初 ...

  2. 为AM335x移植Linux内核主线代码——了解dts

    问题一:以前的Linux Kernel如何描述硬件,现在又如何描述呢? 在以前的内核版本中: 1)内核包含了对硬件的全部描述: 2)bootloader会加载一个二进制的内核镜像,并执行它,比如uIm ...

  3. linux SPI驱动代码追踪

    一.Linux SPI 框架概述 linux系统下的spi驱动程序从逻辑上可以分为3个部分: SPI Core:SPI Core 是 Linux 内核用来维护和管理 spi 的核心部分,SPI Cor ...

  4. 如何向Linux内核提交代码,如何往 Linux 内核社区提交代码

    总有这样一群人,不计报酬不辞辛苦的为这个世界的美好添砖加瓦,在这一类人中的某一些人,他们开创了许多伟大的开源工程,这些工程也许会随着年代的久远逐渐被替代,但仍然有一些随着时光流逝变得愈发强大,这其中就 ...

  5. linux内核计算代码时间,完成一个简单的时间片轮转多道程序内核代码

    <Linux 内核分析>实验二:How Does a Operating System Work? 1.函数调用堆栈和中断 在上一节实验中我们已经明白了,存储程序计算机的运行原理,就是通过 ...

  6. linux 内核 核心代码,8分钟掌握Linux内核分析的核心科技

    原标题:8分钟掌握Linux内核分析的核心科技 作者: OUYANG_LINUX007 来源: http://blog.csdn.net/ouyang_linux007/article/details ...

  7. linux内核定时器 代码,Linux内核计时器

    linxu内核中完成的许多功能都需要感知时间的行进,比如定期把页面缓存中的数据写入磁盘,定期进行进程调度,提供获得当前时间的系统调用,还有计划任务的实现,让系统在某段时间之后执行某个程序,或者在某个时 ...

  8. linux开源社区贡献代码,4岁小萝莉向Linux内核贡献代码修复「漏洞」而且代码已经合并到内核...

    最近国外社区 Reddit 上有个非常有趣的讨论 ,  在过去发布的Linux内核中有处代码改进是名4岁的小萝莉提交的. 这名小萝莉向内核提交代码以修复某处「漏洞」,这次代码修订还是在 2014 年发 ...

  9. 冒充linux内核,4岁小萝莉向Linux内核贡献代码修复「漏洞」而且已经合并到内核...

    最近国外社区 Reddit 上有个非常有趣的讨论 , 在过去发布的 Linux 内核中有处代码改进是名4岁的小萝莉提交的. 这名小萝莉向内核提交代码以修复某处「漏洞」,这次代码修订还是在 2014 年 ...

  10. 如何向Linux内核提交代码,华人教授向 Linux 内核提交含 Bug 代码,Linux 管理员直接拉黑整所大学!...

    技术编辑:小魔丨发自 思否编辑部公众号:SegmentFault Linux 内核是目前最大的软件项目之一,拥有 2800 万行代码.世界各地的贡献者每天向 Linux 内核管理员提交大量 patch ...

最新文章

  1. Linux 最常用命令整理,建议收藏!
  2. oracle job的迁移
  3. Nature Biotechnology封面 | 经济快速:纳米孔宏基因组方案, 6小时准确识别下呼吸道病原体...
  4. 算法--------------有效的数独
  5. AIX下删除LV后的现场保护和数据恢复方案
  6. java集合框架的结构_集合框架(Collections Framework)详解及代码示例
  7. 哪个版本好_揭秘爱他美奶粉哪个版本好?不同版本爱他美奶粉区别差异是什么?...
  8. 新潮传媒“小趋势”背后的巨变之力
  9. 区块链与java的应用开发_用 Java 开发一个区块链
  10. jbutton如何实现点击_点击量突破22.1亿人次!这场云上祈福拜祖是如何实现的
  11. Access 97 , Access 2k , Access 03 数据库密码破解
  12. Esp8266板制作WiFi干扰器
  13. 数据过多/DOM操作导致页面卡顿和请求突增导致页面崩溃
  14. C++ 算法篇 动态规划----区间动态规划
  15. python制作微信小程序_python搭建微信小程序
  16. Django开发常用30个软件包
  17. xw总结4:jmmntsj
  18. 先验概率、最大似然估计、贝叶斯估计、最大后验概率
  19. C语言调用 free 函数释放内存后指针指向及内存中的值是否改变的问题
  20. drill apache_Apache Spark与Apache Drill

热门文章

  1. GameMap地图初始化
  2. 利用VS2010进行SQL Server服务器和本地的数据融合
  3. Linq to SQL 语法查询....子查询 in操作 join
  4. 水晶报表中的主从表结构
  5. [导入]如何在标题栏上增加按钮
  6. vue router name命名规范_关于Vue项目微前端的实现
  7. python 获取错误日志,并发送邮件
  8. Use AVAudioPlayer in OperationQueue
  9. Python--文件修改
  10. 【CodeVs 6128 Lence的方块们】