上交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将中断划分为上下部