第八章 异常控制流

8.1异常

  异常是异常控制流的一种形式,它一部分是由硬件实现的,一部分是由操作系统实现的。

  异常就是控制流中的突变,用来响应处理器状态中的某些变化。

  8.1.1异常处理    

   异常号是到异常表中的索引,异常表的起始地址放在一个叫做机异常表基址存储器的特殊CPU寄存器里

   8.1.2异常类别

    1.中断异常号是到

    2.陷阱和系统调用

    3.故障

    4.终止

  8.1.3Linux/IA32系统中的异常

    1.Linux/IA32故障和终止

      (1)除法错误

      (2)一般保护故障

      (3)缺页

      (4)机器检查

    2.Linux/IA32系统调用

8.2进程

  异常是允许操作系统提供进程的概念所需要的基本构造块

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

  进程提供给应用程序的关键抽象:

    (1)一个独立的逻辑控制流,它提供一个假象,好像我们的程序独占地使用处理器

    (2)一个私有的地址空间,它提供他一个假象,好像我们的程序独占地使用存储器系统

  8.2.1逻辑控制流

    即使在系统中通常有许多其它程序在运行,进程也可以向每个程序提供一种假象,好像它在独占地使用处理器。如果想用调试器单步执行程序,我们会看到一系列的程序计数器(PC)的值,这些之唯一的对应于包含在程序的可执行目标文件中的指令,或是包含在运行时的动态链接到程序的共享对象中的指令。这个PC值的序列叫做逻辑控制流,或简称逻辑流。

  8.2.2并发流

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

  8.2.3私有地址空间

    一个进程为每个程序提供它自己的私有地址空间,和这个空间中某个地址相关联的那个存储器字节是不能被其他进程读或写的,从这方面的来说,这个私有地址空间是私有的。

  8.2.4用户模式和内核模式

    处理器通常是用某个控制寄存器中的一个模式位来提供这种功能的,该寄存器描述了进程当前享有的特权。当设置了模式位时,进程就运行在内核模式中。一个运行在内核模式的进程可以执行指令集的任何指令,并且可以访问系统中任何存储器位置。

  8.2.5上下文切换

    操作系统内核使用一种称为上下文切换的叫高层形式的异常控制流来实现多任务

    内核为每个进程维持一个上下文。上下文就是内核重新启动一个被抢占的进程所需的状态。

8.3系统调用错误处理

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

    通过使用错误处理包装函数,我们可以更进一步的简化我们的代码

8.4进程控制

    8.4.1获取进程ID

      每个进程都有一个唯一的正数进程ID。getpid函数返回调用的PID,getppid函数返回他的父进程的PID(创建调用进程的进程)

    8.4.2创建和终止进程

      从程序员角度,程序总是处于下面三种状态之一:

        (1)运行

        (2)停止

        (3)终止

    8.4.3收回子进程

      当一个进程由于某种原因终止时,内核并不是立即把它从系统中清除。相反,进程被保持在一种已终止的状态中,直到被它的父进程回收。当父进程回收已终止的子进程时,内核将子进程的退出状态传递给父进程,然后抛弃已终止的进展,从此时开始,该进程就不存在了。一个终止了但还未被回收的进程称为僵死进程。

      (1)判定等待集合的成员

      (2)修改默认行为

      (3)检查已回收子进程的退出状态

      (4)错误条件

      (5)wait函数

8.5信号

  UNIX信号,他允许进程中断其他进程

  一个信号就是一条小消息,他通知进程中发生了一个某种类型的事件。

  每种信号类型都对应每种系统事件。

  8.5.1信号术语

   发送一个信号到目的进程是由两个不同步骤组成:

    (1)发送信号

    (2)接收信号

  8.5.2发送信号

    (1)进程组

    (2)用/bin/kill程序发送信号

    (3)从键盘发送信号

    (4)用kill函数发送信号

    (5)用alarm函数发送信号

  8.5.4信号处理问题

    (1)待处理信号被阻塞

    (2)待处理信号不会排队等待

    (3)系统调用可以被中断

总结:

  异常控制流发生在计算机系统的各个层次,是计算机系统中提供并发的基本机制。

  在硬件层,异常是由处理器中的事件出发的控制流中的突变。控制流传递递给一个软件处理程序,该处理程序进行一些处理,然后返回控制给被中断的控制流。

  异常分为:中断、故障、终止、陷阱。

  在操作系统层,内核用ECF提供进程的基本概念。进程提供给应用两个中澳的抽象:(1)逻辑控制流(2)私有地址空间

  在操作系统和应用程序之间的接口处,应用程序可以创建子程序,等待他们的子进程停滞 或者终止,运行新的程序,以及不活来自其他进程的信号

  在应用层,c程序可以使用非本地跳转来规避正常的调用/返回栈规则,并且直接从一个函数分支到另一个函数

  主要参考资料《深入理解计算机系统》

心得:

  通过本章的学习,基本了解了ECF在计算机各个层次的发生,同时,部分内容也对我学习操作系统课程有很大的帮助,例如8.2进程,操作系统课程主要学习的是进程的具体作用,如何运行,如何产生最终结果,而书中关于进程的内容,是关于什么是进程,进程具体是什么,给程序提供了什么样的抽象,并对操作系统课程中常常提到的wait和signal两个函数也有了进一步的理解,知道了函数具体是什么,为什么是这样的,这对于我深刻了解这方面的知识起到了很大的帮助,对于8.5章的信号,比较难理解,我会多花些时间学懂该部分知识。

