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


    驱动程序的任务

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

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

    内核中的并发

    为什么考虑并发问题:

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

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

    一些细节

    • 应用程序拥有一块很大的栈空间,内核具有非常小的栈,它可能只有4096字节的大小。如果我们需要大的结构,则应该在调用时动态分配该结构。
    • 内核代码不恩你各市县浮点数运算。如果打开了浮点支持,在某些架构上,需要在进入或退出内核空间时保存和恢复浮点处理器的状态。这种额外的开销没有任何价值,内核代码中也不需要浮点运算。
  • 相关阅读:
    HTML和CSS之HTML(记录一2015.3.30)
    jquery学习记录三(表单选择器)
    jquery学习记录四(操作DOM元素)
    jquery学习记录二(过滤性选择器)
    jquery学习记录一(基础选择器)
    聚集索引和非聚集索引
    git命令
    4,gps信号与地图匹配算法
    3,gps定位原理及格式
    2,地图数据分析-地图数据转换成导航引擎数据
  • 原文地址:https://www.cnblogs.com/catmelo/p/4296203.html
Copyright © 2020-2023  润新知