操作系统 第一、二章 操作系统概述
操作系统中的抽象概念
时间
多个任务不能同时使用同一个时分复用的部件,但每个任务在使用时都可以得到这个部件的全部,因此需要将时间合理地分配给它们。典型的时分复用的部件是处理器,它又包括中央处理器和协处理器。
空间
多个任务可以同时使用同一个空分复用的部件,但每个任务在使用时都无法得到这个部件的全部,因此需要将空间合理地分配给各个任务。典型的空分复用的部件是存储器,它又包括内存和外存。
原则 由需求决定。
设计 操作系统的高层次抽象描述,描述各个组件的逻辑功能。
实现 操作系统的低层次具体描述,描述各个组件的具体实施。
策略 操作系统中对资源管理的方法和政策。
机制 操作系统为实现策略使用的工具和手段。

图灵机模型
存储带TAPE
读写头HEAD
状态寄存器
控制规则表
通用图灵机
将任意图灵机及其输入作为输入的图灵机,它可以模拟任何图灵机的运行。
重要性
存储程序架构(冯・诺依曼模型)思想的原点。
存储的程序即为其它图灵机的状态描述与转换规则。
存储的数据即为其它图灵机所使用的数据。
计算机系统:硬件+软件
软件
主要包括系统软件和用户软件。在工程实现中,一般分主板固件、操作系统、中间件和应用程序四个主要部分。
硬件
包括运算器、控制器、存储器、输入设备和输出设备。
在工程实现中,一般分微处理器、存储器和输入输出设备三个主要部分,之间用系统总线连接。
指令执行的流程
取值 译码 执行 回写
数据在存储器中的表示
单字节直接存
多字节分大小端(大段正常)

汇编指令集合
算术运算数传输 处理串位控转移

