一、计算机系统概述

操作系统概念

概念:

  1. 系统资源的管理者,既管理软件又管理硬件;
  2. 向上层提供方便易用的服务;
  3. 最接近硬件的一层软件;

功能:

  • 资源的管理者
    • 处理器管理
    • 存储器管理
    • 文件管理
    • 设备管理
  • 为用户和计算机硬件提供接口
    • 给用户使用的
      • GUI
      • 命令接口:
        • 联机命令接口:用户发送一个命令,系统执行一个命令,主要特点是交互性
        • 脱机命令接口:用户一次性发送命令清单,系统按照清单执行,中途不能干预
    • 给软件/程序员使用的:系统调用接口
  • 对计算机资源的扩充
    • 裸机:没有任何软件支持的计算机
    • 扩充机器/虚拟机:覆盖了软件的机器

操作系统特征

  • 并发
  • 共享
  • 虚拟
  • 异步

并发: 需要区分并发和并行:

  1. 并发是指两个或多个事件在同一时间间隔内发生。宏观上同时发生,微观上交替发生;
  2. 并行:两个或多个事件在同一时刻同时发生;

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

共享:

资源共享,系统中的资源可供内存中多个并发执行的进程共同使用。

两种资源共享方式:

  • 互斥共享: 系统中的某些资源,虽然可以提供给多个进程使用,但一个时间段内只允许一个进程访问该资源;
  • 同时共享:系统中的某些资源,允许一个时间段内由多个进程”同时“对它们进行访问。(注意这个同时是宏观上的,微观上可能是交替的进行资源访问)

虚拟:

虚拟是指把一个物理上的实体变为若干逻辑上的对应物。物理实体是实际存在的,逻辑对应物是用户感知到的。

  • 空分复用技术:如虚拟存储器,系统只有4g内存,但可以同时允许很多软件
  • 时分复用技术:如处理器的分时共享:单核CPU在用户看来也可以同时运行很多软件

异步:

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

并发和共享互为存在条件:如果失去并发性,则系统中只有一个程序正在运行,则共享性失去意义;如果失去共享性,那么多个程序无法实现同时访问资源,就无法并发执行。

并发和共享是最基本的两个性质,没有并发和共享,就谈不上虚拟和异步:如果失去了并发性,则一个时间段内指运行一个程序,那么就失去了实现虚拟性的意义了;如果失去了并发性,那么系统只能串行地运行各个程序,那么每个程序的执行只会一贯到底,没有异步可言。

操作系统发展历程

操作系统 定义 特点 优点 缺点
手工操作系统 纸袋机 用户独占全机、人机速度矛盾导致资源利用率极低
单道批处理系统 引入脱机输入(外围机+磁带),并由监督程序负责控制作业的输入、输出
操作系统雏形
自动性、顺序性、单道性 缓解了一定程度的人机速度矛盾,资源利用率有所提升 内存中仅有一道程序运行,运行结束后才能执行下一道。
cpu有大量时间在等待IO完成
多道批处理系统 操作系统正式诞生
多个用户将若干作业提交给计算机系统集中处理
多道,共享性,宏观上并行,微观上串行 资源利用率高,系统吞吐量大,CPU利用率高,IO设备利用率高 用户响应时间长
没有人机交互,批处理作业时用户无法干预
分时操作系统 计算机以时间片为单位轮流为各个用户。 同时性、交互性、独立性、及时性 提供人机交互能力
运行多个用户同时使用一台计算机
不能优先处理一些紧急任务
实时操作系统 硬实时:必须严格时间内完成处理
软实时:能偶尔接受违反时间规定
及时性、可靠性 能优先响应一些紧急任务
网络操作系统 网络中的各个计算机邮寄结合起来,实现数据传输、资源共享(如Windows NT)
分布式操作系统 系统中各个计算机地位相同,任何工作都可以分布在这些计算机上,由它们并行、协同完成 分布性、并行性
个人计算机操作系统

操作系统运行机制

程序的运行原理:高级语言编写代码,然后转为机器指令。程序运行的过程,其实就是CPU一条一条执行机器指令的过程。

两种程序

内核程序应用程序

我们写的程序就是“应用程序”;

操作系统的程序就是“内核程序”。很多操作系统程序组成了“操作系统内核”,简称“内核”。内核是操作系统中最重要最接近核心的部分,也是最接近硬件的部分。

两种指令

特权指令非特权指令

非特权指令:允许用户直接使用的指令,不能直接访问系统中的软硬件资源,只限于访问用户地址空间;

