36.3 标准控制器

作者: hawl29 | 来源:发表于2018-06-12 19:51 被阅读0次

    36.3 标准控制器

        在图的底部,(简化的)设备接口包含三个寄存器:一个状态寄存器,它可以被读取用以获取当前的设备状态;一个命令寄存器,用以告诉设备执行某一任务;和一个数据寄存器用以向设备传递数据或者从设备获取数据。通过读写这些寄存器,操作系统可以控制设备的行为。
        现在让我们描绘一下,操作系统为了让设备为它做一些事情,与设备之间一次典型的交互过程。协议如下:

    While (STATUS == BUSY)
      ; // wait until device is not busy
    Write data to DATA register
    Write command to COMMAND register
      (Doing so starts the device and executes the command)
    While (STATUS == BUSY)
      ; // wait until device is done with your request

        协议有四步。第一步,操作系统反复的读取状态寄存器的内容,等待直到设备准备好接收命令;我们称之为轮询设备(基本上,只是询问它发生了什么)。第二步,操作系统发送一些数据到设备数据寄存器;例如,可以想象这个设备是个硬盘,需要多次写入才能将一个磁盘块(例如4kb)传送到设备中。当CPU参与数据移动(正如上面的协议示例)时,我们称之为可编程I/O(PIO)。第三步,操作系统向设备命令寄存器写入一个命令;这样做隐含地使设备知道数据已经提供,并且应当开始执行命令。最后,操作系统通过另一个轮询等待设备完成,等待中看它是否完成(之后可以的得到一个错误代码指示出成功或失败)。
        这一基本的协议在简单有效上有其积极的一面。然而,这其中包含了一些低效率和不便。在协议中,可能你注意到的第一个问题是轮询看起来是低效率的;明显地,它浪费了大量的CPU时间只是为了等待设备完成它正在进行的活动,而不是切换到另一个准备就绪的进程从而更充分的利用CPU。

    关键:如何避免轮询开销

        操作系统如何不用频繁的轮询就能检查设备状态,从而降低设备管理所需的CPU开销?

    相关文章

      网友评论

        本文标题:36.3 标准控制器

        本文链接:https://www.haomeiwen.com/subject/wesreftx.html