loading...

21操作系统概述

1.1 操作系统基本概念

操作系统:OperatingSystem,OS

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

1.1.1 操作系统功能

  1. 操作系统是系统资源的管理者:
  • 执行一个程序前需要将该程序放到内存中,才能被CPU处理
    • 逐层打开文件夹,找到QQ.exe这个程序(可执行文件)的存放位置
    • 需要把该程序相关数据放入内存
    • 对应的进程被处理机(CPU)处理
    • 需要将摄像头设备分配给进程
  • 操作系统提供处理机管理、存储器管理、文件管理和设备管理
  • 操作系统保证系统资源的安全、高效使用

  1. 操作系统向上层提供方便易用的服务
  • 封装思想:
    • 操作系统把一些丑陋的硬件功能封装成简单易用的服务,使用户能更方便地使用计算机,用户无需关心底层硬件的原理,只需要对操作系统发出命令即可
  • 操作系统提供给用户使用的功能:
    • GUI:
      • 图形化用户接口(Graphical UserInterface)用户可以使用形象的图形界面进行操作,而不再需要记忆复杂的命令、参数。
      • 例子:在Windows操作系统中,删除一个文件只需要把文件"拖拽"到回收站即可
    • 命令接口:
      • 联机命令接口实例(Windows系统):
        • 联机命令接口=交互式命令接口
        • 交互式命令的特点:用户说一句,系统跟着做一句
      • 脱机命令接口实例(Windows系统)
        • 脱机命令接口=批处理命令接口
        • 使用windows系统的搜索功能,搜索C盘中的 *.bat文件,用记事本任意打开一个
  • 操作系统提供给软件/程序员使用的功能:
    • 程序接口:
      • 即系统调用,可以在程序中进行系统调用来使用程序接口。普通用户不能直接使用程序接口,只能通过程序代码间接使用
      • 程序接口由一组系统调用组成
      • 系统调用类似于函数调用,是应用程序请求操作系统服务的唯一方式
        • 如:写C语言"Helloworld"程序时,在printf函数的底层就使用到了操作系统提供的显式相关的"系统调用"
        • 操作系统为编程人员提供的接口时程序接口/系统调用
          • 库函数是高级语言或应用程序的一部分,并不是所有库函数都使用了系统调用,未使用系统调用的库函数执行效率更高

      在有的教材中,系统调用=广义指令

命令接口、程序接口统称为用户接口


  1. 操作系统是最接近硬件的一层软件:
  • 操作系统需要实现对硬件机器的拓展
    • 没有任何软件支持的计算机成为裸机。在裸机上安装的操作系统,可以提供资源管理功能和方便用户的服务功能,将裸机改造成功能更强、使用更方便的机器
  • 通常把覆盖了软件的机器成为扩充机器,又称之为虚拟机
    • 操作系统对硬件机器的拓展:
      • 将CPU、内存、磁盘、显示器、键盘等硬件合理地组织起来,让各种硬件能够相互协调配合,实现更多更复杂的功能普通用户无需关心这些硬件在底层是怎么组织起来工作的,只需直接使用操作系统提供的接口即可

1.2 操作系统的特征

并发:

  • 指两个或多个事件在同一时间间隔内发生。这些事件宏观上是同时发生的,但微观上是交替发生的
    • 并行:指两个或多个事件在同一时刻同时发生
    • 并发不同于并行,任何时刻只有一个事件发生
  • 操作系统的并发性:
    • 计算机系统中"同时"运行着多个程序,这些程序宏观上看是同时运行着的,而微观上看是交替运行的

    操作系统就是伴随着"多道程序技术"而出现的。因此,操作系统和程序并发是一起诞生的

    • 单核CPU同一时刻只能执行一个程序,各个程序只能并发地执行
    • 多核CPU同一时刻可以同时执行多个程序,多个程序可以并行地执行

    比如Intel 的第八代i3 处理器就是4 核CPU,意味着可以并行地执行4个程序


