2019独角兽企业重金招聘Python工程师标准>>>

队列的操作中,一般都是为每一个队列写一个队列操作函数,普通的程序多写几个队列操作函数可能并不会增加太多的负担,但是对于Linux内核,里面使用了很多的队列操作,如果为每个队列都写一个队列操作函数这将是一件很多麻烦的事。所以我们想是否可以写一个模板让适合于所有的队列操作。
  当然是可行的,看一下linux内核中是如何实现的吧!

定义一个结构体当作寄宿者:

   struct list_head{struct list_head *next;struct list_head *prev;};

再定义一个宿主:

typedef struct page{struct list_head list;......struct list_head  lru;.......}page ;

通过将寄宿者寄宿在宿主中,我们就可以只对寄宿者进行队列操作。

现在我们还要思考一个问题,就是我们只是对寄宿者进行队列操作,那我们如何在知道寄宿者指针的情况下找到宿主呢?其实这个问题还是很简单地,现在我们知道了寄宿者的指针位置要找到宿主的指针地址,只要知道寄宿者的指针相对于宿主指针的偏移量就可以了。下面给出代码:

d=(unsigned long )(&((struct page *)0)->list);

其中d就是list相对于page的偏移量。

By @liupsmail

转载于:https://my.oschina.net/liupengs/blog/212238

Linux内核之队列操作相关推荐

  1. linux内核的队列实现移植

    linux内核的队列实现移植 [!TOC] 在c编程中有时会使用一些常用的数据结构,如队列.每次都手写一遍有些麻烦,写一个通用的比较好,而内核有实现队列,直接移植出来就好了. 内核的队列实现 内核的队 ...

  2. linux 内核的链表操作(好文不得不转)

    以下全部来自于http://www.ibm.com/developerworks/cn/linux/kernel/l-chain/index.html 无任何个人意见. 本文详细分析了 2.6.x 内 ...

  3. linux内核编译及添加系统调用(hdu)_浅谈关于Linux内核write系统调用操作的原子性

    Linux系统的write调用到底是不是原子的.网上能搜出一大堆文章,基本上要么是翻译一些文献,要么就是胡扯,本文中我来结合实例来试着做一个稍微好一点的回答. 先摆出结论吧.结论包含两点,即write ...

  4. Linux内核实战(二)-操作系统概述

    os就像一个软件外包,内核就相当于这家外包公司老板. 接下来请假设你就是这个老板,方便理解os如何协调各种资源帮客户做事. 后文中 用户指os的用户 客户指外包公司的客户 1 硬件概述 1.1 鼠标和 ...

  5. 华为 linux 内核版本升级,升级操作系统内核(不重新安装UltraPath)

    升级操作系统内核,暂时不重新启动操作系统. 执行cat /etc/UltraPath.packages.info命令,查看"t140s_solutionType"字段. [root ...

  6. Linux内核RED队列实现

    关于RED队列的TC配置命令,参见:RED队列tc设置. 1 RED入队列 首先计算平均队列长度qavg,参见之后函数red_calc_qavg的介绍.如果队列处于空闲状态,退出空闲状态,清空空闲开始 ...

  7. linux内核多队列,Linux Kernel 中 Workqueue 使用系统默认队列和创建队列的方法

    关于workqueue,我们还是有很多话要说. 想必大家对workqueue相关的函数(schedule_work .queue_work.INIT_WORK.create_singlethread_ ...

  8. Linux内核 设备树操作常用API【转】

    转自:https://www.linuxidc.com/Linux/2017-02/140818.htm 一文中介绍了设备树的语法,这里主要介绍内核中提供的操作设备树的API,这些API通常都在&qu ...

  9. Linux内核实现原子性操作cmpxchg指令的理解

    cmpxchg这个指令是为了 cmpxchg实现了compare and swap 这个操作的原子性: 参考资料: yajin's slide

  10. linux内核数据结构实现--链表、队列和哈希

    C是面向过程的语言,但是linux内核却用C实现了一套面向对象的设计模式,linux内核中处处体现着面向对象的思想. 1. 内核链表和list_entry 1.1 普通链表实现 我们在语法书上学到的链 ...

最新文章

  1. js实现数独算法(优化版本)
  2. ubuntu下制作u盘启动盘
  3. CG CTF WEB pass check
  4. Power BI for Office 365(八)共享查询
  5. ZT 类模板Stack的实现 by vector
  6. 1051. 复数乘法 (15)
  7. 数据科学和人工智能技术笔记 十五、支持向量机
  8. List遍历的三种方式
  9. 山东大学高频电子线路实验二 高频功率放大实验详解
  10. 服务器lsass系统错误,电脑开机提示lsass.exe系统错误,安全帐户管理器初始化失败该怎么办?...
  11. WPS文字的字数统计在哪?如何查看当前文档有多少个字?
  12. A股市场,价投者眼中的10大金股,值得收藏(名单)
  13. 车轮轨迹原理_三张图告诉你倒车入库的原理
  14. 关于Redis数据库
  15. 知云文献翻译打不开_学用系列|自带翻译功能的PDF文献阅读器——知云文献翻译3.0...
  16. 蓝牙广播数据格式和动态改变
  17. ASUS 华硕 NX580V 飞行堡垒 安装WIN7系统教程
  18. 黑洞猝灭剂BHQ-2 acid,1214891-99-2,BHQ-2 Carboxylic Acid用作各种荧光共振能量转移,这种探针主要用于分析。
  19. K邻近算法(K-NN)
  20. 英国AI研究员揭开真相,中国人工智能为何能发展迅猛?

热门文章

  1. 软件测试优先级策略,软件测试策略基础(转载)
  2. php 去除空余字符,PHP 删除字符串末端的空白字符(或者其他字符)
  3. nginx伪静态php如何配置文件,nginx实现thinkphp伪静态的配置例子
  4. telephone 为空 唯一索引_数据库基础及应用试题题库
  5. Web Resources on Patten Recognition
  6. 揭秘 IFTTT 每天处理几十亿事件数据的基础结构
  7. Midnight Commander强大的命令行文件管理器
  8. 小程序中的大道理之二
  9. 从团购的“占便宜”心态说起
  10. 安装SharePoint2010的准备工作-2