操作系统(一):操作系统概述

324 阅读23分钟

操作系统基本概念

操作系统的概念

操作系统管理各种计算机硬件,为应用程序提供基础,充当计算机硬件与用户之间的中介

操作系统的特征

  1. 并发
    • 并发是指两个或者多个事件在同一时间间隔内发生
    • 操作系统的并发性是指计算机系统中同时存在多个程序,引进进程的目的也是为了程序并发执行
    • 同一时间间隔内为并发,同一时刻为并行。每个时刻,在单处理机环境中仅仅只能有一道程序运行,所以那些并发的程序在微观上都仍然是分时交替执行的
    • 并发性需要有相关硬件的支持,比如多流水线或者多处理机硬件环境
    • 并发和共享是最基本的特征,如果没有进程的并发性,那么资源的共享就没有意义
  2. 共享
    • 共享即资源的共享,是指资源可供多个并发执行的进程共同使用,共享可分为互斥共享方式和同时访问方式
    • 互斥共享方式:某些资源只允许进程之间互斥访问,这种资源也叫临界资源或者独占资源,大多数物理设备(如打印机)或者某些软件所用的栈、变量、表格等
    • 同时访问方式:某些资源允许在一段时间内被多个进程同时访问,这里的同时是指宏观上的同时,比如磁盘设备与一些重入码编写的文件可被多个用户同时访问
    • 并发和共享是最基本的特征,如果没有资源的共享性,那么就无法实现并发
  3. 虚拟
    • 把物理上的实体变为逻辑上的对应物,操作系统采用了多种虚拟技术,实现了虚拟处理器、虚拟内存、虚拟外部设备等
    • 虚拟技术可分为:时分复用技术(如处理器的分时共享)和空分复用技术(如虚拟存储器)
  4. 异步
    • 多道程序环境允许多个程序并发执行,但资源有限,所以会存在异步

操作系统的目标和功能

  1. 作为计算机资源的管理者
    • 操作系统主要实现:处理机管理、存储器管理、设备管理、文件管理
    • 处理机管理:处理机的管理和分配都以进程为基本单位,进程管理的主要功能包括:进程控制、进程同步、进程通信、死锁处理、处理机调度
    • 存储器管理:主要功能包括:内存分配与回收、地址映射、内存保护与共享和内存扩充
    • 文件管理:计算机中的信息都是以文件的形式存在的,操作系统中负责文件管理的部分叫做文件系统,文件管理系统包括文件存储空间的管理、目录管理以及文件读写管理和保护
    • 设备管理:主要任务是完成用户的 I/O 请求,主要功能包括缓冲管理、设备分配、设备处理和虚拟设备等
  2. 作为用户与计算机硬件系统之间的接口
    • 命令接口
      • 实现对作业的控制有两种方式,即联机控制方式和脱机控制两种方式,分别对应着联机命令接口和脱机命令接口
      • 联机命令接口:又称交互式命令接口,适用于分时或者实时操作系统,用户说一句,操作系统执行一句
      • 脱机命令接口:又称批处理命令接口,适用于批处理系统,用户一次性说完待做事项,操作系统再一次性做完
    • 程序接口
      • 由一组系统调用(也称广义指令)组成
      • 例如图形接口 GUI,注意,图形接口并属于操作系统,但是图形接口调用的系统命令是操作系统的一部分
  3. 操作系统用作扩充机器
    • 没有任何软件的计算机称为裸机

操作系统的发展与分类

手工操作阶段

  1. 用户独占全机,资源利用率低
  2. CPU 等待手工操作,CPU 的利用也不充分

批处理阶段

  1. 单道批处理系统
    • 系统成批地处理作业,磁带上各道作业顺序地进入内存,内存中只有一道作业在运行
    • 单道批处理系统解决了人机矛盾以及 CPU 和 I/O 设备之间的速度不匹配的问题
    • 缺点是只能有一道程序运行,若要等待 I/O 操作,则 CPU 的利用率很低
  2. 多道批处理系统
    • 多道程序设计技术允许多个程序同时进入内存,并且它们可以在 CPU 中交替运行,宏观上并行,微观上串行
    • 优点是 CPU 利用率较高,缺点是没有交互性

分时操作系统

  1. 分时,即操作系统分时间片轮转地服务于多个用户
  2. 优点是可以实现与用户的交互,可以及时响应用户请求,缺点是不能适应某些对时间要求严格的场景