共享:

  • 共享即资源共享,是指系统中的资源可供内存中多个并发执行的进程共同使用
  • 共享分类两种共享方式:
    • 互斥共享方式:
      • 系统中的某些资源,虽然可以提供给多个进程使用,但一个时间段内只允许一个进程访问该资源
      • 例如,使用QQ和微信视频。同一时间段内摄像头只能分配给其中一个进程
    • 同时共享方式:
      • 系统中的某些资源,允许一个时间段内由多个进程"同时"对它们进行访问
      • 例如,使用QQ发送文件A,同时使用微信发送文件B。宏观上看,两边都在同时读取并发送文件,说明两个进程都在访问硬盘资源,从中读取数据。微观上看,两个进程是交替着访问硬盘的
    • 所谓的"同时"往往是宏观上的,而在微观上,这些进程可能是交替地对该资源进行访问的(即分时共享)

并发、共享是操作系统两个最基本的特征,互为存在关系

  • 操作系统如果失去并发性,则系统中只有一个程序正在运行,则共享性失去存在的意义
  • 如果失去共享性,则QQ和微信不能同时访问硬盘资源,就无法实现同时发送文件,也就无法并发互为存在条件

虚拟:

  • 指把一个物理上的实体变为若干个逻辑上的对应物。物理实体(前者)是实际存在的,而逻辑上对应物(后者)是用户感受到的
  • 虚拟存储器技术,即使主存大小比较小,也可以让用户在使用过程中"感觉"主存大小很大

虚拟存储器技术也叫空分复用技术

  • 虚拟处理器技术,即使CPU是单核的,也可以呃让胡勇感觉有多个CPU在运行程序

虚拟处理器技术也叫时分复用技术。微观上处理机在各个微小的时间段内交替着为各个进程服务

如果失去了并发性,则一个时间段内系统中只需运行一道程序,那么就失去了实现虚拟性的意义了。因此,没有并发性,就谈不上虚拟性


异步:

  • 在多道程序环境下,允许多个程序并发执行,但由于资源有限,进程的执行不是一贯到底的,而是走走停停,以不可预知的速度向前推进,这就是进程的异步性
  • 由于并发运行的程序会争抢着使用系统资源,而系统中的资源有限,因此进程的执行不是一贯到底的,而是走走停停的,以不可预知的速度向前推进

如果失去了并发性,即系统只能串行地运行各个程序,那么每个程序的执行会一贯到底。只有系统拥有并发性,才有可能导致异步性

