异常流控制

来源:互联网 发布:负载均衡来源软件 编辑:程序博客网 时间:2024/05/16 17:49

在硬件层,异常是由处理器中的事件触发的控制流中的突变。控制流传递给一个软件处理程序(异常处理程序),该处理程序进行一些处理,然后根据引起异常的事件的类型,返回控制给被中断的控制流或终止被中断的控制流。

在操作系统层,内核中ECF提供进行的基本概念。进程提供给应用程序两个重要的抽象:(1)逻辑控制流,它提供给每个程序一个假象,好像是在独占地使用处理器;(2)私有地址空间,它提供给每个程序一个假象,好像它是在独占地使用主存。

 

用户模式和内核模式

内核模式:一个运行在内核模式的进程可以执行指令集中的任何指令,并且可以访问系统中任何存储器位置。

用户模式:用户模式中的进程不允许执行特权指令,比如停止处理器、改变模式位(某个控制寄存器中的一个bit,用于控制进程在两种模式间的切换)或发起一个I/O操作,也不允许直接引用地址空间中内核区的代码和数据。

运行应用程序代码的进程初始时是在用户模式中的。进程从用户模式变为内核模式的唯一方法是通过诸如中断、故障或陷入系统调用这样的异常。当异常处理完成后,处理器就把模式从内核模式改回到用户模式。

普通的函数调用运行在用户模式中,系统调用运行在内核模式。

 

用户模式

内核模式

CPU特权模式

非特权模式

特权模式

可访问的CPU寄存器

非特权模式的寄存器

所有寄存器

可使用的CPU指令集

非特权模式指令

所有指令

可访问地址空间

用户态地址空间

用户态地址空间、内核系统地址空间


 

上下文:上下文就是内核重新启动一个被抢占的进程所需的状态。它由一些对象的值组成,这些对象包括通用目的寄存器、浮点寄存器、程序计数器、用户栈、状态寄存器、内核栈和各种内核数据结构。

上下文切换:(1)保存当前进程的上下文 ,(2)恢复某个先前被抢占的进程被保存的上下文 ,(3)将控制传递给这个新恢复的进程。


运行Linux的CPU在任何时候只会处于四种状态之一:
1.在处理一个硬中断
2.在处理一个软中断状态
3.运行在内核态,但有进程上下文,即与一个进程相关
4.运行在用户态进程
1、2和3运行于内核空间的,而4是在用户空间。其中除了4,其它状态只可以被在其上的状态抢占。

原创粉丝点击