[架构之路-38]:目标系统 - 系统软件 - Linux OS硬件设备驱动必须熟悉的六大工作机制之(并发与互斥阻塞与非阻塞异步通知)

Posted 文火冰糖的硅基工坊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[架构之路-38]:目标系统 - 系统软件 - Linux OS硬件设备驱动必须熟悉的六大工作机制之(并发与互斥阻塞与非阻塞异步通知)相关的知识,希望对你有一定的参考价值。

目录

前言:

第4章 内核程序并发与互斥机制

4.1 内核程序优先级机制

4.2 内核线程状态:并发与竞争

4.3 内核锁的类型

4.4 乱序问题

第5章 阻塞与非阻塞机制

5.1 什么是阻塞问题

5.2 应用程序如何设置阻塞方式

5.3 内核驱动如何阻塞应用程序(等待队列模型)

5.4 内核驱动如何实现阻塞操作

第6章 异步通知机制


前言:

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 用户空间阻塞+内核空间查询

 

 

第6章 异步通知机制

以上是关于[架构之路-38]:目标系统 - 系统软件 - Linux OS硬件设备驱动必须熟悉的六大工作机制之(并发与互斥阻塞与非阻塞异步通知)的主要内容,如果未能解决你的问题,请参考以下文章

[架构之路-11]:目标系统 - 架构 - 嵌入式系统软件+硬件的基本通用架构

[架构之路-56]:目标系统 - 平台软件 - 总体架构概述

[架构之路-28]:目标系统 - 系统软件 - Linux OS内核功能架构图解内核构建内核启动流程

[架构之路-25]:目标系统 - 系统软件 - bootloader uboot内存映射与启动流程

[架构之路-21]:目标系统 - 系统软件 - 计算机系统架构计算机指令系统结构化程序与分层编程。

[架构之路-29]:目标系统 - 系统软件 - Linux OS内核以及内核驱动的调试技术