1.3 操作系统的发展过程

  1. 手工改操作阶段
  • 该阶段操作系统还未诞生,程序通过纸带机存储,计算机通过纸带机读入、输出数据
  • 虽然计算机运算速度快,但是时间主要花在数据输入、输出过程中
    img
  • 主要缺点:用户独占全机、人机速度矛盾导致资源利用率极低

  1. 批处理阶段
  • 单道批处理系统:

    • 引入脱机输入/输出技术(用外围机+磁带完成),并由监督程序负责控制作业的输入、输出
    • 相比手工改操作阶段,程序提前通过外围机存储在磁盘中,计算机直接从磁带中读取数据,磁带的读/写速度比纸带机快很多,是操作系统的雏形
      img
    • 主要优点:
      • 缓解了一定程度的人机速度矛盾,资源利用率有所提升
    • 主要缺点:
      • 内存中仅能有一道程序运行,只有该程序运行结束之后才能调入下一道程序。CPU有大量的时间是在空闲等待I/O完成。资源利用率依然很低
  • 多道批处理系统:

    • 在单道批处理系统上,计算机可以每次往内存中读入多道程序
      • 多道程序设计:
        • 相比单道程序的运行环境更加复杂,引入躲到程序后,程序的执行就失去了封闭性和顺序性
        • 多道程序功能能够实现的一个前提是系统具备中断功能
    • 操作系统正式诞生,出现并发技术,用于支持多道程序并发运行
      img
    • 主要优点:
      • 多道程序并发执行,共享计算机资源。资源利用率大幅提升,CPU和其他资源更能保持"忙碌"状态,系统吞吐量增大
    • 主要缺点:
      • 用户响应时间长,没有人机交互功能
      • 用户提交自己的作业之后就只能等待计算机处理完成,中间不能控制自己的作业执行
        • 例如:无法调试程序/无法在程序运行过程中输入一些参数

  1. 分时操作系统
  • 计算机以时间片为单位轮流为各个用户/作业服务,各个用户可通过终端与计算机进行交互
  • 主要优点:
    • 用户请求可以被即时响应,解决了人机交互问题。允许多个用户同时使用一台计算机,并且用户对计算机的操作相互独立,感受不到别人的存在
  • 主要缺点:
    • 不能优先处理一些紧急任务。操作系统对各个用户/作业都是完全公平的,循环地为每个用户/作业服务一个时间片,不区分任务的紧急性
  • 采用优先级+非抢占式调度算法,既可使重要作业/进程通过高优先级尽快获得系统响应,又可保证次要任务/进程在非抢占式调度下不会迟迟得不到系统响应,有利于改善系统整理的响应时间

  1. 实时操作系统
  • 在实时操作系统的控制下,计算机系统接收到外部信号后及时进行处理,并且要在严格的时限内处理完事件
  • 实时操作系统的主要特点是及时性和可靠性,及时性体现在快速处理和及时响应上
  • 主要优点:能够优先响应一些紧急任务,某些紧急任务不需时间片排队
    • 也由于为了保证快速处理高优先级任务,允许浪费一些系统资源,因此资源利用率会降低
  • 实时操作系统还分为以下几种:
    • 硬实时系统:
      • 必须在绝对严格的规定时间内完成处理
      • 如:导弹控制系统、自动驾驶系统
    • 软实时系统:
      • 能接受偶尔违反时间规定
      • 如:12306火车订票系统

1.3.1 拓展:其他操作系统

  • 网络操作系统:
    • 伴随着计算机网络的发展而诞生的,能把网络中各个计算机有机地结合起来,实现数据传送等功能,实现网络中各种资源的共享(如文件共享)和各台计算机之间的通信
    • 如:WindowsNT就是一种典型的网络操作系统,网站服务器就可以使用)
  • 分布式操作系统:
    • 主要特点是分布性和并行性。系统中的各台计算机地位相同,任何工作都可以分布在这些计算机上,由它们并行、协同完成这个任务。
  • 个人计算机操作系统:
    • 如WindowsXP、MacOS,方便个人使用

中国古代的操作系统:

  • 操作系统的设计思想早在古代的中国就被发明了
  • 皇帝=管理者=操作系统内核;小太监=CPU执行各种指令;大臣=普通应用程序
  • 皇帝与太监的互动相当于内核态;大臣与太监的互动相当于用户态
  • 太监在不同状态下,对接收到的特权指令与非特权指令有不同的处理方式
    img
  • 内中断
    img
  • 外中断
    img
  • 系统调用
    img

1.4 操作系统运行机制

应用程序:

  • 我们普通程序员写的程序就是"应用程序"

内核程序:

  • 实现操作系统功能的程序称之为内核程序
  • 操作系统内核由很多内核程序组成,简称为内核Kernel
    • 内核是操作系统最重要最核心的部分,也是最接近硬件的部分
    • 甚至可以说,一个操作系统只要有内核就够了
      • 如,Docker—>仅需Linux内核
    • 操作系统的功能未必都在内核中
      • 如,图形化用户界面GUI

特权指令:

  • 在CPU设计和生产的时候就划分了特权指令和非特权指令,因此CPU执行一条指令前就能判断出其类型
  • 应用程序只能使用"非特权指令"
    • 如:加法指令、减法指令等
  • 操作系统内核作为"管理者",有时会让CPU执行一些"特权指令",由内核程序去执行特权指令
    • 如:内存清零指令。这些指令影响重大,只允许"管理者"——即操作系统内核来使用

