Linux0.11 源码趣读
闪客
低并发编程公号作者
18650 人已学习
赠一得一
课程目录
已完结/共 22 讲
Linux0.11 源码趣读
15
15
1.0x
00:00/00:00
登录|注册

13|中断初始化trap_init:你的键盘是何时生效的?

你好,我是闪客。
上一讲我们说到管理内存前划分出的三个边界值,以及主内存初始化函数 mem_init,也算是迈出了 main 函数的第一步。
这一讲我们要来探索“中断”隐藏的奥秘,建立一个中断描述符表 idt,来管理各种中断

trap_init 方法

话不多说,我们先看一个方法。
// init/main.c
void main(void) {
...
trap_init();
...
}
这个方法是干嘛的?不着急,先来听我抛出一个问题。
当你的计算机刚刚启动时,你按下键盘是没有任何效果的,但是过了一段时间后,再按下键盘就有效果了,也就是计算机会给出反应,最简单的反应就是直接将键盘字符显示在屏幕上。
那我们今天就来刨根问底一下,到底过了多久之后,按下键盘才有效果呢?我们带着这个问题,打开 trap_init 方法看一看。
// kernel/traps.c
void trap_init(void) {
int i;
set_trap_gate(0,&divide_error);
set_trap_gate(1,&debug);
set_trap_gate(2,&nmi);
set_system_gate(3,&int3); /* int3-5 can be called from all */
set_system_gate(4,&overflow);
set_system_gate(5,&bounds);
set_trap_gate(6,&invalid_op);
set_trap_gate(7,&device_not_available);
set_trap_gate(8,&double_fault);
set_trap_gate(9,&coprocessor_segment_overrun);
set_trap_gate(10,&invalid_TSS);
set_trap_gate(11,&segment_not_present);
set_trap_gate(12,&stack_segment);
set_trap_gate(13,&general_protection);
set_trap_gate(14,&page_fault);
set_trap_gate(15,&reserved);
set_trap_gate(16,&coprocessor_error);
for (i=17;i<48;i++)
set_trap_gate(i,&reserved);
set_trap_gate(45,&irq13);
set_trap_gate(39,&parallel_interrupt);
}
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了操作系统中断初始化的过程,重点讲解了中断描述符表的建立和中断处理程序的设置。文章首先提出了一个问题:在计算机启动后,按下键盘多久才会生效?然后通过分析 trap_init 方法的代码,解释了中断描述符表的建立过程,以及 set_trap_gate 和 set_system_gate 方法的作用。接着介绍了批量设置默认中断的过程,最后通过 tty_init 方法设置了键盘中断处理程序,使键盘生效。总结来说,本文通过讲解中断初始化的过程,帮助读者了解了操作系统中断处理的基本原理和流程。

该试读文章来自《Linux0.11 源码趣读》,如需阅读全部文章,
请先通过赠一得一解锁课程
赠一得一
登录 后留言

全部留言(4)

  • 最新
  • 精选
  • Ethan
    键盘是怎么发出0x21号中断的,或者说硬件发出怎样的信号CPU接收到可以理解为0x21中断,这个是每家键盘生产商默认遵守的吗,还是和CPU型号有关?
    2023-03-06归属地:上海
    2
    4
  • 夜未眠
    用户程序是如何主动进入中断的?
    2023-03-10归属地:云南
  • Ethan
    小白请教下,怎么发现set_trap_gate定义在哪个源文件里面的?
    2023-03-06归属地:上海
  • liiiiiii
    开始期待第三期
    2023-02-21归属地:广东
收起评论
显示
设置
留言
4
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部