《操作系统》计算机系统概述

操作系统的基本概念

操作系统的概念

  • 负责管理协调硬件、软件等计算机资源的工作
  • 操作系统为上层用户,应用程序提供简单易用的服务
  • 操作系统是一种系统软件

操作系统的特征

  • 并发和共享是最基本的两个性质
  • 并发和共享互为存在条件
    • 资源共享是以程序的并发为条件的,若系统不允许程序并发执行,则自然不存在资源共享问题
    • 若系统不能对资源共享实施有效的管理,则必将影响到程序的并发执行,甚至根本无法并发执行
  • 没有并发和共享就谈不上虚拟和异步

并发

  • 并发指两个或多个事件在同一时间间隔内发生

  • 并行:系统具有同时进行运算或操作的特性(同时刻)

    • 可并行的有【处理机与设备】【处理机与通道】【设备与设备】
    • 不可并行的有【进程与进程】
    • 真正实现并行的为多核处理机

同一时间间隔(并发)和同一时刻(并行)的区别:

  • 宏观上有多道程序同时进行,微观上这些程序依旧是分时交替执行的,操作系统的并发性正是分时得以实现的
  • 并行性则是具有同时进行运算或操作的特性,同一时刻能完成两种或两种以上的工作,需要硬件的支持

共享

共享通常指系统中的资源可供内存中多个并发执行的进程共同使用,拥有两种资源共享方式

  • 互斥共享方式

当进程A访问某个资源时,必须先提出请求,若此时该资源空闲,则系统将其分配给进程A使用,此后有其他进程也要访问该资源时,就必须等待。仅当进程A访问完并释放该资源后,才允许另一个进程对该资源进行访问。

临界资源(独占资源):

一段时间内只允许一个进程访问的资源

互斥共享要求一种资源在一段时间内(哪怕是很小的时间)只能满足一个请求,否则就会出现严重的问题

  • 同时访问方式

宏观上存在一些资源允许多个进程同时访问,微观上这些进程是交替地对该资源进行访问,即分时共享

虚拟

虚拟是指把一个物理上的实体变为若干逻辑上的对应物。

  • 时分复用技术,如处理器的分时共享
  • 空分复用技术,如虚拟存储器

异步

  • 程序异步性:多道程序环境允许多个程序并发执行,但由于资源有限,进程执行并非一贯到底,而是走走停停,以不可预知的速度向前推进

  • 异步性导致的问题:

异步性会使操作系统运行在一种随机的环境下,可能导致进程产生与时间有关的错误。然而在运行环境相同的情况下,操作系统就需要保证多次运行进程后得到的结果相同

操作系统的目标和功能

操作系统应具有以下功能来给多道程序提供良好的运行环境

  1. 处理机管理、存储器管理、设备管理和文件管理
  2. 需向用户提供接口以方便用户使用
  3. 可用于扩充机器来提供更方便的服务、更高的资源利用率

操作系统作为计算机系统资源的管理者

  • 处理机管理
    • 在多道程序环境下,处理机的分配和运行都以进程(线程)为主要单位
    • 主要功能
      • 进程控制
      • 进程同步
      • 进程通信
      • 死锁处理
      • 处理机调度
    • 处理机的管理可归结为对进程的管理,因此进程创建、撤销、管理、避免冲突、合理共享就是进程管理的主要任务
  • 存储器管理
    • 存储器管理用于给多道程序的运行提供良好环境,便于用户使用及提高内存利用率
    • 主要功能:
      • 内存分配与回收
      • 地址映射
      • 内存保护与共享
      • 内存扩充
  • 文件管理
    • 计算机的信息都是以文件的形式存在的
      • 文件存储空间的管理
      • 目录管理
      • 文件读写管理和保护
  • 设备管理
    • 主要任务是完成用户I/O请求,方便用户使用设备,提高设备利用率
    • 主要功能
      • 缓冲管理
      • 设备分配
      • 设备处理
      • 虚拟设备

操作系统作为用户与计算机硬件系统之间的接口

  • 用户使用接口
    • GUI用户界面接口
    • 命令接口
      • 联机命令接口:用户发送一次命令,系统执行一次,主要是交互性,适用于分时或实时系统
      • 脱机命令接口:用户一次性发送命令清单,系统按清单执行,无法中途干预,适用于批处理系统,可解决独占问题
  • 软件使用接口
    • 程序接口(系统调用)

