设备管理(八)

8.1 设备管理概念

按交互对象分类

  • 人机交互设备: 显示设备,键盘,鼠标,打印机
  • 与CPU等交互的设备: 磁盘,磁带,传感器,控制器
  • 计算机间的通信设备:网卡,调制解调器

按交互方向分类

  • 输入设备: 键盘,扫描仪
  • 输出设备: 显示设备,打印机
  • 双向设备: 输入/输出:硬盘,软盘,网卡

按外设特性分类

  • 使用特征: 存储, 输入/输出
  • 数据传输率: 低速(键盘),中速(打印机),高诉(网卡,磁盘)
  • 信息组织特征:字符设备(打印机),块设备(磁盘),网络设备

鼠标内部

键盘内部

打印机工作原理

硬盘内部

设备管理的主要功能

  • 设备分配
  • 设备映射
  • 设备驱动

设备分配

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

设备映射

物理设备: I/O系统中实际安装的设备; 物理名: ID或字符串

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

设备映射功能

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

设备独立性

  • 物理设备对用户透明,用户使用同一规范的方式使用设备
  • 用户编程时使用设备逻辑名,由系统实现逻辑设备到物理设备的转换

设备驱动

  • 对物理设备进行控制,实现I/O操作:IN/OUT
  • 接收应用的服务请求(例如读写),转换为具体的I/O指令,控制设备完成相关操作.
  • 向用户提供统一接口

设备驱动的特点

  • 设备驱动程序与硬件密切相关
  • 每类设备都要配置特定的驱动程序
  • 驱动程序一般由设备厂商根据操作要求编写
  • 操作系统仅对与设备驱动的接口提出要求.

8.2 Spooling系统

设备分配方法

  • 独占设备的分配
  • 共享设备的分配
  • 虚拟分配

独占性设备 VS共享型设备

独占性设备包括所有的字符型设备.

  • 任意时间段内最多只能被一个进程占用,
  • 使用时,进程首先向系统申请,可能进入阻塞状态.当设备可用时,唤醒一个等待进程;使用完毕后,进程必须释放设备

共享型设备包括所有块型设备.

  • I/O传输单位:块
  • 宏观上,一个共享型设备可以被多个进程同时占用
  • 微观上,多个进程交替使用同一设备
  • 进程使用这类设备时,无须申请或释放设备,也不存在某个进程占用设备的问题.

独占性设备的分配

进程使用独占设备的过程:申请-使用-释放,从进程申请成功,直到释放用完之前,独占设备

  1. 进程申请设备
  2. 系统分配设备
  3. 进程发送使用命令
  4. 系统将转到设备驱动模块完成一次I/O传输
  5. 进程释放设备
  6. 系统回收设备

共享型设备的分配

  • 进程使用共享型设备不需要申请,当然也不存在占用或释放设备的问题
  • 但是,I/O期间只能有一个进程使用设备.因此,进程使用共享型设备之前,有一个隐含的申请命令.使用完毕以后,有一个隐含的释放命令,以实现一次基本I/O传输期间的排它性,保证操作的正常运行.
  • 使用共享型设备的过程中,进程完全有可能进入阻塞等待状态.

虚拟分配

虚拟技术

在一类物理设备上模拟另一类物理设备的技术

借助辅存部分区域模拟独占设备,将独占设备转化为共享设备

虚拟设备

用来模拟独占设备的部分辅存称为虚拟设备,虚拟独占设备

输入井: 模拟输入设备的辅存区域

输出井: 模拟输出设备的辅存区域

虚拟分配: 当进程需要与独占设备交换信息时,就采用虚拟技术将该独占设备所对应的虚拟设备(部分辅存)分配给它.

SPOOLing系统是虚拟技术和虚拟分配的实现

Simultaneaus Periphernal Operations OnLine

外部设备同时联机操作(假脱机输入/输出操作)

SPOOLing的工作流程

SPOOLing系统原理小结

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

SPOOLing特点

  • "提高"了I/O速度
  • 将独占设备改造为"共享设备

8.3 Linux模块机制

8.3.1 Linux 模块机制

Linux内核模块

Loadable Kernel Module: LKM 

解决单体内核机制的不足

  • 一种未经链接的可执行代码
  • 经过装载(即链接)成为内核一部分
  • 可以动态加载或卸载

Linux模块概念

8.3.2 Linux驱动程序

应用程序通过驱动程序间接访问设备

用户态和内核态

  • Linux的两种运行模式: 内核态;用户态
  • 驱动程序工作在内核态

Linux设备的分类

字符设备

  • 以字节为单位逐个进行I/O操作,如串口设备

块设备

  • 块设备的存取是通过buffer, cache来进行
  • 可以进行随机访问,如,IDE硬盘设备
  • 支持可安装文件系统

网络设备

  • 通过BSD套接口访问(Socket)

设备文件

  • 硬件设备作为文件看待:设备文件
  • 用文件接口来完成设备的操作. 打开,关闭,读写,I/O控制等操作
  • 字符设备和块设备通过设备文件访问
  • Linux文件系统中可以找到设备文件

主设备号和次设备号

主设备号

  • 标识该设备种类,标识驱动程序
  • 主设备号范围:1-255
  • Linux内核支持动态分配主设备号

次设备号

  • 标识同一设备驱动程序的不同硬件设备
  • 次设备号只在驱动程序内部使用,系统内核直接把次设备号传递给驱动程序,由驱动程序去管理

功能完整的LDD结构

  • 设备的打开
  • 设备的释放
  • 设备的读操作
  • 设备的写操作
  • 设备的控制操作
  • 设备的中断和轮询处理
  • 驱动程序的注册
  • 驱动程序的注销

8.3.3 Windows驱动程序

Windows声明驱动的入口/退出函数

  • Windows固定采用DriverEntry作为入口函数
  • 给pDriverObject -> DriverUnload 赋值退出函数指针

Linux声明驱动的入口/退出函数

module_init(my_init);

module_exit(my_exit);

驱动程序开发工具,推荐DDK.

猜你喜欢

转载自blog.csdn.net/u010420283/article/details/114240052