CPU 有两种状态:"内核态"和"用户态"

  • 处于内核态时,说明此时正在运行的是内核程序,此时可以执行特权指令
  • 处于用户态时,说明此时正在运行的是应用程序,此时只能执行非特权指令
  • CPU 中有一个寄存器叫程序状态字寄存器(PSW),其中有个二进制位,1表示"内核态",0表示"用户态"
    • 别名:内核态=核心态=管态;用户态=目态

1.4.1 CPU用户态、内核态切换

内核态 -> 用户态:

  • 执行一条特权指令
    • 修改PSW的标志位为"用户态",这个动作意味着操作系统将主动让出CPU使用权
  • 操作系统内核在让出CPU之前,会用一条特权指令把PSW 的标志位设置为"用户态"
  • CPU从核心态到用户态的转换由操作系统程序执行后完成的

用户态 -> 内核态:

  • 由"中断"引发,硬件自动完成变态过程。触发中断信号意味着操作系统将强行夺回CPU的使用权
    • 除了非法使用特权指令之外,还有很多事件会触发中断信号
    • 只要需要操作系统介入的地方,都会触发中断信号
  • CPU检测到中断信号后,会立即变为"核心态",并停止运行当前的应用程序,转而运行处理中断信号的内核程序

内核状态切换例子:

  • 刚开机时,CPU 为"内核态",操作系统内核程序先上CPU运行
  • 开机完成后,用户可以启动某个应用程序
  • 操作系统内核程序在合适的时候主动让出CPU,让该应用程序上CPU运行
  • 应用程序运行在"用户态"
  • 此时,一位猥琐黑客在应用程序中植入了一条特权指令,企图破坏系统...
  • CPU发现接下来要执行的这条指令是特权指令,但是自己又处于"用户态"
  • 这个非法事件会引发一个中断信号
  • "中断"使操作系统再次夺回CPU的控制权
  • 操作系统会对引发中断的事件进行处理,处理完了再把CPU使用权交给别的应用程序

1.5 中断和异常

中断的作用:

  • 在合适的情况下,操作系统内核会把CPU的使用权主动让给应用程序
  • "中断"会使CPU由用户态变为内核态,使操作系统重新夺回对CPU的控制权。"中断"是让操作系统内核夺回CPU使用权的唯一途径
  • 如果没有"中断"机制,那么一旦应用程序上CPU运行,CPU就会一直运行这个应用程

中断分为内中断、外中断

1.5.1 内中断

内中断:也叫异常、例外,与当前执行的指令有关,中断信号来源于CPU内部

  • 陷入、陷阱,trap:
    • 有时候应用程序想请求操作系统内核的服务,此时会执行一条陷入指令,是程序故意引发的中断
    • 陷入指令是一条特殊的指令,该指令会引发一个内部中断信号。但陷入指令不是特权指令,是CPU用户态执行的非特权指
    • 执行"陷入指令",意味着应用程序主动地将CPU控制权还给操作系统内核
    • 如:程序断点调试;系统调用;访管指令
  • 故障,fault:
    • 由错误条件引起的,可能被内核程序修复。内核程序修复故障后会把CPU使用权还给应用程序,让它继续执行下去
    • 如:整数除0;缺页、缺段故障;指令译码出现非法操作码;地址越界;算数溢出
      • 浮点数下溢是正常的算术归零操作,不属于异常,不发生中断
      • 浮点数上溢依据情况而定,计算机可能会发出中断,也可能按照IEEE754标准将浮点数设置为无穷大
  • 终止,abort:
    • 由致命错误引起,内核程序无法修复该错误,操作系统会通过中断夺回CPU的控制权。因此一般不再将CPU使用权还给引发终止的应用程序,而是直接终止该应用程序
    • 由于需要终止当前执行的指令,其断点位置不固定,根据终止异常类型所决定
    • 如:控制器出错;存储器校验错;总线错误

1.5.2 外中断