实时操作系统

  1. 主要特点是及时性和可靠性
  2. 分为硬实时系统和软实时系统
    • 硬实时系统:必须在规定时间内保证绝对完成,比如导弹控制任务
    • 软实时系统:允许偶尔违反时间规定,比如网上订票系统

其他操作系统

  1. 网络操作系统:主要特点是网络中资源共享以及计算机之间的通信
  2. 分布式系统:主要特点是分布性和并行性,与网络操作系统不同的是,分布式系统是若干台计算机相互协同完成同一任务
  3. 个人计算机系统:这是目前应用最广泛的操作系统,常见的有 Windows、Linux 等

操作系统的运行环境

操作系统的运行机制

  1. CPU 中有两种性质的程序:内核程序(对应核心态,又称管态、内核态)和应用程序(对应用户态,又称目态)
  2. 特权指令:只有内核程序才能执行特权指令,是计算机不允许用户直接执行的程序,如 I/O 指令、置中断指令、存取用于内存保护的寄存器指令、送程序状态字到程序状态字寄存器的指令
  3. 非特权指令:用户直接使用,不直接访问系统中的软硬件资源,仅限于访问用户的地址空间,这也可以防止用户程序破坏系统
  4. 现代操作系统的分层式的结构,从上至下依次是:
    • 运行频率较高的程序,比如进程管理、存储器管理、设备管理
    • 与硬件联系紧密的模块,比如时钟管理、中断处理、设备驱动
  5. 内核管理各种资源,连接应用程序和硬件,是计算机的底层软件,大多数操作系统的内核包括 4 方面内容:时钟管理、中断机制、原语、系统控制的数据结构及处理
    • 时钟管理:第一功能是计时,时钟是计算机各种部件中最关键的设备,可以通过时钟中断的管理实现进程的切换

    • 中断机制:在中断机制中,只有一部分功能属于内核,它们负责保护和恢复中断现场的信息、转移控制权到相关的处理程序

    • 原语:处于操作系统的最低层,是最接近硬件的部分,这些程序的运行具有原子性,其操作只能一气呵成,运行时间较短且调用频繁,定义原语的直接方式是关闭中断,执行完之后才打开中断,比如设备驱动、CPU 切换、进程通信中的部分功能都可以定义为原语

    • 系统控制的数据结构及处理:系统中用来登记状态信息的数据结构有很多,比如作业控制块、进程控制块、内存分配表等,常见的 3 种操作是进程管理、存储器管理、设备管理

      • 进程管理:进程状态管理、进程调度和分派、创建和撤销进程控制块等
      • 存储器管理:存储器空间的分配和回收、内存信息保护程序、代码对换程序等
      • 设备管理:缓冲区管理、设备的分配和回收等

中断和异常

  1. 中断和异常的定义
    • 中断,也称外中断,指来自 CPU 执行指令以外的事件的发生,比如设备发出的 I/O 结束中断,时钟中断也是与 CPU 指令无关的
    • 异常,也称内中断、例外或陷入(trap),指来自 CPU 执行指令内部的事件的发生,比如程序的非法操作码、地址越界、算术溢出、虚存系统的缺页及专门的陷入指令等引起的事件,对异常的处理要依赖于当前程序的运行现场,而且异常是不能被屏蔽的,一旦出现应立即处理
  2. 中断和异常的分类
    • 中断可分为可屏蔽中断和不可屏蔽中断
      • 可屏蔽中断:通过 INTR 线发出的中断请求,通过改变屏蔽字实现多重中断,较为灵活
      • 不可屏蔽中断:通过 NMI 线发出的中断请求,通常是紧急的硬件故障,比如切掉电源
    • 异常和不可屏蔽中断一样都是不可屏蔽的,异常可分为故障、自陷、终止
      • 故障:由指令引起的异常,如非法操作码、缺页故障、除数为 0、运算溢出
      • 自陷:用于在用户态下调用内核程序,如条件陷阱指令,是 “故意安排的”
      • 终止:出现了 CPU 无法继续执行的硬件故障,如控制器出错、存储器校验错
    • 故障异常与自陷异常都属于软件中断,终止异常与外部中断都属于硬件异常
  3. 中断处理的过程
    • CPU 执行指令时检测到异常事件,或在执行指令后发现一个中断请求信号
    • CPU 转去执行相应的中断或者异常处理程序
    • 若解决了,则执行中断或异常返回指令,回到原先的程序
    • 若不能解决,则终止原先执行的用户程序

image-20220319104339014.png

