【操作系统】第一章 计算机系统概述

第一章 计算机系统概述

1.1 操作系统的基本概念

1.1.1 操作系统的概念

操作系统的定义 :操作系统是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源分配,以提供给用户和其他软件方便的接口和环境的程序集合;它是计算机系统中最基本的系统软件

1.1.2 操作系统的功能和目标

  • 系统调用的目的是请求系统服务
  • 系统调用是操作系统提供给编程人员的接口

1.1.3 操作系统的的特征

  1. 并发:指两个或多个事件在同一时间间隔内发生
  2. 共享:指系统中的资源可供内存中多个并发执行的进程共同使用
    • 互斥共享方式:同一时间内只能有一个进程访问该资源。如打印机
    • 同时共享方式:允许多个进程访问同一资源,但在微观上,某一时刻只能有一个进程访问。如磁盘
  3. 虚拟:指将一个物理上的实体变为若干个逻辑上的对应物
  4. 异步:多道程序环境允许多个程序并发执行,但由于资源有限,进程的执行并不是一贯到底的,而是走走停停的,它以不可预知的速度向前推进
  • 并发共享是操作系统最基本的特征,二者互为存在条件

1.2 操作系统的发展历程

  1. 单道批处理系统

    缺点:CPU长时间处于空闲,利用率低

    单道批处理系统的缺点是占用大量内存空间 ❌

  2. 多道批处理系统

    特点:

    • 多道
    • 宏观上并行
    • 微观上串行

    当某道程序因为I/O操作暂停运行时,CPU便立刻转去运行另一道程序。这是通过中断机制实现的

    优点:CPU利用率高;系统吞吐量大

    缺点:无交互能力;用户相应的时间长

  3. 分时系统

    优点:能实现人机交互

    缺点:不能及时处理紧急问题

  4. 实时系统

    • 硬实时系统:如导弹发射系统
    • 软实时系统:如购票网站

    优点:能够优先处理紧急的、优先级高的事务

1.3 操作系统的运行机制

1.3.1 处理机的运行模式

  1. 内核程序与应用程序
    • 内核程序是操作系统的
    • 应用程序是用户自编的
  2. 特权指令与非特权指令
    • 特权指令只能运行在内核程序上。如内存清零指令、I/O指令、关中断指令
    • 应用程序只能使用非特权指令。如加法指令、减法指令
    • 在CPU设计和生产时就划分了特权指令和非特权指令
  3. 内核态(管态)与用户态(目态)
    • 内核态运行内核程序,可以执行特权指令
    • 用户态运行应用程序,只能执行非特权指令
    • CPU的程序状态字(PSW)寄存器用二进制位表示当前处于"用户态"/"内核态"
  4. 内核态、用户态的切换
    • 内核态--->用户态:执行一条特权指令,修改PSW的标志位为"用户态"。这个动作意味着操作系统主动让出CPU使用权
    • 用户态--->内核态:由"中断"引发,硬件自动完成状态切换过程。触发中断信号意味着操作系统重新夺回CPU的使用权

常见特权指令:

  1. 直接管理系统资源的指令:如设置时钟、启动/关闭硬件设备、切换进程/进程调度、设置中断、输入/输出指令等
  2. 系统状态修改指令:如修改中断向量表、切换CPU的运行模式
  3. 系统控制指令:如停机指令、重启指令等

常见非特权指令:

  1. 普通的数据处理指令:如加法指令、存数指令、寄存器清零指令
  2. 流程控制指令:转移指令
  3. 读操作指令
  4. 陷入指令/访管指令/trap指令

1.3.2 中断和异常