外中断:也被简称为中断,狭义上的中断就指外中断,广义上的中断包括内、外中断

  • 与当前执行的指令无关,中断信号来源于CPU外部
    img
  • 时钟中断:由时钟部件发来的中断信号
    • 时钟部件每隔一个时间片(如50ms)会给CPU发送一个时钟中断信号
    • CPU接收到时钟中断信号会切换为内核态,操作系统内核中断当前运行的程序,并决定接下来让另一个应用程序上CPU运行
  • I/O中断:由输入/输出设备发来的中断信号
    • 应用程序请求打印机等I/O设备的服务,操作系统仍处于用户态
    • 当I/O设备输入输出任务完成时,向CPU发送中断信号,告知CPU I/O操作已完成
    • CPU切换为内核态,执行处理相对应的I/O中断的内核程序

1.5.3 中断机制原理

异常和中断检测过程贯穿整个指令执行过程

  • 异常事件/内中断检测,CPU在整个指令执行过程中均进行
  • 中断请求/外中断检测,CPU在每条指令执行结束后,取下一条指令之前进行

不同的中断信号,需要用不同的中断处理程序来处理

  • 当CPU检测到中断信号后,会根据中断信号的类型去查询"中断向量表",以此来找到相应的中断处理程序在内存中的存放位置

    中断处理程序一定是内核程序,需要运行在"内核态"

进程上下文机制与/中异常断机制

CPU控制流:CPU所执行的指令地址序列

  • 正常控制流:顺序执行(PC+1)、跳转指令(条件/无条件转移指令)
  • 异常控制流:进程的上下文切换、异常和中断

进程上下文:

  • 进程的物理实体(代码和数据)和支持进程运行的环境
  • 进程上下文分为系统级上下文和用户级上下文
    • 系统级上下文包括进程标志信息、进程现场信息(当前程序执行过程的所有寄存器内数据)、进程控制信息、系统内核栈
    • 用户级上下文包括用户堆栈、用户数据块、用户程序块、共享地址空间
  • 进程的上下文切换正是进程发生了调度,CPU开始执行另一个进程的代码

1.5.4 外中断、内中断对比

程序性异常/软件中断:

  • 故障异常fault、自陷异常trap

硬件中断:

  • 终止异常abort、外中断
类别 原因 工作关系 返回
(外)中断,interrupt 来自I/O设备或其他硬件部件 异步 返回到下一条指令
陷入/自陷,trap 有意识安排的 同步 返回到下一条指令
故障,fault 可恢复的错误 同步 返回到当前指令
终止,abort 不可恢复的错误 同步 不会返回
  • 这里工作关系里提到同步、异步
    • 不同于总线控制的异步、同步(总线的传送过程是否提供统一的控制信号)
    • 这里的同步、异步具体指的是打断CPU信号来源于目前执行的指令流之内还是指令流之外

1.6 系统调用

系统调用:

  • 操作系统提供给应用程序(程序员/编程人员)使用的接口,可以理解为一种可供应用程序调用的特殊函数,应用程序可以通过系统调用来请求获得操作系统内核的服务
  • 系统调用类似于函数调用,但系统调用是比库函数更加底层的功能
    • 操作系统向上提供系统调用,使得上层程序能请求内核的服务
    • 编程语言向上提供库函数,有时会将系统调用封装成库函数,以隐藏系统调用的一些细节,使程序员编程更加方便
    • 普通应用程序可以进行系统调用,也可使用库函数。有的库函数涉及系统调用,有些不涉及
      • 不涉及系统调用的库函数:如"取绝对值"的函数
      • 涉及系统调用的库函数:如"创建一个新文件"的函数

如果两个进程可以随意地、并发地共享打印机资源

  • 两个进程并发运行,打印机设备交替地收到WPS 和Word 两个进程发来的打印请求,会导致两篇论文的内容混杂在一起了
  • 如果由操作系统内核对共享资源进行统一的管理,并向上提供"系统调用",用户进程想要使用打印机这种共享资源,只能通过系统调用向操作系统内核发出请求。内核会对各个请求进行协调处理,从而可以避免两篇论文内容混杂在一起打印