特权指令不允许用户直接使用,必须由操作系统来使用;

在CPU设计和生产的时候就划分了特权指令和非特权指令,因此CPU执行一条指令前就能判断出其类型。

两种处理器状态

内核态用户态

CPU处于内核态(管态)时,说明此时正在运行的是内核程序,此时可以执行特权指令;

CPU处于用户态(目态)时,说明此时正在运行的是应用程序,此时只能执行非特权指令;

CPU内部有程序状态寄存器(PSW),其中有一个二进制位分别表示当前处于内核态还是用户态。

  • 内核态->用户态:执行一条特权指令--修改PSW的标志位为用户态,这个动作意味着操作系统将主动让出CPU使用权;
  • 用户态->内核态:由“中断”引发,硬件自动完成变态过程,触发中断信号意味着操作系统将强行抢夺回CPU使用权。但凡需要操作系统介入的地方,都会触发中断信号;

中断和异常

CPU由用户态切换到内核态是中断完成的,中断是让操作系统夺回CPU使用权的唯一途径。中断也是操作系统并发的前提,如果没有中断,那么CPU就会一直运行一个应用程序。

中断分为内中断和外中断

内中断

内中断与当前执行的指令有关,中断信号来源于CPU内部。

内中断例子:

  1. 用户态程序执行非法指令时;
  2. 应用程序想要请求操作系统内核服务,此时会执行一条特殊指令--陷入指令。执行陷入指令意味着应用程序主动地将CPU控制权还给操作系统内核。

内中断一般被叫做异常,狭义的中断不包括内中断,异常分为:

  1. 陷阱、陷入:由陷入指令引发,是应用程序故意引发的
  2. 故障:由错误条件引起的,可能被内核程序修复。内核程序修复故障后会把CPU使用权还给应用程序。如缺页故障;
  3. 终止:致命错误引起,内核程序无法修复,因此一般不再把CPU使用权还给应用程序,而是直接终止应用程序。如除法操作除0

外中断

外中断于当前执行的指令无关,中断信号来源于CPU外部。

外中断例子:

  1. 时钟中断;
  2. I/O设备请求中断;

狭义的中断就是指外中断。

中断基本原理

不同的中断信号,需要用不同的中断处理程序来处理。当CPU检测到中断信号后,会根据中断信号的类型取查询“中断向量表”,以此来找响应的中断处理程序在内存中的存放位置。

中断处理程序是内核程序,运行在内核态。

内中断在CPU执行指令过程中就会检查是否有异常发生;

外中断在每个指令周期末尾才会检擦是否有外中断信号需要处理;

系统调用

操作系统提供了命令接口和程序接口。命令接口是给用户使用的,而“系统调用”是操作系统提供给应用程序使用的接口,应用程序可以通过系统调用来请求获得操作系统内核的服务。

系统调用不是库函数,我们当然可以直接通过汇编来访问系统调用,但我们通常调用编程语言的库函数,由库函数来调用系统调用接口。

应用程序通过系统调用来请求操作系统的服务。系统中的各种共享资源都由操作系统内核统一掌管,因此凡是与共享资源有关的操作,都必须通过系统调用的方式向操作系统内核提出服务请求,由操作系统内核代为完成。这样可以保证系统的稳定性和安全性,防止用户非法操作。

分类:

  • 设备管理
  • 文件管理
  • 进程控制
  • 进程通信
  • 内存管理

操作系统体系结构

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

内核组成:

  • 时钟管理:实现计时功能;
  • 中断处理:负责实现中断机制;
  • 原语:
    • 是一种特殊的程序;
    • 处于操作系统最底层,最接近硬件的部分;
    • 这种程序运行具有原子性——其运行只能一气呵成,不能中断;
    • 运行时间较短、调用频繁;
  • 对系统资源进行管理的功能:
    • 进程管理;
    • 存储器管理;
    • 设备管理;

操作系统的内核需要运行在内核态,非内核功能运行在用户态。

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

操作系统引导

引导过程:

  1. CPU从一个特定主存地址开始,取指令,执行ROM中的引导程序(先进行硬件自检,再开机);
  2. 将磁盘的第一块——主引导记录 读入内存,执行磁盘引导程序,扫描分区表;
  3. 从活动分区(又称主分区,即安装了操作系统的分区)读入分区引导记录,执行其中的程序;
  4. 从根目录下找到完整的操作系统初始化程序(即启动管理器)并执行,完成“开机”的一系列动作;

虚拟机

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

同义术语:虚拟机管理程序/虚拟机监控程序

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