14、深入理解计算机系统笔记:异常控制流-阿里云开发者社区

开发者社区> hopegrace> 正文

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>

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
怎么设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程
8467 0
操作系统课堂笔记(5)存储管理
1、存储管理使用的基本概念 逻辑地址与物理地址 在具有地址变换机构的计算机中,允许程序中编排的地址和信息实际存放在内存中的地址有所不同。前者叫逻辑(相对)地址,后者叫物理(绝对)地址。 重定位:将逻辑地址转换为物理地址。 虚拟存储管理 虚存是由操作系统调度,采用内外存的交换技术,各道程序在必需使用时调入内存,不用的调出内存,这样好象内存容量不受限制。 虚存的特点: (
1196 0
(二十九)java条件控制语句培训笔记
<p><span style="color:#8080FF">java</span><span style="color:#8080FF">结构控制语句示例:</span><span style="color:#8080FF">if</span><span style="color:#8080FF">,</span><span style="color:#8080FF">if else,s
1010 0
操作系统课堂笔记(7)设备管理
1、设备管理的任务和功能 设备管理的任务 (1)按用户需求提出的要求接入外部设备,系统按一定算法分配和管理控制,而用户不必关心设备的实际地址和控制指令; (2)尽量提高输入输出设备的利用率,例如发挥主机与外设以及外设与外设之间的真正并行工作能力。 设备管理的功能 (1)分配设备 (2)控制和实现真正的输入输出操作 (3)对输入输出缓冲区进行管理 (4)在一些较大系统中实现
912 0
SAS学习笔记之《SAS编程与数据挖掘商业案例》(4)DATA步循环与控制、常用全程语句、输出控制
SAS学习笔记之《SAS编程与数据挖掘商业案例》(4)DATA步循环与控制、常用全程语句、输出控制 1. 各种循环与控制 DO组 创建一个执行语句块 DO循环 根据下标变量重复执行DO和END之间的语句 DO WHILE 重复执行直到条件为假则退出循环 DO UNTIL 重复执行直到条件为真则退出循环 DO OVER 对隐含下标
1257 0
《逻辑与计算机设计基础(原书第5版)》——1.2 计算机系统设计的抽象层次
本节书摘来自华章计算机《逻辑与计算机设计基础(原书第5版)》一书中的第1章,第1.2节,作者:(美)M.莫里斯·马诺(M. Morris Mano)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1717 0
深入理解计算机系统结构——并发编程
并发编程 如果逻辑控制流在实际上重叠,那么它们就是并发的,这种常见的现象称为并发,出现在计算机系统的许多不同层面上。 应用级并发在其他情况下也是很有用的: 访问慢速I/O设备。 与人交互。 通过推迟工作以降低延迟。
743 0
异常处理 - PHP手册笔记
原文:异常处理 - PHP手册笔记 PHP代码中所产生的异常可被throw语句抛出,并被catch语句捕获。需要进行异常处理的代码都必须放入try代码块内,每一个try至少要有一个与之对应的catch。
810 0
+关注
698
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载