应用程序通过系统调用请求操作系统的服务。而系统中的各种共享资源都由操作系统内核统一掌管

  • 凡是与共享资源有关的操作(如存储分配、I/O操作、文件管等),都必须通过系统调用的方式向操作系统内核提出服务请求,由操作系统内核代为完成。这样可以保证系统的稳定性和安全性,防止用户进行非法操作
  • 系统调用按功能可分为:
    • 设备管理:完成设备的请求/释放/启动等功能
    • 文件管理:完成文件的读/写/创建/删除等功能
    • 进程控制:完成进程的创建/撤销/阻塞/唤醒等功能
    • 进程通信:完成进程之间的消息传递/信号传递等功能
    • 内存管理:完成内存的分配/回收等功能

补充:

  • 系统调用需要保存PSW和PC的值,一般过程调用秩序保存PC的值
  • 系统调用的被调用过程是操作系统中的程序,是系统级程序,必须运行在内核态
  • 一般过程的被调用程序与调用程序运行在同一个状态,可能是系统态,也可能是用户态

1.6.1 系统调用过程

img
应用程序想要执行系统调用:系统调用命令经过编译后形成若干参数指令和陷入指令

  • 应用程序正在执行过程CPU处于用户态,应用程序执行传参指令
  • 传参指令可能有多条,用于指明系统调用的类型以及其他参数
  • 参数传入到寄存器中,所有参数准备好后,应用程序执行陷入指令

内中断:

  • 陷入指令引发内中断,执行中断隐指令
  • CPU转为内核态,CPU转入执行相应的中断处理程序,即系统调用的入口程序

系统调用入口程序:

  • 系统调用入口程序也是一种中断处理程序,但不进行中断处理,只负责中断处理程序的跳转
  • 系统调用入口程序检查寄存器中的参数,根据参数判断用户需要哪种系统调用服务
  • CPU转入执行对应的系统调用处理程序

系统调用处理程序:

  • 系统调用处理程序完成中断处理,CPU转回用户态,返回主程序

img
总结系统调用过程:

  • 传递系统调用参数
  • 用户态下,执行陷入指令
  • 内核态下,执行处理系统调用的内核程序
  • 返回应用程序

陷入指令是在用户态执行的,执行陷入指令之后立即引发一个内中断,使CPU进入核心态

发出系统调用请求是在用户态,而对系统调用的相应处理在核心态下进行

1.7 操作系统体系结构

操作系统体系结构分为以下几个部分:

  • 内核、分层结构、模块化、外核

1.7.1 内核

内核是操作系统最基本、最核心的部分。实现操作系统内核功能的那些程序就是内核程序

  • 操作系统内核需要运行在内核态;操作系统的非内核功能运行在用户态
    img
    • 内核与硬件关联较紧密的模块:
      • 时钟管理:利用时钟中断实现计时功能
      • 中断处理:负责实现中断机制
      • 原语:
        • 原语是一种特殊的程序,具有原子性
        • 这段程序的运行必须一气呵成,不可被"中断"
    • 内核不会直接涉及硬件的功能:
      • 对系统资源的管理:进程管理、存储器管理、设备管理
      • 这些管理任务更多的是对数据结构的操作,不涉及硬件

      有的操作系统不会保留这部分的功能,只保留与硬件紧密联系的部分

    Ubuntu、CentOS 的开发团队,其主要工作是实现非内核功能,而内核都是用了Linux 内核

大内核与微内核的对比:

  • 最明显的区别就是,采用微内核的操作系统,在使用与硬件相关的功能CPU需要在内核态,而对系统资源进行管理CPU需要切换为用户态,因此微内核存在频繁的变态过程,效率更低
  • 实际例子,假设应用程序想要请求操作系统的服务,这个服务的处理同时涉及到进程管理、存储管理、设备管理
    img
    • 变态的过程是有成本的,要消耗不少时间,频繁地变态会降低系统性能

大内核、微内核设计也是一种模块化思想

  • 微内核特点简述:
    • 内核足够小
    • 基于客户/服务器,C/S模式
    • 应用机制与策略分离的原理
    • 采用面向对象技术

当前广泛使用的Windows系统是融合了大内核、微内核两种设计的操作系统

