《Linux设备驱动程序》 笔记1

驱动程序的任务

通常来讲,驱动(模块)要执行两类任务:

  1. 模块中的某些函数作为系统调用的一部分执行(按照既定规则填补必需的系统调用模块)
  2. 其他函数负责终端处理

内核中的并发

为什么考虑并发问题:

  1. Linux系统中通常正在运行多个并发进程,并且可能有多个进程同时使用我们的驱动程序
  2. 大多数设备能够中断处理器,而中断处理程序异步运行,并且可能在驱动程序正试图处理其他任务时被调用。
  3. 有一些软件抽象(比如内核定时器)也在异步运行着
  4. 可能同时有不止一个CPU运行我们的驱动程序

驱动程序编写人员所犯的一个常见错误是,认为只要某段带代码没有进入睡眠状态(或者阻塞),就不会产生并发问题,但即使在先前的非抢占式内核中,这种假定也是错误的。在2.6版本的代码中,内核代码(几乎)始终不能假定在给定代码段中能够独占处理器。

一些细节

  • 应用程序拥有一块很大的栈空间,内核具有非常小的栈,它可能只有4096字节的大小。如果我们需要大的结构,则应该在调用时动态分配该结构。
  • 内核代码不恩你各市县浮点数运算。如果打开了浮点支持,在某些架构上,需要在进入或退出内核空间时保存和恢复浮点处理器的状态。这种额外的开销没有任何价值,内核代码中也不需要浮点运算。
原文地址:https://www.cnblogs.com/catmelo/p/4296203.html