Linux的设备管理概述
按照设备的所属关系分为系统设备和用户设备
按照信息的交换的单位分为字符设备和块设备
字符设备是以字符为单位进行输入和输出的设备,块设备是以数据块为单位
按照设备的共享属性分为独占设备、共享设备和虚拟设备
独占设备:所有的字符设备都是独占设备,独占设备指一段时间内只允许一个用户(进程)访问的设备,即临界资源
共享设备:块设备都是共享设备,硬盘读操作时候是共享设备,写的时候是独占设备
虚拟设备:通过虚拟设备技术把一台独占设备变换为若干逻辑设备,供若干个用户(进程)同时使用
设备管理的任务和功能
设备管理是对计算机的输入/输出系统的管理
1、选择和分配 I/O设备以便进行数据传输操作
2、控制 I/O设备和CPU(或内存)之间交换数据
3、为用户提供透明接口,使得用户在编写应用程序时不必设计具体设备
4、提高设备和设备之间、CPU和设备之间、进程和进程之间的并行操作程度
为完成上述主要任务,一般设备管理程序要提供以下功能
1、提供和进程管理系统的接口
2、进行设备分配
3、实现设备和设备、设备和CPU等之间的并行操作
4、进行缓冲管理
5、设备控制与驱动
设备控制器
设备控制器是CPU与I/O设备之间的接口,它接收从CPU发来的命令并去控制 I/O 设备工作,设备控制器是一个可编程设备
设备控制器由三部分组成:
1、设备控制器与处理机的接口
2、设备控制器与设备的接口
3、I/O 逻辑
设备控制器的组成,如下图
I/O通道
设置I/O通道的目的是使一些原来由CPU处理的 I/O任务转由通道来承担,CPU只需向通道发送一条I/O指令,仅当通道完成了规定的I/O任务后,才向CPU发中断信号
I/O通道是一种特殊的处理机,具有执行I/O指令的能力,并通过执行通道程序来控制 I/O 操作
通道有两种基本类型:选择通道和多路通道
单通路I/O系统如下图
多通路I/O系统设备驱动程序的处理过程
1、将抽象要求转换为具体要求
2、检查I/O请求的合法性
3、读出和检查设备的状态
4、传送必要的参数
5、工作方式的设置
6、启动I/O设备
I/O控制方式包括 程序I/O方式(查询方式)、中断驱动I/O控制方式、DMA方式
程序I/O方式的流程图中断驱动I/O控制方式
当某进程要启动某个I/O设备工作时,便由CPU向相应的设备控制器发出一条命令,然后立即返回继续执行原来的任务,设备控制器按照该命令的要求去控制指定I/O设备,此时,CPU与I/O设备并行操作
例如,在输入时,当设备控制器收到CPU发来的读命令后,便去控制相应的输入设备读数据,一旦数据进入数据寄存器,控制器便通过控制线向CPU发送一个中断信号,由CPU检查输入过程中是否出错,若无错,便向控制器发送取走数据的信号,然后再通过控制线及数据线,将数据写入内存指定单元中
流程图如下:
DMA控制方式
DMA方式的基本思想是在外围设备和内存之间开辟直接的数据交换通路。在DMA控制器中,除了控制状态寄存器和数据缓冲寄存器外,还包括传送字节计数器和内存地址寄存器以及控制电路等,因此,DMA控制器可用来代替CPU,以实现内存和设备之间进行成批的数据交换
DMA方式的传送结构图设备分配时应考虑的因素
1、设备的固有属性
2、设备分配算法,例如 先来先服务,优先级最高者优先 等算法
3、设备分配中的安全性,有两种分配方式:静态分配和动态分配
4、设备独立性:即应用程序独立于具体使用的物理设备
Linux中的设备管理
在Linux系统中所有设备都作为特别文件,从而在设备管理上具有以下特性
1、每个设备都对应文件系统中的一个索引节点,都有一个文件名
2、应用程序通常可以通过系统调用open() 打开设备文件,建立起与目标设备的连接
3、对设备的使用类似于对文件的存取
4、设备驱动程序都是系统内核的一部分,它们必须为系统内核或者它们的子系统提供一个标准的接口
5、设备驱动程序使用一些的内核服务,如内存分配
设备驱动分层结构图