异常控制流概念:计算机系统响应状态改变的控制流。
计算机状态改变可以是程序状态的改变或者系统状态的改变。
一、异常
处理器状态变化称为事件,异常是指控制流响应事件发生时的突变,每个异常都被分配唯一的异常号。
1.1、异常处理
事件发生时,处理器会通过一张叫做异常表的跳转表,跳转执行对应的异常处理程序。
1.2、异常的类别
①中断是由于来自外部的I/O设备的信号的结果。硬件中断不是由任何一条专门的指令造成的,所以它是异步的。
②陷阱是因系统调用而发生的,它是有意而为的。
③故障是由于缺页等引起的,它有可能被修复,被修复后就返回当前指令继续执行,没被修复则终止程序。
④终止是不可恢复的致命错误造成的,通常是硬件错误。
1.3、Linux/86-64系统中的异常
x86-64系统定义了256种异常类型:
0~31的号码对应的是由Intel架构师定义的异常,因此对任何x86-64系统都是一样的。
32~255的号码对应的是操作系统定义的中断和陷阱。
1)Linux/x86-64故障和终止
除法错误
一般保护故障 —— 一个程序引用了一个未定义的虚拟内存区域,或者因为程序试图写一个只读的文本段。
缺页
机器检查
2)Linux/x86-64系统调用
Linux提供几百种系统调用,每种系统调用都有唯一的整数号,对应于一个到内核中跳转表的偏移量。
标准C库提供大多数系统调用的包装函数,这通常称为系统级函数。
二、进程
程序是存储在硬盘中的二进制代码和数据,进程是一个执行中程序的实例。
系统中的每个程序都运行在某个进程的上下文(虚拟地址空间、状态信息等等)中。
进程提供给应用程序的关键抽象:
一个独立的逻辑控制流,它提供一个假象,好像我们的程序独占地使用处理器。
一个私有的地址空间,它提供一个假象,好像我们的程序独占地使用内存系统。
2.1、逻辑控制流
PC值的序列叫做逻辑控制流(逻辑流),每个进程代表一个逻辑控制流。
处理器的一个物理控制流被分为各个进程的逻辑控制流。
2.2、并发流
一个逻辑流的执行在时间上与另一个流重叠,称为并发流。多个流并发地执行的一般现象被称为并发。
如果两个流并发地运行在不同的处理器核或者计算机上,那么就称它们为并行流。这种现象称为并行。
一个进行和其他进程轮流运行的概念称为多任务。一个进程执行它的控制流的一部分的每一时间段叫做时间片,多任务也叫时间分片。
2.3、私有地址空间