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


    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>

  • 相关阅读:
    禁止修改的消息首部
    文章详情列表接口 小程序及 模拟器 条数 错误 浏览器正确 调大mysql 查询超时时间 同一接口,小程序环境的TTFB相比浏览器约大5倍。
    七牛云霍锴:实时音视频 SDK 设计实践
    java网页数据抓取
    IDEA properties文件中文自动转为ASCII码(properties输入中文乱码问题)
    阿里官方Java代码规范标准《阿里巴巴Java开发手册 终极版 v1.3.0》下载
    从零开始配置Ubuntu20.04 amd64 virtualenvwarapper angr环境 并做ais3_crackme的CFG图
    请求被中止: 未能创建 SSL/TLS 安全通道 解决方案
    Docker
    爬虫
  • 原文地址:https://www.cnblogs.com/mydomain/p/2083071.html
Copyright © 2020-2023  润新知