原创 底层软件架构 2019-07-12 22:40:12

Linux内核(源代码的链接在github)

1.链表、双向链表、无锁链表

2.B+ 树,这是一些你无法在教科书上找到的说明。

一个相对简单的B+树的实现。我把它作为一个学习练习来帮助理解B+树是如何工作的。这同样也被证明是有用的。

...

一个在教科书中并不常见的技巧。最小的值在右侧而不是在左侧。所有在一个节点里用到的槽都在左侧,所有没有用到的槽包含了空值(NUL)。大多数操作只简单地遍历所有的槽一次并在第一个空值时(NUL)终止。

3.优先排序列表 用于 互斥量、驱动等等。

4.红黑树用于调度、虚拟内存管理、追踪文件描述符和目录项等。

5.区间树

6.根树用于内存管理,NFS相关查询和网络相关功能。

根树的一个通用的用处是存储指针到结构页中。

7.优先级堆,如其名称的教科书实现,用于cgroup。

8.哈希函数,参考了Knuth和一篇论文。

Knuth建议,用乘法哈希的机器字来表示接近黄金比例的素数的最大整数。Chuck Lever验证了该技术的有效性:

http://www.citi.umich.edu/techreports/reports/citi-tr-00-1.pdf

这些素数的选择是位稀疏的,他们可以通过移位和加法操作,而不必使用乘法器,乘法器是很慢的。

9.有的代码,比如lov_pool这个驱动,实现了他们自己的哈希函数。

使用了一种旋转哈希算法的哈希函数

Knuth, D. 《计算机程序设计艺术, 卷 3: 排序与搜索》, 第6、7章. Addison Wesley, 1973

10.哈希表用于实现inode、文件系统完整性检测等等。

11.位数组用于处理标志位、中断等等。并在Knuth那本书的卷4中阐述。

12.信号量和自旋锁

13.二分查找用于中断处理,寄存器缓存查询等等。

14.B树的二分查找。

15.深度优先搜索被广泛地用于目录配置中。

执行一个修改过的命名空间树的深度优先遍历,以指定的start_handle节点开始(及结束)。回调函数会在任何一个参数匹配的节点被发现时被调用。如果回调函数返回了一个非0值,搜索将会立即终止并且将其返回给调用者。

16.广度优先搜索用于检测运行时锁定的正确性。

17.链表中的归并排序用于垃圾收集、文件系统管理等等。

18.冒泡排序在一个驱动库中也有一个令人惊讶的实现。

19.Knuth-Morris-Pratt 字符串匹配,

根据Knuth、Morris和Pratt[1]实现了一个线性时间的字符串匹配算法。他们的算法避免了转换函数的显式地计算DELTA。对于长度为n的文本,其匹配时间是O(n),对于长度为m的模式(pattern),仅使用一个辅助函数PI[1 . .m],预先计算模式的时间为O(m)。数组PI允许转换函数DELTA被实时有效地计算。粗略地说,对于任何状态"q"= 0,1,…、m和在SIGMA中的任何字符"a",PI["q"]的值包含的信息是独立的"a"并需要计算DELTA("q","a") [2]。既然PI只有m个记录,而DELTA有O(m |SIGMA|)个记录,在预处理时间计算PI而不是DELTA的时候,我们可以节省一个因数|SIGMA|

[1] Cormen, Leiserson, Rivest, Stein,算法介绍,第二版,MIT出版社

[2] 见有限自动机原理

20.Boyer-Moore 模式匹配是在找替代品时的参考和建议。

实现了Boyer-Moore字符串匹配算法:

[1] 《一个快速的字符串搜索算法》,R.S. Boyer and Moore.计算机通信协会,20(10), 1977, pp. 762-772. http://www.cs.utexas.edu/users/moore/publications/fstrpos.pdf

[2] 《准确的字符串匹配算法手册》,Thierry Lecroq, 2004 http://www-igm.univ-mlv.fr/~lecroq/string/string.pdf

注:由于Boyer-Moore(BM)从右到左搜索匹配,仍然有可能匹配分布在多个块,在这种情况下该算法并没有优势。

如果你希望确保这样的事情永远不会发生,那使用Knuth-Pratt-Morris(KMP)实现。总之,根据您的设置适当地选择字符串搜索算法。

如果你正在用文本搜索器进行过滤,NIDS或任何类似的注重安全的目的,那么使用KMP。否则,如果你真的关心性能,并且你对数据包进行分类以使用服务质量(QoS)政策,当你不介意匹配可能分布分散,那么用BM。

