20135234mqy-——信息安全系统设计基础第十一周学习总结

时间:2021-11-11 03:29:18

第八章 异常控制流

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 《信息安全系统设计基础》第四周学习总结(课堂实践补交&plus;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. &num; 20155337 2017-2018-1 《信息安全系统设计基础》第二周课堂实践&plus;myod

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

随机推荐

  1. ThinkPHP中Session用法详解

    在ThinkPHP封装了Session类,用户可以直接使用,常用的方法有: Session::set(name, value):注册 session . Session::is_set(name):检 ...

  2. JavaScript遍历table的行和列

    来源:http://blog.csdn.net/bobwu/article/details/7497412 <HTML> <head> <SCRIPT LANGUAGE= ...

  3. Memcached理解

    一.Memcached简介: 1. Memcached是一个*开源的,高性能的,分布式内存对象缓存系统. 2. Memcached是一种基于内存的key-value存储,用来存储小块的任意数据(字符 ...

  4. IO (五)

    1 序列化和反序列化 1.1 ObjectOutputStream 序列化 1.1.1 概述 ObjectOutputStream将Java对象的基本数据写入OutputStream,可以使用Obje ...

  5. &lbrack;Swift&rsqb;LeetCode1022&period; 从根到叶的二进制数之和 &vert; Sum of Root To Leaf Binary Numbers

    Given a binary tree, each node has value 0 or 1.  Each root-to-leaf path represents a binary number ...

  6. 2018-2019-2 20175310 实验二《Java面向对象程序设计》实验报告

    2018-2019-2 20175310 实验二<Java面向对象程序设计>实验报告 一.实验步骤及内容 (一).面向对象程序设计-1 参考 http://www.cnblogs.com/ ...

  7. C&plus;&plus;&lowbar;构造函数与析构函数

    构造函数与析构函数 OOP第二课 1 构造函数 1.1 构造函数具有一些特殊的性质 1.2 定义构造函数的一般形式 1.3 利用构造函数创建对象 2 成员初始化表 3 缺省参数的构造函数 4 重载构造 ...

  8. dubbox rest协议jackson 反序列化的坑

    dubbox 相对于dubbo 对了 rest 协议的支持  而且默认序列化的协议 是json dubbox 内部是通过 RestEasy 处理 rpc 服务 而 RestEasy获取序列化是 是通过 ...

  9. C&plus;&plus;学习--第一个程序

    C++控制台应用程序 我们创建一个包含预编译头的C++控制台应用程序时,会发现其结构是这样的: 1)理解预编译头文件: 所谓头文件预编译,就是把一个工程(Project)中使用的一些MFC标准头文件( ...

  10. 我的gulp第一个程序

    以前都是单枪匹马的干,从没用过模块化的打包工具,加入新的团队后,模块化开发学到不少,尤其是工具的使用.团队目前较多的使用gulp,也是最流行的一款前端打包工具.最近Team开始尝试用gulp,我也只是 ...