解决了struct timer_list中的expires成员为什么是unsigned long类型的问题之后。悟空决定自己揭开为什么采用双向链表管理数据结构。悟空从网上下载了达人老师的课件,决定先研究定时器的软件架构,Linux内核采用如下的结构体表示:

  struct tvec_base {

  spinlock_t lock;

  struct timer_list *running_timer;

  unsigned long timer_jiffies;

  unsigned long next_timer;

  struct tvec_root tv1;

  struct tvec tv2;

  struct tvec tv3;

  struct tvec tv4;

  struct tvec tv5;

  };

  struct tvec {

  struct list_head vec[TVN_SIZE];

  };

  struct tvec_root {

  struct list_head vec[TVR_SIZE];

  };

  从上面可以看到tvec_base中有五个数组,分别是tv1、tv2、tv3、tv4、tv5。其中tv1的大小为TVR_SIZE,一般是256。而tv2、tv3、tv4、tv5的数组大小是TVN_SIZE,一般是64。Linux系统为每个CPU都分配了一个struct tvec_base成员,每个CPU通过这个成员来管理本CPU上的所有的低分辨率的定时器。

  具体组织如下图所示:

  看到这里悟空终于对Linux内核的低分辨率的定时器的组织架构有了比较清晰的认识。但是这幅图只是表示了Linux内核中特定时间的定时器的切片图。而随着时间的推移,这幅图又是怎么变化的呢?而且tv1、tv2、tv3、tv4、tv5中又是存放了什么数据呢?正当悟空打算揭开这些问题的谜底之后,接下来的事情让悟空郁闷了,只见课件的最后显示着“未完,待续中”。

悟空学Linux专栏----第18篇相关推荐

  1. 悟空学Linux专栏----第19篇

    今天悟空早早地就下载了达人先生的课件,悟空打算接着昨天的问题继续研究.悟空先研究tv1.tv2.tv3.tv4.tv5中存放的数据的条件.按照达人老师的课件.tv1中存放的是定时器的到期时间减去tve ...

  2. 正点原子linux驱动教程,正点原子 手把手教你学Linux之驱动开发篇

    简 介 该课程是正点原子手把手教你学Linux系列课程,该课程配套开发板为正点原子alpha/mini Linux开发板. 手把手教你学Linux之驱动开发篇: 第1讲 Linux驱动开发与裸机开发区 ...

  3. 进程树--用Enki学Linux系列(18)

    每个进程都是被另一个进程开启(或者fork)的.有一个特殊的根进程(叫做"init")是当你的系统第一次引导时直接被内核开启的. 在这种形式下,运行在系统上进程的集合形成了一个以i ...

  4. 菜鸟学Linux 第034篇笔记 vmlinuz, initrd, modules, script

    菜鸟学Linux 第034篇笔记  vmlinuz, initrd, modules, script 内核两部分 核心 /boot/vmlinuz-version 内核模块 /lib/modules/ ...

  5. 菜鸟学Linux 第044篇笔记 算法和私有CA

    菜鸟学Linux 第044篇笔记 算法和私有CA 证书吊销列表CRL(Certificate Revocation List ) 如何解决私钥丢失 PKI: Public Key Infrastruc ...

  6. windows pxe 安装linux,菜鸟学Linux 第103篇笔记 pxe自动化安装linux

    菜鸟学Linux 第103篇笔记 pxe自动化安装linux 内容总览 linux的系统安装 kickstart文件的组成部分 DHCP (Dynamic Host Configuration Pro ...

  7. 菜鸟学Linux 第050篇笔记 dhcp

    菜鸟学Linux 第050篇笔记 dhcp DHCP (Dynamic Host Configuration Protocol) 早期bootp (boot protocol) lease Clien ...

  8. 菜鸟学Linux 第090篇笔记 corosync+drbd+mysql

    菜鸟学Linux 第090篇笔记 corosync+drbd+mysql 内容总览 上节回顾 DRBD (Distributed Replicated Block Device) 分布式复制块设备 配 ...

  9. 菜鸟学Linux 第033篇笔记 bootloader,inittab

    菜鸟学Linux 第033篇笔记 bootloader,inittab Linux 系统自启动流程 PC OS (Linux) POST-->BIOS(Boot Sequence)-->M ...

最新文章

  1. Php小数转为百分数,学习猿地-php百分数如何转小数
  2. CentOS 下 rpm包与 yum 安装与卸载
  3. 十八、中断之独立按键
  4. PostgreSQL 数组类型
  5. 【To Read】LeetCode | Jump Game II(转载)
  6. 自定义类型详解:结构体(内存对齐、位段) + 枚举 + 联合
  7. SpringBoot整合mongodb数据库
  8. PDF在线阅读开发经验(FlexPaper+SWFTools+SaveAsPDFandXPS)【转】
  9. php7版本号,discuz的php7版本号
  10. [从头读历史] 第303节 星球战争 起始:冷兵器战争的宏观架构
  11. Leetcode 1153 字符串转化
  12. 【sv】for循环+fork-join_none结构的坑
  13. A Retinex based GAN Pipeline to Utilize Paired and Unpaired Datasets for Enhancing Low Light Images
  14. 原神3.2剧情服搭建教程
  15. 【AAD Connect】01:AAD Connect把本地AD账户同步到Office365(AD域账户迁移)
  16. 软件测试实习生面试归来
  17. Python namedtuple ——具名元组
  18. matlab memory 代数环,代数环概念 - MATLAB Simulink - MathWorks 中国
  19. 新能源光伏发电的原理是怎样太阳能光伏阵列并网发电仿真模拟运行演示系统
  20. 为什么那么多人选择承制的CISP-PTE培训?

热门文章

  1. 微信小程序案例__简易计算器实现+源代码+注释(二十三)
  2. TDengine Unable to resolve FQDN
  3. HackRF One 学习路线建议
  4. 3、Explan执行计划
  5. 关于足球比赛的越位检测算法
  6. BUUCTF-Crypto【21-40T】loading……
  7. python123外汇兑换计算器_python day03习题
  8. 如何编写一个 Rust 程序——Rust语言基础02
  9. 未运行任何程序,GPU使用率却居高不下(接近100%)
  10. html5 移动端的手指触屏事件