中断小结_0311

1、我眼中的中断

中断是CPU和外部进行交换的基础,如果一个计算机不能和外部进行信息交换,那么它对人类的用处就小的多了。这里所说的中断是一个宏观的概念,仅仅表示CPU在运行的时候被中断了。

为了清晰表示,下面我们区分中断和异常的概念。在我看来,由硬件引发的CPU中断,无论是硬件故障,还是硬件请求都被叫做中断。也可以说中断都是外部的引发的,外部中断分为可屏蔽中断(比如:打印机中断)和不可屏蔽中断(比如:电源断电),可屏蔽中断需要用到中断控制器。

异常是由计算机内部执行指令时发生的,如缺页异常。


2、异常与系统调用

在我看来,系统调用的实现是使用了异常的原理,不恰当的说,系统调用也是一种异常。我们知道,系统调用是在内核实现的,但是内核是受到保护的,它不允许用户态进程对随意访问。但是进程在运行的时候需要用到这些系统调用怎么办呢。(其实不用这些系统调用也是可以的。但是在程序编写初期,程序员的工作就变的困难了)


LINUX的系统调用是通过陷阱实现的。在使用系统调用时,主动触发一种异常,这就是int $x80汇编指令。这时就陷入了内核,因为内核不能放任异常的产生,需要对异常进行处理。就要调用异常处理程序,对于系统调用来讲就是系统调用处理程序。

    做个比喻吧,内核好像一个封闭的城堡,多个房间,有一扇门,每个房间有一个管理员。房间里的东西大家是知道的,但是大家不能进门,只能通过管理员去拿东西,这扇门就是系统门,管理员就是系统调用,而你就是外面的进程。

系统调用的存在就是专门为了进程方便的对计算机系统进行操作。在此,我们不能把他们割裂开看带,否则,系统调用是毫无价值的。


3、进程上下文和系统调用

之所以有进程上下文,是进程能被抢占。系统调用是属于进程上下文的。进程在CPU时是可以被抢占的,被抢占后就有了进程上下文,这只是一个相对的概念。进程执行的时候需要用到系统调用,系统调用把工作交给内核函数,内核函数帮你完成工作。这也产生了上下文的概念。所以,系统调用也是可以被抢占的,不同的进程也许会调用相同的或者不同的系统调用,至于谁的系统调用先运行,这要由他们的优先级说了算。

(次段理解有可能有错误,待以后理解后改进)


4、中断上半部和下半部

中断之所以分为上下半部,是因为我们只有15条中断线,而我们需要处理的中断类型远远大于中断线的数量,这就要求中断线要共享。一个外设在使用一条中断线的时候,是要屏蔽该中断线的。我们需要快速响应中断,解除屏蔽,但是又需要完成工作。所以就把响应中断和需要及时处理的工作放在中断上半部,告诉CPU,中断来了。把中断要完成的大部分工作放到下半部,通过tasklet和工作队列实现。上半部就是中断处理程序,下半部就是是中断服务程序。


5、再看系统调用——系统调用,异常,中断的联想

    这段是我临时加上的,是在写报告的时候的想法,系统调用借鉴了异常的机制,人为的触发一个异常,陷入内核进行处理。但是只有一个系统门,我们如何区分是哪个系统调用,这又借鉴了共享中断线的机制,有了系统调用处理程序和系统调用服务例程。

最后看到网上的不错的解释:

处理器总处于以下三种状态之一: 
1、内核态,运行于进程上下文,内核代表进程运行于内核空间;
2、内核态,运行于中断上下文,内核代表硬件运行于内核空间;
3、用户态,运行于用户空间。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值