什么是IO口、串口,它们有什么区别?

What are IO ports, serial ports and what's the difference between them?

我很困惑。

我最近开始着手构建操作系统,同时使用bochs作为模拟器和在线的某个手册。

在移动 vga 帧缓冲区光标的手册中,我使用命令 'out' 使用 IO 端口。我知道如何控制它,但我不知道我在控制什么,经过一些阅读后,它似乎无处不在,它被当作一个抽象的东西来处理,例如让光标改变它在屏幕上的位置。

我想知道的是:他们的身体状况如何?它们是电缆吗?如果是,从哪里连接到哪里?我也可以像名字建议的那样从他们那里输入吗?为什么我需要 out 命令而不能直接写入它们在内存中的位置?

如果在你的回答中你还可以包括串行端口以及它们与 IO 之间的区别,那将是惊人的,

恕我直言, 革命

(顺便说一句,操作系统是 32 位的)

一个IO端口基本上就是主板上的内存,你可以write/read。主板提供了除 RAM 之外的一些可用内存。 CPU 有一个控制总线,允许它“告诉”主板它在数据总线上输出的内容要写入 RAM 以外的其他地方。当您输出到 VGA 缓冲区时,您将写入主板上的显存。 out/in 指令用于 write/read IO 端口而不是写入 RAM。当你使用 out/in 指令时,你指示 CPU 在其控制总线上设置某条线来告诉主板 write/read 某个字节到 IO 端口而不是 RAM。

如今,大量 RAM 内存用于硬件映射而不是 IO 端口。这通常称为 PCI 孔。它是内存映射IO。所以你将写入 RAM,它会将数据发送到图形内存等硬件。所有这些对 OS 开发人员来说都是透明的。您只是在使用非常抽象的硬件接口,这些接口要么是传统的(开源的),要么是专有的。

同时,串行端口只是本质上是串行的端口。串行端口被定义为一次传输一位数据的端口。 USB 是串行的(通用串行总线)。 VGA 是串行的,其他的也是。这些端口不像 IO 端口。您可以使用IO端口间接输出给他们。

IO端口提供各种硬件接口,可以驱动硬件。例如,如果您有一个 VGA 兼容屏幕并设置了文本模式,则主板将使某些 IO 端口可用,并且当您写入这些 IO 端口时,视频内存将根据您输出到这些端口的内容而有所不同。最终,当视频控制器将输出数据通过实际的 VGA 端口写入显存时,VGA 屏幕将刷新。我不完全了解所有这些是如何工作的,因为我不是电气工程师,而且我从未读过这些东西。据我所知,您可以在维基百科上看到 VGA 端口的引脚以及它们的独立作用。 VGA 与 RGBHV 配合使用。 RGB 代表红色、绿色和蓝色,而 HV 代表 horizontal/vertical 同步。正如 wiki 上有关模拟电视的文章所述:

Synchronizing pulses added to the video signal at the end of every scan line and video frame ensure that the sweep oscillators in the receiver remain locked in step with the transmitted signal so that the image can be reconstructed on the receiver screen. A sync separator circuit detects the sync voltage levels and sorts the pulses into horizontal and vertical sync.

The horizontal synchronization pulse (horizontal sync, or HSync), separates the scan lines. The horizontal sync signal is a single short pulse which indicates the start of every line. The rest of the scan line follows, with the signal ranging from 0.3 V (black) to 1 V (white), until the next horizontal or vertical synchronization pulse.

内存本身在硬件中有多种形式。视频内存通常称为 VRAM(视频 RAM)或帧缓冲区,您可以在维基百科文章中阅读。所以显存本身就是一个DRAM阵列。今天的 DRAM 是一个电容器(存储数据)和一个 mosfet 晶体管(控制数据流)。所以你在处理器的数据总线和 VRAM 之间的主板上有特殊的布线。当您将数据输出到视频内存时,您将写入主板上的 VRAM。您在何处书写以及如何书写取决于您设置的视频模式。

大多数现代系统都使用 HDMI/Display 端口和显卡。这些显卡是其他的硬件接口,往往很复杂,而且往往无法知道,因为显卡的驱动程序是由制造商提供的。 osdev.org 有关于 Intel HD Graphics 的信息,它有一个特殊的交互界面。它可用于收集有关监视器的信息并确定用于写入监视器的 RAM 地址。