目录
3.1 内核态和用户态
CPU上会运行两种程序:一种是操作系统内核程序,一种是应用程序( 用户自编程序)。
CPU有两种状态,“内核态”和“用户态”
- 处于内核态时,说明此时正在运行的是内核程序,此时可以执行特权指令。
- 处于用户态时,说明此时正在运行的是应用程序,此时只能执行非特权指令。
特权指令:是指不允许用户直接使用的指令,如I/O指令、置中断指令、存取用于内存保护的寄存器、送程序状态字到PSW等的指令。
非特权指令:是指允许用户直接使用的指令,它不能直接访问系统中的软硬件资源,仅限于访问用户的地址空间,这也是为了防止用户程序对系统造成破坏。
用户态(又称目态)
核心态(又称管态、内核态)
大多数操作系统的内核包括4方面的内容:
- 时钟管理。需要硬件计数器保持时钟的运行。
- 中断机制。中断处理流程的中断隐指令步骤是硬件自动完成的。
- 原语。是指具有以下特点的不可打断的公共程序:①处于操作系统的最底层,是最接近硬件的部分。②这些程序的运行具有原子性,其操作只能一气呵成(出于系统安全性和便于管理考虑)③这些程序的运行时间都较短,而且调用频繁。
- 系统控制的数据结构及处理。常见操作有三种:进程管理、存储器管理、设备管理。
3.2 异常和中断
在合适的情况下,操作系统内核会把CPU的使用权主动让给应用程序(第二章进程管理相关内容)
中断是让操作系统内核夺回CPU使用权的唯一途径。
中断处理是操作系统必须提供的功能。
陷入指令(Traps),又叫做自陷指令或访管指令,出现在计算机操作系统中,用于实现在用户态下运行的进程调用操作系统内核程序,即当运行的用户进程或系统实用进程欲请求操作系统内核为其服务时,可以安排执行一条陷入指令引起一次特殊异常。 计算机通过硬件中断机制完成由用户态到核心态的转换。
异常:包括程序的非法码操作、地址越界、算术溢出、虚拟存储器系统的缺页、陷入指令等。
浮点数下溢会被当做机器零处理,不属于异常。
外中断:包括I/O中断、时钟中断(表示一个固定的时间片已到,让CPU处理计时、启动定时运行的任务)
当中断和异常发生时,必须通过硬件实现将运行在用户态的CPU立即转入核心态。
中断(服务)程序本身可能是用户程序,也可以是低级中断(在管态运行)。但是进入中断的处理程序一定是操作系统程序。
检查中断信号:
- 内中断:CPU在执行指令时会检查是否有异常发生。
- 外中断:一条指令执行周期结束,CPU检查是否有外中断信号需要处理。
3.3 系统调用
应用程序通过系统调用请求操作系统的服务。而系统中的各种共享资源都由操作系统内核统一掌管,因此凡是与共享资源有关的操作(如存储分配、I/O操作、文件管理等),都必须通过系统调用的方式向操作系统内核提出服务请求,又操作系统内核代为完成,这样可以保证系统的稳定性和安全性,防止用户进行非法操作。
系统调用(按功能分类):
- 设备管理:完成设备的 请求/释放/启动 等功能。
- 文件管理:完成文件的 读/写/创建/删除 等功能。
- 进程控制:完成进程的 创建/撤销/阻塞/唤醒 等功能。
- 进程通信:完成进程之间的 消息传递/信号传递 等功能。
- 内存管理:完成内存的 分配/回收 等功能。
执行系统调用的过程包括如下主要操作:
- 传递系统调用参数
- 执行陷入(trap)指令
- 执行相应的服务程序
- 返回用户态
3.4补充:
通用操作系统(如分时多道批处理系统) 使用时间片轮转调度算法,用户运行程序不需要预先预定运行时间。
用户程序设计时,使用系统调用命令,该命令经过编译后,形成若干参数和陷入(trap)指令。
外部中断处理过程,PC值由中断隐指令自动保存,而通用寄存器内容由操作系统保存.中断向量表由操作系统初始化。