1013 异常控制流
Exception Control Flow ECF
1.1 异常处理
启动时生成异常表
运行时检测到异常,确定异常号,查找异常表,进入处理程序
执行完后,执行一条”从中断返回”指令,将控制返回给被中断的程序[如果是一个用户程序被中断]
1.2异常类别
中断
陷阱和系统调用
陷阱: 有意的异常,用来在用户程序和内核之间提供一个像过程一样的接口–系统调用
故障
如 除法错误,却也,一般保护故障[程序引用了一个未定义的虚拟内存区域,Linux一般会报告为一个 段故障 Segmentation fault]
终止
不可恢复的致命错误–通常硬件错误
2 进程
定义
一个执行中程序的实例
维护一个 该程序是系统中当前运行的唯一程序的假象
拥有
- 一个独立的逻辑控制流
- 提供独占处理器的假象
- 一个私有的地址空间
- 提供独占内存系统的假象
进程空间
给出通用结构
以x86-64 Linux为例
上下文切换
用于实现多任务
上下文: 重新启动一个被抢占的进程所需的状态
系统调用错误处理
Unix系统级函数遇到错误时,通常会返回-1,并设置全局整数变量errno来表示什么出错了.
进程控制
重点是创建子进程
父进程调用fork函数创建一个子进程
父子进程区别
相同
- 虚拟地址空间
- 代码
- 数据段
- 堆
- 共享库
- 用户栈
- 打开描述符
- 意味着父进程调用fork时,子进程可以读写父进程中打开的任何文件
区别
- Pid
- 进程id不同
- 并发执行
- 父进程和子进程是并发运行的独立进程
- 虚拟地址空间
- 子进程得到的副本和父进程相同,包括打开的文件描述符,但是是一份独立的副本,也就是说,之后的调用,子进程和父进程独立.
fork
- 调用一次返回两次
- 一次是在调用进程(父进程中)
- 返回子进程PID(非零)
- 一次在创建的进程中(子进程中)
- 返回0
- 一次是在调用进程(父进程中)
- 可以用来辨认子进程还是父进程
回收子进程
步骤: 终止->分配给init进程作为养父->父进程回收[若父进程没来得及回收,则由init进程回收]
信号
较高层
- 是一个小消息,通知进程系统中发生了一个某种类型的事件.
- 用于通知用户进程发生了一些低层的硬件异常