CPU如何感知我们的IO设备呢?
首先要明确一点,CPU所能做的,只是从寄存器中读一个值,或写一个值。我们的设备上通常会有一些芯片,甚至是一个微型的计算机系统,来感知物理状态和读写数据,并且向设备寄存器中读写值,设备向CPU提供的,只是一些设备寄存器接口,CPU通过读写这些寄存器来和IO设备交互。
这些设备寄存器主要分为三类:State(设备状态),Command(指令)和Date(数据)。
看一个真实的例子
static void
readsect(void *dst, uint offset)
{
// Issue command.
waitdisk();
outb(0x1F2, 1); // count = 1
outb(0x1F3, offset);
outb(0x1F4, offset >> 8);
outb(0x1F5, offset >> 16);
outb(0x1F6, (offset >> 24) | 0xE0);
outb(0x1F7, 0x20); // cmd 0x20 - read sectors// Read data.
waitdisk();
insl(0x1F0, dst, SECTSIZE/4);
}
static