20135234mqy-——信息安全系统设计基础第十一周学习总结的更多相关文章

  1. 20165223《信息安全系统设计基础》第九周学习总结 & 第八周课上测试

    目录 [第九周学习总结] 教材内容总结 [第八周课上测试] (一)求命令行传入整数参数的和 (二)练习Y86-64模拟器汇编 (三)基于socket实现daytime(13)服务器和客户端 参考资料 ...

  2. 20155216 2017-2018-1 《信息安全系统设计基础》第二周课堂练习补交以及Myod的实现

    20155216 2017-2018-1 <信息安全系统设计基础>第二周课堂练习补交 课堂测试3:行断点的设置 运行截图: 未完成原因:课前未安装 cgdb 具体步骤: 1.输入命令:gc ...

  3. 2017-2018-1 20155232 《信息安全系统设计基础》第四周学习总结以及课上myod练习补充博客

    2017-2018-1 20155232 <信息安全系统设计基础>第四周学习总结以及课上myod练习补充博客 课上myod练习 1 参考教材第十章内容 2 用Linux IO相关系统调用编 ...

  4. 2017-2018-1 20155320 《信息安全系统设计基础》第四周学习总结(课堂实践补交+myhead与mytail加分项目)

    2017-2018-1 20155320 <信息安全系统设计基础>第四周学习总结(课堂实践补交+myhead与mytail实现) 课堂实践内容 1 参考教材第十章内容 2 用Linux I ...

  5. 2017-2018-1 20155326 《信息安全系统设计基础》第四周学习总结及myod改进版的补交

    2017-2018-1 20155326 <信息安全系统设计基础>第四周学习总结及myod改进版的补交 学习内容 补充完成课上没有完成的内容 学习教材附录A,第十章内容 参考别出心裁的Li ...

  6. 2017-2018-1 20155305 《信息安全系统设计基础》第四周学习总结(课堂提交作业未来得及提交码云链接myod补充博客)

    2017-2018-1 20155305 <信息安全系统设计基础>第四周学习总结(课堂提交作业未来得及提交码云链接myod补充博客) 课堂提交题目要求 编写MyOD.java 用java ...

  7. 2017-2018-1 20155318 《信息安全系统设计基础》第九周课下实践——实现mypwd

    2017-2018-1 20155318 <信息安全系统设计基础>第九周课下实践--实现mypwd 相关知识 man -k 查找含有关键字的内容 与管道命令结合使用:man -k k1 | ...

  8. 2017-2018-3 20155337《信息安全系统设计基础》 pwd指令学习

    2017-2018-3 20155337<信息安全系统设计基础> pwd指令学习 任务要求 学习pwd指令 研究pwd实现需要的系统调用(man -k:grep),写出伪代码 实现mypw ...

  9. # 20155337 2017-2018-1 《信息安全系统设计基础》第二周课堂实践+myod

    20155337 2017-2018-1 <信息安全系统设计基础>第二周课堂实践+myod 因为在课上已经提交了四个实验,还欠缺最后一个实验,反省一下自己还是操作不熟练,平时在课下应该多多 ...

随机推荐

  1. hihocoder 1330 - 数组重排 - [hiho一下167周][最小公倍数]

    题目链接:https://hihocoder.com/problemset/problem/1330 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi想知道,如果他 ...

  2. ZOJ 2760 - How Many Shortest Path - [spfa最短路][最大流建图]

    人老了就比较懒,故意挑了到看起来很和蔼的题目做,然后套个spfa和dinic的模板WA了5发,人老了,可能不适合这种刺激的竞技运动了…… 题目链接:http://acm.zju.edu.cn/onli ...

  3. MongoDB-3.4安装文档

    1.建立目录 2.将解压文件cp到步骤1建立目录下 mongodb-win32-x86_64-enterprise-windows-64-3.4.1.zip 3.配置环境变量 4.启动mongodb服 ...

  4. 它是对 ACME(automated certificate management environment) 协议的实现,只要实现了 ACME 协议的客户端都可以跟它交互。

    它是对 ACME(automated certificate management environment) 协议的实现,只要实现了 ACME 协议的客户端都可以跟它交互. https://mp.we ...

  5. 学习计划 nginx 中 php的配置详解

    本章只看一个刚下载的nginx是如何支持php的 -- location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_inde ...

  6. 【aws】

    云服务器EC2 动态调整云服务器ec2 cpu.内存大小: 在ec2实例上右键,Instance settings--> Change Instance Type 选择一个合适的type 云数据 ...

  7. ubuntu 下关闭apache服务自动启动

    最近在自己的ubuntu安装了apache服务器,每次开机的时候通过:   ps  -A    命令发现apache服务总是自动启动,如下: 本来自己的电脑内存就小,现在也不用这个服务,所以想让apa ...

  8. EL--Expression Language

    EL 存取变量数据的方法很简单,例如:${username}.它的意思是取出某一范围中名称为username的变量.因为我们并没有指定哪一个 范围的username,所以它的默认值会先从Page 范围 ...

  9. python-面向对象-09_类属性和类方法

    类属性和类方法 目标 类的结构 类属性和实例属性 类方法和静态方法 01. 类的结构 1.1 术语 —— 实例 使用面相对象开发,第 1 步 是设计 类 使用 类名() 创建对象,创建对象 的动作有两 ...

  10. Centos 集群配置SSH免登陆脚本

    首先编写脚本生成集群服务器列表: hostsList.sh #!/bin/bash preIp="11.11.225." pwd="dyj2017" for i ...