目录
前言:
Linux驱动程序员,要熟悉Linux的硬件驱动,必须关注两个大的框架:一、Linux内含的六大分离的思想与主要的驱动程序框架;二、驱动程序六大工作机制。只有掌握了这两大机制,才算真正的掌握了Linux的内核驱动程序。
第4章 内核程序并发与互斥机制
4.1 内核程序优先级机制
4.2 内核线程状态:并发与竞争
备注:上图中底半部和顶半部写反了。
4.3 内核锁的类型
4.4 乱序问题
第5章 阻塞与非阻塞机制
5.1 什么是阻塞问题
(1)当接收时,没有数据的时候该怎么办?
(2)当发送时,设备正忙的时候该怎么办?
这就是阻塞问题。
阻塞:当设备没有ready时,操作线程直接进入等待队列,直到设备准备好,并唤醒等待线程。
非阻塞:当设备没有ready时,操作线程直接带错误信息返回。
5.2 应用程序如何设置阻塞方式
5.3 内核驱动如何阻塞应用程序(等待队列模型)
5.4 内核驱动如何实现阻塞操作
(1)读操作
- 没有可用数据时,用户线程进入等待队列,直到硬件中断服务程序唤醒读线程,开始读取数据。
(2)写操作
- 数据没有写完成时,用户线程进入等待队列,直到写完成,唤醒应用线程,继续下一次的写操作。
(1)读操作
- 没有数据时,进入等待队列,阻塞。
- 有数据时,直接读数据,并转交给用户空间的程序。
(2)中断服务程序
- 表明有数据ready,唤醒等待队列中的内核空间的读线程
5.5 信号量实现阻塞问题
5.6 用户空间阻塞+内核空间查询