系统调用

  1. 系统调用是指用户在程序中调用操作系统所提供的一些子功能,系统调用可看做特殊的公共子程序

  2. 与资源有关的操作通过系统调用方式向操作系统提出服务请求,最终由操作系统代为完成

  3. 系统调用按功能大致分为几类

    系统调用功能
    设备管理设备的请求或释放,以及设备启动
    文件管理文件的读、写、创建以及删除
    进程控制进程的创建、撤销、阻塞以及唤醒
    进程通信进程之间的消息传递或信号传递
    内存管理内存的分配、回收以及获取作业占用内存大小和始址
  4. 系统调用需要用特权指令才能完成,运行在核心态,用户程序可以执行陷入指令(又称访管指令或 trap 指令),系统调用的执行过程如下:

    • 通过陷入指令(或称访管指令、trap 指令)发起系统调用,请求操作系统提供服务,注意,访管指令是在用户态使用的,不属于特权指令
    • CPU 从用户态进入核心态
    • 操作系统的内核程序处理系统调用
    • CPU 从核心态进入用户态
  5. 一些用户态转向核心态的例子

    • 用户程序要求操作系统的服务,即系统调用
    • 发生一次中断
    • 用户程序产生了一个错误状态
    • 用户程序试图执行一条特权指令
    • 从核心态转向用户态由一条指令实现,而这条指令也是特权命令,一般是中断返回指令
  6. 用户态转向核心态时,不仅需要状态的转换,而且所用的堆栈也可能需要由用户堆栈切换为系统堆栈,但这个系统堆栈也是属于该进程的

image-20220319104421109.png


操作系统的结构

  1. 大内核系统
    • 将操作系统的主要功能模块都作为一个整体,运行在核心态
    • 优点是性能很好,缺点是内核代码很难维护
  2. 微内核系统
    • 分离内核与服务、服务与服务,使得它们之间接口更加清晰
    • 优点是易于维护,缺点是性能不好,因为需要频繁地在核心态和用户态之间切换
  3. 库操作系统:体系结构并不是引起性能下降的主要因素,提高性能最关键的一点是减少切换开销,因此有人提出,将系统服务作为运行库链接到用户程序,这种体系结构称为库操作系统

分层法

  1. 将操作系统分为若干层,最底层为硬件,最上层是用户层
  2. 分层的优点:
    • 便于系统调试和验证,第 1 层调试完并验证正确之后,可以调试第 2 层,以此类推,就算某一层出错了,也只会影响比它搞的层级而不影响比它低的层级
    • 易扩充和易维护,因为增删改其中的某一层时,只要不改变接口,就不会影响其他层
  3. 分层的缺点
    • 合理定义各层比较困难,不够灵活
    • 效率较差,每执行一个功能都要自上而下地穿越多层

image-20220319104445926.png

模块化

  1. 将操作系统按功能划分为独立的模块,各个模块之间通过接口通信
  2. 若划分模块过小,则会因模块之间联系过多而使得系统混乱;若划分模块过大,则会增加模块内部的复杂性
  3. 模块越独立性,则各模块的交互越少,且系统结构也越清晰,衡量模块独立性的标准:(高内聚低耦合)
    • 内聚性:模块内部的紧密程度,内聚性越高则独立性越好
    • 耦合度:模块之间的影响程度,耦合度越低则独立性越差
  4. 模块化的缺点:模块之间的接口很难满足实际需求

image-20220319104512966.png

宏内核

  1. 操作系统的内核架构分为宏内核和微内核
  2. 宏内核也成为大内核、单内核,将操作系统的主要功能模块都作为一个整体,运行在核心态
  3. 优点是主要功能模块作为整体运行在核心态,性能很好,缺点是内核代码很难维护

微内核

  1. 微内核结构将操作系统分为微内核和多个服务器,分离内核与服务、服务与服务,使得它们之间接口更加清晰
  2. 优点是易于维护,缺点是性能不好,因为需要频繁地在核心态和用户态之间切换
  3. 微内核的功能:
    • 进程(线程)管理:比如进程(线程)之间的通信、切换、调度
    • 低级存储器管理:在微内核中只配置最基本的低级存储器管理机制,比如用于实现将逻辑地址转化为物理地址等的页表机制和地址变换机制
    • 中断和陷入处理:捕获所发生的中断和陷入事件,并进行中断响应处理,识别中断或陷入的事件后,再发送给相关的服务器来处理
    • 拥有微内核的操作系统,将进程管理、存储管理以及 I/O 管理这些功能一分为二,将很小的一部分放入微内核,而绝大部分仍然用服务器实现,因此在采用“客户/服务器”模型时能把微内核做得很小
  4. 微内核的特点:
    • 方便扩展,很灵活:许多功能从内核中分离出来,当要修改某些功能或者增加新功能时,只需要在相应的服务器中修改或增加就行了,或者直接增加一个专用的服务器,而不需要改动内核代码
    • 可靠,安全
    • 可移植:CPU 与 I/O 硬件相关的代码都放在内核中,而其他服务器都和硬件平台无关,因此将操作系统移植到另一个平台上所需要做的改动比较小
    • 分布式计算:客户和服务器、服务器和服务器之间的通信采用消息传递机制,这使得微内核系统能很好地支持分布式系统和网络系统
  5. 微内核的主要问题:性能问题,因为需要频繁地在核心态和用户态之间进行切换

