学号20145209《信息安全系统设计基础》第11周学习总结

学号20145209《信息安全系统设计基础》第11周学习总结

教材学习内容总结

教材学习内容总结
第八章 异常控制流
1、从给处理器加电开始,直到断点为止,程序计数器假设一个值的序列
a0,a1,……,an-1
每个ak是某个相应的指令Ik的地址。每次从ak到ak+1的过渡称为控制转移。这样的控制转移序列叫做处理器的控制流。

2、异常控制流:现代系统通过使控制流发生突变来对这些情况作出反应。
8.1异常
1、异常是异常控制流的一种形式,它一部分是由硬件实现的,一部分是有操作系统实现的。

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

3、在处理器中,状态被编码为不同的位和信号。状态变化成为事件。

4、异常表:当处理器监测到有时间发生时,通过一张叫做异常表的跳转表,进行一个间接过程调用,到一个专门设计用来处理这类事件的操作系统子程序(异常处理程序)。

5、当异常处理程序完成处理后,根据引起异常的事件的类型,会发生以下三种情况的一种:

(1)处理程序将控制返回给当前指令Icurr,即当事件发生时正在执行的指令。
(2)处理程序将控制返回给Inext,即如果没有发生异常将会执行的下一条指令。
(3)处理程序终止被中断的程序。
8.1.1 异常处理
1、系统中可能的每种类型的异常都分配了一个唯一的非负整数的异常号。

异常号的分配:

(1)处理器的设计者:被除零、缺页、存储器访问违例、断点以及算数溢出。
(2)操作系统内核的设计者分配的:系统调用和来自意外不I/O设备的信号。
2异常号:到异常表中的索引

异常表基址寄存器:异常表的起始地址存放的位置。
3、异常与过程调用的异同:

(1)过程调用时,在跳转到处理器之前,处理器将返回地址压入栈中。然而,根据异常的类型,返回地址要么是当前指令,要么是下一条指令。
(2)处理器把一些额外的处理器状态压入栈里,在处理程序返回时,重新开始被中断的程序会需要这些状态。
(3)如果控制从一个用户程序转移到内核,那么所有这些项目都被压到内核栈中,而不是压到用户栈中。
(4)异常处理程序运行在内核模式下,意味着它们对所有的系统资源都有完全的访问权限。
8.1.2 异常的类别
1、异常的分类:中断、陷阱、故障和终止。

2、中断:异步发生,是来自处理器外部的I/O设备的信号的结果。

(1)硬件异常中断处理程序通常称为中断处理程序。
(2)异步异常是有处理器外部的I/O设备中的时间产生的,同步异常是执行一条指令的直接产物。
(3)陷阱、故障、终止时同步发生的,是执行当前指令的结果,我们把这类指令叫做故障指令。
3、陷阱和系统调用

(1)陷阱最重要的用途是在用户程序和内核之间提供一个像过程一样的接口,叫做系统调用。
(2)普通的函数运行在用户模式中,用户模式限制了函数可以执行的指令的类型,而且它们只能访问与调用函数相同的栈。系统调用运行在内核模式中,内核模式允许系统调用执行指令,并访问定义在内核中的栈。
4、故障:是由错误情况引起的。

例如:abort例程会终止引起故障的应用程序。 根据故障是否能够被修复,故障处理程序要么重新执行引起故障的指令,要么终止。
例如:缺页故障。
5、终止:是不可恢复的致命错误造成的结果,通常是一些硬件错误。终止处理程序从不将控制返回给应用程序。

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

进程:一个执行中的程序的实例。
上下文是由程序正确运行所需要的状态组成的,这个状态包括存放在存储器中的程序的代码和数据,它的栈、通用目的寄存器的内容、程序计数器、环境变量以及打开文件描述符的集合。
2、进程提供给应用程序的关键抽象:

一个独立的逻辑控制流,独占地使用处理器;
一个私有的地址空间,独占地使用存储器系统。
8.2.1 逻辑控制流
1、程序计数器:唯一的对应于包含在程序的可执行目标文件中的指令,或者是包含在运行时动态链接到程序的共享对象中的指令。这个PC值的序列叫做逻辑控制流,简称逻辑流。

8.2.2 并发流
1、并发流:一个逻辑流的执行在时间上与另一个流重叠。

