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

标签:linux

linux笔记

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

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

lcc 7个月前 (03-22) 576℃ 0评论 1

linux笔记

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

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

lcc 8个月前 (03-09) 332℃ 0评论 1

linux笔记

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

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

lcc 8个月前 (02-21) 306℃ 0评论 1

linux笔记

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

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

lcc 8个月前 (02-16) 234℃ 0评论 1

linux笔记

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

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

lcc 8个月前 (02-13) 389℃ 0评论 1

linux笔记

linux学习19,内核中的“队列”数据类型

前面两节较为详细的讨论了 linux 内核中链表的设计,以及相关的C语言代码实现。本节再来看看 linux 内核中另外一种常用的数据类型:队列。 “队列”数据结构适合处理“生产者”和“消费者”编程模型 事实上,不仅仅是 linux 内核,基本上稍微有些规模的编程项目都会用到“队列...

lcc 9个月前 (01-22) 333℃ 0评论 0

linux笔记

linux学习18,内核是如何操作链表的

上一节较为详细的介绍了 linux 内核中链表的设计与实现,能够看出,内核实际上是将链表“塞入”数据结构的。事实上,为了方便的操作这些链表,linux内核实现了一系列方法,本节将了解此。 链表的初始化 正如上一节介绍的,list_head 本身没有记录额外的信息,它仅仅起到连接...

lcc 9个月前 (01-21) 227℃ 0评论 0

linux笔记

linux学习16,系统调用

包括 linux,大多现代操作系统都提供了用户进程和内核交互的接口。通过这些接口,用户进程能够在内核的监督下访问硬件设备,创建新进程或者与其他进程通信。可以说,这些接口充当了用户进程和内核的中转站。 在内核的监督下,可以避免用户进程的肆意妄为,做出一些损害系统的事情。 在...

lcc 9个月前 (01-16) 309℃ 0评论 2

linux笔记

linux学习15,内核是如何切换进程的

前面两节讨论了 linux 中进程的睡眠与唤醒机制,也介绍了 linux 内核的 cfs 进程调度方法,知道了哪些进程会被挂起,哪些进程会被投入运行。 不过,我们还不知道 linux 内核在进程调度时,是如何切换进程的的。例如,原本进程 A 正在睡眠,进程 B正在运行,现在要将 ...

lcc 9个月前 (01-11) 410℃ 0评论 1