`
飘零羽
  • 浏览: 25671 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

操作系统学习笔记-异常控制流

阅读更多

    从处理器家店开始,程序计数器会设置一个代码执行的序列,当执行完代码k之后执行代码K+1则称为控制转移,这样的控制转移则称作处理器的控制流。其中控制流有两种,一种为平滑的控制流,即没两行代码都是在存储器中相邻的,另外一种称为突变的控制流,也就是执行的代码不相邻。现代操作系统正是通过这种控制流突变实现系统的并发,我们也称这种控制流突变为异常控制流。异常控制流体现在系统的各个层次。

在硬件层次

    通常是通过处理器中的事件来触发控制流的突变,当这种异常发生之后通常是通过专门的异常处理程序进行处理。操作系统维护着一张异常表,内容为异常号和异常处理程序的对应关系,系统正是根据异常发生时的异常号根据异常表来寻找对应的异常处理程序的。

    通常异常分为4种:中断,陷阱,故障,终止。在这四种异常中中断是异步发生的,通常是由系统外部的I/O设备向处理器的中断引脚发出的中断信号引起的,当发生中断时系统通常由当前处理程序直接跳转致异常处理程序,当从中断处理程序返回之后系统从中断代码的下一条代码处继续执行。其余的三种异常都是同步的。陷阱是一种非常有意义的异常,陷阱是用户程序进行系统调用所必须的过程。通常用户的程序都工作在用户模式下,然而当进程需要进行磁盘读写之类的系统级的操作时便需要在内核模式下进行,也就是需要系统权限,这时,系统便进行一次系统调用,操作系统将当前进程的上下文信息压入内核栈中并陷入内核中进行系统调用,完成后返回用户模式并继续执行中断处的下一条代码。故障是一种可恢复的异常,比如存储器缺页时,系统运行异常处理程序将所缺页导入内存并返回刚才发生异常的代码出重新执行异常代码,若无法从故障中恢复系统也可以终止。最后一种异常也就是终止,当发生这种异常时进行直接终止。

操作系统层次

    在这个层次操作系统提供了进程这个概念,这也是计算机科学中最成功的概念之一,所谓的进程就是执行中的程序实例,其中每个进程运行过程中系统各个寄存器的取值等信息组成了程序的运行状态描述,我们称之为进程的上下文。进程为程序提供了两个关键的抽象:独立的逻辑控制流,私有的地址空间,他为我们提供了一个假象,我们的程序独占地使用处理器与存储系统。每个程序在运行过程中程序计数器标记了系统运行的语句,也就是说指明了程序的控制流。通过将其保存,并指向另一程序的运行地址就可以实现运行程序的切换,同样在适当的时候也可以恢复到当前的状态以继续执行当前程序,这也就是操作系统中进程的抢占与挂起,它实现了控制流的切换,实现控制流的重叠也就是并发。但光解决控制流的问题并不能完全解决并发的问题,因为程序的很多信息都存储于存储器中,存储器的内容也应当随之改变,这也就是私有地址空间的方式。系统为每个进程提供了相同的地址空间结构,并且地址空间是相互独立的,有了这些概念结合上下文切换便能够有效的实现进程之间的切换实现并发。然而处理器的高速缓存才发生进程切换之后便不再有用了,也就是高速缓存的污染。

操作系统与应用程序接口处

    在这个层面操作系统提供了很多进程控制的方式,利用这些进程控制方式能够有效的进行父进程子进程的操作,有效的控制进程的切换与并发。在这个层面上同样存在一种类似于硬件层面的异常方式,也就是一种软中断,我们称之为信号。利用信号能够实现类似于硬中断的功能,不过信号更加强大,他不仅能够利用现有的方式处理异常,而且能够自己编写处理异常的方式,更加的灵活实用,但是不同系统对于信号的返回方式处理是不同的,尤其是在处理read,wait,accept这样的慢速系统调用时应当格外小心,尽量编写可移植的信号处理方案。

应用层

    在应用层,操作系统能够利用非本地跳转的方式来规避正常的调用返回规则,从一个函数分支直接跳转致另一个函数分支,其实现的结果就类似于异常处理中的throw与catch的应用。

    在操作系统的各个层面都利用异常控制流来实现切换,支持并发的处理,要彻底的理解这些概念与具体的应用,还是具体的编写一些程序来验证效果比较好一些。

分享到:
评论

相关推荐

    Java学习笔记-个人整理的

    {7.1}Java的文件系统管理}{103}{section.7.1} {7.2}回调模式与FileFilter}{104}{section.7.2} {7.3}\ttfamily RandomAccessFile}{106}{section.7.3} {7.4}基本类型数据序列化}{108}{section.7.4} {7.5}String的...

    java学习笔记 初学者必读

    4. 三•表达式和控制流 4-6 4.1. 变量和作用域 4-6 4.2. 操作符 4-7 4.3. 数字类型之间的转换 4-7 4.4. 强制类型转换 4-8 4.5. 转换的二种类型 4-8 4.6. 控制流 4-8 4.7. 循环语句 4-8 5. 四•数组 5-9 5.1. 声明...

    Java/JavaEE 学习笔记

    Java/JavaEE 学习笔记 作者在杰普学习时的学习笔记,是J2ee初学者必备手册,是大家学习J2EE开发的很好的参考笔记。 Java/JavaEE 学习笔记 内容目录: Unix 学习笔记..........7 一、Unix前言............7 二、...

    J2EE学习笔记(J2ee初学者必备手册)

    Unix 学习笔记7 一、Unix前言............7 二、Unix基础知识....7 三、Unix常用命令....8 四、 文件系统权限.21 五、软硬连接的区别..........................22 六、范例程序...........22 七、网络基本命令...26...

    自己动手写操作系统(含源代码).part2

    Woodhull的《操作系统:设计与实现》来学习操作系统的读者,本书尤其适合作为你的引路书籍,因为它翔实地介绍了初学者入门时所必需的知识积累,而这些知识在《操作系统:设计与实现》一书中是没有涉及的,笔者本人...

    自己动手写操作系统(含源代码).part1

    Woodhull的《操作系统:设计与实现》来学习操作系统的读者,本书尤其适合作为你的引路书籍,因为它翔实地介绍了初学者入门时所必需的知识积累,而这些知识在《操作系统:设计与实现》一书中是没有涉及的,笔者本人...

    J2EE学习笔记

    共享本人近几年学习工作总结文档。 J2EE学习笔录 2 第一章:JAVA的输入输出流 2 1.1:概述: 2 1.2:主要输入输出类 3 1.3例程 建立聊天室: 5 第二章:JAVA设计模式 18 2.1:创建型设计模式 19...14.1:LINUX操作系统 247

    Python中的异常处理相关语句基础学习笔记

    异常是指因为程序出现了错误而在正常控制流以外采取的行动,其分为两个阶段,第一阶段是引发异常的错误,当系统检测到错误并且意识到异常条件,解释器(也可以是程序员引发异常)会引发一个异常通知前段控制流有错误...

    Java并发编程(学习笔记).xmind

    用来控制同时访问某个特定资源的操作数量,或者同时执行某个指定操作的数量 管理者一组虚拟的许可。acquire获得许可(相当于P操作),release释放许可(相当于V操作) 应用场景 (1)二值信号...

    asp.net知识库

    VS2005 ASP.NET本地化学习笔记&感受 在自定义Server Control中捆绑JS文件 Step by Step 深度解析Asp.Net2.0中的Callback机制 使用 Web 标准生成 ASP.NET 2.0 Web 站点 ASP.NET 2.0基于SQLSERVER 2005的aspnetdb.mdf...

    深入理解计算机系统(英文版)

    本书的主要论题包括:数据表示、C程序的机器级表示、处理器结构,程序优化、存储器层次结构、链接、异常控制流、虚拟存储器和存储器管理、系统级I/O、网络编程和并发编程。书中所覆盖的内容主要是这些方面是如何影响...

    Java开发详解.zip

    000000_【课程介绍 —— 写在前面的话】_Java学习概述笔记.pdf 010101_【第1章:JAVA概述及开发环境搭建】_JAVA发展概述笔记.pdf 010102_【第1章:JAVA概述及开发环境搭建】_Java开发环境搭建笔记.pdf 010201_【第2...

    CSAPP(深入理解计算机系统)

    本书的主要论题包括:数据表示、C程序的机器级表示、处理器结构,程序优化、存储器层次结构、链接、异常控制流、虚拟存储器和存储器管理、系统级I/O、网络编程和并发编程。书中所覆盖的内容主要是这些方面是如何影响...

    汇编语言笔记 参考《汇编语言 第三版》王爽.zip

    - **调试挑战**:由于代码高度依赖具体的硬件状态,调试汇编程序可能非常困难,尤其是在处理复杂的控制流、数据依赖性和异常处理时。 6. **工具支持**: - **汇编器**:汇编语言源代码通过汇编器(assembler)...

Global site tag (gtag.js) - Google Analytics