Linux内核
文章平均质量分 58
遇到的内核知识点总结
官方认定好文
这个作者很懒,什么都没留下…
展开
-
7、软中断原理
函数如下,不再深入介绍,我们只需要知道,通过如下函数引发中断后,内核就会通过do_softirq() 函数循环处理中断数组中的所有中断;至于如何禁用中断、如何清除软中断位图等操作也不再深入。,当并不深入介绍软中断,仅仅记录以下软中断的结构类型;毕竟用户不会直接用到软中断。结构体,只有一个成员函数指针,自然是用于绑定软中断要执行的函数:;事实上内核用一个数组表示所有的软中断,数组名为。, 每个元素的类型为。原创 2024-05-06 09:17:15 · 152 阅读 · 0 评论 -
6、tasklet原理与软中断
由于硬中断执行期间不能被调度且会屏蔽同类型的中断,所以它的执行时间要特别短,就需要把不紧急的任务放在所谓的“下半部”延后处理;软中的类型和编号如下,可见其资源确实比较稀缺,但由于它主要作为其他延时机制的基础,所以其限制不算大;但内核对tasklet做了更多的限制,同类型的tasklet只能串行的在一个cpu上执行;就激活了tasklet,处理器就能择机尽快执行tasklet绑定的函数了;我们上节介绍的是常规tasklet;使用软中断,只有中枢的内核代码才会用到软中断,因为软中断是很稀缺的资源;原创 2024-04-29 09:43:39 · 345 阅读 · 0 评论 -
5、tasklet
tasklet也是用于中断下半部的一种方法,而且是I/O驱动程序的首选方案;守护线程大部分时间都在睡眠,当进程会把工作项添加到进程所在的处理器上,守护线程被唤醒;2、初始化: 参数1,是tasklet变量;参数3,是传给函数的参数。我们首先仍然只看tasklet的用法,只需如下几部,以megaraid博通Raid。但是要注意,守护线程可以在本cpu上运行,也可以调度到其他cpu上运行。),它会创建一个cpu数量的数组,且每个数组项有一个守护线程;介绍完工作队列,不得不说一下tasklet;原创 2024-04-28 09:51:02 · 166 阅读 · 0 评论 -
4、工作队列用法
内核创建了一个标准的工作队列,称为events(注:每个处理器都有这样一个工作队列);故用户无需在创建工作队列,只需创建工作项;基本上每个内核模块都会自定义工作队列,一个队列上可以有多个工作项,包括延时工作项;工作队列是用内核线程去实现所需的工作,这样看来比用户空间编程还方便些,毕竟用户空间需要用户自己创建线程。由于工作队列的实现比等待队列复杂,我们不深入介绍,这里还是只看一下工作队列的用法。这种方式适合执行时间短的工作,如果执行时间长就延误了其他工作项的执行。:内核自带了工作队列,用户只需定义工作项;原创 2024-04-25 10:01:33 · 418 阅读 · 0 评论 -
3、完成量
这就意味着 进程不必要等待已经发生的事件;因为事件发生已经调用了complete() ,此时done已经++,而后在调用wait_for_completion()时,发现done!=0,进程就不会睡眠;这就是完成量与等待队列的差别支持!(名称上区别信号量),是根据等待队列实现的,看如下定义,可见它就是一个。函数,这俩函数我们不再展开介绍,我们主要看一下这俩函数对。但wait_for_completion()只有在。complete() 时。等待队列另加一个计数器。原创 2024-04-22 09:13:12 · 198 阅读 · 0 评论 -
2、等待队列原理深入
在上一节从使用者的角度分布介绍了等待队列、完成量和工作队列的使用场景和使用步骤;本节我们稍微深入一下,先看一下等待队列的基本工作原理,当然不会太深入,因为那是内核的工作。原创 2024-04-18 09:52:56 · 165 阅读 · 0 评论 -
1、等待队列、完成量、工作队列的使用场景
首先创建一个工作队列,然后加入工作项,这些工作项稍后由内核线程去执行;完成量跟等待队列的使用场景非常类似,起始完成量就是通过等待队列实现的,我们在后续介绍原理的时候看完成量的定义就一目了然了。关键在“等待”二字,用于使进程(线程)等待某一特定事件发生,进程在等待期间会睡眠,在事件发生时由内核唤醒。在名称上区分于“等待队列”;以上是我们自定义了工作队列,其实系统自带了标准的工作队列,我们只需要将新的工作项添加到该队列就行了;,但如果我们在开始等待时,起始事情已经发生,这样就永远无法唤醒睡眠的进程了;原创 2024-04-17 13:34:37 · 572 阅读 · 0 评论