中断处理是操作系统必须提供的功能

  1. 中断的作用
    • 中断是操作系统重新夺回CPU的唯一途径
    • 中断会使CPU从用户态转换为内核态
    • 没用中断机制,应用程序将永远霸占CPU
  2. 中断的类型
    • 内中断(异常)
      • 与当前执行的指令有关,中断信号来源于CPU内部
      • 常见如程序的除数为0(终止)、地址越界(终止)、运算溢出(终止)、虚存系统的缺页(故障)及专门的陷入指令
      • 程序需要操作系统的服务时,会主动触发陷入指令(trap)。系统调用就是通过陷入指令实现的
    • 外中断(中断)
      • 与当前执行的指令无关,中断信号来源于CPU外部
      • 如I/O中断、时钟中断

CPU每执行完一条指令都需要检查外部是否有中断信号,如果有,则去处理中断

处理外部中断时,操作系统需要保存通用寄存器的内容

中断向量表是数组

中断处理需要保存程序状态字寄存器PSW

1.3.3 系统调用

  1. 什么是系统调用?
    系统调用是操作系统提供给应用程序(程序员)使用的接口。
    所有与共享资源有关的操作,必须通过系统调用向操作系统提出服务请求,由操作系统代为执行,并将处理结果返还应用程序
  2. 系统调用与库函数的区别
    库函数是对系统调用的进一步封装;有的库函数没用使用系统调用
  3. 系统调用的功能
    • 设备管理
    • 文件管理
    • 进程控制
    • 进程通信
    • 内存管理
  4. 系统调用的过程
    1. 传参
    2. 执行陷入指令/trap指令/访管指令
    3. 由操作系统内核程序处理系统调用请求
    4. 返回应用程序

注意:

  • 陷入指令是在用户态执行的,属于非特权指令;执行后立即引发一个内中断,使CPU进入内核态
  • 发出系统调用请求是在用户态,对系统调用的响应处理是在内核态下进行的

1.4 操作系统的体系结构

  1. 大内核与微内核

    • 大内核:又叫宏内核、单内核。将操作系统的的主要功能模块都作为系统内核,运行在核心态

      • 优点:性能高
      • 缺点:内核代码庞大,结构混乱,难以维护
      • Linux、UNIX
    • 微内核:只把最基本、与硬件关系最密切的功能保存在内核中

      • 基本功能:

        1. 进程管理
        2. 低级存储器管理
        3. 中断和陷入处理:捕获所发送的中断和陷入事件,并进行中断响应处理
      • 优点:

        1. 拓展性与灵活性:许多功能从内核中分离出来,需要拓展时,只需在相应的服务器中修改或新增功能,无需修改内核代码
        2. 可靠性和安全性
        3. 可移植性
        4. 分布式计算
      • 缺点:需要频繁的在用户态与内核态之间切换,性能低

      • Windows NT

  2. 分层结构

    • 将操作系统分为若干层,底层为硬件,顶层为用户接口,每层只能调用紧邻它的低一层的功能和服务

    • 优点:

      1. 便于系统调试和验证,从第1层开始自底向上的调试;
      2. 易于扩充和维护
    • 缺点:

      1. 合理定义各层比较困难,不够灵活
      2. 效率较差,操作系统每执行一个功能,需要自上而下的调用多层
  3. 模块化

    • 将操作系统按功能划分为多个模块,各模块之间相互协作。内核=主模块+可加载内核模块
    • 优点:
      1. 提高了操作系统设计的正确性、可理解性和可维护性
      2. 增强了操作系统的可适应性
      3. 加速了开发过程
    • 缺点:
      1. 模块之间的接口规定很难满足对接口的实际需求
      2. 各模块相互依赖,难以调试和验证
    • 衡量模块独立性好坏:高内聚、低耦合
  4. 外核

    • 操作系统由内核、外核两部分组成。内核负责进程调度、进程通信等功能;外核负责为用户进程分配未经抽象的硬件资源,由外核负责保证资源使用安全
    • 未经抽象的硬件资源:未经虚拟映射的、直接的硬件物理资源,如内存、外存
    • 优点:
      1. 减少了虚拟硬件资源的"映射层",提升效率
      2. 直接给用户进程分配"不虚拟、不抽象"的硬件资源,使用户进程可以更灵活的使用硬件资源
    • 缺点:
      1. 降低了系统的一致性
      2. 使系统更加复杂