并发:多个流并发地执行的一般现象。
多任务:一个进程和其他进程轮流运行的概念。
时间片:一个进程执行它的控制流的一部分的每一时间段。
多任务也叫时间分片。

2、并行流:如果两个流并发的运行在不同的处理器核或者计算机上。

8.3 系统调用错误处理
错误处理包装函数:包装函数调用基本函数,检查错误,如果有任何问题就终止。

8.4 进程控制
8.4.1 获取进程ID
1、每个进程都有一个唯一的正数的进程ID。
2、getpid函数返回调用进程的PID,getppid函数返回它的父进程的PID。上面两个函数返回一个同类型为pid_t的整数值,在linux系统中,它在types.h中被定义为int。

8.4.2 创建和终止进程
1、进程总处于三种状态

(1)运行:进程要么在CPU上执行,要么在等待被执行且最终会被内核调度。
(2)停止:程序的执行被挂起,,且不会被调度。
(3)终止:进程用永远停止了。
终止原因:

(1)收到一个信号,默认行为是终止进程
(2)从主进程返回
(3)调用exit函数
2、父进程通过调用fork函数创建一个新的运行的子进程。

3、子进程和父进程的异同:

异:有不同的PID
同:用户级虚拟地址空间,包括:文本、数据和bss段、堆以及用户栈。任何打开文件描述符,子进程可以读写父进程中打开的任何文件。
4、fork函数: 因为父进程的PID总是非零的,返回值就提供一个明确的方法来分辨程序是在父进程还是在子进程中执行。

fork函数的特点:

(1)调用一次,返回两次
(2)并发执行
(3)相同的但是独立的地址空间
(4)共享文件
8.4.3 回收子进程
1、当父进程回收已终止的子进程时,内核将子进程的退出状态传递给父进程,然后抛弃已终止的进程。
一个终止了但还未被回收的进程称为僵死进程。

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

include <sys/types.h>
include <sys/wait.h>
pid_t waitpid(pid_t pid,int *status,int options);
//返回:若成功,返回子进程的PID;若WNOHANG,返回0;若其他错误,返回-1。
默认地,当option=0时,waitpid挂起调用进程的执行,直到它的等待集合中的一个子进程终止。

3、判定等待集合的成员

有参数pid来确定的:

(1)pid>0:等待集合是一个单独的子进程,进程ID等于pid。
(2)pid=-1:等待结合就是由父进程所有的子进程组成的。
4、修改默认行为

通过options设置:

(1)WNOHANG:默认行为是挂起调用进程。
(2)WUNTRACED:默认行为是只返回已终止的子进程。
(3)WNOHANG|WUNTRACED:立即返回,如果等待集合中没有任何子进程被停止或者已终止,那么返回值为0,或者返回值等于那个被停止或者已经终止的子进程的PID。
5、检查已回收子进程的退出状态

wait.h头文件定义了解释status参数的几个宏:

(1)WIFEXITED:如果子进程通过调用exit或者一个返回正常终止,就返回真;
(2)WEXITSTATUS:返回一个正常终止的子进程的退出状态。只有在WIFEXITED返回真时,才会定义这个状态。
6、错误条件

(1)若调用进程没有子进程,那么waitpid返回-1,并且设置errno为ECHILD;
(2)若waitpid函数被一个信号中断,那么返回-1,并设置errno为EINTR
7、wait函数

include <sys/types.h>
include <sys/wait.h>
pid_t wait(int *status);
//返回:若成功,返回子进程的PID;若错误,返回-1。
调用wait(&status)等价于调用waitpid(-1.&status,0)

8.4.4 让进程休眠

1、sleep函数:将进程挂起一段指定的时间

include
unsigned int sleep(unsigned int secs);
//返回:还要休眠的秒数
如果请求的时间量已经到了,返回0,否则返回还剩下的要休眠的秒数。
2、pause函数:让调用函数休眠,直到该进程收到一个信号。

include
int pause(void);
//返回:总是-1
8.4.5 加载并运行程序
1、execve函数:在当前进程的上下文中加载并运行一个新程序。

include
int execve(const char filename,const char argv[],const char *envp[]);
//返回:若成功,则不返回,若错误,返回-1
filename:可执行目标文件
argv:带参数列表
envp:环境变量列表

特点:execve调用一次从不返回