image-20220319104527408.png

外核

  1. 对比虚拟机是克隆真实机器,另一种策略是对机器进行分区,给每个用户分配资源的子集
  2. 外核运行在内核态中,为虚拟机分配资源,并确保没有机器会使用其他人的资源
  3. 每个用户层的虚拟机都可以运行自己的操作系统,但只限于已经申请并获得分配的那部分资源
  4. 外核的优点:
    • 减少了映射层,在其他的设计中,每个虚拟机都要有自己的磁盘,这样虚拟机监护程序就要用表格来重映像磁盘地址,而外核只用记录分配给虚拟机的资源,不需要重映射
    • 外核分离了多道程序(在外核内)和用户操作系统代码(在用户空间内),而且外核只需要保持多个虚拟机不相冲突,所以不会增加负载

操作系统引导

  1. 操作系统是程序,程序以数据的形式存放在硬盘中,而硬盘通常分为多个区,
  2. 操作系统(如 Windows、Linux等)是一种程序,程序以数据的形式存放在硬盘中,而硬盘通常分为多个区,一台计算机中又有多个或多种外部存储设备
  3. 操作系统引导是指计算机利用 CPU 运行特定程序,通过程序识别硬盘,识别硬盘分区,识别硬盘分区上的操作系统,最后通过程序启动操作系统,一环扣一环地完成上述过程
  4. 操作系统引导过程如下:
    • 激活CPU:激活的 CPU 读取 ROM 中的 boot 程序,将指令寄存器置为 BIOS(基本输入/输出系统)的第一条指令,即开始执行 BIOS 的指令
    • 硬件自检:启动 BIOS 程序后,先进行硬件自检,检查硬件是否出现故障,如有故障,主板会发出不同含义的蜂鸣,启动中止;如无故障,屏幕会显示 CPU、内存、硬盘等信息
    • 加载带有操作系统的硬盘:硬件自检后,BIO S开始读取 Boot Sequence(通过 CMOS 里保存的启动顺序,或者通过与用户交互的方式),把控制权交给启动顺序排在第一位的存储设备,然后 CPU 将该存储设备引导扇区的内容加载到内存中
    • 加载主引导记录 MBR:硬盘以特定的标识符区分引导硬盘和非引导硬盘,如果发现一个存储设备不是可引导盘,就检查下一个存储设备,如无其他启动设备,就会死机。主引导记录 MBR 的作用是告诉 CPU 去硬盘的哪个主分区去找操作系统
    • 扫描硬盘分区表,并加载硬盘活动分区:MBR包含硬盘分区表,硬盘分区表以特定的标识符区分活动分区和非活动分区,主引导记录扫描硬盘分区表,进而识别含有操作系统的硬盘分区(活动分区),找到硬盘活动分区后,开始加载硬盘活动分区,将控制权交给活动分区
    • 加载分区引导记录PBR:读取活动分区的第一个扇区,这个扇区称为分区引导记录(PBR),其作用是寻找并激活分区根目录下用于引导操作系统的程序(启动管理器)
    • 加载启动管理器:分区引导记录搜索活动分区中的启动管理器,加载启动管理器
    • 加载操作系统