计算机原理-操作系统- 转发 微博 Qzone 微信 Linux内核中的数据结构和算法相关推荐

  1. 转发 微博 Qzone 微信 一篇文章带你入门ZooKeeper实现原理!(超详细)

    转发 微博 Qzone 微信 一篇文章带你入门ZooKeeper实现原理!(超详细)

  2. 从底层原理出发详解红黑树在Linux内核中的3种经典用法,让你知其所以然

    从底层原理出发详解红黑树在Linux内核中的3种经典用法,让你知其所以然丨进程管理|内存管理|sk_buff|B树|B+树 视频讲解如下,点击观看: 从底层原理出发详解红黑树在Linux内核中的3种经 ...

  3. Linux 内核中的数据结构:双链表,基数树,位图

    Linux 内核中的数据结构 rtoax 2021年3月 1. 双向链表 Linux 内核自己实现了双向链表,可以在 include/linux/list.h 找到定义.我们将会从双向链表数据结构开始 ...

  4. Linux的vx开头的文件,微博 Qzone 微信 Linux文件及目录常用命令,进来瞅瞅

    一.Linux中的目录结构 l /bin :系统命令目录 l /dev :系统设备目录 l /home :用户的家 /home/lau l /lib :系统库文件 .so 动态库 .a静态库 l /m ...

  5. linux 内核 md5 算法_Linux内核中的数据结构和算法

    Linux内核(源代码的链接在github) 1.链表.双向链表.无锁链表. 2.B+ 树,这是一些你无法在教科书上找到的说明. 一个相对简单的B+树的实现.我把它作为一个学习练习来帮助理解B+树是如 ...

  6. linux内核中的数据结构

    http://vinllen.com/linuxnei-he-zhong-de-shu-ju-jie-gou/ https://zhuanlan.zhihu.com/p/58087261 https: ...

  7. 请输入要搜索的内容 搜索 13 转发 微博 Qzone 微信 看完这篇HTTP,跟面试官扯皮就没问题了

    最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便.我就想为什么家里人不让上网,我的同学 xxx 家里 ...

  8. 转发 微博 Qzone 微信 基础知识|存储相关的名词

    基础知识|存储相关的名词 静静呐呐呐 2020-09-23 16:10:04 存储 狭义的存储定义是指具体的某种设备,如以前软盘.CD以及硬盘等.广义上的存储是指存储设备,包括硬件存储系统.软件系统. ...

  9. uuid设置长度_转发 微博 Qzone 微信 分布式系统ID的生成方法之UUID、数据库、算法、Redis、Leaf方案...

    点击上方「蓝字」关注我们 前言 一般单机或者单数据库的项目可能规模比较小,适应的场景也比较有限,平台的访问量和业务量都较小,业务ID的生成方式比较原始但是够用,它并没有给这样的系统带来问题和瓶颈,所以 ...

最新文章

  1. ELK 搭建 TB 级海量日志监控系统,这个太强了!
  2. 想做网络工程师不?最好学下Linux
  3. C语言模拟实现库函数 atoi
  4. linux定时刷新窗口,Linux的屏幕刷新率问题 窗口调整问题
  5. 德信创业系2014版
  6. matlab datetime时间处理、时间转换
  7. 非常抱歉,pmcaff网站硬盘故障,无法访问,努力恢复ing……
  8. 网页中设定表格边框的厚度的属性_网页试题
  9. [转]敏捷开发之Scrum扫盲,及敏捷开发中XP与SCRUM的区别
  10. java字符串不可变_Java字符串真的是不可变的吗?
  11. 腾讯云与同方全球人寿签署战略合作 “云+保险”合作伙伴队伍再壮大
  12. Ubuntu安装与配置
  13. w25q64 linux,我用W25Q16的读写函数测试w25Q64怎么总是失败?需要改动什么吗?
  14. 前沿探索:腾讯云数据库自治服务最佳实现
  15. ppt形状html,如何用好PPT中的基础形状,做出精美的页面,分享5个案例!
  16. moment的常见应用
  17. 【数据库笔记】高性能MySQL:chapter 5 创建高性能的索引
  18. 借用gamma校正的方法来调整图片(灰度)亮度(解决侧光问题)并将其再次保存为RGB图片
  19. 烤仔TVの尚书房丨FOMO 情绪笼罩下的 DeFi 坐上了过山车
  20. 计算机USB小型路由器,千万别小看它!U盘神奇用途盘点:能当路由

热门文章

  1. Windows 10 如何安装adb工具并配置变量环境
  2. 软件培训学习中自律很重要
  3. 纯JavaScript山寨腾讯手机游戏《天天爱消除》开发过程详细
  4. 无责任共享 Coursera、Udacity 等课程视频【百度云】
  5. 论文笔记(三十):Counter-Hypothetical Particle Filters for Single Object Pose Tracking
  6. 「双11」广东人最能买,上海人买火锅底料第一,浙江有人买进了医院……
  7. ad15 各个层的含义
  8. 手机游戏制作宝典(转)
  9. 读《旁观者》心得(1)
  10. 详解 Rxjs 响应式编程类库