2020-06-14 读书笔记
第八章 8.1 是理解Google BreakPad的基础,掌握 8.2 需要理解 8.3-8.5 重点掌握
Google breakpad是一个非常实用的跨平台的崩溃转储和分析模块
EFC:(Exceptional Control Flow) 异常控制流
8.1异常 (理解)
异常时异常控制流的一种形式,一部分由硬件实现,一部分由操作系统实现。
在这一节中我们的目的是让你对异常和异常处理有一个一般性的理解,并且向你揭示现代计算机系统的一个经常令人感到疑惑的方面。
image.png
8.1.1 异常处理
异常处理程序运行在内核模式下
image.png通过执行一条特殊的“从中断返回”指令,可选的返回到被中断的程序
8.1.2 异常的类别
image.png“用户模式” 普通的函数运行在用户模式中,用户模式限制了可以还行的指令的类型,而且他们只能访问与调用函数相同的栈。
系统调用运行在内核模式中,内核模式允许系统调用执行特权指令,并访问定义在内核中的栈。见8.4
- 中断
中断是异步发生的 - 陷阱和系统调用
执行syscall 指令会导致一个到异常处理程序的陷阱,这个鼓励程序解析参数,并调用适当的内核程序。
所以说,这个异常是有意造成的,是为了让用户能够访问内核服务。是因为异常处理程序运行子内核模式下这个原因吗?
- 故障
- 终止
8.1.3
所有到Linux 系统调用的参数都是通过通用寄存器而不是栈传递的。
通过栈传递的是???
8.2进程(理解)
进程的经典定义就是一个执行中程序的实例。
上下文 是由程序正确运行所需的状态组成的。
本节我们将关注两个抽象概念
- 一个独立的逻辑控制流
- 一个私有的地址空间
8.2.1 逻辑控制流
在运行时动态链接到程序的共享对象??
PC值的序列叫做逻辑控制流,简称逻辑流
8.2.2 并发流
多个流并发地执行的一般现象被称为并发。
一个进程和其他进程轮流运行的概念被称为多任务。
一个进程执行它的控制流的一部分的每一段时间叫做时间片。
8.2.3 私有地址空间
不允许其他进程读或写。
image.png
8.2.4 用户模式和内核模式
处理器必须提供一种机制,限制一个应用可以执行的指令 以及它可以访问的地址空间。
处理器通常使用控制寄存器中的一个模式位来提供这种功能。
当设置里模式位时,进程运行在内核模式中。
没有设置该模式位时,进程就运行在用户模式中。
8.2.5 上下文切换
- 保存当前进程的上下文
- 恢复某个进程之前被保存的上下文
- 将控制传递给这个新恢复的进程。
8.4 进程控制
8.4.2 创建和终止进程
image.png8.4.3 回收子进程
image.png image.png8.4.5 加载并运行程序
execve函数
image.png
8.4.6 利用fork 和 execve 运行程序
??? 这两个怎么配合的
8.5 信号
进程和内核 中断其他进程
8.5.1 信号术语
传送一个信号到目的进程有两个步骤:
- 发送信号
- 接收信号
待处理信号:发出而没有被接受的信号;一种类型至多只有一个待处理信号。 是指发送端 还是 接收端???
8.5.2 发送信号
进程组:
8.5.3 接收信号
8.5.4 阻塞和解除阻塞信号
Linux 提供阻塞信号的隐式和显式的机制
隐式阻塞机制:阻塞一些待处理信号。
显式阻塞机制:可以明确选定阻塞和解除阻塞的信号。sigprocmask函数
8.5.6 同步流以避免讨厌的并发错误
如何编写读写相同存储位置的并发流程序的问题。
8.6 分本地跳转
直接从一个函数跳转到另一个当前正在执行的函数,而不需要返回序列】setjump longjump 行数