设备管理

首页 / 操作系统 / 正文

I/O设备

  • 人机交互设备:用于用户与计算机之间的交互通信(鼠标、键盘、显示器等)
  • 存储设备:持久性存储大量信息并快速检索(磁盘驱动器、光盘驱动器等)
  • 网络通信设备:用于计算机和计算机之间的通信(网卡、调制解调器等)

设备控制器

定义

IO设备通常包含一个机械部件和一个电子部件,为达到模块性和通用性一般将其分开,其中的电子部件就被称为设备控制器,操作系统大多与控制器交互而不直接和I/O设备交互

组成部分

  • 数据寄存器
  • 命令寄存器
  • 状态寄存器
  • 译码器和I/O控制逻辑、接口控制逻辑

功能

接受和识别CPU或通道的命令、实现数据交换和设备地址识别、发现和记录设备及自身的状态信息

I/O控制方式

程序直接控制方式

当用户进程需要输入数据时,通过 CPU 向控制器发出一条 I/O 指令,启动设备输入数据,同时把状态寄存器中的忙/闲状态 busy 置为1,CPU周期性地检查设备控制器的状态寄存器,直到I/O操作完成为止。

由于CPU和I/O设备串行工作,效率十分低下

截屏2021-10-04 下午8.24.04.png

中断方式

其流程如下图所示

截屏2021-10-04 下午8.25.41.png

效率有所提高,但是频繁的中断仍然会占有CPU大量时间

DMA方式

  • CPU 需对 DMA 控制器下发指令,告诉它想读取多少数据,读完的数据放在内存的某个地方就可以了;
  • 接下来,DMA 控制器会向磁盘控制器发出指令,通知它从磁盘读数据到其内部的缓冲区中,接着磁盘控制器将缓冲区的数据传输到内存;
  • 当磁盘控制器把数据传输到内存的操作完成后,磁盘控制器在总线上发出一个确认成功的信号到 DMA 控制器;
  • DMA 控制器收到信号后,DMA 控制器发中断通知 CPU 指令完成,CPU 就可以直接用内存里面现成的数据了

这个流程减少了大量的中断和I/O启动操作提高了效率,只需要CPU下发指令,之后可以执行其他的任务,当DMA发出中断时就CPU执行相关操作

I/O层次结构

截屏2021-10-04 下午8.39.23.png

中断处理程序

中断处理是控制输入/输出设备和内存与CPU之间的数据传送的主要方式。中断与硬件相关,I/O设备的中断服务程序的代码与任何进程无关。当I/O完成时,设备便向CPU发送一个中断信号,CPU响应中断后便转入中断处理程序

设备驱动程序

所有与设备相关的代码全部放在设备驱动程序中,由于设备驱动程序与设备密切相关,因此应为每一类设备配置一个驱动程序,其任务是接收来自上层的设备独立性软件的抽象请求,将这些请求转换成设备控制器可以接收的具体命令,再将这些命令发送给设备控制器,并监督这些命令正确执行。若请求到来时设备驱动程序是空闲的,则立即开始执行这个请求;若设备驱动程序正在执行一个请求,则将信道来的请求插入等待队列中。设备驱动程序是操作系统中唯一知道设备控制器中设置了多少个寄存器以及这些寄存器有何用途的程序

设备驱动程序处理过程:①将抽象要求转换为具体要求;②检查I/O请求的合法性;③读出和检查设备的状态;④传送必要参数;⑤设置工作方式⑥启动I/O设备

设备独立性软件

设备独立性软件的基本任务是:实现一般设备都需要的I/O功能,并向用户空间软件提供一个统一接口。设备独立性软件通常应实现的包括设备驱动程序的统一接口,设备命名,设备保护,提供与设备无关的逻辑块,缓冲、存储设备的块分配,独占设备的分配和释放,出错处理

用户层I/O

大部分I/O软件都包含在操作系统中,但仍有一部分是由与用户程序链接在一起的库函数,甚至运行于内核之外的程序构成的。通常的系统调用把I/O系统调用,是由库函数实现的。SPOOLing系统也处于这一层

缓冲技术

目的:缓和CPU与设备速度不匹配的矛盾,提高了设备和CPU的并行操作成都,提高系统吞吐量和设备利用率

块设备:把数据存储在固定大小的块中,每个块有自己的地址,硬盘、USB 是常见的块设备

字符设备:以字符为单位发送或接收一个字符流,字符设备是不可寻址的,也没有任何寻道操作,鼠标是常见的字符设备

单缓冲

当用户进程发出一个I/O请求时,操作系统便在内存中为它分配一个缓冲区。设备与处理器对缓冲区的操作是串行的

双缓冲

可以提高处理器与设备的并行操作程度。当用户进程发出一个I/O请求时,操作系统便在内存中为它分配两个个缓冲区。数据先放入第一个缓冲区进行处理,再来的数据放入第二个缓冲区,当第一个缓冲区中的数据处理完后,若第二个缓冲区已经装满,则处理器又可以处理第二个缓冲区的数据,而输入设备又可以装填第一个缓冲区

循环缓冲

循环缓冲包含多个大小相等的缓冲区,每个缓冲区中有一个链接指针指向下一个缓冲区,最后一个缓冲区的指针指向第一个缓冲区,这样多个缓冲区构成了一个环形。循环缓冲用于输入输出时,还需要有两个指针in和out。对于输入而言,首先要从设备接收数据到缓冲区中,in指针指向可以输入数据的第一个空缓冲区;当用户进程需要数据时,从循环缓冲中取出一个装满数据的缓冲区,提取数据,out指针指向可以提取数据的第一个满缓冲区,显然,对输出而言正好相反,进程将处理过的需要输出的数据送到空缓冲区中,而当设备空闲时,从满缓冲区中取出数据由设备输出

高速缓冲与缓存区的区别

1、两者存放的数据不同。高速缓存存放的是低速设备上的某些数据的备份;而缓冲区中放的则是低速设备传递给高速设备的数据,在低速设备中不一定有备份

2、两者的目的不同。引入高速缓存的目的是为了存放低速设备上经常要被访问到的数据的备份;而缓冲区是为了缓和高速设备和低速设备间速度不匹配的矛盾。高速设备每次都会通过缓冲区与低速设备通信,不会直接访问低速设备

SPOOLing技术

通过共享设备来虚拟独占设备,将独占设备改造成共享设备,从而提高了设备利用率和系统的效率,该技术称为假脱机(SPOOLing)技术。是低速输入输出设备与主机交换的一种技术。其核心思想是以联机的方式得到脱机的效果,低速设备经通道和设在主机内存的缓冲存储器与高速设备相连,该高速设备通常是辅存。为了存放从低速设备上输入的信息,在内存中形成缓冲区,在高速设备上形成输入输出井,传递时信息从低速设备传入缓冲区,再传到高速设备的输入井,再从告诉设备的输出井传到缓冲区,再传到低速设备

具体应用:将一台独享打印机改造成可供多个用户共享打印是SPOOLing技术的典型应用,系统对于用户的打印输出,并不真正把打印机分配给该用户进程,而是先在输出井中申请一个空闲盘块区,并将要打印的数据送入其中;然后为用户申请并填写请求打印表,将该表挂到请求打印队列上。若打印机空闲,输出程序从请求打印队首取表,将要打印的数据从输出井传送到内存缓冲区,再进行打印,直到打印队列为空

无标签
评论区
头像
文章目录