设备管理部分

一、设备控制器

电脑连接的输入,输出设备之间存在着差异,因此,操作系统需要对这些设备进行同一管理的时候,必须要通过一个部件来屏蔽这些设备之间的差异,因此每一个设备都存在一个设备控制器部件,用来处理设备之间的差异,比如硬盘的硬盘控制器,显示器的视频控制器等。

从上面这幅图也可看出,跟CPU进行交互的其实是设备的控制器,而不是设备本身。

二、寄存器

设备控制器中有一个重要的部件——寄存器,寄存器是实现设备与CPU交互的重要部件。CPU通过寄存器来控制设备,要比直接控制设备本身方便得多

寄存器的种类主要有3种:

1)数据寄存器:用于记录CPU向I/O设备传输的数据。

2)命令寄存器:用于记录CPU需要I/O设备执行的操作,在I/O设备执行完对应操作后,需要将状态寄存器里的状态标志位置为完成。

3)状态寄存器:用于记录当前工作的状态。若当前状态为未完成,I/O设备将不执行此时CPU发来的命令,直到状态标志位为完成。

三、块设备和字符设备

输入输出设备可分为两大类:块设备和字符设备

1)块设备指的是设备将自身的数据存储在固定大小的块中,块是可以寻址的,故而CPU可以通过寻址找到相应的数据块来读取数据,常见的块设备有键盘,USB等。

2)字符设备指的是设备将自身的数据通过字符流的形式与CPU进行交互,字符流是无法寻址的。常见的字符设备有鼠标。

对于块设备,为了防止频繁地IO操作,在内存中开辟了一块空间,成为读取缓冲区,这块区域用于存储设备与CPU交互的数据,只有当缓冲区中存够一定的数据时,才会与CPU进行IO交互。

另外CPU与数据缓冲区进行交互可以通过以下两种方式:

1)端⼝ I/O,每个控制寄存器被分配⼀个 I/O 端⼝,可以通过特殊的汇编指令操作这些寄存器,⽐如in/out 类似的指令。
2)内存映射 I/O,将所有控制寄存器映射到内存空间中,这样就可以像读写内存⼀样读写数据缓冲区。

四、IO控制

根据前面对寄存器的介绍,状态寄存器中的标志位可以记录当前的工作是否已经完成,若完成,需要CPU进行处理,那么如何通知CPU呢?

有两种方式:

1)轮询,即CPU不断轮询状态寄存器,直到发现其标志位为完成。

缺点:效率太低

2)中断:即设备完成操作后,通过设备控制器向CPU发出一个中断信号,此时CPU需要处理这个中断信号,那么就必须停下当前的工作,转而来执行与设备交互的操作。

缺点:对于频繁读写的磁盘,CPU需要频繁被打断,将占用大量的CPU时间

3)DMA控制器

DMA控制器可在不需要CPU参与的情况下,自行对IO交互的数据进行处理,待处理完成后,以中断的形式告知CPU。

DMA控制器的工作过程如下:

1.CPU事先告知DMA控制器它想要读取多少条数据,读取完数据放在哪个地方就可以。

2.DMA控制器根据CPU的指令,与磁盘进行交互,待磁盘收到相应的指令后,磁盘会将将数据依次写入缓冲区和内存中。

3.待磁盘写入内存完毕后,设备控制器中状态寄存器的标志位置为完成,并通知DMA控制器。

4.DMA控制器在完成确认后,将产生中断,通知CPU。

5.CPU收到中断后,将处理中断,在这个过程中会从内存中读出刚才与IO设备交互的数据,并进行相关的处理。

五、设备驱动程序

为了屏蔽不同设备控制器之间的差异,引入了设备驱动程序这一组件

尽管对于不同的设备,设备控制器存在这一定的差异,但是它们可以提供给操作系统相同的接口,用于操作。

设备驱动程序初始化时,应先注册一个中断处理函数,中断处理函数的流程如下:

1.设备控制器通过中断信号向CPU发送请求

2.保护中断进程的上下文

3.转入中断处理函数

4.进行中断处理

5.恢复上下文 

六、通用块层

同样地,对于块设备,为了减少设备块大小差异对操作系统带来的影响,操作系统引入了通用块层,用于管理不同设备的操作块。

通用块层主要有以下两个功能:

1)向上为⽂件系统和应⽤程序,提供访问块设备的标准接⼝,向下把各种不同的磁盘设备抽象为统⼀的块设备,并在内核层⾯,提供⼀个框架来管理这些设备的驱动程序;
2)通⽤层还会给⽂件系统和应⽤程序发来的 I/O 请求排队,接着会对队列重新排序、请求合并等⽅式,也就是 I/O 调度,主要⽬的是为了提⾼磁盘读写的效率。

七、5种常见的IO算法

1)没有调度算法,是的,你没听错,它不对⽂件系统和应⽤程序的 I/O 做任何处理,这种算法常⽤在虚拟机 I/O 中,此时磁盘 I/O 调度算法交由物理机系统负责。
2)先⼊先出调度算法,这是最简单的 I/O 调度算法,先进⼊ I/O 调度队列的 I/O 请求先发⽣。
3)完全公平调度算法,⼤部分系统都把这个算法作为默认的 I/O 调度器,它为每个进程维护了⼀个I/O 调度队列,并按照时间⽚来均匀分布每个进程的 I/O 请求。
4)优先级调度算法,顾名思义,优先级⾼的 I/O 请求先发⽣, 它适⽤于运⾏⼤量进程的系统,像是桌⾯环境、多媒体应⽤等。
5)最终期限调度算法,分别为读、写请求创建了不同的 I/O 队列,这样可以提⾼机械磁盘的吞吐
量,并确保达到最终期限的请求被优先处理,适⽤于在 I/O 压⼒⽐较⼤的场景,⽐如数据库等。

八、键盘输入一个字符后会发生什么

在键盘输入一个字符后:

1.键盘的设备控制器会将输入的数据以扫描码的形式记录于数据寄存器中,同时以中断的方式与CPU进行交互。

2.CPU收到中断请求后,会保留此时的上下文,然后去处理中断。

3.根据键盘驱动程序初始化时注册的中断处理程序,CPU会在按照这个中断处理程序来对缓冲区中的数据进行处理,对于本场景来说,CPU会将键盘缓冲区中读出来的扫描码转为对应的ASCII码,然后将其写入显示器控制器的缓存区中。

4.显示器控制器将缓存区中的数据读出,并显示在屏幕上。

5.CPU恢复刚才的上下文,继续执行。

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值