第八章 异常控制流

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. numpy的文件存储 .npy .npz 文件

    1)Numpy能够读写磁盘上的文本数据或二进制数据.将数组以二进制格式保存到磁盘np.load和np.save是读写磁盘数组数据的两个主要函数,默认情况下,数组是以未压缩的原始二进制格式保存在扩展名为 ...

  2. CodeForces - 583D Once Again... LIS 循环

    题意:给你n个数(n<=100,ai<=300)  一个T,求n重复T次的最长非递减子序列. 题解:我直接考虑4 3 2 1 的例子,当其重复4次时会出现1 2 3 4 的子序列 ,此时再 ...

  3. Elasticsearch 基础理论 & 配置调优

    一.简介 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java开发的,并作为 ...

  4. related Field has invalid lookup: icontains 解决方法

    models.py 文件 # coding:utf8 from django.db import models class Book(models.Model):         name = mod ...

  5. Linux输入输出重定向和文件查找值grep命令

    Linux输入输出重定向和文件查找值grep命令 一.文件描述符Linux 的shell命令,可以通过文件描述符来引用一些文件,通常使用到的文件描述符为0,1,2.Linux系统实际上有12个文件描述 ...

  6. mysql 操作sql语句 操作数据表

    #2. 操作文件 先切换到文件夹下:use db1 查看当前所在的数据库 mysql> select database(); +------------+ | database() | +--- ...

  7. java-mybaits-011-mybatis-拦截器计算耗时

    实现Mybatis官方提供的拦截器,用于记录SQL语句的执行时间 package com.github.bjlhx15.mybatis; /** * @author lihongxu * @since ...

  8. [py][mx]django使用class写views-免去判断方法的烦恼

    修改views使用class模式 类模式写views - 免去了函数模式的判断的烦恼 users/views.py from django.views.generic import View clas ...

  9. 【转】SVM入门(一)SVM的八股简介

    (一)SVM的八股简介 支持向量机(Support Vector Machine)是Cortes和Vapnik于1995年首先提出的,它在解决小样本.非线性及高维模式识别中表现出许多特有的优势,并能够 ...

  10. Pandas之Dropna滤除缺失数据

    import pandas as pd import numpy as np from numpy import nan as NaN 一.处理Series对象 通过dropna()滤除缺失数据 fr ...