《一个操作系统的实现》笔记(3)--中断和I/O保护
来源:互联网 发布:eventbus 跳转传数据 编辑:程序博客网 时间:2024/06/11 01:18
中断和异常机制
有时候普通的程序流必须可以被要求快速反应的处理事件中断。电脑提供了一个称为中断的结构来处理这些事件。
外部中断由CPU的外部引起。
例如:当一个鼠标移动了,硬件鼠标中断现在的程序来处理鼠标移动(移动鼠标,等等)。中断导致控制权转移到一个中断处理程序。中断处理程序是处理中断的程序。每种类型的 中断都分配了一个中断号。在物理内存的开始处,存在一张包含中断处理 程序段地址的中断向量 表。中断号是这张表中最基本的指针。
内部中断由CPU的内部引起,要么是由一个错误引起,要么由中断指令引 起。错误中断称为陷阱。由中断指令引起的中断称为软中断。DOS使 用这些类型的中断来实现它的API。
许多中断处理程序当它执行完成时,将控制权返回给被中断的程序。它 们恢复寄存器,里面的值与中断发生之前的值相同。因此,被中断的程序 就像没有任何事情发生一样运行(除了它失去了一些CPU周期)。
在实模式下能用的BIOS中断在保护模式下已经不能用了,实模式下的中断向量表被保护模式下的IDT所代替。
IDT的作用是将每一个中断向量和一个描述符对应起来。
联系调用门我们知道,其实中断门或者任务门的作用机理几乎是一样的,只不过使用调用门时使用call指令,而这里我们使用int指令。
中断过程调用:
中断门和陷阱门的结构:
外部中断需要建立硬件中断与向量号之间的对应关系,由CPU的引脚INTR来接收:
8259A是可编程中断控制器,通过向相应的端口写入特定的ICW(Initialization Command Word)来实现的,在写入ICW2时涉及与中断向量号的对应,这里IRQ8~IRQ15被设置成对应中断向量28h~2Fh,这个范围处于用户定义的中断向量。
Init8259A: mov al, 011h out 020h, al ; 主8259, ICW1. call io_delay out 0A0h, al ; 从8259, ICW1. call io_delay mov al, 028h ; IRQ8 对应中断向量 0x28 out 0A1h, al ; 从8259, ICW2. call io_delay ;...
中断或异常发生时的堆栈
保护模式下的I/O
保护模式下对I/O做了限制,用户进程如果不被许可是无法进行I/O操作的。主要通过IOPL和I/O位图来实现。
IOPL
IOPL位于寄存器eflags的第12、13位。
I/O敏感指令如in、out等只有在CPL<=IOPL时才能执行。
I/O许可位图
I/O许可位图位于TSS偏移102字节处,每一位表示一个字节的端口地址是否可用。
- 《一个操作系统的实现》笔记(3)--中断和I/O保护
- 《一个操作系统的实现》(三):4.中断和异常&5.保护模式下的I/O
- 《一个操作系统的实现》笔记(7)--输入/输出系统(I/O)
- 《一个操作系统的实现》笔记(2)--保护模式
- 《Orange's 一个操作系统的实现》学习笔记(二) 实模式和保护模式
- 学习笔记:一个操作系统的实现--保护模式之基础知识
- 学习笔记:一个操作系统的实现--认识保护模式
- 学习笔记:一个操作系统的实现--保护模式进阶
- 《一个操作系统的实现》阅读笔记 之 保护模式
- 《Orange's 一个操作系统的实现》学习笔记--保护模式理论初步(一)
- 《Orange's 一个操作系统的实现》学习笔记--保护模式理论初步(二)
- 一个操作系统的实现(9)-中断和异常
- 操作系统学习笔记——保护模式——中断和异常(1)
- 【Linux操作系统分析】中断和异常(1)——中断描述符表IDT,I/O中断处理,中断向量
- 操作系统课堂笔记(2)操作系统的硬件环境之I/O技术和时钟
- 一个操作系统的实现(3)-保护模式进阶
- 一个操作系统的实现-3_保护模式2
- 一个操作系统的实现-4_保护模式3
- HDU5521:Meeting(最短路 & 集合点互达)
- 前端压缩工具
- MySQL添加用户
- 继承之乐趣
- sql语法通配符
- 《一个操作系统的实现》笔记(3)--中断和I/O保护
- 一个基于树莓派和Python的无人机视觉跟踪系统
- 零基础入门深度学习(6)
- Karaf教程第1部分 安装Karaf与第一个应用
- 快速排序算法
- 《一个操作系统的实现》笔记(4)-- Boot&Loader
- Django创建图书管理项目(完整版
- VS2017链接报错:fatal error LNK1318: 非意外的 PDB 错误
- Linux电源管理(五)thermal