20145313张雪纯《信息安全系统设计基础》第11周学习总结

20145313张雪纯《信息安全系统设计基础》第11周学习总结

教材

  • 异常控制流(ECF)
    • 最简单的“平滑序列”类型的控制流是指PC中相邻的指令在存储器中也相邻。而异常控制流则是指程序变量表示的内部程序状态中的变化、系统状态的变化等突发情况使得控制系统做出的反映。
    • 应用程序如何与操作系统实现交互。应用程序使用系统调用(system call)的ECF形式向操作系统请求服务;实现并发的基本机制;提供软件异常机制等等
  • 异常
    • 处理器中的变化(事件)触发从应用程序到异常处理程序的突发的控制转移,也就是异常。比如:被零除,缺页,存储器访问违例,断点,算术溢出;系统调用,来着外部I/O设备的信号等等。
    • 在任何情况下,当处理器检测到有事件发生时,它就会通过一张叫做异常表的跳转表进行一个间接过程调用,到一个专门处理这类时间的操作系统子程序(异常处理程序);当 exception handler处理结束之后,会有三种结果 :处理程序将控制返回给事件发生的时候正在执行的指令;处理程序将控制返回给如果没有发生异常将会执行的下一条指令;处理程序终止被终端的程序
  • 异常&过程调用
    • 过程调用的时候,在跳转到处理程序之前,处理器将返回地址压入栈中。然而根据异常的类型,要么返回当前指令,要么返回下一条指令;
    • 异常虽然类似于过程调用,但在压入栈的数据方面有不同。它会把一些额外的处理器状态压入栈中;并且如果是转移到内核的程序,压入的是内核栈中;
    • 异常处理程序运行在内核模式下,意味着它们对所有的系统资源都有完全的访问权限
  • 异常表,其条目k中包含着异常k的处理程序的地址。其中,异常表的起始地址放在异常表基址寄存器中,而异常号是异常表中的索引,相当于偏移地址

  • 中断(异常类型1)
    • 原因:由I/O设备的信号引起的结果
    • 类型:异步(不是由任何一条指令造成的)
    • 处理:i/o设备,例如定时器芯片、网络控制器等,通过处理器芯片上的一个引脚发信号,并将异常号(标识引起中断的设备)放在系统总线上;在当前指令完成之后,处理器注意到引脚电压变化,从系统总线中读取异常信号,调用中断处理程序处理中断;处理器返回(无中断的时候)应该执行的下一条指令。
  • 陷阱(异常类型2)

    • 原因:有意的异常,是执行指令的结果
    • 类型:同步
    • 处理:用户程序需要或者希望向内核请求服务(比如创建或者终止进程、读文件等)的时候,执行 syscall n(n是想要请求的服务号)指令;把控制权交给处理程序;陷阱处理程序运行;处理程序结束之后,返回到下一条指令。
  • 故障(异常类型3)
    • 原因:由潜在的可恢复的错误的情况引起
    • 类型:同步;可能能够被修复然后返回当前指令。
    • 过程:当前指令导致故障;控制转移给处理程序;故障处理程序运行,如果可以修正这个错误,就将控制引起故障的指令从而重新执行它;否则,返回内核中的abort例程,abort终止引起故障的程序。
  • 终止(异常类型 4)
    • 原因:由不可恢复的致命错误造成;通常是一些硬件错误
    • 类型:同步
    • 过程:发生致命硬件错误;传递控制给处理程序;处理程序将控制返回给abort例程,该例程终止此应用程序
  • 进程

    • 定义:一个执行中的程序的实例。系统中的每个程序都运行在某个进程的上下文中。上下文是由程序正确运行所需要的状态组成的。这个状态包括放在存储器中的程序的代码和数据等
  • 进程提供给了应用程序几个关键抽象:
    • 一个独立的逻辑控制流——提供好像程序独占处理器的假象;
    • 一个私有的地址空间——提供好像程序独占存储系统的假象;
  • 逻辑控制流
    • 进程计数器(PC)中的每一个值都唯一地对应于包含在程序的可执行目标文件中的指令,或者是包含在运行时动态链接的到程序的共享对象中的指令。这个PC值的序列叫做逻辑控制流。
    • 进程是轮流使用处理器的;每个进程执行它的流的一部分然后被挂起,其他进程执行。 对于一个运行在其中一个进程上下文中的程序而言,它看上去就像是唯一地占用了处理器(只不过如果精确测量的话,会发现对于一个进程来说,它在执行期间好像被停顿了若干个很短的时间)。
  • 并发流
    • 计算机系统中有很多逻辑流的不同形式,比如异常处理程序、进程、信号处理程序等;一个逻辑流的执行在时间上与另一个流重叠,称为并发流;多个流并发执行的现象称为并发;一个进程和其他进程轮流运行,称为多任务;又叫做时间分片。
    • 如果两个流并发地运行在不同的处理器核或者计算机上,那么我们称它们为并行流。
  • 私有地址空间
    • 在一台有n位地址的机器上,地址空间是一个2^n个可能地址的集合。一个进程为每个程序提供它自己的私有地址空间;一般而言,和这个空间中某个地址相关联的那个存储器字节是不能够被其他进程读或者写的(所以说它是私有的)
    • 存储器内容通用结构:地址空间底部留给用户程序,包括通常的文本、数据等;地址空间顶部保留给内核(包括内核在代表进程执行指令的时候使用的代码、数据和栈)
  • 进程控制
    • 获取ID每个进程都有一个唯一的进程ID(PID);getpid函数获取进程的PID;getppid获取创建调用进程的进程(即它的父进程)的PID。以上两个函数的返回值为pid_t,在linux系统中,它在types.h中被定义为int
    • 创建和终止进程:父进程通过调用fork函数来创建一个新的运行子进程。新创建的子进程拥有和父进程相同的,但是独立的用户级虚拟地址空间拷贝,包括文本、数据和bss段、堆和用户栈等;子进程和父进程拥有独立的地址空间,所以二者对某一相同变量值的修改是互相不受影响的。
    • 终止进程
      • 运行:进程要么在CPU上运行,要么在等待被执行且最终被内核调度;
      • 停止:进程的执行被挂起,且不会被调度。【当进程收到SIGSTOP,SIGTSTP,SIDTTIN,SIGTTOU信号的时候,进程就会停止,并且保持停止直到它收到一个SIGCONT信号,在此时再次运行】
      • 终止:进程永远地停止。三种原因:1)收到一个信号,其默认为终止程序;2)从主程序返回;3)调用exit函数(exit(int stauts),其中status是退出状态)
    • 回收子进程:当一个进程由于某种原因终止的时候,内核并不是把它从系统中清除,而是保持在已经终止的状态中,直到被它的父进程回收。这时,内核将子进程的退出状态传递给父进程,然后抛弃已经终止的进程。这之后,该进程才可以说是“不存在”了。
      • 等待回收子进程:一个进程可以通过调用waitpid函数来等待它的子进程终止或者停止。父进程创建N个子进程,然后子进程以一个唯一的退出状态退出;waitpid函数被阻塞直到某个子进程终止,然后进入while循环测试是否是正常终止的;是正常的话就输出;当回收了所有的子进程之后,再调用waitpid就返回-1,并且设置errno为ECHILD;如果不是正常终止的,就输出一个错误消息
    • 加载并运行程序
  • 非本地跳转:C语言提供了一种用户级异常控制流形式,称为非本地跳转;它将一个函数转移到一个当前正在执行的函数,而省略了调用-返回序列这一步
    • 函数:setjmp,longjmp。setjmp函数在env缓冲区中保存当前调用环境(包括PC,栈指针,通用寄存器),以供后面的longjmp使用,并返回0;longjmp函数从env缓冲区中回复调用环境,然后触发一个从最近一次初始化env开始的setjmp函数调用的返回;main函数先调用setjmp保存以前的调用环境,然后调用函数foo;foo调用bar;如果这两个函数中一个遇到错误,就立即通过longjmp调用从setjmp返回;setjmp非零返回值指明了错误类型
    • 应用:用于允许从一个深层嵌套的函数调用之中立即返回,而不是费力地解开栈。用于使一个信号处理程序分支到一个特殊的代码位置而不是返回到被信号中断了的指令的位置。在程序第一次启动的时候,调用setjmp保存上下文环境;随后主函数进入无限处理循环;用户键入ctrl-c之后,外壳发送SIGINT信号给进程,该进程捕获这个信号然后处理程序执行一个非本地跳转,回到主函数开始的地方

