haribote原型系统改进方向
在时钟中断、计时器和键盘输入方面,一些创新性的改进方向:
-
时钟中断 (PIT /
inthandler20
)- 动态节拍 (Tickless Kernel):当前的 PIT 中断以固定频率(约 100Hz)触发,即使系统空闲或没有即将到期的计时器,也会消耗 CPU 时间。可以改为动态调整中断时机:仅当下一个计时器事件即将发生时,才设置 PIT (或更现代的 APIC 定时器/TSC deadline) 产生中断。这可以显著减少中断开销,降低功耗,提高系统性能,尤其是在空闲时。当前的最小堆结构 (
timerctl.heap[0]
) 已经提供了下一个事件的时间点,为实现此功能提供了基础。 - 高精度定时器 (High-Resolution Timers):当前定时器精度受限于 PIT 频率(约 10ms)。如果硬件(或模拟器)支持,可以考虑使用 TSC (Time Stamp Counter) 或 HPET (High Precision Event Timer) 来实现微秒甚至纳秒级别的定时精度。这将需要修改
timerctl.count
的单位和计时器超时计算逻辑。
- 动态节拍 (Tickless Kernel):当前的 PIT 中断以固定频率(约 100Hz)触发,即使系统空闲或没有即将到期的计时器,也会消耗 CPU 时间。可以改为动态调整中断时机:仅当下一个计时器事件即将发生时,才设置 PIT (或更现代的 APIC 定时器/TSC deadline) 产生中断。这可以显著减少中断开销,降低功耗,提高系统性能,尤其是在空闲时。当前的最小堆结构 (
-
计时器 (
timer.c
)- 计时器回调函数: 当前计时器到期时,是向指定的 FIFO 发送一个消息。可以扩展
timer_init
或timer_settime
接口,允许直接注册一个回调函数。当计时器到期时,在中断处理程序(或延迟到任务上下文)中直接调用该函数。这为需要精确时间触发的驱动或子系统提供了更灵活的机制。 - 动态计时器分配: 当前使用固定大小的数组
timerctl.timers0
来管理计时器。可以改为使用memman
动态分配和释放struct TIMER
,解除MAX_TIMER
的限制。需要注意内存碎片和分配/释放的开销。 - 周期性定时器的精度: 当前周期性定时器 (
interval > 0
) 的下一次触发时间是基于当前timerctl.count
加上interval
。这可能导致微小的累积误差。可以考虑记录一个“期望唤醒时间”,每次触发后,下一次期望唤醒时间是上一次期望唤醒时间加上interval
,而不是当前时间加上interval
,以减少长期运行的漂移。
- 计时器回调函数: 当前计时器到期时,是向指定的 FIFO 发送一个消息。可以扩展
-
键盘输入 (
keyboard.c
/ bootpack.c)- 解耦的键盘驱动: 将键盘扫描码到字符/按键符号的转换逻辑从主循环 (
HariMain
) 中分离出来,创建一个独立的键盘驱动层或库函数。中断处理程序 (inthandler21
) 可以继续将原始扫描码放入 FIFO,但由一个专门的驱动模块(可能是一个独立的任务,或在需要时被调用的库)来处理这个 FIFO,解析扫描码,考虑 Shift/Ctrl/Alt/Lock 状态,并生成更高级别的按键事件(如按键按下/释放、字符输入、功能键等)。 - 结构化按键事件: 不要仅仅向应用程序发送字符码或简单的整数值。定义一个结构体来表示按键事件,包含更丰富的信息,例如:
- 原始扫描码 (Raw Scancode)
- 按键码 (Key Code, 与物理位置相关的标识符)
- 产生的字符 (Character, 如果有)
- 修饰键状态 (Modifiers: Shift, Ctrl, Alt, CapsLock, NumLock 等)
- 事件类型 (按下 / 释放)
这样应用程序可以更灵活地处理各种组合键和按键状态。
- 可配置键盘布局: 当前的
keytable0
/keytable1
是硬编码的。可以设计一种机制,允许从外部文件(例如,磁盘上的布局文件)加载键盘映射表,从而支持不同的键盘布局(如 Dvorak、德语、法语等),并允许用户切换。 - 输入法框架 (IME): 对于需要输入复杂字符(如中文、日文、韩文)的场景,可以设计一个基础的输入法框架。虽然完整实现很复杂,但可以先定义接口和基本结构,允许将来扩展。
- 解耦的键盘驱动: 将键盘扫描码到字符/按键符号的转换逻辑从主循环 (
这些改进方向中,有些(如动态节拍、高精度定时器、USB 支持、IME)实现起来比较复杂,可能超出了课程设计的范围,但其他一些(如计时器回调、解耦键盘驱动、结构化按键事件、可配置布局)相对更具可行性,可以显著提升系统的灵活性和现代性。