找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

2066

积分

0

好友

294

主题
发表于 昨天 17:42 | 查看: 6| 回复: 0

2 应用和硬件无关?

在使用 C 语言等高级语言进行 Windows 应用开发时,程序员很少会直接编写控制硬件的指令。这是因为对硬件的直接控制权,实际上由 Windows 操作系统全权管理。

然而,这并不意味着应用完全无法与硬件打交道。Windows 提供了间接控制硬件的方法,那就是利用操作系统提供的 系统调用 功能。应用通过调用特定的 API,向操作系统发出请求,最终由操作系统代表应用去完成实际的硬件操作。

应用程序通过操作系统与硬件交互流程图

3 支撑硬件输入输出的 IN 指令和 OUT 指令

Windows 在底层控制硬件时,依赖的是特定的输入输出指令。其中最具代表性的两个指令就是 INOUT,它们同时也是汇编语言中的助记符。

  • IN指令:用于从指定端口号的端口读取数据,并将数据存入 CPU 内部的寄存器中。
  • OUT指令:用于将 CPU 寄存器中存储的数据,写入到指定端口号的端口。

IN和OUT指令数据流向示意图

计算机主板上提供了各种连接显示器、键盘等外围设备的接口。在这些接口的内部,连接着负责转换计算机与外围设备之间电流特性的集成电路(IC),这些 IC 统称为 I/O 控制器(I/O 是 Input/Output 的缩写)。

显示器、键盘等每个外围设备都有其专用的 I/O 控制器。每个 I/O 控制器内部都有一小块用于临时保存输入输出数据的内存,这块内存就是所谓的“端口”(Port)

一个实现 I/O 控制器功能的 IC 芯片上往往有多个端口。由于一台计算机连接着众多外围设备,因此也就存在多个 I/O 控制器和更多的端口。一个 I/O 控制器可以只控制一个设备,也可以管理多个设备。为了区分数量庞大的端口,系统为每个端口分配了唯一的 端口号,也称为 I/O 地址

CPU通过端口与键盘显示器通信示意图

4 外围设备的中断请求

IRQ(中断请求)是一种用于暂停当前正在运行的程序,并转而执行其他程序的机制。这个过程被称为 中断处理。想象一下,你正在专心处理文档(主程序),此时电话响了(中断请求),你便暂停手头工作去接电话(中断处理程序),接完后再回来继续处理文档。

中断处理比喻图:处理文档与接电话

为了区分不同外围设备发出的中断,系统为每个中断请求分配了一个独立的编号,即 中断编号(或中断向量)。

如果多个外围设备同时发出中断请求,CPU 该如何应对?为了解决这个问题,通常在 I/O 控制器和 CPU 之间会加入一个名为 中断控制器 的 IC 芯片作为缓冲。中断控制器负责接收和管理所有外围设备的中断请求,并按照既定优先级顺序依次通知 CPU。

多设备中断请求通过中断控制器传递给CPU

当中断发生时,CPU 会暂停当前的主程序,转而执行对应的中断处理程序。该程序通常需要先备份当前 CPU 寄存器的状态,然后执行控制外围设备的操作,完成后再恢复寄存器的状态,最终返回到主程序继续执行。

中断处理程序执行流程:备份、控制、恢复、返回

5 DMA 可以实现短时间内传送大量数据

在了解 I/O 和中断处理的同时,还有一个至关重要的机制需要掌握,那就是 DMA(直接内存访问)

DMA 是指在不经过 CPU 参与的情况下,由外围设备直接与主内存进行数据交换的机制。 磁盘、高速网卡等设备广泛利用了这一机制。通过 DMA,海量数据得以在极短时间内完成传输,极大地解放了 CPU,提升了系统整体效率。相比之下,如果不使用 DMA,所有数据都需要 CPU 作为“中间人”来搬运,速度会慢得多。

使用与不使用DMA的数据传输路径对比

6 文字及图片的显示机制

你是否想过,显示器上瞬息万变的图像信息存储在什么地方?答案是:显示器上显示的内容始终存储在某一块特定的内存中,这块内存被称为 VRAM(视频随机存取存储器)

在现代计算机中,显卡等专用硬件内部通常配备有独立于主内存的 VRAM 和 GPU(图形处理器)。而在早期的 MS-DOS 时代,VRAM 是位于计算机主机主板上的。这种架构演变反映了显示技术复杂度的提升和专业化的发展。

MS-DOS时代与Windows时代显示架构对比

理解从 I/O 端口、中断到 DMA 的整个硬件交互链条,是深入 计算机体系结构 底层原理的关键一步。这些机制共同确保了应用程序能够高效、有序地与复杂的物理硬件世界进行沟通。

如果你想持续探索此类底层原理与系统知识,欢迎访问 云栈社区 的相应板块,与更多开发者一起交流学习。




上一篇:Nginx优化实战指南:从10万到百万QPS的性能调优之路
下一篇:掌握Linux权限体系:从777、ACL到SELinux与安全加固实战
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-11 19:42 , Processed in 0.190083 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表