代码调试

  • exec
    885194-20161127200742081-685764826.jpg

代码中实现的是ls的功能

  • forkdemo1
    885194-20161127200748690-140192491.jpg

打印进程pid,调用fork函数生成子进程,休眠一秒后再次打印进程id

  • forkdemo2
    885194-20161127200755206-1476402894.jpg

调用两次fork

  • forkdemo3
    885194-20161127200801362-1657329488.jpg

fork产生子进程,父进程返回子进程pid

  • forkdemo4
    885194-20161127200808237-1392985533.jpg

先打印进程pid,然后fork创建子进程,父进程返回子进程pid

  • forkdemogdb
    885194-20161127200815018-642088339.jpg

父进程打印两句,休眠一秒,再打印一句;子进程打印一句,休眠一秒,再打印两句

  • psh1
    885194-20161127200822721-2139359845.jpg

调用函数

  • psh2
    885194-20161127200828768-29970512.jpg

加入了循环

  • testbuf1
    885194-20161127200836768-190254204.jpg

  • testbuf2
    885194-20161127200843456-243710032.jpg

  • testbuf3
    885194-20161127200853503-1694346808.jpg

内容格式化输出到标准错误、输出流中

  • testpid
    885194-20161127200902659-432532601.jpg

输出当前进程pid和父进程pid

  • waitdemo
    885194-20161127200910128-993942330.jpg

