# 设备管理

# 设备管理概念

# 设备分配

设备分配功能是设备管理的基本任务。
设备分配按照一定的策略,为申请设备的进程分配设备,记录设备的使用情况。

# 设备映射

# 物理设备

I/O系统中实际安装的设备

物理名:ID或字符串

# 逻辑设备

应用软件使用的设备
逻辑名:友好名

# 设备映射功能

设备管理模块将逻辑设备映射到物理设备的功能。从应用软件角度来看,逻辑设备是一类物理设备的抽象。从设备管理程序看,物理设备是逻辑设备的一个实例。

# 设备驱动

  • 对物理设备进行控制,实现I/O操作:IN/OUT
  • 接受应用的服务请求(例如读/写命令),转换为具体的I/O指令,控制设备完成相关操作。
  • 向用户提供统一接口
    • read/write/open
    • 把外设作为特别文件处理

# Spooling系统

# 设备分配方式

  • 独占设备分配:独占型设备包括所有的字符型设备,需要向进程申请,使用完后释放。在该过程中,独占设备。
  • 共享设备分配:包括块设备,使用时不需要申请
  • 虚拟分配:在一类物理设备上模拟另一类物理设备的技术,借助辅存部分区域模拟独占设备,将独占设备转换为共享设备。用来模拟独占设备的部分辅存称为虚拟设备,虚拟独占设备。

# 虚拟分配

当进程需要与独占设备交换信息时,就采用虚拟技术将该独占设备所对应的虚拟设备(部分辅存)分配给他。
Spooling系统是虚拟技术和虚拟分配的实现。

  • Simultaneaus Periphernal Operations Online
  • 外部设备同时联机操作(假脱机输入/输出操作)

    图片名称

# Spooling的内部结构

图片名称

# Spooling原理

  1. 执行任务前:预先将程序和数据输入到输入井中
  2. 任务运行时:使用数据时,从输入井中取出
  3. 任务运行时:输出数据时,把数据写入输出井
  4. 任务运行完:外设空闲时输出全部数据和信息

# Linux模块机制

# Linux内核模块

  • Loadable Kernel Module:LKM
  • 解决单体内核机制的不足
    • 一种未经连接的可执行代码(类似动态链接库)
    • 经过装载(即链接)称为内核的一部分
    • 可以动态加载或卸载
图片名称

# Linux驱动程序(LDD)

驱动程序运行在内核态
物理设备在Linux系统中被当作文件处理

  • 主设备号
    • 标识该设备的种类,标识驱动程序
    • 主设备号范围:1~255
    • Linux内核支持动态分配主设备号
  • 次设备号
    • 标识同一设备驱动程序的不同硬件设备
    • 次设备号只在驱动程序内部使用,系统内核直接把次设备号传递给驱动程序,由驱动程序进行管理

# LDD程序结构

设备的开启、关闭、读写操作等等