串行通信
字符分别传输
重要的参数:波特率、每字符的位数、校验位(奇/偶校验)、停止bit长度
分类方式
从属关系
系统设备:OS启动时已注册的设备
- 如NOR、NAND闪存、触摸面板等
- OS中有驱动与管理程序
- 用户只需调用OS提供的API
用户设备:OS启动时未注册的设备
- 驱动程序由用户提供
- 包括U盘、SD卡等
使用
专用设备:单一进程使用的设备,被一个进程独占、互斥
共享设备:可被多个进程同时寻址的设备。可被随机寻址,可用提高每个设备的利用率
虚拟设备:通过虚拟技术将一台独占设备虚拟成多台逻辑设备,供多个用户进程同时使用。
特征
存储设备:用于存储的设备,包括硬盘、SSD、闪存等
IO设备:
- 输入设备:包括触摸板、扫描仪等
- 输出设备:包括显示器、扬声器等
信息传输单元
块设备:以数据块为单位组织和交换数据
字符设备:以字符为单位组织和交换数据
IO设备的组成
IO设备通常包括两个部分:
- 机械部分
- 电子部分
- 被称为设备控制器或适配器
IO编程
有三种控制寄存器或缓冲区的方式:
- 独立IO接口
- 内存映射
- 混合式,包括内存映射的IO数据缓冲和为IO接口使用的控制寄存器
x86提供了in和out指令。
内存映射的优点:适合C编程、不需要特别的保护机制
内存映射的缺点:与cache机制不兼容、地址检查需要IO设备参与,降低性能
中断
阻塞IO效率低,且实时性差。于是产生了中断,允许设备改变CPU的控制流。
中断的过程:
- 设备发起中断请求
- CPU发起中断确认
- 双方进行数据、地址交互
中断使用子程序调用的机制。
中断使用的两种判断机制:
- 优先级:判断哪个中断优先被处理
- 向量:判断每种中断应该调用哪些代码
这两种是正交的,大多数CPU中两者都存在
中断屏蔽:在处理中断时,低优先级的中断被屏蔽,不会被处理
有了中断向量后的中断过程:
- 设备向CPU发出中断请求
- CPU判断应该处理后,向设备发送中断响应
- 设备向CPU发送中断向量
中断代码一般由汇编编写,因为汇编代码在复杂度和性能上可测量,而C语言编写的中断程序在性能上难以预测。
NMI
不可屏蔽中断(无法被中断屏蔽位屏蔽)