如果有子进程,则终止子进程,成功返回子进程pid

  • waitdemo2
    885194-20161127200916800-1901463057.jpg

把子进程分为3个状态exit,sig和core

  • environ
    885194-20161127200923628-633607367.jpg

打印环境变量

  • environvar
    885194-20161127200930081-1241158325.jpg

简单打印环境变量表

  • consumer
    885194-20161127200941628-1756623318.jpg

memset(void s,int ch,size_t n);将s中前n个字节用ch替换并返回s
open(const char
pathname,int flags);第一个参数是欲打开的文件路径字符串,第二个参数是打开方式

  • producer
    885194-20161127200947034-1775318840.jpg

代码托管

885194-20161127200952909-1976356755.jpg
885194-20161127200959440-105243890.jpg

链接:http://git.oschina.net/entropy_z/Linux

学习进度条

代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)重要成长
目标5000行30篇400小时
第一周200/2001/120/20
第二周300/5001/218/38
第三周500/10001/322/60
第四周150/11501/430/90
第五周150/13001/530/120
第六周50/13501/630/150
第七周50/14001/720/170
第八周50/14501/820/190
第九周50/15001/920/210
第十周300/18001/1020/230
第十一周300/21001/1120/250

参考资料

  • 《深入理解计算机系统V2》学习指导

转载于:https://www.cnblogs.com/entropy/p/6107166.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/285376.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ueditor 改造, 为每个用户单独创建上传附件目录,用户只能查看自己上传的附件文件

1、修改 ueditor\net\config.json 文件 约 第78行: /* 上传文件配置 */"filePathFormat": "upload/{username}/file/{yyyy}{mm}{dd}/{time}{rand:6}", 约 第134行: /* 列出指定目录下的文件 */"fileManagerListPath": …

Silverlight 5 beta新特性探索系列:9.视频快进快退和TextSearch对象对文字项查询

本节讲诉两个新特性:一、在Silverlight 5中可以控制MediaElement对象播放的视频进行快进快退控制。二、在Silverlight 5中的文字项进行搜索查询。 一、对于MediaElement媒体播放对象的视频进行快退快进控制 它是通过MediaElement.PlaybackRate属性进行控制的。当前此…

【错误异常大全】:ArcGIS Engine中C#无法引用ESRI.ArcGIS.AxControls问题

ArcGIS Engine中C#无法引用ESRI.ArcGIS.AxControls问题,具体如下。 发现在引用列表中找不到ESRI.ArcGIS.AxControls服务。 一直显示感叹号。 多次尝试添加无果,解决方法:选中引用列表中的ESRI.ArcGIS.AxControls,在属性表窗口中将…

C语言试题122之利用递归函数调用方式,将所输入的 5 个字符,以相反顺序打印出来。

✅作者简介:大家好我是码莎拉蒂,CSDN博客专家🥇🥇🥇 📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 1、题目 题目:利用递归函数调用方式,将所输入的 5 个字符,以相反顺序打印出来。 2 、温馨提示 想…

Java IO流读取/写入/修改某个字符串(通用)

2019独角兽企业重金招聘Python工程师标准>>> package com.test;import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import jav…

重新开始征程

自本科毕业,离开那座城市,来到帝都,开始新的生活,也就没有再开垦这片热土。重启征程是因为研究生快要毕业啦! 改了昵称和博客的名称,在百度搜索的时候发现,本科毕设拿了省优秀毕业设计三等奖了&…

.Net Core-做一个微信公众号的排队系统

Part1前言微信扫码登录,微信扫码获取排队信息这些场景很常见,但是大家知道里面的原理是怎么实现的呢?今天我就来给大家解惑!Part2总体流程1浏览器请求服务器获取到二维码图片浏览器生成唯一值uuid通过uuid获取到带参数的二维码&am…

Python 实现 csv文件转换成json文件

# -*- coding:utf-8 -*- # csv转换成json import csv import jsonfile_path "district.csv" # 指定encodeingutf-8中文防止乱码 csvfile open(file_path,r, encodingutf-8) jsonfile open(district.json, w,encodingutf-8)# 指定列名 fieldnames ("code&q…

