Linux内核之队列操作
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内核之队列操作相关推荐
- linux内核的队列实现移植
linux内核的队列实现移植 [!TOC] 在c编程中有时会使用一些常用的数据结构,如队列.每次都手写一遍有些麻烦,写一个通用的比较好,而内核有实现队列,直接移植出来就好了. 内核的队列实现 内核的队 ...
- linux 内核的链表操作(好文不得不转)
以下全部来自于http://www.ibm.com/developerworks/cn/linux/kernel/l-chain/index.html 无任何个人意见. 本文详细分析了 2.6.x 内 ...
- linux内核编译及添加系统调用(hdu)_浅谈关于Linux内核write系统调用操作的原子性
Linux系统的write调用到底是不是原子的.网上能搜出一大堆文章,基本上要么是翻译一些文献,要么就是胡扯,本文中我来结合实例来试着做一个稍微好一点的回答. 先摆出结论吧.结论包含两点,即write ...
- Linux内核实战(二)-操作系统概述
os就像一个软件外包,内核就相当于这家外包公司老板. 接下来请假设你就是这个老板,方便理解os如何协调各种资源帮客户做事. 后文中 用户指os的用户 客户指外包公司的客户 1 硬件概述 1.1 鼠标和 ...
- 华为 linux 内核版本升级,升级操作系统内核(不重新安装UltraPath)
升级操作系统内核,暂时不重新启动操作系统. 执行cat /etc/UltraPath.packages.info命令,查看"t140s_solutionType"字段. [root ...
- Linux内核RED队列实现
关于RED队列的TC配置命令,参见:RED队列tc设置. 1 RED入队列 首先计算平均队列长度qavg,参见之后函数red_calc_qavg的介绍.如果队列处于空闲状态,退出空闲状态,清空空闲开始 ...
- linux内核多队列,Linux Kernel 中 Workqueue 使用系统默认队列和创建队列的方法
关于workqueue,我们还是有很多话要说. 想必大家对workqueue相关的函数(schedule_work .queue_work.INIT_WORK.create_singlethread_ ...
- Linux内核 设备树操作常用API【转】
转自:https://www.linuxidc.com/Linux/2017-02/140818.htm 一文中介绍了设备树的语法,这里主要介绍内核中提供的操作设备树的API,这些API通常都在&qu ...
- Linux内核实现原子性操作cmpxchg指令的理解
cmpxchg这个指令是为了 cmpxchg实现了compare and swap 这个操作的原子性: 参考资料: yajin's slide
- linux内核数据结构实现--链表、队列和哈希
C是面向过程的语言,但是linux内核却用C实现了一套面向对象的设计模式,linux内核中处处体现着面向对象的思想. 1. 内核链表和list_entry 1.1 普通链表实现 我们在语法书上学到的链 ...
最新文章
- js实现数独算法(优化版本)
- ubuntu下制作u盘启动盘
- CG CTF WEB pass check
- Power BI for Office 365(八)共享查询
- ZT 类模板Stack的实现 by vector
- 1051. 复数乘法 (15)
- 数据科学和人工智能技术笔记 十五、支持向量机
- List遍历的三种方式
- 山东大学高频电子线路实验二 高频功率放大实验详解
- 服务器lsass系统错误,电脑开机提示lsass.exe系统错误,安全帐户管理器初始化失败该怎么办?...
- WPS文字的字数统计在哪?如何查看当前文档有多少个字?
- A股市场,价投者眼中的10大金股,值得收藏(名单)
- 车轮轨迹原理_三张图告诉你倒车入库的原理
- 关于Redis数据库
- 知云文献翻译打不开_学用系列|自带翻译功能的PDF文献阅读器——知云文献翻译3.0...
- 蓝牙广播数据格式和动态改变
- ASUS 华硕 NX580V 飞行堡垒 安装WIN7系统教程
- 黑洞猝灭剂BHQ-2 acid,1214891-99-2,BHQ-2 Carboxylic Acid用作各种荧光共振能量转移,这种探针主要用于分析。
- K邻近算法(K-NN)
- 英国AI研究员揭开真相,中国人工智能为何能发展迅猛?
热门文章
- 软件测试优先级策略,软件测试策略基础(转载)
- php 去除空余字符,PHP 删除字符串末端的空白字符(或者其他字符)
- nginx伪静态php如何配置文件,nginx实现thinkphp伪静态的配置例子
- telephone 为空 唯一索引_数据库基础及应用试题题库
- Web Resources on Patten Recognition
- 揭秘 IFTTT 每天处理几十亿事件数据的基础结构
- Midnight Commander强大的命令行文件管理器
- 小程序中的大道理之二
- 从团购的“占便宜”心态说起
- 安装SharePoint2010的准备工作-2