点击阅读:操作系统系列文章
1. 操作系统的运行机制
1.1 应用程序和内核程序
-
应用程序:用户平时直接使用的程序,如 QQ、微信等。
-
内核程序:负责管理计算机的硬件资源和提供基本的系统功能,如进程管理、内存管理、设备驱动等。是系统资源的管理者。
很多内核程序组成了 操作系统内核,简称 内核。内核是操作系统的核心部分,也是最接近硬件的部分。甚至可以说一个操作系统只需要内核就够了。
注:操作系统的功能未必都在内核中,如 GUI、shell 等。
1.2 特权指令和非特权指令
- 特权指令:只有操作系统内核或特权级别的程序才能执行的指令。这些指令影响重大。
- 非特权指令:普通用户程序可以执行的指令。
注:CPU在设计和生产时就划分了特权指令和非特权指令。
1.3 内核态和用户态
CPU 能判断出指令类型,但怎么区分此时正在运行的程序是应用程序还是内核程序?
CPU 的两种状态:
- 内核态:又称核心态、管态。此时正在运行的程序是内核程序,此时可以执行特权指令。
- 用户态:又称目态。此时正在运行的程序是用户程序,此时可以执行非特权指令。
注:程序状态寄存器 PSW,其中的一个二进制位表示 CPU 状态。
1.4 CPU 状态的切换
- 内核态 -> 用户态:执行一条特权指令,修改 PSW 的标志位为用户态,操作系统让出 CPU 的使用权。
- 用户态 -> 内核态:由中断引发,硬件自动完成变态过程,触发中断信号意味着操作系统将强行夺回 CPU 的使用权。
2. 中断和异常
2.1 中断的作用
中断是让操作系统内核夺回CPU使用权的唯一途径。
2.2 中断的类型
2.2.1 内中断
内中断:与当前执行的指令有关,中断信号来自于 CPU 的内部。若当前执行的指令是非法的,则会产生一个中断信号。如执行除法指令时,发现除数为0。
有时候应用程序想请求操作系统内核的服务,此时会执行一条特殊的指令——陷入指令(非特权指令),该指令会引发一个内部中断信号。系统调用就是通过陷入指令完成的。
2.2.2 外中断
外中断:与当前执行的指令无关,中断信号来源于CPU的外部。
- 时钟中断:由时钟部件发来的中断信号。时钟部件每隔一个时间片会给 CPU 发送一个时钟中断信号。
- I/O 中断:当输入输出完成时,向 CPU 发送中断信号。
2.3 中断机制的基本原理
不同的中断信号,需要不同的中断处理程序来处理。当 CPU 检测到中断信号后,会根据中断信号的类型去查询中断向量表,找到相应的中断处理程序在内存中的存放位置。
3. 系统调用
3.1 什么是系统调用?
系统调用是操作系统提供给应用程序(编程人员)使用的接口,应用程序可通过系统调用来请求获得操作系统内核的服务。
3.2 系统调用与库函数
- 操作系统:向上提供系统调用,使得上层程序能够请求内核的服务。
- 编程语言:向上提供库函数。有时会将系统调用封装成库函数,以隐藏系统调用的一些细节。
- 应用程序:可直接进行系统调用,也可以使用库函数。
注:有的库函数涉及系统调用,也有的不涉及系统调用。
3.3 系统调用按功能分类
- 设备管理:完成设备的 请求/释放/启动 等功能。
- 文件管理:完成文件的 读/写/创建/删除 等功能。
- 进程控制:完成进程的 创建/撤销/阻塞/唤醒 等功能。
- 进程通信:完成进程之间的 消息传递/信号传递 等功能。
- 内存管理:完成内存的 分配/回收 等功能。
注:凡是与共享资源有关的操作,都必须通过系统调用的方式向操作系统内核提出服务请求,由操作系统内核代为完成。这样可以保证系统的稳定性和安全性。
3.4 系统调用的过程
- 传递系统调用参数。
- 执行陷入指令(用户态)。
- 执行相应的内核程序处理系统调用(核心态)。
- 返回应用程序。
4. 操作系统引导(Boot)
开机的时候如何让操作系统运行起来?
主存包含 RAM 和 ROM
RAM 一般指内存。 ROM 里存的是 BIOS,其中就包含一个 ROM 引导程序,即自举程序。
操作系统引导过程:
- CPU从一个特定主存地址开始,取指令,执行ROM中的引导程序(先进行硬件自检,再开机)。
- 将磁盘的第一块——主引导记录读入内存,执行磁盘引导程序,扫描分区表。
- 从活动分区(又称主分区,即安装了操作系统的分区)读入分区引导记录,执行其中的程序。
- 从根目录下找到完整的操作系统初始化程序(即 启动管理器)并执行,完成“开机”的一系列动作。
点击阅读:操作系统系列文章