2、getenv函数:在环境数组中搜素字符串“name =VALUE”,若找到了,就返回一个指向value的指针,否则它就返回NULL。

include
char getenv(const char name);
//返回:存在,返回指向name的指针,若无匹配的,为NULL
3、注意:

execve函数在当前进程的上下文中加载并运行一个新的进程。它会覆盖当前进程的地址空间,并没有创建一个新的进程,新的进程仍然有相同的PID,并且继承了调用execve函数时已打开的所有文件描述符。
8.4.6 利用fork和execve运行程序
1、外壳是一个交互型的应用级程序,它代表用户运行其他程序。

2、外壳执行一系统的读/求值步骤,然后终止。读步骤读取来自用户的一个命令行,求值步骤解释命令行,并代表用户运行程序。

3、eval函数:对外壳命令行求值

4、parseline函数:解析外壳的一个输入

8.5 信号
底层的硬件异常是由内核异常处理程序处理的,正常情况下,对用户进程而言是不可见的。
其他信号对应于内核或者其他用户进程中较高层的软件事件。

8.5.1 信号术语
1、发送信号的两个不同步骤:

(1)发送信号:内核通过更新目的进程上下文中的某个状态,发送(递送)一个信号给目的进程。
(2)接收信号:信号处理程序捕获信号的基本思想。
发送信号的两个原因:

(1)内核监测到一个系统事件,比如被零除错误或者子进程终止。
(2)一个进程调用了kill函数,显式地要求内核发送一个信号给目的进程。一个进程可以发送信号给它自己。

2、待处理信号:一个只发出而没有被接收的信号

一个进程可以有选择性地阻塞接收某种信号。
待处理信号不会被接收,直到进程取消对这种信号的阻塞。
3、一个待处理信号最多只能被接受一次,pending位向量:维护着待处理信号集合,blocked向量:维护着被阻塞的信号集合。

学习进度条

代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)重要成长
目标5000行30篇400小时
第一周200/2002/220/20
第二周300/5002/418/38
第三周500/10003/722/60
第四周300/13002/930/90

参考资料

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

转载于:https://www.cnblogs.com/liuyiyang/p/6107405.html

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

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

相关文章

别让猴子跳回背上摘抄

1. 源源不断的猴子 管理者的贡献来自于他们的判断力与影响力&#xff0c;而非他们个人投入的时间长短与埋头苦干的程度。 他们掌控时间的方式&#xff0c;和那些非管理者对于时间管理的考虑大不相同——后者的贡献主要来自于时间与努力。 对于非管理者而言&#xff0c;时间管…

linux之学习linux系统相关的书籍

1.《鸟哥的Linux私房菜-基础学习篇》 2.《Linux Shell 脚本攻略》 3.《Unix环境高级编程》 4.《Linux系统编程》

16岁上大学,25岁博士毕业,她还是南大医学院最年轻的博导!

全世界只有3.14 % 的人关注了爆炸吧知识本文转自&#xff1a;募格学术魏嘉&#xff0c;16岁考上南大&#xff0c;25岁博士毕业&#xff0c;是南大医学院最年轻的博导&#xff0c;已在J Natl Cancer Inst等国际著名杂志上发表64篇SCI论文。在第24届“中国青年五四奖章”入围名单…

十年整理CAD精髓

为什么80%的码农都做不了架构师&#xff1f;>>> AUTOCAD使用心得之一 使用的三个基本方面&#xff1a;清晰、准确、高效 目前&#xff0c;公司的设计文件&#xff0c;特别是图纸&#xff0c;都是用AUTOCAD软件绘制的。但是&#xff0c;现在还有很多人对CAD并不是…

Oracle免客户端InstantClient安装使用

正常情况下&#xff0c;用PL/SQL等软件连接Oracle&#xff0c;需要安装Oracle客户端软件&#xff0c;一般安装oracle客户端差不多需要2G左右的硬盘空间&#xff0c;但如果我们仅仅是连接数据库进行查询和执行一些相应的语句而不进行相应开发&#xff0c;那么oracle客户端就显得…

使用这个库,让你的服务操作 Redis 速度飞起

点击上方蓝字关注 &#x1f446;&#x1f446;没领红包封面的可以在文末领取大多数人使用 Redis 作为远程缓存存储&#xff0c;因为它速度快。Redis6 通过消除不必要的网络往返&#xff0c;可以使其更快。服务器辅助的客户端缓存这个方法很简单。Redis6 会记录客户端请求的键值…

