信息安全系统设计基础第十周学习总结

第八章 异常控制流

(1)控制流:控制转移序列。

控制转移:从一条指令到下一条指令。

异常控制流:现代操作系统通过使控制流发生突变来对系统状态做出反应,这些突变称为异常控制流。

(2)异常:硬件触发异常,软件处理异常

(3)异常处理

异常表:当处理器检测到有事件发生时,它会通过跳转表,进行一个间接过程调用(异常),到异常处理程序。

异常号:系统中可能的某种类型的异常都分配了一个唯一的非负整数的异常号。异常号是到异常表中的索引。

一旦硬件触发了异常,异常处理程序则由软件完成。

(4)异常的类别——中断、陷阱、故障和终止

 a)中断处理:异步是指硬件中断不是由任何一条指令造成的,而是由外部I/O设备的事件造成的。

 b)陷阱和系统调用:系统调用是一些封装好的函数,内部通过指令int n实现。陷阱最重要的用途是提供系统调用。系统调用运行在内核模式中,并且可以访问内核中的栈。系统调用的参数是通过通用寄存器而不是栈来传递的,如,%eax存储系统调用号,%ebx,%ecx,%edx,%esi,%edi,%ebp最多存储六个参数,%esp不能用,因为进入内核模式后,会覆盖掉它。

 c)故障

 d)终止

(5)进程(操作系统层):逻辑控制流,私有地址空间,多任务,并发,并行,上下文,上下文切换,调度。进程就是一个执行中的程序实例。系统中的每个程序都是运行在某个进程的上下文中的。 进程提供给应用程序的关键抽象:a)一个独立的逻辑控制流 ;b)一个私有的地址空间

#逻辑控制流- 程序计数器(PC)值的序列叫做逻辑控制流,简称逻辑流。如下图所示,处理器的一个物理控制流分成了三个逻辑流,每个进程一个。

一些概念:并发流:并发流一个逻辑流的执行在时间上与另一个流重叠

              并发:多个流并发执行的一般现象称为并发。

              多任务:多个进程并发叫做多任务。

              并行:并发流在不同的cpu或计算机上,

#私有地址空间-一个进程为每个程序提供它自己的私有地址空间。运行应用程序代码的进程初始时是在用户模式中的。进程从用户模式变为内核模式的唯一方法是通过异常。linux提供了/proc文件系统,它允许用户模式进程访问内核数据结构的内容。

(6)进程控制

创建和终止进程:进程的三种状态——运行、停止和终止。进程会因为三种原因终止进程:收到信号,该信号默认终止进程;从主程序返回;调用exit函数。

(7)回收子进程:

回收:当一个进程终止时,内核并不立即把它从系统中清除。相反,进程被保持在一种已终止的状态中,直到被它的父进程回收。

僵死进程:一个终止了但是还未被回收的进程称为僵死进程。

 回收子进程的两种方法:1,内核的init进程 2,父进程waitpid函数

-如果父进程没有回收它的僵死子进程就终止了,那么内核就会安排init进城来回收它们。init进程的PID为1,并且是在系统初始化时创建的。

-个进程可以通过调用waitpid函数来等待它的子进程终止或停止。

waitpid函数有点复杂,默认地(当options=0时),waitpid挂起调用进程的执行,知道它的等待集合中的一个子进程终止。

(8) wait函数:

wait(&status)函数,等价于调用wait(-1,&status,0)

让进程休眠:

sleep函数将一个进程挂起一段指定的时间。

pause函数让调用函数休眠,知道该进程收到一个信号。

(9)环境数组操作函数:

(10)信号(操作系统和应用程序之间):进程之间传送信号,一种更高层次的软件形式的异常,称为unix信号,它允许进程中断其他进程。低层的硬件异常是由内核异常处理程序处理的,正常情况下,对用户进程而言是不可见的。信号提供了一种机制,通知用户进程发生了这些异常。

(11)信号处理过程

#发送信号:内核通过更新目的进程中上下文中的某个状态,发送一个信号给目的进程。发送信号有两个原因:a)内核检测到一个系统事件; b)一个进程调用kill函数,心事发送信号

#接收信号:,目的进程就接收了信号。进程可以忽略这个信号,终止或者通过执行信号处理程序捕获这个信号。

注意:待处理信号,一种类型的信号只能有一种待处理信号,多余的不会排队,而是会舍掉 ; 信号还可以阻塞。

(12)发送信号:/bin/kill , kill函数,键盘,alarm函数

 进程组:每个进程都只属于一个进程组,进程组是由一个进程组ID来标识的。默认的,一个子进程和它的父进程同属于一个进程组。在任何时刻,至多只有一个前台作业和0个或多个后台作业。外壳为每个作业创建一个独立的进程组,一个作业对应一个进程组。  

   

