美文网首页
深入理解计算机之异常

深入理解计算机之异常

作者: 知道的太少 | 来源:发表于2020-10-18 00:59 被阅读0次
    处理器控制流.PNG

    异常

    异常是异常控制流的一种形式,部分有硬件实现,部分由操作系统实现,是控制流的一种突变,用以响应处理器某些状态变化。

    异常.PNG 异常处理.PNG
    异常表: 异常表.PNG
    异常的类别: 异常的类别.PNG
    中断: 中断.PNG
    陷阱和系统调用:
    陷阱是一种有意的异常,是执行一条指令的结果。陷阱的一个最重要的作用就是实现系统调用。处理器提供了一个特殊的syscall n指令,当应用程序执行syscall指令时,会导致一个跳转到异常处理程序的陷阱,这个程序会解析该指令的参数,然后跳转到对应的系统调用。 系统调用.PNG
    故障和终止:
    故障和终止.PNG

    x86-64异常

    x86-64系列有多大256种异常,其中0~31号为Intel架构师定义的异常,剩余未操作系统定义的中断和异常。

    x86-64异常.PNG
    Linux/x86-64故障和终止:
    Linux-x86-64故障和终止.PNG
    Linux/x86-64系统调用:
    Linux系统调用.PNG
    Linux常用系统调用.PNG

    进程

    进程.PNG
    逻辑控制流:
    逻辑控制流.PNG 注意区别这里的逻辑控制流和前面讲的控制流之间的异同。
    并发流:
    并发流.PNG
    私有地址空间:
    进程地址空间.PNG
    用户模式和内核模式:
    内核模式.PNG
    上下文切换:
    进程上下文切换.PNG
    进程切换举例:
    进程A和B切换.PNG 需要注意的是,上图在进行第一次上下文切换之前,内核代表进程A工作在用户模式,换句话说,操作系统里没有额外的独立内核进程。同时,上下文切换工作在内核模式,如上图的第一次上下文切换,内核先工作在进程A的内核模式,然后进入进程B的内核模式。

    系统调用的错误处理

    系统调用的错误处理.PNG

    进程控制

    获取进程ID:

    获取进程ID.PNG
    创建和终止进程:
    进程状态.PNG
    终止进程.PNG
    创建进程.PNG
    回收子进程:
    僵尸进程.PNG
    waitpid函数.PNG
    函数waitpid的等待集合由其参数pid决定,如果pid > 0,则等待节合就是一个单独的子进程,它的进程ID等于pid;如果pid = -1那么等待集合就是由父进程的所有子进程组成。我们还可以修改waitpid函数的默认行为:
    waitpid的默认行为.PNG
    检查已回收子进程的退出状态:
    检查已回收子进程的退出状态.PNG
    简化版waitpid函数.PNG
    让进程休眠:
    让进程休眠.PNG

    加载并运行程序

    execve函数.PNG
    参数和环境变量组织结构.PNG
    用户程序的栈结构.PNG
    操作环境变量数组.PNG
    程序和进程.PNG

    信号

    低层次的硬件异常是由内核异常处理程序处理的,正常情况下对用户是不可见的,而信号提供了一种机制,通知用户发生了这些异常。每种信号类型都对应某种系统事件,例如进程试图除零,或者进程执行了一个非法指令,或者有非法的内存引用,或者ctrl+c、kill命令等。

    Linux信号.PNG
    发送一个信号到目的进程由两个步骤组成: 发送信号.PNG 接收信号.PNG
    待处理信号: 待处理信号.PNG
    发送信号: 进程组.PNG setpgid函数将进程pid的进程组改为pgid,如果pid是零,则改变本进程的进程组id;如果pgid是零,则将pid作为进程组id。 kill命令.PNG

    相关文章

      网友评论

          本文标题:深入理解计算机之异常

          本文链接:https://www.haomeiwen.com/subject/jfcfmktx.html