From 886422b54670f2d99999dcee23750da582c295e5 Mon Sep 17 00:00:00 2001 From: GZTime Date: Wed, 17 Jan 2024 20:34:19 +0800 Subject: [PATCH] wip: fix typos --- docs/labs/0x02/tasks.md | 2 +- docs/wiki/apic.md | 8 ++++++++ docs/wiki/structures.md | 2 +- src/0x02/pkg/kernel/Cargo.toml | 1 + 4 files changed, 11 insertions(+), 2 deletions(-) diff --git a/docs/labs/0x02/tasks.md b/docs/labs/0x02/tasks.md index a0d6f79..8b79324 100644 --- a/docs/labs/0x02/tasks.md +++ b/docs/labs/0x02/tasks.md @@ -32,7 +32,7 @@ 在 `pkg/kernel/src/interrupt` 文件夹中,增量代码补充包含了如下的模块: - `apic`:有关 XAPIC、IOAPIC 和 LAPIC 的定义和实现。 -- `consts.rs`:有关于中断向量、IQR 的常量定义。 +- `consts.rs`:有关于中断向量、IRQ 的常量定义。 - `exceptions.rs`:包含了 CPU 异常的处理函数,并暴露 `register_idt` 用于注册 IDT。 - `mod.rs`:定义了 `init` 函数,用于初始化中断系统,加载 IDT。 diff --git a/docs/wiki/apic.md b/docs/wiki/apic.md index 219684f..b3949e5 100644 --- a/docs/wiki/apic.md +++ b/docs/wiki/apic.md @@ -94,6 +94,14 @@ APIC 的简单初始化过程包括以下几个步骤: 以上过程会在实验任务文档中进行详细描述,具体细节和设置原因涉及对称多处理 SMP 等内容,不做理解要求,如有兴趣可以自行查阅参考资料了解。 +## Local APIC 寄存器 + +在启用分页内存的情况下,需要对 LAPIC 寄存器地址进行映射,并虚拟内存地址进行操作。每个寄存器位宽为 32 位,并期望以 32 位整数的形式进行写入和读取。 + +
Offset Register name Read/Write permissions
000h - 010h Reserved
020h LAPIC ID Register Read/Write
030h LAPIC Version Register Read only
040h - 070h Reserved
080h Task Priority Register (TPR) Read/Write
090h Arbitration Priority Register (APR) Read only
0A0h Processor Priority Register (PPR) Read only
0B0h EOI register Write only
0C0h Remote Read Register (RRD) Read only
0D0h Logical Destination Register Read/Write
0E0h Destination Format Register Read/Write
0F0h Spurious Interrupt Vector Register Read/Write
100h - 170h In-Service Register (ISR) Read only
180h - 1F0h Trigger Mode Register (TMR) Read only
200h - 270h Interrupt Request Register (IRR) Read only
280h Error Status Register Read only
290h - 2E0h Reserved
2F0h LVT Corrected Machine Check Interrupt (CMCI) Register Read/Write
300h - 310h Interrupt Command Register (ICR) Read/Write
320h LVT Timer Register Read/Write
330h LVT Thermal Sensor Register Read/Write
340h LVT Performance Monitoring Counters Register Read/Write
350h LVT LINT0 Register Read/Write
360h LVT LINT1 Register Read/Write
370h LVT Error Register Read/Write
380h Initial Count Register (for Timer) Read/Write
390h Current Count Register (for Timer) Read only
3A0h - 3D0h Reserved
3E0h Divide Configuration Register (for Timer) Read/Write
3F0h Reserved
+ +你可以参考文末给出的参考资料以获取这些寄存器的细节信息。 + ## 参考资料 - [APIC - OSDev](https://wiki.osdev.org/APIC) diff --git a/docs/wiki/structures.md b/docs/wiki/structures.md index b2901ad..b5872cb 100644 --- a/docs/wiki/structures.md +++ b/docs/wiki/structures.md @@ -26,7 +26,7 @@ 在 32 位保护模式下,它主要用于存储与任务(任务切换)和中断处理相关的信息。TSS 包含了处理器在任务切换时需要保存和恢复的一些状态信息。每个任务都有一个相应的 TSS,通过任务寄存器(Task Register,TR)来引用。 -在 64 位长模式下,TSS 的结构与 32 位不同,它并不直接与任务切换挂钩,但是它仍然被用于存储当特权级栈和中断栈: +在 64 位长模式下,TSS 的结构与 32 位不同,它并不直接与任务切换挂钩,但是它仍然被用于存储特权级栈和中断栈: - 特权级栈:最多三个,当权限级别从较低权限级别更改为较高权限级别时使用的栈指针。 - 中断栈:最多七个,当中断发生时,如果定义了对应的中断栈,则使用对应栈指针。它可以用于存储不同**大小和用途**的中断栈,以处理不同的中断。 diff --git a/src/0x02/pkg/kernel/Cargo.toml b/src/0x02/pkg/kernel/Cargo.toml index 4cf3aa4..234a4de 100644 --- a/src/0x02/pkg/kernel/Cargo.toml +++ b/src/0x02/pkg/kernel/Cargo.toml @@ -13,5 +13,6 @@ x86 = "0.52" x86_64 = "0.14" log = "0.4" bitflags = "2.3" +bit_field = "0.10" libm = "0.2" linked_list_allocator = "0.10"