操作系统用作扩充机器

  • 裸机:没有任何软件支持的计算机
  • 扩充机器/虚拟机:覆盖了软件的机器

操作系统发展历程

手工操作阶段

用户在计算机上的所有计算流程都要人工干预

缺点

  • 用户独占全机,资源利用率低
  • CPU等待手工操作,CPU利用不充分

单道批处理系统

定义

  • 程序封闭性,程序执行的结果只取决与进程本身,不受外界影响
  • 失去封闭性后,不同速度下的进程执行结果不同

特点

  • 自动性,顺利的情况下,同一磁带上的同一批作业能够自动逐个运行
  • 顺序性,磁带上的各道作业顺序地进入内存
  • 单道性,内存中仅有一道程序运行

缺点

  • 资源利用率低,吞吐量小

多道批处理系统

定义

  • 批处理:允许多个用户将若干作业提交给计算机系统集中处理
  • 多道性则是为了提高系统利用率和吞吐量

特点

  • 多道,共享性,宏观上并行,微观上串行
  • 引入多道后,系统失去封闭性和顺序性
  • 制约性,程序执行因为共享资源和协同所有产生了竞争,相互制约
  • 考虑竞争的公平性,程序断续执行

优点

  • 资源利用率高
  • 系统吞吐量大
  • CPU利用率高
  • IO设备利用率高

缺点

  • 用户响应时间长
  • 不提供人机交互能力(用户无法干预批处理作业)

分时操作系统

定义

  • 允许多个用户以交互的方式使用计算机的操作系统
  • 快速响应用户(分时系统产生原因)
  • 响应时间 = 时间片*用户
  • 进度调度通常采用抢占式的优先级优先

特点

  • 同时性
  • 交互性,用户能够方便进行人机对话
  • 独立性,多个用户可以彼此独立地进行操作
  • 及时性,用户请求能在很短的时间内响应

优点

  • 提供人机交互能力

缺点

  • 不能在规定的时间内做出处理

实时操作系统

定义

  • 在该操作系统下,计算机系统能够及时处理过程控制反馈的数据并给出响应

特点

  • 硬实时系统:必须在绝对严格的时间内完成处理(自动驾驶系统)
  • 软实时系统:能接受偶尔违反时间规定(订票系统)

优点

  • 安全可靠
  • 及时处理
  • 快速处理

网络操作系统和分布式计算机系统

特点

  • 分布性
  • 并行性

分布式计算机系统

特点

  • 网络中各种资源的关系
  • 网络中各计算机间的通信

操作系统结构

  • 分层结构
    • 特性
      • 内核分多层,每层可单向调用更低一层提供的接口
    • 优点
      • 便于调试和验证,自底向上逐层调试验证
      • 易扩充和维护,各层间调用接口清晰固定
    • 缺点
      • 仅可调用相邻低层,难以合理定义各层边界
      • 效率低,不可跨层调用,系统调用执行时间长
  • 模块化
    • 特性
      • 内核 = 主模块 + 可加载内核模块
      • 主模块只负责核心功能,如进程调度,内存管理
      • 可加载内核模块:可动态加载新模块到内核,无需重新编译整个内核
    • 优点
      • 模块间逻辑清晰易维护,确定模块间接口后即可多模块同时开发
      • 支持动态加载新内核模块(如:安装设备驱动程序),增强OS适应性
      • 任何模块都可以直接调用其他模块,无需采用消息传递进行通信,效率高
    • 缺点
      • 模块间的接口定义未必合理,实用
      • 模块间相互依赖,更难调试和验证
  • 宏内核
    • 特性
      • 所有的系统功能都放在内核里
    • 优点
      • 性能高,内核内部各种功能都可以直接相互调用
    • 缺点
      • 内核庞大功能复杂,难以维护
      • 大内核中某个功能模块出错,就可能导致整个系统崩溃
  • 微内核
    • 特性
      • 只把中断,原语,进程通信等最核心的功能放入内核,进程管理,文件管理,设备管理等功能以用户进程的形式运行在用户态
    • 优点
      • 内核小功能少,易于维护,内核可靠性高
      • 内核外的某个功能模块出错不会导致整个系统崩溃
    • 缺点
      • 性能低,需要频繁切换用户/核心态,用户态下的各功能模块不可直接互相调用,只能通过内核的消息传递来间接通信
  • 外核(exokernel)
    • 特性
      • 内核负责进程调度,进程通信等功能,外核负责为用户进程分配未经抽象的硬件资源,且由外核负责保证资源使用安全
    • 优点
      • 外核可直接给用户分配不虚拟,不抽象的硬件资源,使用户进程可以更灵活地使用硬件资源
      • 减少虚拟硬件资源的映射层,提升效率
    • 缺点
      • 降低系统的一致性
      • 使系统更加复杂

