异常控制流

异常控制流

  1. 异步异常(中断)是由处理器外部的I/O设备中的事件产生的,同步异常(陷阱,故障,终止)是执行一条指令的直接产物。

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

  3. 进程的经典定义:一个执行中的程序的实例。上下文是由程序正确执行所需的状态组成,这个状态包括存放在存储器中的程序的代码和数据,它的栈,通用寄存器的内容,程序计数器,环境变量以及打开的文件描述符的集合。

  4. 进程提供给程序的关键抽象:

    • 一个独立的逻辑控制流。独占的使用处理器
    • 一个私有的地址空间。独占的使用存储系统
  5. 并发流:一个逻辑流的执行在时间上与另一个流重叠,称为并发流,这两个流被称为并发地执行

    并行流:如果两个流并发地运行在不同的处理器核或者计算机上,称为并发流,它们并行地执行,且并行地运行

  6. 对于32位进程来说,代码段从地址0x08048000开始,对于64位进程来说,代码段从地址0x00400000开始。地址空间顶部是保留给内核的。地址空间的这个部分包含内核在代表进程执行指令时(例如,当应用程序执行一个系统调用时)使用的代码,数据和栈
    这里写图片描述

  7. 内核模式:可以执行指令集中的任何指令,并且可以访问系统中任何存储器位置

    用户模式:进程不允许执行特权指令,比如停止处理器、改变模式位,或者发起一个I/O操作,也不允许用户模式中的进程直接引用地址空间中的内核区的代码和数据。用户程序必须通过系统调用结构间接地访问内核代码和数据

  8. fork函数:父进程通过调用fork函数创建一个新的运行子进程。新创建的子进程几乎但不完全与父进程相同。子进程得到与父进程用户级虚拟地址空间相同的(但是独立的)一份拷贝,包括文本,数据和bss段,堆以及用户栈。子进程还获得与父进程任何打开文件描述符相同的拷贝,意味着当父进程调用fork时,子进程可以读写父进程中打开的任何文件(如果子进程和父进程都使用printf输出,结果会输出到同一个界面中,这就是因为共享文件的原因)。父进程和子进程之间最大的区别在于PID不同。fork被调用一次,但是会返回两次:在调用的父进程中,返回子进程的PID;在子进程中返回0

  9. 僵死进程:一个终止了但还未被回收的进程。当一个进程由于某种原因终止时,内核并不是立即把它从系统中清除,而是被保持在一种已经终止的状态中,直到被它的父进程回收。

  10. fork函数在新的子进程中运行相同的程序,新的子进程是父进程的一个复制品。execve函数在当前进程的上下文中加载并运行一个新的程序。它会覆盖当前进程的地址空间,但并没有创建一个新的进程。新的程序仍然具有相同的PID,并且继承了调用execve函数时已经打开的所有文件描述符。

  11. ctrl-c会导致一个sigint信号发送到外壳,外壳捕获到该信号,然后发送sigint信号到这个前台进程组中的每个进程。在默认情况下,结果是终止前台作业。ctrl-z在默认情况下是停止前台作业(挂起)

  12. 当一个程序要捕获多个信号时,可能会产生的问题

    • 待处理信号被阻塞。Unix信号处理程序通常会阻塞当前处理程序正在处理的类型的待处理信号
    • 待处理信号不会排队等待。任意类型至多只有一个待处理信号,其余的会被丢弃
    • 系统调用可以被中断。像read,wait等系统调用潜在地会阻塞进程一段较长时间,称为慢速系统调用。在某些系统中,当处理程序捕获到一个信号时,被中断的慢速系统调用在信号处理程序返回时不再继续,而是立即返回给用户一个错误条件,并将errno设置为EINTR。
  13. 非本地跳转:C语言提供的一种用户级异常控制流形式。它将控制直接从一个函数转移到另一个当前正在执行的函数,而不需要经过正常的调用-返回序列

    • setjmp函数在env缓冲区中保存当前调用环境,以供后面的longjmp使用,并返回0。调用环境包括程序计数器、栈指针和通用目的寄存器。( int setjmp(jmp_buf env) )
    • longjmp函数从env缓冲区种恢复调用环境,然后触发一个从最近一次初始化env的setjmp调用的返回。然后setjmp返回,并带有非零的返回值retval。( void longjmp(jmp_buf env, int retval) )
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值