• 好好学习,天天向上~
  • 欢迎欢迎~

 分类:linux笔记

Linux学习第30节,内核中互斥锁的设计,及其C语言代码实现

上一节主要讨论了 Linux 内核中的信号量,知道了持有信号量的线程可以睡眠,因此如果有一段临界区需要较长时间的保护,与自旋锁相比,选择信号量无疑是更合适的。多数用户使用信号量只使用计数 1,这时的信号量其实就是一个互斥的排它锁——好比允许睡眠的自旋锁。 事实上,相对于自旋锁,...

lcc 3个月前 (03-22) 226℃ 0评论 1

Linux学习第29节,从C语言源码分析,信号量和自旋锁有何区别

上一节主要介绍了Linux内核中的自旋锁,知道了自旋锁是不能睡眠的,因此只适合用于短时间的保护临界区。如果需要较长时间的持有锁,就不应该再使用自旋锁了,因为这会大量消耗 cpu 的性能,大大降低整个系统的效率。 不过,在Linux内核开发中,不可避免的会遇到需要长时间保护的临界区...

lcc 3个月前 (03-09) 126℃ 0评论 1

Linux学习第28节,自旋锁的C语言代码实现

上一节主要介绍了 Linux内核中的原子操作,在某种程度上避免了多个线程对同一全局变量的竞争问题。要是内核中的其他C语言程序开发中的临界区都能像上一节介绍的原子变量那样简单就好了。 然而事与愿违,在某个C语言项目中,可能某个临界区甚至会跨越多个函数。例如,函数 A 负责从共享数...

lcc 3个月前 (03-09) 168℃ 0评论 0

Linux学习第27节,内核中的原子操作

前面20多节的文章在分析 Linux 内核设计与C语言代码实现时,常会遇到全局变量。全局变量显然属于多个函数的共享资源,因此若想安全的使用它,必须做好同步。事实上,Linux 内核也确实提供了一些用于同步共享资源的接口,不过之前的文章都对此避而不谈,接下来几节将尝试学习一下 Li...

lcc 4个月前 (03-01) 167℃ 0评论 0

Linux学习第26节,内核中的“中断”下半部工作队列机制

第24节提到,在处理中断时,Linux 内核为了解决“又想做得快,又想做得多”的矛盾,将一次完整的中断处理分为“上半部”和“下半部”两部分,耗时较多但是对实时性要求不高的处理统统放入下半部。 2.6.26 版本的 Linux 内核有软中断、tasklet和工作队列三种形式的“下...

lcc 4个月前 (02-21) 158℃ 0评论 1

Linux学习第25节,内核中的“中断”下半部tasklet机制

上一节较为详细的讨论了 Linux 内核中的“软中断”机制,通过这种模拟硬件中断的设计,中断处理程序可以设计的尽可能小而快,而将余下的较为复杂的工作放入“稍后”执行的软中断中。 不过,软中断在不同的处理器上可以同时运行多个,所以任何共享数据都需要做好严格的同步管理,如果通过互斥...

lcc 4个月前 (02-16) 104℃ 0评论 1

Linux学习第24节,内核中的“中断”下半部

上一节介绍了 Linux 中的“中断”机制,明白了 Linux 内核在中断机制的设计中陷入了“两难”的境地:一方面希望中断处理程序有能力做足够多的工作,另一方面又希望中断处理程序能够尽快完成,以避免被中断打断的代码段停止时间过长,影响整个系统的效率。 而且,中断处理程序不在进程...

lcc 4个月前 (02-13) 140℃ 0评论 1

Linux学习第23节,内核中的“中断”机制

前面几节,我们主要分析和讨论了 Linux 内核中常用的几种数据结构(链表、队列、映射、二叉树、红黑树)以及相关C语言代码实现,这是研究 Linux 内核其他内容的基础,本节将介绍一下内核中的“中断”机制。 中断的基本概念 现在来设想一个简单,但是又很常见的场景:当用户按下键盘...

lcc 4个月前 (02-05) 182℃ 0评论 0

linux学习22,linux内核中的红黑树是怎样设计和使用C语言实现的?

上一节较为详细的讨论了普通二叉搜索树的局限性,在此基础上引出了红黑树的概念并介绍了其原理。在文章最后提到,为了维护一棵红黑树,在插入或者删除节点后,需要对二叉树做重着色和变换操作。那么,为什么要做重着色和变换操作呢?怎么做呢?本节将结合 linux 内核源代码讨论之。 为什么红...

lcc 5个月前 (01-30) 140℃ 0评论 0

linux学习21,自平衡二叉树和红黑树的原理和特点

二叉搜索树的局限性 上一节较为详细的介绍了C语言中的二叉搜索树,提到数据采取二叉搜索树的结构存储,可以获得不错的搜索性能。 二叉搜索树之所以有不错的搜索效率,是因为在往树中插入数值时,始终严格的遵守左子节点值比父节点值小,右子节点值比父节点大的准则。以搜索 12 为例: 从根节...

lcc 5个月前 (01-26) 216℃ 0评论 2