磁盘键盘鼠标设备管理(鼠标设备管理器)

2022-09-30 09:22:40

摘要

  1. 设备控制器
  2. IO控制方式
  3. 设备驱动程序
  4. 存储系统IO分层

设备控制器

为什么需要设备控制器?

电脑可以外接很多设备,如键盘、鼠标、硬盘、显示器、网卡等,每个设备的用法和功能不同,操作系统为了对这些输入输出设备进行统一管理,必须要屏蔽设备之间的差异,因此需要设备控制器。

设备控制器的特点?

  • 设备控制器必须要清楚的知道设备的用法和功能,这样CPU可以通过和设备控制器交互来控制设备。
  • 设备寄存器里面含有芯片,可以执行自己的逻辑
  • 设备寄存器里面有寄存器,用来与CPU进行通信

设备控制器中寄存器的作用?

  • 通过写入寄存器,操作系统可以让设备发送数据、接收数据、开启或关闭,或者执行某些其他操作
  • 通过读取寄存器,操作系统可以了解设备的状态,是否准备好接收一个新的指令等

设备控制器中寄存器的种类有哪些?

  • 数据寄存器:CPU向IO设备写入需要传输的数据
  • 命令寄存器:CPU发送一个命令,告诉IO设备要进行输入输出操作,于是就会交给IO设备去工作,任务完成以后,会把状态寄存器里面的状态标记为已完成。
  • 状态寄存器:目的是告诉CPU,现在的工作已完成或者在进行中,如果是在进行中状态,CPU再发送数据和指令过来都是无用的,直到工作完成,状态寄存器修改为已完成,CPU发送的数据和指令才能被处理

输入输出设备大体分为哪几类?

  • 块设备:把数据存储在固定的块中,每个块都有自己的地址,比如磁盘、USB都是常见的块设备
  • 字符设备:以字符为单位发送或接收一个字符流,字符设备不可寻址,没有寻道操作,比如鼠标

设备控制器中数据缓冲区的作用?

块设备传输的数据量往往比较大,为了减少对设备的频繁操作,需要借助数据缓冲区:

  • CPU写入数据到控制器的缓冲区,等积累到一定的量时,再发送给设备
  • CPU从控制器的缓冲区读入数据时,也需要等缓冲区积累到一定的量时,才拷贝到内存

CPU和设备控制器的通信方式有哪几种?

  • 端口IO:每个控制寄存器被分配一个IO端口,可以通过特殊的汇编指令操作这些寄存器,比如in/out类的指令
  • 内存映射IO:将所有的控制寄存器映射到内存空间,这样可以像读写内存一样读写数据缓冲区

IO控制方式

设备控制器读取完数据后,如何通知CPU?

  • CPU自己轮询
  • 中断
  • DMA控制器

CPU自己轮询的缺点?

CPU需要一直查询控制器中寄存器的状态,直到寄存器的状态变为已完成,这种方式会占用大量的CPU时间

中断的缺点?

中断虽然能解决轮询的缺点,但对于频繁读写磁盘并不友好,因为这样CPU会经常性被打断,占用了大量的CPU时间。

什么是DMA?

DMA可以使得设备在CPU不参与的情况下,能够自行将IO数据放入内存,实现DMA必须要有DMA控制器硬件的支持。

DMA控制器的工作方式?

  1. CPU对DMA控制器下发指令,告诉它需要读取多少数据,读取的数据放在内存的哪个位置
  2. DMA控制器向磁盘控制器下发指令,通知磁盘控制器读取数据到其内部缓冲区域
  3. 接着磁盘控制器将缓冲区域的数据传输到内存
  4. 传输操作完成以后,磁盘控制器在总线上发送一个确认成功的信号到DMA控制器
  5. DMA控制器收到信号以后,发送中断通知给CPU,CPU就可以利用内存中的数据了

设备驱动程序

为什么需要设备驱动程序?

设备控制器虽然屏蔽了设备的细节,但每种设备控制器的寄存器、缓冲区等的使用模式不同,因此引入了设备驱动程序屏蔽设备控制器的差异。

设备控制器属于硬件范畴,但设备驱动程序属于操作系统的一部分。操作系统的内核代码可以像本地调用一样使用驱动程序的接口。

驱动程序处理中断

设备控制器在完成任务以后,会发出中断信号,此时CPU收到中断指令以后,往往会对中断进行响应,而响应的处理函数往往在驱动程序中,因此驱动程序初始化的时候,要先注册一个该设备的中断处理函数

中断处理流程

  1. 设备控制器准备好数据时,会通过中断控制器向CPU发出中断请求
  2. CPU响应中断请求,保存当前进程的上下文信息
  3. 转入响应的中断函数处理函数
  4. 进行中断处理
  5. 中断处理完成以后,恢复被中断进程的上下文

存储系统IO分层

Linux的存储系统的IO由上到下可以分为三个层次,分别是:

  • 文件系统层
  • 通用块层
  • 设备层
  • 文件系统层:包括虚拟文件系统和其他文件系统的具体实现,向上为应用程序统一提供了标准的文件访问接口,向下会通过通用块层来存储和管理磁盘数据
  • 通用块层:包括块设备的IO队列和IO调度器,它对文件系统的IO请求进行排队,再通过IO调度器,选择一个IO发给下层的设备层
  • 设备层:包括硬件设备、设备控制器和驱动程序,负责物理设备的IO