CSAPP阅读—第八章 异常控制流

来源:互联网 发布:上海大数据培训 编辑:程序博客网 时间:2024/04/30 09:40


 今天继续阅读CSAPP第八章,异常控制流。当指令流遇到中断,陷阱,故障和终止四类异常时,会停止执行当前或者下一条指令,转到其他地方去执行,通常为异常处理代码。
 本章第一节把异常分为四类:
   1.中断,一般是由硬件引起的中断,为异步发生。当产生中断后,标记中断位,然后cpu响应中断,然后根据中断向量表,调用响应的中断处理程序处理中断。
   2.陷阱,为同步异常,当应用程序需要调用系统级函数的时候,就产生自陷异常。从用户层调入系统层,从而执行系统函数。陷阱的作用是在用户程序和内核之间提供一个象过程一样的接口。陷阱返回到下一条指令。
   3.故障,为同步异常。其是由错误引起的异常,不过其错误是可以被修复的。如缺页。
   4.终止,为同步异常。其是由不可恢复的致命错误造成的。典型的为一些硬件错误,
 
  对于intel处理器中的异常,一个pentium系统有最多256种不同的异常类型,其中0-31为pentuim体系结构定义的异常。32-255为操作系统定义的异常。其中128为自陷异常.

        第二节讲了进程的概念,进程就是一个正在执行的程序。一个系统中可以有多个进程,他们根据一定的调度策略占用CPU执行。当在一个进程中创建一个子进程的时候,创建者就为父进程,被创建者就是子进程。子进程和父进程有不同的pid,拥有相同相互独立的地址空间,共享打开的文件描述符。在unix系统中,函数fork创建进程,其调用一次,返回两次。每一个进程都有自己独立的地址空间,在一个32位的linux系统中,其地址空间可达4GB, 其中高四分之一地址空间留给内核虚拟地址空间,这个空间为内核函数运行时分配代码、数据、堆栈等空间。底四分之三为用户空间,包括通常的文本,数据,堆和栈等。

         第三节主要阐述了用户空间和内核空间的概念,同时还说明了何为上下文切换(context switch)。用户模式和内核模式最大的区别就是其权限。内核模式可以访问系统中的任何资源,执行任何特权指令。而用户模式是不允许这些特权操作的,当在用户模式下调用了一些特权指令,或使用非法区域的内存等操作时,就会导致致命的保护故障。
  内核为每个进程都维护一个上下文(context),上下文就是进程在运行时需要的状态环境,其包括通用寄存器,浮点寄存器,状态寄存器,程序计数器,用户栈,内核栈和一些内核数据结构,如进程相应的地址空间的页表, 进程信息的进程表和已打开文件信息的文件表等。当恢复一个进程执行之前,就必须比起相应的上下文恢复,此进程才能正常执行。

  第四节介绍的为linux系统提供的进程操作的C函数接口。

  第五节介绍信号的函数接口,及其使用方法。
    1.首先当然就是发送信号,信号可以发送给一个单独的进程,或者是一个进程组。在此需要注意,通过键盘发送信号,如crtl+c发送信号SIGINT信号到shell,shell捕获此信号,并将此信号发送给此时在前台运行的“进程组”中。当调用kill函数发送信号的时候,需要指定进程的pid,和信号类型。当pid大于零的话,则kill函数发送信号给进程pid,但当pid小于零的时候,信号则发送给abs(pid)进程组中的每个进程。同时,进程也可以调用aLarm函数在规定的时间内给自己发送消息。

   2.接受信号,在linux系统中,可以调用函数signal函数来改变与信号相对应的处理行为。共有三种改变方式,
       1. SIG_IGN 忽略相应的信号
       2. SIG_DFL 使用相应信号的默认执行方式。
       3. 使用用户自定义的函数地址作为参数,当接受到信号之后,就执行相应的函数。

   3.信号处理
     在linux的信号机制中,处理一个信号比较简单,但是在处理多个并发的信号时候,就必须注意其信号接受处理的方式了。
     1、当进程已经在处理一个信号的时候,这时第二个信号到达,则第二个信号将被阻塞,变成待处理的信号。直到处理程序返回,才可能重新处理第二个信号。
     2、对任何类型,linux系统至多只有一个待处理的信号,之后接受到信号讲被简单的丢弃。
     3、最关键的一点是,系统调用可能被中断,对于象read、wrtie和accept等这样的慢系统调用,在某些系统中,当处理程序捕捉到一个信号时,被中断的慢速系统调用在信号处理程序返回时不再继续。(验证一下:))。

   第六节讲的是非本地跳转,讲控制直接从一个函数转移到另一个当前正在执行的函数。注意c语言中的setjmp、sigsetjmp、longjmp、siglongjmp函数。详细请看。。。。
  http://blog.csdn.net/ywchh/archive/2006/12/19/1448610.aspx
  我的网摘中也有此文章。

原创粉丝点击