操作系统引导

  • 启动过程

    1. CPU加电,CS:IP指向FFFF0H
    2. 执行JMP指令跳转到BIOS
    3. 登记BIOS中断例程入口地址
    4. 硬件自检
    5. 进行操作系统引导
  • 引导流程

    1. CPU从一个特定主存地址开始,取指令,执行ROM中的引导程序
    2. 将磁盘的第一块主引导记录读入内存,执行磁盘引导程序,扫描分区表
    3. 从活动主区(主分区)读入分区引导记录,执行其中的程序
    4. 从根目录下找到完整的操作系统初始化程序并执行,完成开机的一系列操作
  • 加电启动过程中执行程序的过程

    • 自检程序
    • 引导装入程序/自举装入程序
      • 位于ROM,作为BIOS的组成部分
      • 用于启动具体的设备
    • 引导程序
      • 位于装有操作系统硬盘的活动分区的引导扇区的程序
      • 用于引导操作系统
    • 操作系统
      • 被装入RAM中

虚拟机

使用虚拟化技术,将一台物理机器虚化为多台虚拟机器VM,每个虚拟机器都可用于独立运行一个操作系统

第一类VMM(例:WSL) 第二类VMM(VMWare)
对物理资源的控制权 直接运行在硬件之上,能直接控制和分配物理资源 运行在Host OS之上,依赖于Host OS 为其分配物理资源
资源分配方式 安装Guest OS时,VMM要在原本的硬盘上自行分配存储空间,类似于外核的分配方式,分配未经抽象的物理硬件 Guest OS 拥有自己的虚拟磁盘,该盘实际上是Host OS文件系统的一个大文件,Guest OS分配到的内存是虚拟内存
性能 性能更好 性能更差,需要Host OS作为中介
可支持的虚拟机数量 更多,不需要和Host OS竞争资源,相同的硬件资源可以支持更多的虚拟机 更少,Host OS 本身需要使用物理资源,Host OS上运行的其他进程也需要物理资源
虚拟机的可迁移性 更差 更好,只需导出虚拟机镜像文件即可迁移到另一台Host OS上,商业化应用更广泛
运行模式 运行在最高特权级(Ring 0 )可以执行最高特权的指令 部分运行在用户态,部分运行在内核态,Guest OS发出的系统调用会被VMM截获,转化为VMM对Host OS的系统调用

操作系统运行的环境

