CPU 是如何与外围设备通信的

2021-12-03 17:35:59   最后更新: 2021-12-03 17:35:59   访问数量:82




 

此前的文章中,我们通过向地址 B8000h 写入数据来实现在显示器上输出彩色的文本,我们介绍说这是“彩色字符模式”,并且介绍了它的用法:

 

进军保护模式

 

可是,你是否好奇这一切是为什么,CPU 是如何与这些硬件连接并进行处理的呢?

 

本文我们就来探究这其中的奥秘。

 

 

如果你接触过单片机电路的设计,你会将作为 CPU 的单片机的各个管脚直接与外围设备进行连接,最早的计算机架构正是这样的。

 

将每个设备连接到固定的管脚,然后通过 IO 指令直接操作对应管脚上的设备,这是最简单的计算机架构组织方式了。但这样发展下去,很快就会发现 CPU 的管脚完全不够用了。此时,使用一套抽象的外围设备管理和操作方式就显得至关重要了。

 

 

现代操作系统中,所有外围设备都被一个抽象的设备 -- 总线作为桥梁与 CPU 的核心线路连接在一起。

 

所有设备都被编排到一个地址空间中,设备与设备之间的区别仅在于他们所处的地址不同,当 CPU 需要操作某个设备时,只需要根据先前约定的设备所在的地址,通过 IO 指令操作地址引脚,借由一块 74LS373 锁存芯片将地址信号发往总线,同时,CPU 再操作数据引脚,借由一块 74LS245 芯片与总线进行数据通信。

 

总线收到请求后,就会根据地址编码找到对应的设备,将从数据引脚收到的数据发送到对应的设备,从而实现对相应设备的操作。

 

 

 

如图所示,整个线路由核心的一块 8284A 时钟芯片发出周期性的时钟信号,CPU 通过 8288、74LS373、74LS245 三块芯片实现与总线的通信,分别实现控制总线、地址总线、数据总线的功能。

 

除此以外,图中级联在 CPU 上的两片中断控制器 8259A 我们已经有过详细的介绍了。

 

保护模式下的中断和异常(上) -- 硬件原理篇

 

保护模式下的中断和异常(下) -- 软件实战篇

 

通过这套架构,我们就可以直接向先前约定好的 B8000h 写入指定格式的数据,就像操作普通的内存一样,就可以实现显示器设备的操作了,其他的诸如硬盘、声卡等设备也都被简化为这样的操作逻辑。

 

可以看出这样的抽象架构下,计算机核心的软硬件系统实现了极大地通用性和便捷性,外围设备经过抽象,也可以实现相当灵活的可扩展性。

 

但上图中还有一块 8237A 芯片,这又是什么呢?接下来我们就来详细介绍一下。

 

 

内存与硬盘作为两个存储设备,承载了与 CPU 最为频繁的通信。

 

经过前面的文章介绍,我们已经非常清楚,保护模式下,通过内存数据中特权级的保护,实现了不同内存读写、执行等权限的管理,从而避免了操作系统特权级的反复切换。

 

利用调用门实现特权级间跳转(上) -- 原理篇

 

但硬盘则不然,由于硬盘数据具有持久性,所以不可能做到针对单条数据授予操作系统不同特权级的访问权限,这意味着,操作系统的每次对硬盘进行读写操作,都必须切换到内核态才可以进行,而由于硬盘读写速度的限制,当 CPU 向总线发起读写请求,需要阻塞一段时间后才能够真正收到标志着完成时间的中断信号,这时,CPU 又要需要保存执行上下文,陷入到中断响应函数中,进行大量的拷贝工作,从而完成从硬盘到内存的数据接收。

 

显然,这一过程会极大地拖慢系统的响应能力,这是操作系统无法容忍的。

 

4.1 DMA 技术

 

DMA 是 Direct Memory Access 的缩写,它通过引入一块与 CPU 级联的 8237A 芯片代理 CPU 的中断响应以及大量数据拷贝工作,这块芯片也就是 DMA 控制芯片,他的存在让 CPU 与磁盘的交互从:

 

 

 

变成:

 

 

 

这样,CPU 便从持久的阻塞状态与繁重的拷贝工作中解放了出来:

 

  1. 当用户进程发起硬盘读写操作后,操作系统进行第一次特权级切换,从用户态进入内核态;
  2. CPU 执行第一次数据拷贝,将用户传入的请求参数数据拷贝到 DMA 芯片,发起 IO 请求;
  3. CPU 进行第二次特权级切换,从内核态切换回用户态,继续处理其他工作;
  4. DMA 芯片通过总线与磁盘控制器进行通信,并将参数写入磁盘缓冲区,发起 IO 请求,这是 DMA 芯片的首次拷贝;
  5. 当磁盘完成数据读写,并将结果写入到磁盘缓冲区后,磁盘触发 DMA 中断通知 DMA 芯片;
  6. DMA 芯片执行第二次拷贝操作,将数据从磁盘缓冲区写入到操作系统内核缓冲区中,并触发 CPU 中断,通知 CPU 操作完成;
  7. CPU 进行第三次特权级切换,从用户态进入内核态;
  8. CPU 执行第二次数据拷贝,将数据从内核数据缓冲区拷贝到用户地址空间中;
  9. CPU 进行第四次特权级切换,回到用户态并返回。

 

 

上述通过 DMA 芯片进行的硬盘读写过程需要进行四次特权级切换和四次拷贝操作。

 

如果能够减少这些特权级切换和拷贝操作,系统性能必然会大幅提升。

 

从这一思路出发,“零拷贝”技术就这样诞生了,那么,大名鼎鼎的“零拷贝”技术到底是出于什么样的思路设计,又有哪些实现呢?敬请期待下一篇文章,为您详细解读。

 

 

欢迎关注微信公众号,以技术为主,涉及历史、人文等多领域的学习与感悟,每周三到七篇推文,只有全部原创,只有干货没有鸡汤

 

实现一个操作系统






技术帖      操作系统      os      技术分享      cpu      硬盘      总线     


京ICP备2021035038号