自己动手写操作系统 第六章 号外:中断处理流程详细分析

摘要:进程调度可以说是操作系统中最重要的部分,而中断处理程序,可以说是进程调度中最重要的部分,因此,明白了中断处理流程,可以说就明白了进程调度,也明白了操作系统中很重要的一部分。本文,主要针对自己动手写操作系统中,没有理明白的部分进行讲解和总结,如果你在第六章感觉C和汇编编程之后,遇到一些阻力和困惑,也许能从中找到答案。注意:以下所有内容,均针对进程切换相关的中断程序——从理论上说,一个中断可以不保存和恢复上下文(如果中断程序内部没有用到任何寄存器和通用寄存器)。


1.中断处理三部曲

1)中断触发:将ss、sp、cs、ip等入栈

2)上下文保存

3)中断服务程序主体

4)恢复上下文

5)中断返回:与中断触发相反


2.硬件中断和软件中断的区别:

1)中断发生的时机:软件中断发生的时机是确定的,已经写好在程序中;硬件中断(时钟中断)发生在哪条指令之后,相对而言是不确定的

2)调用方式:软件中断是通过int n指令来调用的;而硬件中断是硬件触发的,同时需要中断控制器进行处理;

3)共同点:都是通过中断门调用的,如果涉及堆栈切换都需要将ss、sp、cs、ip压栈


3.中断切换SP变化:

中断触发和返回的过程,是一个从ring 1 >>ring 0 >>ring 1的过程:

1)中断触发:从ring 1 >>ring 0;ss0 &&sp0的值需要提前设置,并保存到tss中,然后才能保证堆栈正常。在本文中,我们需要先将sp指向PCB的addr,这样进入上下文保存阶段,才能够将上下文保存到PCB中

2)中断服务程序主体:ring0运行中断服务程序的时候,如果我们不改变sp的指向,那么很有可能服务程序会用到堆栈,进而改变PCB的结构的内容,所以,进入中断服务程序主体之前,需要将sp指向内核栈

3)恢复上下文:现在要恢复上下文,所以,要将sp从内核栈重新指向PCB结构的最低地址

4)返回:从 ring0返回ring 1 从PCB中取得ss和sp的值

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值