csapp 异常控制流

1013 异常控制流

Exception Control Flow ECF

1.1 异常处理

启动时生成异常表

运行时检测到异常,确定异常号,查找异常表,进入处理程序

执行完后,执行一条”从中断返回”指令,将控制返回给被中断的程序[如果是一个用户程序被中断]

1.2异常类别

  1. 中断

  2. 陷阱和系统调用

    陷阱: 有意的异常,用来在用户程序和内核之间提供一个像过程一样的接口–系统调用

  3. 故障

    如 除法错误,却也,一般保护故障[程序引用了一个未定义的虚拟内存区域,Linux一般会报告为一个 段故障 Segmentation fault]

  4. 终止

    不可恢复的致命错误–通常硬件错误

2 进程

定义

一个执行中程序的实例

维护一个 该程序是系统中当前运行的唯一程序的假象

拥有

  • 一个独立的逻辑控制流
    • 提供独占处理器的假象
  • 一个私有的地址空间
    • 提供独占内存系统的假象

进程空间

给出通用结构

以x86-64 Linux为例

image-20221013142209341

上下文切换

用于实现多任务

上下文: 重新启动一个被抢占的进程所需的状态

系统调用错误处理

Unix系统级函数遇到错误时,通常会返回-1,并设置全局整数变量errno来表示什么出错了.

进程控制

重点是创建子进程

父进程调用fork函数创建一个子进程

父子进程区别

相同

  • 虚拟地址空间
    • 代码
    • 数据段
    • 共享库
    • 用户栈
  • 打开描述符
    • 意味着父进程调用fork时,子进程可以读写父进程中打开的任何文件

区别

  • Pid
    • 进程id不同
  • 并发执行
    • 父进程和子进程是并发运行的独立进程
  • 虚拟地址空间
    • 子进程得到的副本和父进程相同,包括打开的文件描述符,但是是一份独立的副本,也就是说,之后的调用,子进程和父进程独立.

fork

  • 调用一次返回两次
    • 一次是在调用进程(父进程中)
      • 返回子进程PID(非零)
    • 一次在创建的进程中(子进程中)
      • 返回0
  • 可以用来辨认子进程还是父进程

回收子进程

步骤: 终止->分配给init进程作为养父->父进程回收[若父进程没来得及回收,则由init进程回收]

信号

较高层

  • 是一个小消息,通知进程系统中发生了一个某种类型的事件.
  • 用于通知用户进程发生了一些低层的硬件异常
Author

YSH

Posted on

2022-10-13

Updated on

2022-10-16

Licensed under