1.5 操作系统的引导

引导过程:

  1. 激活CPU,读取ROM中的root指令,将指令寄存器置为BIOS的第一条指令,即开始执行BIOS
  2. 硬件自检。BIOS在内存最开始的空间中创建中断向量表,以实现通电自检(POST)
  3. 加载带有操作系统的磁盘。
  4. 加载主引导记录(MBR)。主引导记录告诉CPU去硬盘的哪个主分区寻找操作系统
  5. 扫描硬盘分区,加载硬盘活动分区。MBR包含硬盘分区表,硬盘分区表以特定标识符区分活动分区和非活动分区
  6. 加载分区引导记录(PBR)。读取活动分区的第一个扇区,这个扇区称为分区引导记录(PBR),其作用是寻找并激活硬盘根目录下用于引导操作系统的程序,即启动管理器
  7. 加载启动管理器
  8. 加载操作系统

1.6 虚拟机

两类虚拟机管理程序 VMM:

  1. 第一类VMM直接运行在硬件之上,管理硬件资源。只有VMM运行在内核态,虚拟操作系统运行在用户态,当其需要执行特权指令时,由VMM截获该行为,并作出相应处理
  2. 第二类VMM运行在宿主操作系统上,由宿主操作系统分配并管理硬件资源,常见如VMWare
第一类VMM 第二类VMM
对物理资源的控制权 直接运行在硬件之上,能直接控制和分配物理资源 运行在Host OS上,依赖于Host OS为其分配物理资源
资源分配方式 在安装Guest OS时,VMM要在原本的硬盘上自行分配存储空间,分配未经抽象的物理硬件 Guest OS拥有自己的虚拟硬盘,实际上是Host OS文件系统内的一个大文件,Guest OS分配到的是虚拟内存
性能 性能更好 性能更差,需要Host OS作为"中介"
可支持的虚拟机数量 更多,不需要和Host OS竞争资源 更少,Host OS本身也需要使用物理资源
虚拟机的可迁移性 更差 更好
运行模式 运行在最高特权级,可以执行最高特权的指令 部分运行在用户态、部分运行在内核态。Guest OS发出的系统调用会被VMM截获,并转换为VMM对Host OS的系统调用
相关推荐
何中应19 小时前
CentOS安装Nginx提示没找到
后端·centos·操作系统
小李独爱秋1 天前
你真的会用lsof吗?一个被低估的神器级指令(对比netstat & ss)
linux·运维·服务器·操作系统·apache·lsof
shark-chili1 天前
告别AI无效对话:资深工程师的提示词设计最佳实践
java·windows·python·算法·操作系统
_OP_CHEN1 天前
【Linux系统编程】(三十二)命名管道 FIFO 精讲:突破亲缘限制,实现任意进程间的 IPC 通信
linux·操作系统·进程·c/c++·fifo·进程间通信·命名管道
OpenCloudOS2 天前
别再折腾配置了!OpenCloudOS推出OpenClaw“极速版”脚本
开源·操作系统
柠檬丶抒情2 天前
Redox OS 终于能“自己编译自己”了:当 Rust 撞上微内核,最强套娃模式开启
rust·操作系统·redox os
_OP_CHEN2 天前
【Linux系统编程】(三十一)初识进程间通信 —— 管道与匿名管道,从原理到实战吃透经典 IPC
linux·操作系统·进程·c/c++·管道·进程间通信·匿名管道
haaaaaaarry2 天前
【操作系统】第二章 进程与线程(三)
算法·操作系统
Byte不洛3 天前
Linux 网络编程:UDP Socket 群聊模型的实现与细节分析
linux·网络·udp·操作系统·linux网络编程·socket编程