虚拟机

  1. 虚拟机是逻辑计算机,有两类虚拟化方法
  2. 第一类虚拟机管理程序
    • 虚拟机在裸机上运行,具备多道程序功能,因为是唯一一个运行在最高特权的程序,所以像一个操作系统
    • 虚拟机管理程序向上层提供若干台虚拟机,这些虚拟机是裸机硬件的精确复制品。由于每台虚拟机都与裸机相同,所以在不同的虚拟机上可以运行任何不同的操作系统
    • 虚拟机本身是在用户态,但虚拟机上的操作系统以为自己是在内核态,称为虚拟内核态,另外,虚拟机上的用户程序以为自己在用户态实际上也确实是在用户态
    • 当虚拟机上的操作系统执行了 CPU 处于内核态才允许执行的特权指令时,会陷入虚拟机管理程序,若 CPU 支持虚拟化,则虚拟机管理程序会检查该指令,若指令由虚拟机中的操作系统执行,则虚拟机管理程序安排执行指令,若指令由用户程序执行,则虚拟机管理程序将模拟真实硬件面对用户态执行敏感指令的行为
  3. 第二类虚拟机管理程序
    • 本身依赖于原有操作系统分配和调度的资源,像一个普通的进程
    • 第二类虚拟管理程序仍然伪装成具有 CPU 和各种完备设备的完整计算机
    • VMware Workstation 是首个 X86 平台上的第二类虚拟机管理程序
  4. 运行在两类虚拟机管理程序上的操作系统都称为客户操作系统;对于第二类虚拟机管理程序,运行在底层硬件上的操作系统称为宿主操作系统
  5. 首次启动时,第二类虚拟机管理程序会像一台刚启动的计算机那样运转,期待找到的驱动器可以是虚拟设备,然后将操作系统安装到虚拟磁盘上(其实只是宿主操作系统中的一个文件),等待客户操作系统安装完成后,就能启动并运行
  6. 有的教材将第一类虚拟化技术称为裸金属架构,将第二类虚拟化技术称为寄居架构

本章小结

  1. 并行性与并发性的区别和联系
    • 并行性是指两个或多个事件在同一时刻发生,并发性是指两个或多个事件在同一时间间隔内发生
    • 在多道程序环境下,并发性是指在一段时间内,宏观上有多个程序同时运行,但在单处理器系统中每个时刻却仅能有一道程序执行,因此微观上这些程序只能分时地交替执行。若在计算机系统中有多个处理器,则这些可以并发执行的程序便被分配到多个处理器上,实现并行执行,即利用每个处理器来处理一个可并发执行的程序
  2. 特权指令与非特权指令
    • 特权指令,是指有特殊权限的指令,由于这类指令的权限最大,使用不当将导致整个系统崩溃,如清内存、置时钟、分配系统资源、修改虚存的段表或页表、修改用户的访问权限等,为保证系统安全,这类指令只能用于操作系统或其他系统软件,不直接提供给用户使用,因此特权指令必须在核心态执行,但实际上,CPU 在核心态下可以执行指令系统的全集
    • 为了防止用户程序中使用特权指令,用户态下只能使用非特权指令,核心态下可以使用全部指令。在用户态下使用特权指令时,将产生中断以阻止用户使用特权指令。所以把用户程序放在用户态下运行,而操作系统中必须使用特权指令的那部分程序在核心态下运行,保证了计算机系统的安全可靠。从用户态转换为核心态的唯一途径是中断或异常
  3. 访管指令与访管中断
    • 访管指令是一条可以在用户态下执行的指令。在用户程序中,因要求操作系统提供服务而有意识地使用访管指令,从而产生一个中断事件(自愿中断),将操作系统转抉为核心态,将操作系统转为核心态,称为访管中断
    • 访管中断由访管指令产生,程序员使用访管指令向操作系统请求服务
    • 因为用户程序只能在用户态下运行。若用户程序想要完成在用户态下无法完成的工作,就要靠访管指令,访管指令本身不是特权指令,其基本功能是让程序拥有“自愿进管”的手段,从而引起访管中断
    • 处于用户态的用户程序使用访管指令时,系统根据访管指令的操作数执行访管中断处理程序,访管中断处理程序将按系统调用的操作数和参数转到相应的例行子程序。完成服务功能后,退出中断,返回到用户程序断点继续执行
  4. 定义微内核结构OS的四个方面
    • 足够小的内核
    • 基于客户/服务器模式
    • 应用“机制与策略分离”原理。机制是指实现某一功能的具体执行机构。策略则是在机制的基础上借助于某些参数和算法来实现该功能的优化,或达到不同的功能目标。
      • 在传统的 OS 中,将机制放在 OS 内核的较低层中,把策略放在内核的较高层中
      • 在微内核 OS 中,通常将机制放在 OS 的微内核中,正因如此,才可以将内核做得很小
    • 采用面向对象技术。基于面向对象技术中的“抽象”和“隐蔽”原则能控制系统的复杂性,进一步利用“对象”“封装”和“继承”等概念还能确保操作系统的正确性、可靠性、易扩展性等,正因如此,面向对象技术被广泛应用于现代操作系统的设计之中