# 设备管理
# 设备管理概念
# 设备分配
设备分配功能是设备管理的基本任务。
设备分配按照一定的策略,为申请设备的进程分配设备,记录设备的使用情况。
# 设备映射
# 物理设备
I/O系统中实际安装的设备
物理名:ID或字符串
# 逻辑设备
应用软件使用的设备
逻辑名:友好名
# 设备映射功能
设备管理模块将逻辑设备映射到物理设备的功能。从应用软件角度来看,逻辑设备是一类物理设备的抽象。从设备管理程序看,物理设备是逻辑设备的一个实例。
# 设备驱动
- 对物理设备进行控制,实现I/O操作:IN/OUT
- 接受应用的服务请求(例如读/写命令),转换为具体的I/O指令,控制设备完成相关操作。
- 向用户提供统一接口
- read/write/open
- 把外设作为特别文件处理
# Spooling系统
# 设备分配方式
- 独占设备分配:独占型设备包括所有的字符型设备,需要向进程申请,使用完后释放。在该过程中,独占设备。
- 共享设备分配:包括块设备,使用时不需要申请
- 虚拟分配:在一类物理设备上模拟另一类物理设备的技术,借助辅存部分区域模拟独占设备,将独占设备转换为共享设备。用来模拟独占设备的部分辅存称为虚拟设备,虚拟独占设备。
# 虚拟分配
当进程需要与独占设备交换信息时,就采用虚拟技术将该独占设备所对应的虚拟设备(部分辅存)分配给他。
Spooling系统是虚拟技术和虚拟分配的实现。
- Simultaneaus Periphernal Operations Online
- 外部设备同时联机操作(假脱机输入/输出操作)
# Spooling的内部结构
# Spooling原理
- 执行任务前:预先将程序和数据输入到输入井中
- 任务运行时:使用数据时,从输入井中取出
- 任务运行时:输出数据时,把数据写入输出井
- 任务运行完:外设空闲时输出全部数据和信息
# Linux模块机制
# Linux内核模块
- Loadable Kernel Module:LKM
- 解决单体内核机制的不足
- 一种未经连接的可执行代码(类似动态链接库)
- 经过装载(即链接)称为内核的一部分
- 可以动态加载或卸载
# Linux驱动程序(LDD)
驱动程序运行在内核态
物理设备在Linux系统中被当作文件处理
- 主设备号
- 标识该设备的种类,标识驱动程序
- 主设备号范围:1~255
- Linux内核支持动态分配主设备号
- 次设备号
- 标识同一设备驱动程序的不同硬件设备
- 次设备号只在驱动程序内部使用,系统内核直接把次设备号传递给驱动程序,由驱动程序进行管理
# LDD程序结构
设备的开启、关闭、读写操作等等