深入理解计算机操作系统--读书笔记-第八章异常

该文章是我对深入理解计算机操作系统这本书的读书笔记

异常概念:异常就是控制流的突变,用来响应处理器状态中的某些变化,当处理器状态发生变化时,处理器正在执行某个当前指令,在处理器中状态编码为不同的位和信号,状态变化称之为事件,事件可能与当前指令有关如缺页,算术溢出,也可能无关定时器产生信号或者io请求

异常处理完成的三种情况

1)处理程序将控制返回给当前指令

2)处理程序将控制返回给下一条指令

3)处理程序终止被中断的程序

异常处理和过程调用的区别:

1)过程调用时,在跳转处理程序之前,处理器将返回地址压入栈中,然而异常根据类型,要么返回当前指令,要么返回下一条指令

2)处理器会把一些额外的状态压入栈里,在处理程序返回时,重新开始被中断的程序会需要这些状态

3)如果控制从用户转移到内核那么所有这些项目都会压到内核栈中,而不是压入用户栈中

4)异常处理运行在内核栈中,意味着所有资源都可见

异常的四种类型:

类别   原因       同步/异步  返回行为

中断  i/o信号  异步            下一条指令

陷阱  系统调用 同步             下一条指令

故障  潜在可恢复错误  同步  可能返回当前指令

终止  不可恢复错误      同步  不会返回

进程:进程的经典定义就是程序的一个实例,系统中的每个程序都是运行在某个进程的上下文中的,上下文是由程序正确运行所需的状态组成的。这个状态包括存放在存储器中的程序代码和数据,它的栈,通用目的寄存器的内容,程序计数器,环境变量以及打开文件描述符的集合

我们将关注进程提供给应用程序的的关键抽象

一个独立的逻辑控制流,他提供一个假象,好像我们程序独立占用使用处理器。

一个私有的地址空间,他提供一个假象,好像我们的程序独占地使用存储器系统

用户模式和内核模式

为了使操作系统内核提供一个无懈可击的的进程抽象,处理器必须提供一种机制,限制一个应用可以执行的指令以及他可以访问地址空间的范围,处理器通常是用某个控制寄存器中的一个模式位来提供这种功能的,该寄存器描述了当前进程享有的特权,当设置了位模式时,进程就运行在内核模式中,一个可以运行在内核模式中的进程可以执行指令集中的任何指令,并且可以访问存储器中的任何位置

用户必须间接的调用系统接口间接访问代码和内核程序。

时间: 2024-12-25 17:30:16

深入理解计算机操作系统--读书笔记-第八章异常的相关文章

关于委托自己的一些理解(作为读书笔记)

以前提到委托,总感觉不好理解,简单意义是上说委托可以理解为函数的指针,可以把一个方法作为一个参数带入到另一个方法中.本人理解,请大牛指 1.首先看一个简单的例子 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace DelegateDemo { public class Program { //声明一个猫叫,处理主人醒,老鼠跑 //public delegat

计算机操作系统学习笔记_1_操作系统概述

操作系统概述 一.操作系统的概念.特征.功能和提供的服务 1.操作系统的概念     操作系统是计算机系统中最重要.最基本的系统软件,操作系统位于硬件和用户程序之间.    对于用户来讲:它能向用户提供使用计算机的接口;    从资源管理角度来看:它能管理计算机软硬件资源,提高其利用率;    再者,利用虚拟机技术(如WMWare,VirtualBox,Java虚拟机等),扩展了计算机的功能和使用范围.     因此,操作系统的定义为:操作系统是控制和管理计算机软.硬件资源,以尽可能合理.高效的

Understanding Scroll Views 深入理解 scroll view 读书笔记

Understanding Scroll Views 深入理解 scroll view ?读书笔记 ? It may be hard to believe, but a?UIScrollView?isn't much different than a standard?UIView. Sure, the scroll view has a few more methods, but those methods are really just facades of existing UIView

深度理解java虚拟机读书笔记(二)HotSpot Java对象创建,内存布局以及访问方式

内存中对象的创建.对象的结构以及访问方式. 一.对象的创建 在语言层面上,对象的创建只不过是一个new关键字而已,那么在虚拟机中又是一个怎样的过程呢? (一)判断类是否加载.虚拟机遇到一条new指令的时候,首先会检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号代表的类是否被加载.解析并初始化.如果没有完成这个过程,则必须执行相应类的加载. (二)在堆上为对象分配空间.对象需要的空间大小在类加载完成后便能确定.之后便是在堆上为该对象分配固定大小的空间.分配的方式也有两种:

《深入理解Android2》读书笔记(七)

接上篇<深入理解Android2>读书笔记(六) 广播接受者 注册 ContextImpl @Override public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter) { return registerReceiver(receiver, filter, null, null); } @Override public Intent registerReceiver(BroadcastRece

《深入理解Android2》读书笔记(五)

接上篇<深入理解Android2>读书笔记(四) startActivity Am void run() throws RemoteException { try { printMessageForState(); mAm.setActivityController(this); mState = STATE_NORMAL; InputStreamReader converter = new InputStreamReader(System.in); BufferedReader in = n

《深入理解Android2》读书笔记(三)

接上篇<深入理解Android2>读书笔记(二) PackageManagerService PackageManagerService负责系统中Package的管理,应用程序的安装.卸载.信息查询等. 1.IPackageManager接口类中定义了服务端和客户端通信的业务函数,还定义了内部类Stub,该类从Binder派生并实现了IPackageManager接口. 2.PackageManagerService继承自IPackageManager.Stub类,由于Stub类从Binder

《深入理解Android2》读书笔记(四)

接上篇<深入理解Android2>读书笔记(三) ActivityManagerService(AMS) 1.AMS由ActivityManagerNative(AMN)类派生,并实现Watchdog.Monitor和BatteryStatsImpl.BatteryCallback接口.而AMN由Binder派生,实现了IActivityManager接口. 2.客户端使用ActivityManager类.由于AMS是系统核心服务,很多API不能开放供客户端使用,因此设计者没有让Activit

深入理解JAVA虚拟机--读书笔记

如上图,判断线段AB和线段CD相交. 分析:如果线段AB和线段CD相交,只能是图中的两种相交情况.可以用向量叉乘来判断.如果(向量AB叉乘向量AC)*(向量AB叉乘向量AD)<= 0 并且(向量CD叉乘向量CA)*(向量CD叉乘向量CB)<= 0,那么说明线段AB与线段CD相交. 设A(X1,Y1), B(X2, Y2), C(X3, Y3), D(X4, Y4),三角形ABC的面积为:2A =  = X1*Y2 + X3*Y1 + X2*Y3 - X3*Y2 - X1*Y3 - X2*Y1.