BIOS 中断、特权级别和分页

BIOS 中断、特权级别和分页

我正在学习 Intel 8086-80486 CPU 及其与硬件的交互。但我仍然不太理解。请帮我填补空白。

首先,我知道 CPU 使用 BIOS 中断与硬件通信。但是,当我调用某些 INT 指令时,PC 中究竟发生了什么?我知道根据中断表,一些指令开始执行,但是通过执行这些指令,BIOS 如何识别我想要做什么?因为据我所知,CPU 与 BIOS 没有额外的通信通道,它只能寻址内存和接收数据。那么,当我只能寻址 RAM 时,我如何指示 BIOS 执行某些操作?

接下来我不明白的是特权级别。我知道环模型和访问权限,但 CPU 如何知道哪个特权级别执行了一条指令?我认为这些特权仅在指令试图寻址内存时适用,但应用程序如何获得其特权级别?我的意思是我知道它的级别 3,但它是如何设置的?

最后,我知道分页是一种用于支持应用程序透明虚拟内存或交换的地址方案,但我找不到有关分页如何与保护模式关联的任何信息。比如,分页是否像下一个独立于保护模式的模式,或者它以某种方式在保护模式中实现。如果它是在保护模式下实现的,那么首先寻址应用程序空间,然后是偏移量,然后再次分页文件夹、页面和偏移量,是不是太慢了?

答案1

有两种模式:真实模式和受保护模式。在真实模式下,您只能寻址 1 MiB 内存。BIOS 中断只能在真实模式下访问。地址 A0000 - FFFFF 被映射:A0000 - BFFFF 是视频内存,F0000 - FFFFF 是 ROM BIOS,BIOS 中断服务例程的代码位于此处。在真实模式下没有特权级别。如果执行“int n”指令,则会发生这种情况:标志、cs、ip 存储在堆栈上。n*4+2 处的字加载到 cs 中,n*4 处的字加载到 ip 中。

通过设置 cr0 寄存器的位 0 来启动保护模式。然后您拥有 4 个特权级别。但在启动它之前,您必须启用 A20,设置 IRQ 0-7 和 IRQ 8-15 的中断基础,创建 IDT、GDT。

通过设置 cr0 的第 31 位来启动分页。启动之前,您必须创建页目录和页表,并将 cr3 设置为指向页目录。

相关内容