zoukankan      html  css  js  c++  java
  • 信息安全系统设计基础 第11周学习笔记

    第八章 异常控制流

    1.异常

    异常是异常控制流的一种形式,它一部分是由硬件实现的,一部分是有操作系统实现的。异常就是控制流中的突变,用来相应处理器状态中的某些变化。
    
    系统中可能的每种类型的异常都分配了一个惟一的非负整数的异常号。这些号码中的某一些是由处理器的设计者分配的,其他号码是由操作系统内核的设计者分配的。前者如:除0项,缺页,存储器访违例,断点,算术溢出;后者的示例包括系统调用和来自外部I/O设备的信号。
    
    在系统启动时,OS分配的初始化一张称为异常表的跳转表,使得表目k包含异常k的处理程序的地址。
    

    1.异常处理

    • 异常号:系统为每种类型的异常分配的唯一的非负整数。

    • 异常表:系统启动时操作系统就会初始化一张条转变,使得条目k包含异常k的处理程序的地址。

    2.异常的类别

    故障指令:执行当前指令导致异常
    
    中断处理程序:硬件中断的异常处理程序。
    

    (1)中断

    • 来自处理器外部的I/O设备的信号的结果

    (2)陷阱和系统调用

    • 是执行一条指令的结果

    (3)故障

    • 由错误状况引起,可能能够被故障处理程序修正

    (4)终止

    • 是不可恢复的致命错误造成的结果

    2.进程

    进程的经典定义:一个执行中的程序的实例
    

    (1)逻辑控制流

    一系列的程序计数器PC的值,分别唯一的对应于包含子啊程序的可执行目标文件中的指令,或者是包含在运行时动态链接到程序的共享对象中的指令,这个PC值的序列就叫做逻辑控制流。
    

    (2)并发流

    一个逻辑流的执行在时间上与另一个流重叠,这两个流并发的运行。
    

    (3)私有地址空间

    进程为每个程序提供的一种假象,好像它独占的使用系统地址空间。一般来说,和这个空间中某个地址相关联的那个存储器字节是不能被其他进程读或者写的。从这个意义上说,这个地址空间是私有的。
    

    (4)用户模式和内核模式

    • 当设置了模式位,进程就运行在内核模式。该进程可以执行指令集中的所有指令,并且访问系统中任何存储器位置。

    • 没有设置模式位时,进程就运行在用户模式。不允许使用特权指令。

    • 当异常发生时,进程从用户模式变为内核模式。

    (5)上下文切换

    操作系统内核使用一种称为上下文切换的较高层形式的异常控制流来实现多任务。上下文切换机制建立在较底层异常机制之上。
    

    3.系统调用错误处理

    当Unix系统级函数遇到错误时,它们典型地会返回-1,并设置全局变量errno来表示什么出错了。
    

    4.进程控制

    (1)获取进程ID

    每个进程都有一个唯一的正数(非零)进程ID(PID)。
    

    (2)创建和终止进程

    进程总是处于下面三种状态之一
    
    • 运行

    • 停止:被挂起且不会被调度

    • 终止:永远停止

    (3)回收子进程

    进程终止后还要被父进程回收,否则处于僵死状态
    
    如果父进程没有来得及回收,内核会安排init进程来回收他们。init进程的PID为1
    
    一个进程可以通过调用waitpid函数来等待它的子进程终止或停止
    
    成功返回子进程pid,出错返回-1
    

    (4)让进程休眠

    • sleep函数

        sleep函数使一个进程挂起一段指定的时间
      
    • pause函数

        使调用函数休眠,直到该进程收到一个信号
      

    (5)加载并运行程序

    execve函数在当前进程的上下文中加载并运行一个新程序。execve调用一次并从不返回
    

    5.信号

    一种更高层的软件形式的异常——Unix信号,它允许进程中断其他进程
    
    一个信号就是一条小消息,它通知进程系统中发生了一个某种类型的事件。每种信号类型都对应于某种系统事件
    
    • 发送信号

        用/bin/kill程序发送信号
      
        从键盘发送信号
      
        用kill函数发送信号
      
        用alarm函数发送信号
      
    • 接收信号

      • 默认行为:

          进程终止
        
          进程终止并转储存储器
        
          进程停止直到被SIGCONT信号重启
        
          进程忽略该信号
        
    • 信号处理问题

      待处理信号被阻塞

      待处理信号不会排队等待

      系统调用可以被中断

    • 可移植的信号处理

      不同系统之间,信号处理语义的差异是Unix信号处理的一个缺陷

      sigaction函数允许系统明确指定自身想要的信号处理语义

    6.非本地跳转

    c语言中,用户级的异常控制流形式,使用setjmp和longjmp函数
    
    setjmp函数只被调用一次,但返回多次
    
    longjmp函数被调用一次,但从不返回
    

    7.操作进程工具

    Linux系统提供了大量的监控和操作进程的有用工具:

    • STRACE:打印一个正在运行的程序和他的子程序调用的每个系统调用的痕迹

    • PS:列出当前系统中的进程,包括僵死进程

    • TOP:打印出关于当前进程资源使用的信息

    • PMAP:显示进程的存储器映射

    8.参考资料

    《深入理解计算机操作系统》

    异常控制流学习笔记 http://blog.sina.com.cn/s/blog_7b4ce6b101012r1u.html

    9.感想

    和操作系统课上学的相似,当又不完全一样。时间片调度、系统调度进程、中断等还是有亲切感的。代码没有特别仔细地看,知识大致了解了返回值。过些天准备在温习温习。
  • 相关阅读:
    Stm32CubeMX5 配置 STM32的串口DMA接受方式 --- 基于 stm32f051k8u6
    Stm32 控制1.44寸液晶显示图片 基于stm32f051k8u6
    makefile自动编译
    Stm32CubeMX5 创建LED控制工程
    ARM 汇编与C之间 的调用
    shell 脚本文件类型.sh ,变量
    bzoj3589 动态树 求链并 容斥
    bzoj2287【POJ Challenge】消失之物 缺一01背包
    bzoj2916: [Poi1997]Monochromatic Triangles 思路
    [NOI2010]超级钢琴 主席树
  • 原文地址:https://www.cnblogs.com/whyfarrell/p/4986772.html
Copyright © 2011-2022 走看看