内核模块的构建、运行与相关要点解析
1. 内核执行与模块功能概述
在操作系统中,当应用程序发起系统调用或者被硬件中断挂起时,Unix 会将执行权从用户空间转移到内核空间。执行系统调用的内核代码是在进程的上下文中工作的,它代表调用进程进行操作,并且能够访问该进程地址空间中的数据。而处理中断的代码则与进程异步,不与任何特定进程相关。
模块的作用是扩展内核功能,模块化的代码在内核空间运行。通常,一个驱动程序需要完成两项任务:模块中的一些函数作为系统调用的一部分被执行,而另一些则负责处理中断。
2. 内核中的并发问题
2.1 并发的来源
设备驱动程序编程与大多数应用程序编程的一个显著区别在于并发问题。应用程序通常按顺序从开始运行到结束,无需担心环境的变化。然而,内核代码运行的环境更为复杂,必须考虑到多个事件可能同时发生的情况。
内核编程中并发的来源主要有以下几点:
- 多进程运行 :Linux 系统可以同时运行多个进程,可能有多个进程同时尝试使用你的驱动程序。
- 设备中断 :大多数设备能够中断处理器,中断处理程序异步运行,可能在驱动程序执行其他操作时被调用。
- 软件抽象 :一些软件抽象(如内核定时器)也会异步运行。
- 对称多处理器(SMP)系统 :Linux 可以在 SMP 系统上运行,这意味着驱动程序可能会在多个 CPU 上同时执行。
2.2 并发带来的要求
由于上述原因,Linu
超级会员免费看
订阅专栏 解锁全文
9

被折叠的 条评论
为什么被折叠?



