14、深入理解计算机系统笔记:异常控制流

简介: 1、系统中可能的每种类型的异常都分配了一个惟一的非负整数的异常号(exception number)。这些号码中的某一些是由处理器的设计者分配的,其他号码是由操作系统内核的设计者分配的。前者如:除0项,缺页,存储器访违例,断点,算术溢出;后者的示例包括系统调用和来自外部I/O设备的信号。

1、系统中可能的每种类型的异常都分配了一个惟一的非负整数的异常号(exception number)。这些号码中的某一些是由处理器的设计者分配的,其他号码是由操作系统内核的设计者分配的。前者如:除0项,缺页,存储器访违例,断点,算术溢出;后者的示例包括系统调用和来自外部I/O设备的信号。

在系统启动时,OS分配的初始化一张称为异常表的跳转表,使得表目k包含异常k的处理程序的地址。

wps_clip_image-29412

2、如果控制从一个用户程序转移到内核,所有这些项目(item)都被压到内核栈中,而不是压到用户栈中。

异常处理程序运行在内核模式下,这意味着它们对所的资源都有完全的访问权限。

3、现代OS把这些突发改变(abrupt changes)称为异常,如中断。

4、异常的类别

    Exceptions can be divided into four classes: interrupts, traps, faults, and aborts.

wps_clip_image-18536

注:Anync(异步)Sync(同步)

异步异常是由处理器外部的IO设备中的事件产生的,同步异常是执行一条指令的直接产物。

1)陷阱(trap

陷阱是有意的异常,是执行一条指令的结果。最重要的用途是在用户程序和内核之间提供一个像过程一样的接口,叫做系统调用。

用户程序经常需要向内核请求服务,如读read,创建新进程fork,加载一个新程序execve,终止当前进程exit

从程序员角度看,系统调用和普通函数调用一样。实际他们实现不同。普通函数调用运行在user mode,用户模式限制了函数可以执行的指令类型,而且它们只能访问与调用函数相同的栈;系统调用发生在kernel mode,内核模式允许系统调用执行指令,并访问定义在内核中的栈。

2)故障(Fault

故障的一个经典示例是缺页异常。

5、上下文(context)是由程序正确运行所需的状态组成的。这个状态包括存放在存储器中的程序的代码和数据,它的栈,它的通用目的寄存器的内容,它的程序计数器,环境变量,及打开文件描述符的集合。

PC(程序计数器)值的序列称为逻辑控制流。多任务也叫时间分片(time slicing)。

6、查看系统调用

Linux提供了160个系统调用,man syscalls查询。

man 2 info 得到_syscall宏;可以直接调用任何“系统调用”。

7、操作进程的工具

STRACE: Prints a trace of each system call invoked by a program and its children

Compile your program with -static to get a cleaner trace without a lot of output

related to shared libraries.

PS: Lists processes (including zombies) currently in the system.

TOP: Prints information about the resource usage of current processes.

KILL: Sends a signal to a process.

/proc : A virtual filesystem that exports the contents of numerous kernel data

structures in an ASCII text form that can be read by user programs. For example, type

"cat /proc/loadavg" to see the current load average on your Linux system.

<Computer Systems:A Programmer's Perspective>

目录
相关文章
|
5月前
|
C++
第二章:C++中的控制流程
第二章:C++中的控制流程
34 1
|
5月前
计算机组成原理(6)-----指令执行过程
计算机组成原理(6)-----指令执行过程
116 0
|
存储 JavaScript 算法
重学操作系统----15 | 中断和中断向量:Java/js 等语言为什么可以捕获到键盘输入?
当你拿到一个问题时,需要冷静下来思考和探索解决方案。你可以查资料、看视频或者咨询专家,但是在这之前,你先要进行一定的思考和梳理,有的问题可以直接找到答案,有的问题却需要继续深挖寻找其背后的理论支撑。
178 0
|
安全 Java Unix
解读《深入理解计算机系统 (CSAPP)》第 8 章异常控制流
本章题目是 “异常控制流 = Exceptional Control Flow”,实际内容是进程,系统调用,异常,信号等,它们与操作系统(以及系统编程)之间都有着密切的联系,后续的几个章节,例如虚拟内存,系统I/O,网络编程等也都与操作系统(以及系统编程)有着密不可分的联系。
解读《深入理解计算机系统 (CSAPP)》第 8 章异常控制流
|
自然语言处理 编译器 程序员
计算机为什么能够读懂程序代码?
计算机为什么能够读懂程序代码?
计算机为什么能够读懂程序代码?
|
存储
【计算机系统】程序栈的作用与工作原理
【计算机系统】程序栈的作用与工作原理
416 0
【计算机系统】程序栈的作用与工作原理
|
Java
【Java 从入坑到放弃】No 5. 控制流程
【Java 从入坑到放弃】No 5. 控制流程
405 0
【Java 从入坑到放弃】No 5. 控制流程
|
Java
【嵌入式开发】ARM 异常向量表 ( 异常概念 | 异常处理流程 | 异常向量 | 汇编代码 )(二)
【嵌入式开发】ARM 异常向量表 ( 异常概念 | 异常处理流程 | 异常向量 | 汇编代码 )(二)
228 0
【嵌入式开发】ARM 异常向量表 ( 异常概念 | 异常处理流程 | 异常向量 | 汇编代码 )(二)
|
存储
【嵌入式开发】ARM 异常向量表 ( 异常概念 | 异常处理流程 | 异常向量 | 汇编代码 )(一)
【嵌入式开发】ARM 异常向量表 ( 异常概念 | 异常处理流程 | 异常向量 | 汇编代码 )(一)
608 0
【嵌入式开发】ARM 异常向量表 ( 异常概念 | 异常处理流程 | 异常向量 | 汇编代码 )(一)
|
存储 程序员 Linux
重学计算机组成原理(十二) - 异常和中断(下)
重学计算机组成原理(十二) - 异常和中断(下)
275 0
重学计算机组成原理(十二) - 异常和中断(下)