# 1.3 操作系统的运行环境 ## 一、处理器运行模式 ### 1.1 两种运行模式 现代CPU通常提供两种运行模式: #### 核心态(Kernel Mode,管态、内核态) - 运行操作系统程序 - 可以执行所有指令,包括特权指令 - 可以访问所有内存空间和硬件资源 - 可以修改程序状态字(PSW) #### 用户态(User Mode,目态) - 运行用户程序 - 只能执行非特权指令 - 只能访问用户空间内存 - 不能直接访问硬件资源 ### 1.2 特权指令与非特权指令 #### 特权指令 只允许在核心态执行的指令: - I/O指令 - 设置中断屏蔽指令 - 清内存指令 - 设置时钟指令 - 修改程序状态字指令 - 停机指令 #### 非特权指令 在用户态和核心态都可以执行的指令: - 算术运算指令 - 逻辑运算指令 - 数据传输指令 - 访管指令(系统调用指令) ### 1.3 状态转换 #### 用户态 → 核心态 触发条件: 1. **系统调用(访管指令)**:用户程序请求操作系统服务 2. **中断**:外部设备完成I/O操作 3. **异常**:程序执行过程中出现错误或特殊情况 - 地址越界 - 算术溢出 - 缺页 - 除数为0 #### 核心态 → 用户态 通过执行**特权指令**修改程序状态字(PSW),将状态位设置为用户态。 通常发生在: - 操作系统完成服务后返回用户程序 - 进程切换后执行用户程序 --- ## 二、中断与异常 ### 2.1 基本概念 #### 中断(Interrupt,外中断) 来自CPU执行指令**外部**的事件,与当前指令无关。 **来源**: - I/O设备完成操作 - 时钟中断 - 外部信号 **特点**: - 异步发生 - 与当前指令无关 - 可屏蔽(部分中断) #### 异常(Exception,内中断、陷入、Trap) 来自CPU执行指令**内部**的事件,与当前指令有关。 **来源**: - 地址越界 - 页故障(缺页) - 算术溢出 - 除数为0 - 非法指令 - 系统调用(自愿陷入) **特点**: - 同步发生 - 与当前指令有关 - 不可屏蔽 ### 2.2 中断处理过程 1. **关中断**:保护现场期间不允许中断 2. **保存断点**:将程序计数器(PC)内容保存到堆栈或特定寄存器 3. **引出中断服务程序**:根据中断源找到对应的中断服务程序入口 4. **保存现场和屏蔽字**:保存通用寄存器、状态寄存器等 5. **开中断**:允许更高级中断响应 6. **执行中断服务程序**:处理中断 7. **关中断**:恢复现场期间不允许中断 8. **恢复现场和屏蔽字**:恢复寄存器内容 9. **开中断、中断返回**:返回被中断的程序继续执行 ### 2.3 中断向量表 **中断向量**:中断服务程序的入口地址 **中断向量表**:存储所有中断向量的表格 **作用**:根据中断类型号快速找到对应的中断服务程序 ### 2.4 多重中断 **定义**:CPU正在处理某个中断时,又发生了新的中断请求。 **处理方式**: - **中断屏蔽**:通过设置中断屏蔽字,禁止某些中断的响应 - **中断优先级**:高优先级中断可以打断低优先级中断的处理 --- ## 三、系统调用 ### 3.1 系统调用的概念 **系统调用**是操作系统提供给用户程序请求操作系统服务的接口,是用户程序与操作系统之间的桥梁。 **作用**: - 用户程序通过系统调用请求OS服务 - OS通过系统调用接口为用户程序提供服务 - 保护系统资源,防止用户程序直接操作硬件 ### 3.2 系统调用与库函数的区别 | 特性 | 系统调用 | 库函数 | |-----|---------|--------| | 实现 | 操作系统内核 | 编程语言或库提供 | | 执行 | 需要切换到核心态 | 在用户态执行 | | 开销 | 大(需要状态切换) | 小 | | 功能 | 底层服务 | 可能封装系统调用或纯计算 | | 可移植性 | 依赖具体OS | 较好 | ### 3.3 系统调用的类型 #### 进程控制 - 创建进程(fork) - 终止进程(exit) - 等待子进程(wait) - 执行程序(exec) #### 文件管理 - 创建文件(create) - 打开文件(open) - 读文件(read) - 写文件(write) - 关闭文件(close) #### 设备管理 - 请求设备(request) - 释放设备(release) - 读设备(read) - 写设备(write) #### 信息维护 - 获取时间(get time) - 设置时间(set time) - 获取进程属性(get process attributes) #### 通信 - 创建管道(pipe) - 发送消息(send) - 接收消息(receive) ### 3.4 系统调用的执行过程 1. **传递参数**:将系统调用号和参数传递给OS 2. **执行访管指令(Trap)**:从用户态切换到核心态 3. **确定系统调用类型**:根据系统调用号查找系统调用表 4. **执行系统调用服务程序**:在核心态执行相应服务 5. **返回用户态**:将结果返回给用户程序 --- ## 四、存储器的层次结构 ### 4.1 层次结构 ``` 寄存器 ↓(速度递减,容量递增,成本递减) 高速缓存(Cache) ↓ 主存储器(内存) ↓ 磁盘存储器 ↓ 磁带、光盘 ``` ### 4.2 程序的装入与链接 #### 地址空间 - **逻辑地址(虚拟地址)**:程序中使用的地址 - **物理地址**:内存中实际的地址 #### 装入方式 1. **绝对装入**:编译时产生绝对地址,直接装入内存 2. **可重定位装入**:装入时进行地址重定位 3. **动态运行时装入**:执行时进行地址转换(需要MMU支持) #### 链接方式 1. **静态链接**:程序运行前链接成完整装入模块 2. **装入时动态链接**:装入内存时链接 3. **运行时动态链接**:执行时按需链接 --- ## 五、考研重点 1. **两种运行模式**:核心态与用户态的区别、状态转换 2. **特权指令与非特权指令** 3. **中断与异常**:概念、区别、处理过程 4. **系统调用**:概念、类型、执行过程 5. **中断向量表** 6. **多重中断与中断屏蔽** 7. **存储器层次结构** --- *下一节:1.4 操作系统体系结构*