上交os lec10 设备管理
10.1 设备概述
- 每次敲键盘,会转换为电信号
![]()
- 串口UART
![]()
![]()
- 复用文件系统抽象来管理设备
![]()
- 设备分类:字符设备,块设备,网络设备
用read/write对于字符设备抽象,用文件系统/mmap对于块抽象,用socket对于网络抽象(用read/write读写socket) - linux中设备的抽象
![]()
- 字符设备的驱动程序与设备直接交互
顺序访问 - 块设备,随机访问
需要在系统层加一层缓冲 - 网络设备
以格式化报文收发 - 对于新型设备:GPU,Smart NIC,,NVRAM,linux的设备分类过时了
![]()
10.2 系统与设备的交互方式
- CPU与外设交互有两种方式:可变成I/O,直接内存访问(DMA)
DMA可以与内存互相传输数据,期间不需要CPU参与 - 可编程I/O包括:PIO与MMIO
![]()
- DMA的例子中,驱动发出请求,那么外设初始化DMA传递,外设传送数据daoDMA控制器,最后DMA完成了DMA控制器才中断通知CPU传输完成
![]()
10.3 中断管理
- CPU中断处理在执行每条指令之后都会检查中断flag是否被置位,CPU收到中断会调用对应的ISR(interrupt subroutine)
![]()
![]()
- AArch64中断分类
![]()
- 多核中断需要中断控制器来决定由哪个核处理该中断
![]()
![]()
![]()
- CPU的中断确认
CPU可以通过GICC_IAR寄存器来对中断进行确认 - 中断完成
![]()
- 对于ISR(中断处理函数)的设计,应该把它分为上下部
中断处理需要使得用户任务可以快速被响应
中断处理过慢,可能会使得其他中断因为没有及时响应而丢失 - EOI,就是告诉中断控制器IRQ已经结束了
![]()
- 多个中断同时发生
存在中断优先级 - 中断可以嵌套
![]()
- 需要处理制定好中断屏蔽策略
![]()
- 如果发送端一致发数据,那么接收端收到什么数据
![]()
![]()
内核在执行中断上下文时,不能睡眠
10.4 设备驱动
- 管理设备的代码就是驱动
os就可以看作是CPU的驱动,因为它管理以及调度CPU的执行
应用通过调用驱动程序来管理设备 - 宏内核与微内核的驱动
微内核中的驱动需要通过(IPC进程间通信)来与内核设备交互 - ioctl(iocontrol)用户空间的应用通过驱动间接核设备进行交互
驱动模型安装linux中设备的分类去用统一的设备驱动模型管理设备 - linux2.4之前没有驱动模型,由于设备更新变快,那么设备驱动难以管理
![]()
- linux中的设备管理与设备的热插拔
sysfs为用户空间提供系统信息,其可以在内核空间核用户空间建立一个映射关系![]()
- linux中设备驱动抽象分类
也就是可以通过数据结构来处理所有的设备
bus_type, device,device_driver来处理这些驱动的使用
10.5 驱动模型
10.6 设备树
- linux用deice tree
![]()
10.7 Linux上下部
- linux将中断划分为上下部
![]()





用read/write对于字符设备抽象,用文件系统/mmap对于块抽象,用socket对于网络抽象(用read/write读写socket)
顺序访问
需要在系统层加一层缓冲
以格式化报文收发
DMA可以与内存互相传输数据,期间不需要CPU参与







CPU可以通过GICC_IAR寄存器来对中断进行确认
中断处理需要使得用户任务可以快速被响应
中断处理过慢,可能会使得其他中断因为没有及时响应而丢失
存在中断优先级



内核在执行中断上下文时,不能睡眠
os就可以看作是CPU的驱动,因为它管理以及调度CPU的执行
应用通过调用驱动程序来管理设备
微内核中的驱动需要通过(IPC进程间通信)来与内核设备交互
驱动模型安装linux中设备的分类去用统一的设备驱动模型管理设备
sysfs为用户空间提供系统信息,其可以在内核空间核用户空间建立一个映射关系
也就是可以通过数据结构来处理所有的设备
bus_type, device,device_driver来处理这些驱动的使用

浙公网安备 33010602011771号