8086段式内存管理
逻辑地址 程序中引用的16位地址,也叫偏移量或有效地址。
线性地址 经段式内存管理机制转换后,8086 CPU要实际访问的20位地址,也叫物理地址
地址生成算法 线性地址=(段寄存器值<<4)+逻辑地址
8086寻址
数据传送寻址 指令的操作数是数据时,查找数据的方法
控制转移寻址 指令的操作数是转移地址时,查找转移地址的方法
端口寻址 指令的操作数是一个端口时,查找端口地址的方法
寻址方法分类
寄存器寻址:数据位于一个寄存器内。
存储器寻址:数据位于一个存储器单元内。
立即数寻址:数据携带在指令内部。
输入输出设备
外设接口
数据寄存器 存放外设和主机间传送的数据
状态寄存器 保存外设或接口的状态信息
命令寄存器 保存CPU发给外设或接口的控制命令
信息交换
直接交换 外设总是准备好接受或发送数据,主机直接读写
查询(轮询) 在读写前查询外设是否准备好,主机再读写
中断 外设通过中断主动通知主机准备好,主机再读写
成组传送 由DMA控制器读写设备,CPU不干涉,性能最高。
问题一:什么情况下会产生这个需求?为什么?单道程序计算机有这个需求吗?多道程序计算机呢?
多道程序并发执行的环境中
-
单道程序计算机:无此需求,因无并发。
-
多道程序计算机:有强烈需求,以防止程序间干扰。
问题二:隔离策略由谁负责?隔离策略需要什么机制设计?策略由操作系统负责,还是由应用程序负责?软件机制有可能吗?硬件机制有可能吗?
-
策略由操作系统定义与管理。
-
机制由操作系统通过软件或硬件实现。
-
硬件机制提供更强、更底层的隔离保障,软件机制更灵活但可能被绕过。
-
可以实现,Java虚拟机以及WASM沙盒。
问题三:这些机制设计对应的实现被什么客观条件限制?
不能太慢 不能太贵
处理器特权级
用户模式 执行应用程序的模式,不允许直接访问系统的敏感资源。
内核模式 执行操作系统的模式,可直接执行敏感指令和访问敏感资源。
特权指令 能对敏感资源进行操作的指令,仅能在内核模式下执行
问题一 特权级可以通过什么机制互相切换?
方法一 中断机制
方法二 专用指令机制 问题二
用户程序使用什么方法调用操作系统?
使用上述两种机制之一。
之后陷入操作系统内核,执行被操作系统接管
相比8086,为何AMD64要切换到内核栈且多压栈了SS和RSP?
进入内核模式时,必须修改FLAGS/CS/RIP以关中断而且跳转到中断服务程序。我们可以把它们的原值保存在栈上。但此时的SS:RSP是指向用户空间的不可信的值,不能在内核模式对它进行操作
系统调用、中断和陷阱
系统调用
一种机制设计,允许应用程序通过受限的方法调用操作系统内核,向内核请求功能处理。
中断:不可预测 陷阱:可预测
操作系统的分类
批处理系统(提高CPU利用率 缺乏交互)
批处理系统:把计算任务批次整理,然后逐一执行。
分时系统(可以交互 但存在资源分配问题 且实现复杂)
批处理虽然效率高,但有个致命伤:用户无法干预。
分时系统:同时装入多个任务,每个任务分配一定的时间和空间运行
分时系统的核心是交互性,通过时间片轮转实现多用户同时在线。
实时系统
实时:为了确定性,必须准时,追求平均响应时间短
微内核系统
微内核:为了可靠性,把系统拆散,坏了能修,常用于高端实时系统。
代价:虽然系统更稳定(一个服务挂了不影响内核),但服务之间需要频繁通信(反复通信),导致性能下降。
操作系统结构演进:从简单到灵活的隔离逻辑
模式 保护域 OS角色(管理 协调) 资源调用
本质上是隔离机制从“无”到“有”、从“粗”到“细”、从“集中”到“分布”的过程
一、库结构(单核结构):无隔离的“合作模式”
特点是“无内核/用户模式区分”,所有程序都在同一个“保护域”里运行。
- 特点
无区分“无内核模式与用户模式区分
同域:所有应用程序以及内核都在同一个保护域。
资源可用:应用程序可以随时对任何资源做任何操作。
程序合作:应用程序间为合作关系,操作系统的角色偏重协调而非管理
- 代价:一错全崩
二、宏内核结构(通用设备):首次引入“保护域”
到了桌面电脑、必须防止程序间互相干扰。于是出现了宏内核结构,区分用户和内核
- 特点
有区分。
每个应用程序在不同域。
内核的所有功能位于同一个保护域。
应用程序必须请求内核完成敏感资源操作。
应用程序间为合作或竞争关系,操作系统的协调和管理并重
- 优点:程序间互相隔离,一个程序崩溃不会直接影响其他程序(比如浏览器崩溃不会让Word也崩溃)。
- 缺点:但内核有bug会挂掉。
三、微内核结构 把宏内核中的部分程序拆为守护进程
宏内核内核东西太多,崩了完蛋,拆点功能出来,变成用户态的“守护进程”。
- 隔离升级:内核只保留最基础的功能,其他功能拆为“服务进程”
有区分,每个应用程序在不同的保护域。
内核除基本功能外,其它功能拆解为守护进程。
应用程序必须请求守护进程中的策略分配敏感资源。
- 代价:程序间通信会增加开销,但换来的是极高的可靠性和灵活性。
四、外核结构:暴露硬件资源给应用程序
有些场景(如高性能计算、实时系统)对性能要求极高,连微内核的“服务进程通信”开销都嫌大。外核结构的思路更激进:内核只负责“分配硬件资源”,具体怎么用,交给应用程序自己决定。
- 去抽象化:传统内核会把硬件“抽象”成统一的接口,外核直接把硬件“暴露”给应用程序。比如,应用程序可以直接操作硬盘的扇区,不需要经过文件系统的抽象层。
有区分,每个应用程序在不同的保护域。
内核仅负责硬件资源分配与管理功能。
应用程序必须自行分配到的硬件资源完成功能。
去抽象化 将硬件资源直接暴露给应用程序以获得最大性能增益。
五、其他结构:虚拟机与多内核的“扩展”
- 虚拟机结构:本质是“用软件模拟硬件”,每台虚拟机跑自己的操作系统。隔离性最强(不同虚拟机完全独立),但开销也大(需要模拟硬件)。
- 多内核结构:每个核心跑一个内核实例,内核间通过通信协作。
总结:操作系统结构的选择,是“隔离性”与“性能/复杂度”的权衡
- 库结构:无隔离,适合简单设备(性能最高,可靠性最低)。
- 宏内核:基础隔离,适合通用设备(平衡性能与可靠性)。
- 微内核:细粒度隔离,适合高可靠场景(可靠性最高,性能稍低)。
- 外核:极致性能,适合特定高性能场景(灵活性最高,开发难度最大)。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐



所有评论(0)