Intel Architecture 32
英特尔32位架构(英语:Intel Architecture, 32-bit,缩写为IA-32),常被称为i386、x86-32或是x86,由英特尔公司推出的复杂指令集(CISC)架构,至今英特尔最受欢迎的处理器仍然采用此架构。它是x86架构的32位延伸版本,1985年首次应用在Intel 80386芯片中,用来取代之前的x86 16位架构(x86-16),包括8086、80186与80286芯片。 – 百度百科
80386 较原 8086 最大的区别就是从16位处理字长变成了32位的处理字长,寻址空间从可能的20位(分段的内存),到32位(平铺的内存),为了保持软件上的向后兼容性,ia32 沿用了段寄存器,但是也可以在初始化阶段将段地址都设为0,即平铺内存模式。 CPU 部分的 spec 还是非常复杂的,感兴趣的话详细内容见 IA-32 Intel Architecture Software Developer’s Manual
外围硬件
以下来自 pintOS 原文档,仅做分享
https://web.stanford.edu/class/cs140/projects/pintos/pintos_13.html#SEC169
FreeVGA FreeVGA Project. Documents the VGA video hardware used in PCs.
用来驱动显示器的 VGA 接口
kbd Keyboard scancodes. Documents PC keyboard interface.
用来驱动键盘,识别键盘的动作
ATA-3. AT Attachment-3 Interface (ATA-3) Working Draft. Draft of an old version of the ATA aka IDE interface for the disks used in most desktop PCs.
看起来是用来驱动磁盘的(确信)
PC16550D. National Semiconductor PC16550D Universal Asynchronous Receiver/Transmitter with FIFOs. Datasheet for a chip used for PC serial ports.
UART 芯片,用来添加串口功能(长叹一口气)
8254. Intel 8254 Programmable Interval Timer. Datasheet for PC timer chip.
可编程的时间间断芯片,用来生成 systick
8259A. Intel 8259A Programmable Interrupt Controller (8259A/8259A-2). Datasheet for PC interrupt controller chip.
中断控制器,用来相应和绑定以上外设发出的中断
MC146818A. Motorola MC146818A Real Time Clock Plus Ram (RTC). Datasheet for PC real-time clock chip.
RTC 实时时钟芯片,严格每 1s 产生一次中断,一般用于记录时间。听说一个1980年的老 IBM 电脑在2020年开机后依然显示时间为当前时间,偏差不超过 30s,应该就是这个芯片的功劳了
在虚拟机上运行
pintOS 可以运行在 80386 上,我觉得可能是因为 80386 机器依然比较简单,如今的处理器应该会复杂的多。qemu(虚拟机)上集成了以上硬件,相比于在真实机器上运行,要来的抽象的多,我觉得实际上是给项目创造了更大的困难,但是现在估计也很难能找到 386 的电脑了……
BIOS
BIOS 是硬件开发者给硬件写的一套软件接口,用来进行简单的外设初始化,比如键盘,和显示器。并且 BIOS 会把磁盘第一个扇区的可执行文件导入到内存也就是 boot loader ,然后就开始运行 boot loader 中的内容了。
本文到此结束