mysql bigint转string_无语了,直到今天,我才揪出MySQL磁盘消耗迅猛的“真凶”!...

作者&#xff1a;dbapower链接&#xff1a;https://blog.51cto.com/suifu/2135599背景Part1:写在最前当一张单表10亿数据量的表放在你面前&#xff0c;你将面临着什么&#xff1f;Part2:背景介绍为了提升数据库资源利用率&#xff0c;一个实例中&#xff0c;在不互相影响&#…

linux之sed命令详解

sed命令详解: sed是stream editor的简称,也就是流编辑器。它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到…

mysql导入sql脚本命令

2019独角兽企业重金招聘Python工程师标准>>> 使用mysql自带的命令行工具导入sql脚本如下&#xff1a; mysql -h localhost -u root -proot -v -Ddbname < dbname.sql 转载于:https://my.oschina.net/u/2450094/blog/795488

媒体层图形技术之AssetsLibrary 学习笔记

choudang的专栏转载自 http://m.blog.csdn.net/blog/choudang/28274519 1.ALAsset ALAsset类代表相册中的每个资源文件&#xff0c;可以通过它获取资源文件的相关信息还能修改和新建资源文件 Asset Properties – valueForProperty: (1.ALAssetPropertyType 资源的类型&…

jenkins构建触发器定时任务

接上篇Jenkins发布.Net项目到IIS前面说到了把项目部署到iis,那么这边有个问题就是这个部署的触发条件是手工还是需要自动的呢。我觉得这个的看具体的场景&#xff0c;假设团队人员比较多&#xff0c;不断的在提交代码到指定分支&#xff0c;如果是自动化的话&#xff0c; 那么基…

JavaScript基于对象编程

2019独角兽企业重金招聘Python工程师标准>>> JavaScript基于对象编程 1、JavaScript变量/函数声明在代码执行之前被解析&#xff0c;并且变量声明优先级高于函数声明。 代码片段&#xff1a; 1234567var flag test in window;if (!flag){ var te…

idae 安装的插件怎么删掉_X7 IE阻止我安装插件怎么办

为了在网页上表现多彩的多媒体内容&#xff0c;很多网站会要求我们装上相应的网页插件来实现。但IE的默认安全设置会阻止我们进行安装某些网页插件。可是如果不装的话&#xff0c;网页很多媒体的内容就会显示不出来。怎么办呢&#xff1f;其实我们可以调整IE的安全设定来解决。…

MongoDB基本管理命令

2019独角兽企业重金招聘Python工程师标准>>> MongoDB是一个NoSQL数据库系统&#xff1a;一个数据库可以包含多个集合&#xff08;Collection&#xff09;&#xff0c;每个集合对应于关系数据库中的表&#xff1b;而每个集合中可以存储一组由列标识的记录&#xff0c…

桥接模式下的手机-电脑-开发板连接

操作系统Ubuntu14.04 1.桥接方法参照上篇 2. a.手机与电脑的连接 sudo add-apt-repository ppa:nilarimogard/webupd8 $ sudo apt-get update $ sudo apt-get install ap-hotspot $ sudo ap-hotspot configure //这一步会检查ubuntu的网络和WIFI接口&#xff0c;确定后会提示你…

花季少女竟然有个三年级老公??!

1 不能直视咖啡了&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼2 不理外国人的后果&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 猫占鸡巢&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼4 律师有什么坏心思呢&#xff1f;&#xff08;素材…

linux之awk命令

1、awk解释 awk是linux环境下的一个命令行工具,但是由于awk强大的能力,我们可以为awk工具传递一个字符串,该字符串的内容类似一种编程语言的语法,我们可以称其为Awk语言我们一般使用awk来做什么,awk又适合做什么工作呢。由于awk天生提供对文件中文本分列进行处理,所以如…

dotnet-httpie 0.2.0 Released

dotnet-httpie 0.2.0 ReleasedIntrodotnet-httpie 是类 httpie 的一个调用 HTTP API 的小工具&#xff0c;可以帮助我们快速测试 API&#xff0c;语法和 httpie 基本一样。第一个版本发布之后&#xff0c;做了一些重构&#xff0c;使用 System.CommandLine 重写了对于 Option 的…