内核学习
文章平均质量分 80
kernel_learner
这个作者很懒,什么都没留下…
展开
-
Linux如何实现进程O(1)调度
从运行队列的结构中,我们发现了两个有关优先级的数组,定义在kernel/sched.c中,名字叫prio_array,活跃的和过去的。struct rt_prio_array { DECLARE_BITMAP(bitmap, MAX_RT_PRIO+1); /* include 1 bit for delimiter */ struct list_head queue[MA转载 2012-03-09 11:06:05 · 2362 阅读 · 0 评论 -
V4L2 Linux驱动简介(1)
书房网原文链接 笔者最近有机会写了一个摄像头的驱动,是“One laptop per child”项目的中摄像头专用的。这个驱动使用了为此目的而设计的内核API:the Video4Linux2 API。在写这个驱动的过程中,笔者发现了一个惊人的问题:这个API的文档工作做得并不是很好,而用户层的文档则写的,实际上,相当不错。为了补救现在的状况,LWN将在未来的内个月里写一系列文翻译 2013-03-12 14:38:21 · 2219 阅读 · 0 评论 -
Linux内核线程编程方法
内核经常需要在后台执行一些操作,这种任务就可以通过内核线程(kernle thread)完成--独立运行在内核空间的标准进程。内核线程和普通的进程间的区别在于内核线程没有独立的地址空间,mm指针被设置为NULL;它只在 内核空间运行,从来不切换到用户空间去;并且和普通进程一样,可以被调度,也可以被抢占。实际上,内核线程只能由其他内核线程创建,在现有的内核线程中创建一个新的内核线程的方法:k转载 2012-07-12 13:15:45 · 966 阅读 · 0 评论 -
Netlink实例----用户态内核态全包含
/* * netlink_kernel.c */#ifndef __KERNEL__#define __KERNEL__#endif#ifndef MODULE#define MODULE#endif#include #include #include #include #include #include #include #in原创 2012-05-15 18:18:16 · 2107 阅读 · 0 评论 -
NAPI In Linux Network Device Driver
简介: NAPI 是 Linux 上采用的一种提高网络处理效率的技术,它的核心概念就是不采用中断的方式读取数据,而代之以 POLL 的方法来轮询数据,类似于底半方式(bottom-half 的处理模式);但是目前在 Linux 的 NAPI 工作效率比较差,本文在分析 NAPI 的同时,提供了一种高效的改善方式供大家参考。NAPI 是 Linux 上采用的一种提高网络处理效率的技术转载 2012-05-08 20:50:13 · 1896 阅读 · 0 评论 -
Linux Notification chain学习
概 述 内核许多子系统之间关联紧密,因此在一个子系统发生或者检测到的事件信息很可能对其他子系统来说也是有价值的。为了满足其他子系统对这些事件信息的需求,即在某个子系统内发生或检测到事件时,其他对此感兴趣的子系统也能知道事件的发生,内核提供了notification chain机制。注意:notification chain适用于内核子系统之间的信息传递,不涉及用户态。No原创 2012-05-07 13:31:38 · 1531 阅读 · 0 评论 -
Linux PCI设备驱动
PCI是一种广泛采用的总线标准,它提供了许多优于其它总线标准(如EISA)的新特性,目前已经成为计算机系统中应用最为广泛,并且最为通用的总线标准。Linux的内核能较好地支持PCI总线,本文以Intel 386体系结构为主,探讨了在Linux下开发PCI设备驱动程序的基本框架。一、PCI总线系统体系结构PCI是外围设备互连(Peripheral Component Intercon转载 2012-05-04 09:45:32 · 984 阅读 · 0 评论 -
kmalloc and vmalloc
在设备驱动程序中动态开辟内存,不是用malloc,而是kmalloc,或者用get_free_pages直接申请页。释放内存用的是kfree,或free_pages. 对于提供了MMU(存储管理器,辅助操作系统进行内存管理,提供虚实地址转换等硬件支持)的处理器而言,Linux提供了复杂的存储管理系统,使得进程所能访问的内存达到4GB。 进程的4GB内存空间被人为的分为两个部分--用户转载 2012-04-28 12:17:03 · 749 阅读 · 0 评论 -
中断处理的工作队列机制
工作队列(work queue)是另外一种将工作推后执行的形式,它和前面讨论的tasklet有所不同。工作队列可以把工作推后,交由一个内核线程去执行,也就是说,这个下半部分可以在进程上下文中执行。这样,通过工作队列执行的代码能占尽进程上下文的所有优势。最重要的就是工作队列允许被重新调度甚至是睡眠。那么,什么情况下使用工作队列,什么情况下使用tasklet。如果推后执行的任务需要睡眠,那么就选择转载 2012-03-09 11:08:39 · 784 阅读 · 0 评论 -
Linux系统调用的运行过程
在Linux中,系统调用是用户空间访问内核的唯一手段,它们是内核唯一的合法入口。 一般情况下,应用程序通过应用编程接口(API)而不是直接通过系统调用来编程,而且这种编程接口实际上并不需要和内核提供的系统调用对应。一个API定义了一组应用程序使用的编程接口。它们可以实现成一个系统调用,也可以通过调用多个系统调用来实现,即使不使用任何系统调用也不存在问题。实际上,API可以在各种不同转载 2012-03-09 11:07:22 · 13890 阅读 · 0 评论 -
内核同步方法总结
Linux中内核同步方法总结如下:1、原子整数操作: 原子操作可以保证指令以原子的方式运行--执行过程不能被打断.原子操作把读取和改变变量的行为包含在一个单步中执行,从而避免了竞争. 定义:atomix_t t; Atomic_t u = ATOMIC_INIT(0); 操作函数定义在中,原子操作是内联函数.通过内嵌汇编指令来实现. Int转载 2012-03-09 11:09:12 · 1379 阅读 · 0 评论 -
Linux中的软中断
在由内核执行的几个任务之间有些不是紧急的,在必要情况下他们可以延迟一段时间。一个中断处理程序的几个中断服务例程之间是串行执行的,并且通常在一个中断的处理程序结束前,不应该再次出现这个中断。相反,可延迟中断可以在开中断的情况下执行。linux中所谓的可延迟函数,包括软中断和tasklet以及通过中作队列执行的函数(这个以后说),软中断的分配是静态的(即值编译时定义),而tasklet的分配和初始转载 2012-03-09 11:08:13 · 1145 阅读 · 0 评论 -
linux中断处理中的tasklet机制
Tasklet机制是一种较为特殊的软中断。Tasklet一词的原意是“小片任务”的意思,这里是指一小段可执行的代码,且通常以函数的形式出现。软中断向量HI_SOFTIRQ和TASKLET_SOFTIRQ均是用tasklet机制来实现的。 从某种程度上讲,tasklet机制是Linux内核对BH机制的一种扩展。在2.4内核引入了softirq机制后,原有的BH机制正是通过 taskl转载 2012-03-09 11:07:47 · 1437 阅读 · 0 评论 -
V4L2 Linux驱动简介(3)基本I/O原理
如果有人在video for linux API规范上花了我时间的话,他肯定已经注意到了一个问题,那就是V4L2大量使用了ioctl接口。视频硬件有大量的可操作旋钮,可能比其它任何处设都 要多。视频流要与许多参数相联系,而且有很大一部分处理要通过硬件进行。不使用硬件有良好支持模式可能导致表现不好,甚至根本没有表现。所以我们不得不揭 露硬件的许多特性,而对最终应用表现得怪异一点。 传统上来翻译 2013-03-14 11:10:13 · 3322 阅读 · 0 评论