用kill函数发送信号:发送SIGKILL信号

用alarm函数发送信号:发送SOGALARM信号 

(13)接收信号,进程可以通过使用signal函数来修改和信号相关的默认行为。唯一的例外是SIGSTOP和SIGKILL,它们的默认行为不能被修改。

(14)信号处理问题, 当一个程序捕获多个信号时,容易有一些细问问题:

可移植的信号处理:目的是为了统一同一信号在不通系统中的语义。sigaction函数,或者是它的包装函数Signal函数。

(15)同步流以避免并发的错误,如何编写读写相同存储位置的并发流程序的问题,困扰着数代计算机科学家。比如,竞争问题。程序示例如下:

容易出现以下问题:

(16)非本地跳转(应用层) c语言提供了一种用户级异常控制流形式,称为本地跳转。通过setjmp和longjmp函数来提供。

setjmp函数只被调用一次,但返回多次:一次是当第一次调用setjmp,而调用环境保存在缓冲区env中时,一次是为每个相应的longjmp调用。另一方面,longjmp只调用一次,但从不返回。sig—函数是setjmp和longjmp函数的可以被信号处理程序使用的版本。

非本地跳转的一个重要应用就是允许从一个深层嵌套的函数调用中立即返回,通常是由检测到某个错误情况引起的。

非本地跳转的另一个重要应用是使一个信号处理程序分支到一个特殊的代码位置,而不是返回到达中断了的指令位置。

遇到的问题

 

  1. 教材:第八章,详细学习指导:http://group.cnblogs.com/topic/73069.html
  2. 课程资料:https://www.shiyanlou.com/courses/413 实验十,课程邀请码:W7FQKW4Y
  3. 教材中代码运行、思考一下,读代码的学习方法:http://www.cnblogs.com/rocedu/p/4837092.html。
  4. http://blog.csdn.net/zhanghaodx082/article/details/12280689


 

转载于:https://www.cnblogs.com/baka/p/4985831.html

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

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

相关文章

MVC、 MVP、 MVVM之间的区别

一、 简介三者的目的都是分离关注,使得UI更容易变换(从Winform变为Webform),使得UI更容易进行单元测试。二、MVC/MVP1 、MVC1、View接受用户的交互请求2、View将请求转交给Controller3、Controller操作Model进行数据更新4、数据更…

team geek

1. 转载自http://book.douban.com/review/6007037/,版权归丸子(^.^)v所有。 New Google employees (we call “Nooglers”) often ask me what makes me effective at what I do. I tell them only half-jokingly that it’s very simple: I do the Right Thing for…

HDU 3948 不同回文子串个数

集训队论文中有求不同子串个数的做法,就是扫一遍height数组,过程中根据height数组进行去重。对于本题也是雷同的,只是每一次不是根据与排名在上一位的LCP去重,而是与上一次统计对答案有贡献的后缀进行比较去重。 几组数据 abacaba…

oracle 11g重新安装配置,Oracle 11g数据库安装和卸载教程

Oracle11g的安装教程同时解压缩两个zip文件,生成一个database文件夹,进入到database文件夹,点击setup去掉安全更新的选项,直接下一步选择创建和配置数据库,点击下一步选择服务器类,点击下一步选择单例数据库…

程序员职业路线图

今天分享一张程序员职业路线图:欢迎关注我的公众号(同步更新文章):DoNet技术分享平台阅读原文

C#编程规范整理

小编整理了一些C#编程的一些规范,希望对大家有点用处!1、命名方式Pascal命名法:每个单词首字母均大写。Camel命名法:第一个单词首字母小写,其余单词首字母大写。2、有关类的规范1、使用 Pascal 大小写。2、用名词或名词…

win7 php redis 扩展,Windows中安装Redis及php redis扩展

Windows10环境安装Redis:1、下载Redis安装包;2、解压到自定义目录;3、windows键R,输入cmd 进入命令行,进入Redis的解压目录;4、运行:redis-server.exe redis.windows.conf 显示如下,说明启动成功…

【原创】MVC+ZTree实现权限树的功能

