从处理器家店开始,程序计数器会设置一个代码执行的序列,当执行完代码k之后执行代码K+1则称为控制转移,这样的控制转移则称作处理器的控制流。其中控制流有两种,一种为平滑的控制流,即没两行代码都是在存储器中相邻的,另外一种称为突变的控制流,也就是执行的代码不相邻。现代操作系统正是通过这种控制流突变实现系统的并发,我们也称这种控制流突变为异常控制流。异常控制流体现在系统的各个层次。
在硬件层次
通常是通过处理器中的事件来触发控制流的突变,当这种异常发生之后通常是通过专门的异常处理程序进行处理。操作系统维护着一张异常表,内容为异常号和异常处理程序的对应关系,系统正是根据异常发生时的异常号根据异常表来寻找对应的异常处理程序的。
通常异常分为4种:中断,陷阱,故障,终止。在这四种异常中中断是异步发生的,通常是由系统外部的I/O设备向处理器的中断引脚发出的中断信号引起的,当发生中断时系统通常由当前处理程序直接跳转致异常处理程序,当从中断处理程序返回之后系统从中断代码的下一条代码处继续执行。其余的三种异常都是同步的。陷阱是一种非常有意义的异常,陷阱是用户程序进行系统调用所必须的过程。通常用户的程序都工作在用户模式下,然而当进程需要进行磁盘读写之类的系统级的操作时便需要在内核模式下进行,也就是需要系统权限,这时,系统便进行一次系统调用,操作系统将当前进程的上下文信息压入内核栈中并陷入内核中进行系统调用,完成后返回用户模式并继续执行中断处的下一条代码。故障是一种可恢复的异常,比如存储器缺页时,系统运行异常处理程序将所缺页导入内存并返回刚才发生异常的代码出重新执行异常代码,若无法从故障中恢复系统也可以终止。最后一种异常也就是终止,当发生这种异常时进行直接终止。
操作系统层次
在这个层次操作系统提供了进程这个概念,这也是计算机科学中最成功的概念之一,所谓的进程就是执行中的程序实例,其中每个进程运行过程中系统各个寄存器的取值等信息组成了程序的运行状态描述,我们称之为进程的上下文。进程为程序提供了两个关键的抽象:独立的逻辑控制流,私有的地址空间,他为我们提供了一个假象,我们的程序独占地使用处理器与存储系统。每个程序在运行过程中程序计数器标记了系统运行的语句,也就是说指明了程序的控制流。通过将其保存,并指向另一程序的运行地址就可以实现运行程序的切换,同样在适当的时候也可以恢复到当前的状态以继续执行当前程序,这也就是操作系统中进程的抢占与挂起,它实现了控制流的切换,实现控制流的重叠也就是并发。但光解决控制流的问题并不能完全解决并发的问题,因为程序的很多信息都存储于存储器中,存储器的内容也应当随之改变,这也就是私有地址空间的方式。系统为每个进程提供了相同的地址空间结构,并且地址空间是相互独立的,有了这些概念结合上下文切换便能够有效的实现进程之间的切换实现并发。然而处理器的高速缓存才发生进程切换之后便不再有用了,也就是高速缓存的污染。
操作系统与应用程序接口处
在这个层面操作系统提供了很多进程控制的方式,利用这些进程控制方式能够有效的进行父进程子进程的操作,有效的控制进程的切换与并发。在这个层面上同样存在一种类似于硬件层面的异常方式,也就是一种软中断,我们称之为信号。利用信号能够实现类似于硬中断的功能,不过信号更加强大,他不仅能够利用现有的方式处理异常,而且能够自己编写处理异常的方式,更加的灵活实用,但是不同系统对于信号的返回方式处理是不同的,尤其是在处理read,wait,accept这样的慢速系统调用时应当格外小心,尽量编写可移植的信号处理方案。
应用层
在应用层,操作系统能够利用非本地跳转的方式来规避正常的调用返回规则,从一个函数分支直接跳转致另一个函数分支,其实现的结果就类似于异常处理中的throw与catch的应用。
在操作系统的各个层面都利用异常控制流来实现切换,支持并发的处理,要彻底的理解这些概念与具体的应用,还是具体的编写一些程序来验证效果比较好一些。
分享到:
相关推荐
5. **控制流**:通过if-elif-else语句进行条件判断,for和while循环实现重复执行,学会使用break和continue来控制循环流程。 6. **异常处理**:Python通过try-except语句来捕获和处理程序运行时可能出现的错误,...
初学者会学习如何声明变量、数据类型(如整型、浮点型、字符串和布尔型)、输入与输出操作,以及基本的控制流(如if-else语句、for循环和while循环)。 2. **字符串操作**:Python对字符串处理提供了丰富的内置函数...
### 操作系统学习笔记知识点详解 #### 一、操作系统的基本概念与特征 1. **概念**: - **定义**:操作系统(Operating System, OS)是控制和管理计算机硬件与软件资源的核心系统软件,它合理地组织计算机工作流程...
在Java中,声明变量、赋值、控制流(如if语句、for循环和while循环)以及函数的使用都是基础语法的一部分。 接着,深入学习面向对象编程(OOP)原理。封装、继承、多态是OOP的三大特性。封装确保数据的安全,继承...
它的“一次编写,到处运行”(Write Once, Run Anywhere, WORA)特性使其在不同操作系统上具有高度可移植性。 2. **Java环境搭建** 学习Java的第一步是安装Java Development Kit (JDK),它包含了编译、调试和运行...
任何操作系统上的JVM都可以运行相同的Java字节码,从而避免了针对不同平台编写不同代码的需要。 Java语言的另一特点是它的标准库(API)非常丰富。随着版本的更新,Java的标准库日益庞大,几乎覆盖了软件开发的各个...
这份"2022年Java学习笔记-Java课程配套案例.rar"压缩包文件显然是为了帮助学习者深入理解Java编程,通过实践案例来巩固理论知识。下面将详细探讨Java语言的一些核心知识点,并结合压缩包中的案例进行说明。 1. **...
在学习笔记中,第七章至第九章主要探讨了链接、异常控制流和虚拟存储器这三个主题,这些都是构建现代计算机系统的关键组成部分。 **第七章:链接** 链接是将编译后的目标代码片段合并成可执行程序的过程。这一章...
《良葛格 Java 学习笔记-JavaGossip全(v1+v2)》是一部集成了作者良葛格多年编程经验的学习资料,旨在帮助初学者和有经验的开发者深入理解和掌握Java这门强大的编程语言。这份笔记包含了JavaGossip的两个版本,v1和...
2. **平台独立性:** Java具有良好的跨平台特性,“一次编写,到处运行”,而C++程序依赖于特定的操作系统和硬件环境。 3. **异常处理:** Java有专门的异常处理机制,可以更加优雅地处理错误和异常情况;而C++中的...
基础知识部分包括Java语法,如变量、数据类型(包括基本类型和引用类型)、运算符、控制流(if语句、switch语句、for循环、while循环)、以及方法的定义和调用。此外,深入理解类和对象的概念,包括封装、继承和多态...
Matlab中的控制流结构包括顺序语句、循环语句(如`for`和`while`)、选择语句(如`if...else...`和`switch...case...`)以及分支语句。`continue`和`break`语句用于控制循环行为,`echo`语句用于在命令窗口显示或...
### 个人笔记--JAVA基础 #### 一、初识Java **1.1. Java语言是什么** Java是一种广泛使用的高级编程语言,由Sun Microsystems于1995年发布。它被设计为简单、面向对象、分布式、解释型、健壮、安全、与体系结构...
"免费Eclipse插件开发学习笔记-源代码1至24章.zip" 是一个压缩包,包含了从基础到进阶的Eclipse插件开发学习资料。 这个压缩包很可能是某个教程或书籍的配套资源,提供了24个章节的源代码示例,帮助读者逐步理解并...
{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的...
操作系统是计算机系统的核心软件,它管理硬件资源,提供服务给应用程序,并协调计算机系统的运行。在"操作系统笔记321"中,...深入学习这些知识点,有助于我们更好地理解和使用操作系统,以及进行系统级的编程和优化。
Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现为Oracle公司的一部分)于1995年发布。...Java学习笔记涵盖了这些核心知识点,通过深入学习和实践,你可以逐步掌握Java编程,并应用于实际项目开发中。
操作系统是计算机系统的核心组成部分,它管理着计算机的硬件资源,如中央处理器、存储器和输入输出设备,同时也控制着程序的执行,提供用户友好的界面,并为应用软件提供支持。操作系统是一种系统软件,根据其功能,...
- Unix 是一种多用户、多任务的操作系统,广泛应用于服务器领域。 - Unix 的历史和发展背景,以及其在现代IT基础设施中的重要性。 - **Unix 基础知识** - Unix 的基本概念,如文件系统结构、用户管理等。 - ...
5. **输入/输出**:Java的I/O流系统支持文件操作和网络通信,如FileReader、FileWriter、BufferedReader、BufferedWriter以及Socket、ServerSocket等类。 6. **字符串处理**:String类在Java中扮演重要角色,提供了...