对比项目 大内核 微内核
含义 所有系统功能都放在内核内。大内核结构的OS通常也采用了模块化的设计思想 只把中断、原语、进程通信等最核心的功能放入内核。进程管理、文件管理、设备管理等功能以用户程序的形式运行在用户态
优点 性能高,内核内部各种功能都可以直接相互调用 1) 内核小功能少,易于维护,内核可靠性高
2)内核外的某个功能模块出错不会导致整个系统崩溃
缺点 1)内核代码庞大,结构混乱,难以维护
2)大内核中某个模块出错,就可能导致整个系统崩溃
1)性能低,需要频繁在核心态和用户态之间切换
2)用户态下各功能模块不可以直接相互调用,只能通过内核的"消息传递"来间接通信
操作系统代表 Linux、UNIX Windows NT

1.7.2 分层结构

分层结构将内核分为多层,每层可单项调用更低的接口
img

  • 最底层是硬件,最高层是用户接口
  • 优点:
    • 便于调试和验证,自顶向下逐层调试验证
    • 易扩充和易维护,各层之间调用接口清晰固定
      • 相对的,由于各层次定义好后,相邻层的依赖关系就固定了,对于层次内功能的修改就不够灵活,顶多增加新的层次
  • 缺点:
    • 仅可调用相邻低层,难以合理定义各层的边界
      • 由于有些功能和其他功能有重叠功能,但是调用是单向的,会导致有些功能不能相互调用
    • 效率低,不可跨层调用,系统调用执行时间长
      • 最高层向最底层功能进行调用,必须逐层调用传递

分层结构设计也是一种模块化思想

1.7.3 模块化

模块化把内核划分为多个模块,各模块之间相互协作
img

  • 内核 = 主模块 + 可加载内核模块
    • 主模块:只负责核心功能,如进程调度,内存管理
    • 可加载内核模块:可以动态加载新模块到内核,而无需重新编译整个内核,如驱动程序
  • 优点:
    • 模块间逻辑清晰易于维护,确定模块间接口后即可多模块同时开发
    • 支持动态加载新的内核模块,增强OS适应性
      • 如,安装设备驱动程序、安装新的文件系统模块到内核
    • 任何模块都可以直接调用其他模块,无需采用消息传递进行通信,效率高
  • 缺点:
    • 模块间的接口定义未必合理、实用
    • 模块间相互依赖,更难调试和验证

模块化和微内核操作系统对比:

  • 模块化操作系统各功能都在内核内,且模块之间相互调用,相互依赖,任何一个模块出错,都可能导致整个内核崩溃
  • 微内核操作系统中,内核外某个功能模块出错都不会导致整个系统崩溃,可靠性高

1.7.4 外核

外核,exokernel:
img

  • 内核负责进程调度、进程通信等功能,外核负责为用户进程分配未经抽象的硬件资源,且由外核负责保证资源使用安全
    • 对于传统操作系统,应用程序会认为使用的是连续的内存、硬盘空间,但实际上可能是操作系统对离散的系统资源做了映射所形成的抽象硬件资源。抽象连续的硬件资源,应用程序的随机访问需要不断调整指针导致效率降低
    • 对于支持外核的操作系统,应用程序可以像外核申请连续的物理内存、硬盘空间,以满足应用程序高频的随机访问需求
  • 优点:
    • 外核可直接给用户进程分配"不虚拟、不抽象"的硬件资源,使用户进程可以更灵活的使用硬件资源
    • 减少了虚拟硬件资源的"映射层",提升效率
  • 缺点:
    • 降低了系统的一致性
    • 使系统变得更复杂

外核设计也是一种模块化思想

1.8 操作系统引导

完整的计算机启动过程:

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

操作系统引导(boot):开机的时候,让操作系统运行起来所用的程序

操作系统中的硬盘安装了操作系统后,

  • 磁盘会包含主引导记录MBR,系统盘,以及其他分区磁盘
  • 系统盘中包含磁盘根目录以及引导记录程序PBR
    img