【292天】跃迁之路——程序员高效学习方法论探索系列(实验阶段50-2017.11.24)...

实验说明 从2017.10.6起,开启这个系列,目标只有一个:探索新的学习方法,实现跃迁式成长实验期2年(2017.10.06 - 2019.10.06)我将以自己为实验对象。我将开源我的学习方法,方法不断更新迭代&#…

C语言试题123之有 5 个人坐在一起,问第五个人多少岁?他说比第 4 个人大 2 岁。问第 4 个人岁数,他说比第 3 个人大 2 岁。问第三个人,又说比第 2 人大两岁。问第 2 个人,说比第一个

1、题目 题目:有 5 个人坐在一起,问第五个人多少岁?他说比第 4 个人大 2 岁。问第 4 个人岁数,他说比第 3 个人大 2 岁。问第三个人,又说比第 2 人大两岁。问第 2 个人,说比第一个人大两岁。最后 问第一个人,他说是 10 岁。请问第五个人多大? 分析:利用递归的方法,递…

【ArcGIS Engine二次开发】地图操作(1):加载Mxd地图文档

在ArcGIS中,以mxd作为扩展名的文件叫地图文档。地图文档中只是包含图层的引用,即存储当前地图的图层路径、符号、状态、修饰等信息,并不存储真实的数据层。 ArcGIS Engine中有常见两种加载地图文档的方法:LoadMxFile方法和IMapDocument方法,案例效果如下图所示: 打开VS20…

JAVA的extends用法

理解继承是理解面向对象程序设计的关键。在Java中,通过关键字extends继承一个已有的类,被继承的类称为父类(超类,基类),新的类称为子类(派生类)。在Java中不允许多继承。(1)继承 [java] view plaincopy cla…

C++实现静态顺序表的增删查改以及初始化

C实现静态顺序表的增删查改顺序表&#xff1a;用一段地址连续的存储单元依s次存储数据元素的线性结构&#xff0c;是线性表的一种。//SeqList.h#pragma once#include <assert.h> #include <string.h>#define MAX_SIZE 5 typedef int DataType;//定义顺序表结构体 t…

CSS伪元素 after 实现鼠标悬浮信息及动画效果

<p class"titleinfo_title title_hover" data-content" 04 喜看稻菽千重浪--记首届国家最高科技奖获得者袁隆平 等三篇"> 04 喜看稻菽千重浪--记首届国家最高科技奖获得者袁隆平 等三篇 </p> 强制多行显示效果&#xff1a; <style type&…

记一次 .NET 差旅管理后台 CPU 爆高分析

一&#xff1a;背景 1. 讲故事前段时间有位朋友在微信上找到我&#xff0c;说他的 web 系统 cpu 运行一段时候后就爆高了&#xff0c;让我帮忙看一下是怎么回事&#xff0c;那就看吧&#xff0c;声明一下&#xff0c;我看 dump 是免费的&#xff0c;主要是锤炼自己技术&#xf…

C语言试题124之给一个不多于 5 位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字

C语言试题124之给一个不多于 5 位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字 47/100 发布文章 u011068702 未选择任何文件 new ✅作者简介:大家好我是码莎拉蒂,CSDN博客专家🥇🥇🥇 📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模…

C#数组原来这么简单,你学废了吗?

文章目录 5.1 数组的概念5.2 数组声明与初始化5.3 数组的基本操作与排序5.4 多维数组小结5.1 数组的概念 1.数组与数组元素 数组是相同类型的对象的集合。 一个数组可以含有若干个下标变量(或称数组元素),下标也叫索引(Index),用来指出某个数组元素在数组中的位置。 数组…

数据基本类型以及相关举例

数据基本类型&#xff1a; 整型&#xff1a;字节型byte 短整型short 整型int 浮点类型&#xff1a;长整形long 浮点型 fioat 双精度性double 字符型&#xff1a;char 布尔型&#xff1a;boolean引用类型&#xff08; reference&#xff09;&#xff1a;类class 接口inte…

android--Activity有返回值的跳转

AndroidManifest.xml <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android"package"com.hanqi.test4"><applicationandroid:allowBackup"true"and…

[转]ES6、ES7、ES8、ES9、ES10新特性一览 (个人整理,学习笔记)

目录 1.ES6新特性&#xff08;2015&#xff09; 1.1模块化(Module) 1.1.1导出(export) 1.1.2导入(import) 1.2箭头&#xff08;Arrow&#xff09;函数 1.2.1箭头函数的结构 1.3默认参数 1.4模板字符串 1.5.结构赋值 1.5.1数组的结构赋值 1.5.2对象的结构赋值 1.6延…