2、html代码权限树:3、JS代码var setting {async: {enable: true,url: /RoleToPerssion/GetPerssionTree,//异步加载时的请求地址autoParam: ["roleid"],//提交参数type: get,dataType: json},check: {enable: true, //true / false 分别表示 显示 / 不…

集合习题之列出有限集合所有子集

1、题目(《离散数学及其应用》第6版P75 20 题) 给出可以列出有限集合所有子集的步骤。 2、 解题思路 假设有集合A {a1, a2 … an},列出其所有子集。 先列出含有1个元素的所有子集:{a1},{a2} … {an}然后列出含有2个元素的所有子…

C# partial 关键字的使用

C# 2.0 引入了局部类型的概念。局部类型允许我们将一个类、结构或接口分成几个部分,分别实现在几个不同的.cs文件中。局部类型适用于以下情况:(1) 类型特别大,不宜放在一个文件中实现。(2) 一个类型中的一部分代码为自动化工具生成的代码&…

线段的平移和旋转

//github不会用&#xff0c;试了很久不知道怎么上传代码 #include <iostream> using namespace std;#include <stdlib.h> #include <Eigen/Dense> #include <math.h> using namespace std; using Eigen::MatrixXd; int main() { int option; struct p…

我不问+你不说

阅读原文很多事我不问你不说这就是距离我问了你不说这就是隔阂我问了你说了这就是尊重你想说我想问这就是默契我不问你说了这就是信任很多事情你看到的听到的未必是你想象的那样人生在世多给别人机会解释多些向别人解释的耐心人生会少很多遗憾不问、不说、不解释这不是酷或有个…

怎么安装redhat linux操作系统,红帽RedHat Linux5系统安装指南

介绍如何安装linux操作系统&#xff0c;以目前市场主流的操作系统为例子进行介绍。1、放入安装dvd光盘&#xff0c;然后启动服务器&#xff0c;可得如下画面&#xff1a;2、按enter键&#xff0c;进入如下画面3、选择skip&#xff0c;按enter进入&#xff0c;下面画面&#xff…

研华工控机u盘启动安装linux系统,研华工控机怎么设置u盘启动

本文主要介绍研华IPC如何设置u盘启动研华IPC-610 IPC随XP版一起安装。有时安装控制软件需要在不满意时卸载。卸载未完成&#xff0c;这使得安装无法进行&#xff0c;因此您需要将系统恢复到相对纯粹的时间。通常&#xff0c;USB磁盘启动盘的安装系统首先备份初始纯XP作为备份&a…

UVA - 11732 strcmp() Anyone?左兄弟右儿子trie

input n 2<n<4000 s1 s2 ... sn 1<len(si)<1000 output 输出用strcmp()两两比较si,sj(i!j)要比较的次数&#xff0c;结果在long long范围内&#xff08;相同字符比较两次&#xff0c;不相同字符比较一次&#xff0c;包括\0&#xff09; 做法&#xff1a;由于字符集…

优秀程序员的十个习惯

在这个世界上&#xff0c;有数百万的人热衷于软件开发&#xff0c;他们有很多名字&#xff0c;如&#xff1a;软件工程师&#xff08;Software Engineer&#xff09;&#xff0c;程序员&#xff08;Programmer&#xff09;&#xff0c;编码人&#xff08;Coder&#xff09;&…

如何通俗地解释 C、C++、C#、Java、JavaScript、HTML、Python的用处

世界上本来没有计算机&#xff0c;工程师创造了它。为了让告诉计算机需要做什么事情&#xff0c;工程师发明了程序设计语言。简单粗暴的编程&#xff1a;C语言&#xff1a;用来学编程&#xff1b;C语言&#xff1a;用来使劲儿学编程&#xff1b;C#&#xff1a;用来在windows操作…

将c程序移植到linux,各位大侠:我把原来在linux运行的c程序移植到HPUNIX上出现了错误...

各位大侠&#xff1a;我把原来在linux运行的c程序移植到HPUNIX上出现了错误(2012-04-11 00:43:47)标签&#xff1a;linuxc程序杂谈各位大侠&#xff1a;我把原来在linux运行的c程序移植到HP_UNIX上出现了错误makefileCC aCC -AA W829 DD64 DAportable-I/ods/app/oracle/produc…

数据库学习建议之提高数据库速度的十条建议

很多网站的重要信息都是保存在数据库中的&#xff0c;用户通过提交访问数据库来获取用户信息。如果数据库速度非常的快&#xff0c;有助于节省服务器的资源&#xff0c;在这篇文章中&#xff0c;我收集了十个优化数据库速度的技巧。0. 小心设计数据库第一个技巧也许看来理所当然…

提高程序员工作效率的11个技巧

“吃苦耐劳”真的是优良品质吗&#xff0c;与你怎么做相比&#xff0c;老板们应该更关心你做了什么、达到的效果。所以&#xff0c;效率&#xff0c;还是效率&#xff0c;希望这些实用小技巧对大家有所帮助。1、两分钟法则如果一件事可以在两分钟内完成&#xff0c;比如回复邮件…