处理器运行的机制

  • 程序运行原理
    • 高级语言编写代码,转换为机器指令
    • 程序运行过程就是CPU执行指令的过程
  • 两种程序
    • 内核程序
    • 应用程序
  • 两种指令
    • 特权指令:不允许用户直接使用的指令
      • 对I/O设备操作指令
      • 获取特殊寄存器的指令
      • 有关访问程序状态的指令
      • 置中断指令
      • 关中断指令
      • 清内存指令
      • 置时钟指令
    • 非特权指令:允许用户直接使用的指令,不能直接访问系统中的软硬件资源,只限于访问用户的地址空间
      • 访管/trap指令
  • 两种处理器状态
    • 核心态【管态】
      • 时钟管理相关指令【置时钟指令】
      • 中断机制相关的指令【时钟中断程序】
      • 原语相关的指令
      • 系统控制的数据结构与处理【进程调度程序】【进程切换】【缺页处理程序】【系统调用命令】
    • 用户态【目态】
      • 命令解释程序【属命令接口,面向用户】
      • 访管/Trap指令,跳转指令,压栈指令
      • 广义指令(系统调用)的调用
      • 外部中断,缺页
    • 改变处理器状态
      • 内核态$\to$用户态 : 发生在中断返回用户程序是,需要一条修改PSW(程序状态字)的特权命令
      • 用户态$\to$内核态 : 发生在中断时,通过硬件完成
      • 状态区分目的: 保护系统程序
  • 内核功能
    • 时钟管理:实现计时功能
    • 中断处理:负责实现中断机制
    • 设备管理:完成设备的请求和释放,以及设备启动等功能
    • 文件管理:完成文件的读、写、创建和释放等功能
    • 进程管理:完成进程的创建、撤销、阻塞及唤醒等功能
    • 进程通信:完成进程间的信息传递或信号传递等功能
    • 内存管理:完成内存的分配,回收及获取作业占用内存大小及地址等功能
    • 原语
      • 一种特殊的程序
      • 处于操作系统最底层,最接近硬件的部分
      • 运行具有原子性(只能一气呵成,不可中断)
      • 运行时间较短,调用频繁
  • 外中断和内中断
    • 异常(内中断)
      • 基本概念
        • 由CPU内部产生的意外事件
        • CPU执行一条命令时,由CPU在其内部检测到的,与正在执行指令相关的同步事件
        • 故障和自陷为异常
        • 终止异常和外中断属于硬件中断
      • 分类
        • 故障:在引起故障的指令启动之后、执行结束前被检测到的异常事件
          • 指令译码时,出现非法操作码
          • 取数据时,出现缺页或缺段
          • 除数为零
          • 地址越界
        • 自陷:也称陷阱或陷入,是预先安排的一种异常事件,如同预先设置好的陷阱一样
          • x86机器中,用于程序调试的断点设置和单步跟踪功能
          • 系统调用指令
          • 条件自陷指令
        • 终止:在执行指令的过程中发生了使计算机无法继续执行的硬件故障,程序无法执行,只能终止
          • 控制器出错
          • 存储器校验错
          • 调出中断服务程序来重启系统
      • 执行时间
        • CPU在执行指令时检查是否有异常产生
      • 不同点(与外中断)
        • 缺页或溢出等异常事件是特定指令在执行过程中产生的
        • 异常的检测由CPU自身完成,不需要外部某个信号通知CPU
    • 中断(外中断)
      • 基本概念
        • 由来自CPU外部的设备发出的中断请求(常用于输入输出)
        • 典型的由外部设备触发的,与当前正在执行的指令无关的异步事件
        • 外部I/O设备通过特定的中断请求信号线向CPU提出中断请求
        • CPU每执行一条指令就检查中断请求信号线,若检测到中断请求,则进入中断响应期
        • 外部中断都是一条指令执行完成后(中断周期)才被检测并处理的
      • 分类
        • 可屏蔽中断
          • 通过可屏蔽中断请求线INTR向CPU发出的中断请求
          • CPU可通过在中断控制器中设置相应的屏蔽字来屏蔽或不屏蔽它,被屏蔽的中断信号将不被送到CPU
        • 不可屏蔽中断
          • 通过不可屏蔽中断请求线NMI向CPU发出的中断请求
          • 通常为非常紧急的硬件故障
      • 举例
        • Cache缺失
        • I/O中断:键盘输入,打印机缺纸
        • 时钟中断
        • I/O中断请求
      • 执行时间
        • 每个指令周期末尾,CPU都会检查是否有外中断信号需要处理
      • 不同点(与内中断)
        • 不与任何指令相关联,也不阻止任何指令的完成
  • 系统调用(广义指令)
    • 定义
      • 操作系统对应用程序和程序员提供的接口
      • 系统调用需要触发Trap【也叫陷入/访管指令】
      • OS通过提供系统调用避免用户程序直接访问外部设备【应用程序通过】
    • 目的:请求系统服务
      • 与库函数区别
        • 库函数
          • 语言或应用的一部分,可以运行在用户空间中
          • 许多库函数都会使用系统调用来实现功能
          • 有的库函数没有使用系统调用
        • 系统调用
          • 是操作系统的一部分,是内核为用户提供的程序接口,运行在内核空间
          • 未使用系统调用的库函数,执行效率通常比系统调用的高【无需完成上下文切换和状态转换】
      • 功能分类
        • 设备管理:完成设备的请求或释放+设备启动
        • 文件管理:完成文件的读、写、创建、删除
        • 进程控制:完成进程的创建、撤销、阻塞、唤醒
        • 内存管理:完成内存的分配、回收、获取作业占用内存区大小及始址
      • 系统调用过程
        1. 传参
        2. 陷入指令/Trap/访管【执行系统调用】(发生在用户态)
        3. 由操作系统内核程序处理系统调用(发生在内核态)
        4. 返回应用程序