CPU读入ROM -> MBR读入主存 -> 执行磁盘引导程序 -> PBR读入主存 -> 启动管理器读入主存 -> 操作系统启动

1.8.1 操作系统引导过程

操作系统引导过程:

  1. CPU从一个特定主存地址开始,取指令,执行ROM中的引导程序

先进行硬件自检,再开机

  1. 将磁盘的第一块:主引导记录MBR,读入内存,执行磁盘引导程序,扫描分区表
  2. 从活动分区(又称主分区,即安装了操作系统的分区)读入分区引导记录,执行其中的程序
  3. 从根目录下找到完整的操作系统初始化程序(即启动管理器)并执行,完成"开机"的一系列动作

完整的操作系统初始化程序,即启动管理器可以在跟目录下找到

例如,windows操作系统完整的开机初始化程序在根目录/Windows/Boot

补充:

  • 操作系统引导程序驻留在主存ROM中,开机后自动运行
  • 引导程序先做关键部件的自检,识别已连接的外设,再引导操作系统
  • 引导程序沪江操作系统的内核加载到内存中,其余功能只有在需要时才会加载到主存中
  • 若计算机中安装了双系统,引导程序会与用户交互加载有关系统

1.9 虚拟机

传统计算机,一台物理机器只能运行一个操作系统

虚拟机:

  • 使用虚拟化技术,将一台物理机器虚拟化为多台虚拟机器(Virtual Machine, VM),每个虚拟机器都可以独立运行一个操作系
  • 同义术语:虚拟机管理程序/虚拟机监控程序/Virtual Machine Monitor/Hypervisor
  • 第一类VMM:
    • VMM直接运行在硬件上,将硬件资源以分时的方式分配给不同的虚拟机
    • 由于整个VMM都处于内核态,当虚拟机使用特权指令时,VMM会将指令进行捕获,转为其他指令,让虚拟机误以为执行了特权指令
  • 第二类VMM:
    • VMM运行在宿主操作系统中,其获得的系统资源如内存本身就是虚拟的,他创建的虚拟机所使用的内存实在虚拟内存基础上再次进行虚拟,因此性能也会损失很多

img
两类虚拟机管理程序VMM对比

对比项目 第一类VVM 第二类VVM
对物理资源的控制权 直接运行在硬件之上,能直接控制和分配物理资源 运行在Host OS之上,依赖于Host OS为其分配物理资源
资源分配方式 在安装Guset OS时,VMM要在原本的硬盘上自行分配存储空间,类似于"外核"的分配方式,分配未经抽象的物理硬件 GuestOS拥有自己的虚拟磁盘,改盘实际上是Host OS文件系统中的一个大文件。GuestOS分配的内存是虚拟内存
性能 性能更好 性能更差,需要HostOS作为中介
可支持的虚拟机数量 更多,不需要和Host OS竞争资源,相同的硬件资源可以支持更多的虚拟机 更少,Host OS本身需要使用物理资源,Host OS上运行的其他进程也需要物理资源
虚拟机的可迁移性 更差 更好,只需导出虚拟机镜像文件即可迁移到另一台HostOS上,商业化应用更广泛
运行模式 第一类VMM运行在最高特权级(Ring 0),可以执行最高特权的指令 第二类VMM部分运行在用户态,部分运行在内核态(以虚拟机驱动程序的形式运行)。GusetOS发出的系统调用会被VMM截获,并转化为VMM对HostOS的系统调用
  • 常用的虚拟机软件均是第二类VMM,如VurtualBox,VMware
  • 支持虚拟化的CPU通常分更多的指令等级
    img
    • 如果只区分特权指令和非特权指令,对于第一类VMM,虚拟机所执行的特权指令都需要被VMM截获,检测是否允许执行
    • 如果有更多分级的指令,可以将虚拟机限制在低权限级,VMM程序运行在高权限级。这样就可以保证虚拟机内执行低权限指令,不需要占用VMM去截获指令,只需要检查虚拟机执行高权限的敏感指令即可
posted @ 2024-08-16 01:35  GK_Jerry  阅读(65)  评论(0)    收藏  举报