六. 运行机制
两种指令
- 指令:处理器(CPU)能够识别,执行的最基本命令。【即二进制机器指令】
Linux,Windows,MacOS的cmd命令框中的”指令“实质上是交互式命令接口。
- 特权指令:一些可以影响其他程序的指令。只能由”管理者“即操作系统内核使用。
- 非特权指令:应用程序使用的指令,如加法指令,减法指令等。
CPU设计出来时候就划分了两种指令,因此执行的之前可以判断出指令类型。
两种CPU状态
- 内核态(核心态,管态):此时运行的是内核程序,可以执行特权指令。
- 用户态(目态):此时运行的是应用程序,只能执行非特权指令。
CPU中存在标志CPU状态的寄存器:程序状态字寄存器(PSW),使用一个二进制位来表示CPU处于用户态还是内核态。
两种程序
- 应用程序:普通程序员写的程序。
- 内核程序:多个内核程序组成”操作系统内核“,简称”内核Kernel)“
内核:操作系统的核心部分(eg. Docker—>仅需要Linux内核),最接近硬件。操作系统最核心的功都在内核中,其他功能如图形化用户界面GUI则不在内核中。
- 状态切换:内核态—>用户态:执行特权指令—修改PSW位,操作系统让出CPU使用权。
用户态---->内核态:由”中断“信号引发,硬件自动完成变态过程。操作系统强行夺回CPU使用权。
凡是需要操作系统介入的地方,都会触发中断信号。
七. 中断和异常
中断的作用
“中断”:操作系统内核夺回CPU控制权的唯一途径。
如果没有"中断"机制,一旦应用程序上CPU运行,就会一直占用CPU。
中断类型
- 内中断:与当前执行的指令有关,中断信号来自CPU内部。【也称为”异常“,包括陷入(trap),故障(fault),终止(abort)】
- 例子一:试图在用户态执行特权指令
- 例子二:除法运算发现除数为零
- 例子三:应用程序请求内核服务,会执行特殊指令–陷入指令【不是特权指令】,引发内部中断。
- 外中断:与当前执行的指令无关,中断信号来自CPU外部。【狭义的"中断"】
- 时钟中断:时钟部件发来的中断信号
- I/O中断
中断机制基本原理
八. 系统调用
定义
系统调用是操作系统提供给程序(程序员/编程人员)使用的接口【可供应用程序调用的特殊函数】;应用程序通过系统调用请求获得操作系统内核服务。
系统调用与库函数
系统调用实现的功能
系统调用过程
- Step 1 传递寄存器参数
首先,向寄存器传递参数(≥1个),首个参数指明系统调用类型,如”fork“调用。
- Step 2 执行陷入指令 引发内中断信号。接着转入中断处理程序【内核程序】—即 系统调用入口程序。
- Step 3 系统调用入口程序 【假设使用了fork系统调用】
- **Step 4 **系统调用完成后,返回用户态继续执行原程序后续指令
- 总结
九. OS体系结构
- 原语:一种特殊程序,具有原子性。(即程序的运行不可被”中断“)
内核
- 大内核(宏内核/单内核):将操作系统主要功能模块都作为系统内核,运行在核心态。
应用程序请求内核服务需要2次CPU状态转换。Tip:CPU状态转换需要消耗时间,频繁转换会降低系统性能。
- 优点:高性能。
- 缺点:内核代码庞大,结构混乱,难以维护。某个功能模块出错,可能导致整个系统崩溃。
- 常见系统:Linux,Unix。
- 微内核:内核只保留最基本功能。
应用程序请求内核服务需要6次CPU状态转换。
利用进程管理,存储管理 :通过消息传递,指明想要调用的功能模块。
- 优点:内核功能少,结构清晰,便于维护,可靠性高。内核外的功能模块出错不会导致整个系统崩溃。
- 缺点:需要CPU频繁切换状态,性能低。
- 常见系统:Windows NT
分层结构
- 操作系统内核被分为多层,最底层是硬件,最高层是用户接口。每层只能调用更低一层提供的接口。
- 优点:1.便于调试,自底向上逐层调试验证。【本层只会使用低一层的功能】
- 利于扩充维护,各层接口清晰固定。【只需要层间接口固定不变即可扩充层次】
- 缺点:1. 仅仅可以调用相邻低层,难以定义各层的边界。【不同层的功能都需要被使用】
- 效率低,不可跨层调用,系统调用时间长
模块化
- 内核被分为多个模块,各模块相互协作。
内核 = 主模块(由进程管理,内存管理等模块组成) + 可加载内核模块(如驱动模块)
可加载模块动态加载新模块到内核,无需重新编译整个内核。【使内核具有可拓展性】
- 优点:模块间逻辑清晰易于维护,可以多模块同时开发。
支持动态加载新的内核模块,增强OS适应性。
** 各模块之间可以相互直接调用**,无需通信,效率高。 - 缺点:模块间接口定义不一定合理,实用。
模块间相互依赖,难以调试。
外核
- 内核:负责进程调度,进程通信等功能。
- 外核:负责为用户进程分配,回收未经抽象的硬件资源;保证资源使用安全。
外核**分配连续的地址空间**,便于用户随机访问【磁盘的磁头不需要来回跳转】,**提升了性能**。
未经抽象的硬件资源:即未经过虚拟化的硬件资源(内存空间,磁盘空间等)。
用户进程视角下连续的地址空间,实际上可能是分散存储的。
- 优点:
- 使得用户进程可以灵活使用硬件资源。
- 减少了虚拟硬件资源的”映射层“,提升效率。【不需要查页表,进行物理地址转换】
- 缺点:
- 降低了系统一致性。【可能存在一块物理地址被用于虚拟地址映射,同时又被外核使用分配给用户进程。需要实际分析使用情况】
- 使得操作系统更加复杂。
十. 系统引导
BIOS(Basic Inout / Output System):基本输入/输出系统。
相关的数据
磁盘数据
- 分区表:一个数据结构,指明了磁盘各个分区的空间大小和地址范围。
- C盘:作为磁盘的活动分区,安装操作系统。
C盘细分如图:
主存数据
RAM芯片区:易失性(断电丢失数据);ROM芯片区:不易失性。
- ROM引导程序:指示CPU将磁盘的主引导记录读入CPU(RAM区)。
接着CPU会执行主存中的磁盘引导程序 ----> 磁盘引导程序确定C盘位置,将C盘的引导记录PBR读入主存 ------->执行PBR程序----->查找启动管理器【通常存储在根目录】
---------> 读取启动管理程序进入主存------------> 执行启动管理程序--------->完成操作性系统初始化操作
系统引导过程总述
eg. Windows操作系统万丈的开机初始化程序在”根目录/Windows/Boot“路径下。
十一. 虚拟机
背景
- 传统计算机在一个物理机上只能运行一个操作系统,在其上运行多个应用程序。
- 不足:1. 若物理机器硬件资源强大,则会出现计算机资源利用不充分。
- 多个进程同时运行在一台物理机上,可能会出现资源冲突而相互影响造成安全隐患。
两类虚拟机第一类VMM,直接运行在硬件之上
- CPU按时间片划分,然后分配给各个虚拟机。磁盘,内存空间划分出来分配。
直接管理、分配硬件资源。
只有虚拟机管理程序运行在内核态,可以使用特权指令。【如果上层操作系统使用特权指令,会 被虚拟机管理程序捕获,然后进行转换,模拟出特权指令执行成功的现象】
- 第二类VMM,运行在宿主操作系统
- 参考上图
- 虚拟机管理程序将获得的虚拟资源再次划分,然后分配给各个虚拟机,比第一类虚拟机多了一层套接,因此性能更差。
- 两种虚拟机的比较