OS_run_vir
OS运行环境
补充:指令
CPU能识别执行的最基本命令
eg.加法指令就是让CPU进行加法运算
有的指令有很高的权限。
如内存清零,若用户程序可以执行,那么可以清除其他用户数据,很危险
两种指令:
- 特权指令: 不允许用户程序使用
- 如内存清零指令
- 非特权指令
两种处理状态: 用程序状态寄存器(PSW)中的某个标志位来标识当前处理器处于什么状态。如0为用户态,1为核心态
- 用户态(目态) 此时CPU只能执行非特权指令
- 核心态(管态) 特权指令、非特权指令都可以执行
两种程序:
- 内核程序: 操作系统的内核程序是系统管理者,运行在核心态,既可执行特权,又可执行非特权指令。
- 应用程序:为了保证系统能够安全运行,普通应用程序只能执行非特权指令,运行在用户态
问题:OS的那些功能应该由内核程序实现?
内核是计算机上配置的底层软件,是OS最核心,最基本的部分。
实现OS内核功能的那些程序就是内核程序。
OS内核
- 时钟管理: 实现计时功能
- 中断处理: 负责实现中断机制
- 原语:
- 特殊的程序
- 处于OS最底层,是最接近硬件的部分
- 这种程序的运行具有原子性 — 其运行只能一气呵成,不可中断
- 运行时间较短,调用频繁
以上是与硬件关联比较紧密的模块
有的OS不把下面这部分归为“内核功能”,不同OS,对内核功能划分可能不同
- 对系统资源进行管理的功能:
- 进程管理
- 存储器管理
- 设备管理
OS的体系结构:
- 大内核:
- 将OS的主要功能模块都作为系统内核,运行在核心态
- 优点: 高性能
- 缺点: 内核代码庞大,结构混乱,难以维护
- 微内核:
- 只把最基本的功能保留在内核
- 优点: 内核功能少,结构清晰,易维护
- 缺: 需要频繁地在核心态和用户态进行切换,性能低
类比:OS的体系结构问题和企业的管理问题很相似
内核是企业的管理层,负责重要工作,执行特权指令,普通员工执行非特权指令。用户态与核心态之间的切换类似于工作交接
大内核:企业初创时体量不大,管理层的人会负责大部分事情。优点是效率高;缺点是组织结构混乱,难以维护。
微内核:随着企业体量变大,管理层只负责最核心的工作。优点是结构清晰,方便维护;缺点是效率低。
中断和异常
-
中断机制的诞生
- 原始计算机单道顺序执行,效率低
- 发明OS(作为计算机的管理者),引入中断机制,实现多道程序并发执行
本质:发生中断意味着需要OS介入,开展管理工作,需要从用户态进入核心态
-
中断的概念和作用
- 当中断发生时,CPU立即进入核心态
- 当中断发生后,当前运行的进程暂停运行,并由OS内核对中断进行处理
- 对不同中断信号,会进行不同处理
由于OS管理工作需要使用特权指令,因此CPU要从用户态转入核心态。中断可以使CPU从用户态切换为核心态,使OS过得计算机控制权。
问题: 用户态和核心态切换是如何实现的?
从用户态 --> 核心态是通过中断实现的。并且中断是唯一途径。
核心态 --> 用户态,是通过执行一个特权指令,将程序状态字(PSW)的标志位设置为用户态。
-
中断的分类:
- 根据信号来源:
CPU内部与当前指令有关- 内中断(也叫异常、例外、陷入)
- 自愿中断 — 指令中断(系统调用时使用访管指令(又叫陷入指令、trap指令)
- 强迫中断
- 硬件故障 (缺页
- 软件中断 (整数除0
来自CPU外部
- 外中断
- 外设请求 (I/O操作完成发出的中断信号
- 人工干预 (用户强行终止一个进程
- 内中断(也叫异常、例外、陷入)
- 另一种分类:
- 内中断:
- 陷入(trap) 有意而为之的异常,如系统调用
- 故障(fault) 由错误条件引起的,可能被故障处理程序修复,如缺页
- 终止(abort) 不可恢复的致命错误造成的结果,终止处理程序不再将控制返回给引发终止的应用程序,如整数除0
- 外中断:
- I/O中断请求
- 人工干预
- 内中断:
- 根据信号来源:
-
外中断的处理过程
- 执行完每一个指令后,CPU都有检查当前是否有外部中断信号
- 若检测到外部中断信号,则需要保护被中断进程的CPU环境(如程序状态字PSW、程序计数器PC、各种通用寄存器)
- 根据中断信号类型转入相应的中断处理程序(核心态)
- 恢复原进程的CPU环境并退出中断,返回原进程继续往下执行