[toc]

操作系统概念

操作系统(operation system,简称OS),是管理计算机硬件与软件资源的计算机程序。

例如,在windows上win+r快捷键,然后在弹出输入框输入CMD,显示的黑框框也是一个操作系统。(在这个窗口里,可以控制计算机的各种资源)

计算机系统构成

由用户、应用程序、操作系统、硬件这四部分组成。

image-20230315184022276

  • 操作系统向用户和应用程序提供接口。

    用户或应用程序可以通过这些接口访问计算机的硬件资源,如:用户开启或关闭声音、应用程序向操作系统申请磁盘空间或内存等行为。也就是说,操作系统通过封装具体的硬件细节形成接口,对于用户或应用程序而言是个黑盒,但是强大的封装性更易于被使用。

  • OS是一种系统软件,担任以下角色

    1. 与硬件交互
    2. 对资源共享进行调度管理
    3. 解决并发操作处理中存在的协调问题
    4. 数据结构复杂,外部接口多样化,便于用户反复使用
  • OS主要作用

    1. 管理与配置内存
    2. 决定系统资源供需的优先次序
    3. 控制输入设备与输出设备
    4. 操作网络与管理文件系统等基本事务
    5. 提供一个用户与系统交互的界面 => GUI

OS的目标和功能

  • 目标

    1. 有效性:提高系统资源利用率、提高系统的吞吐量
    2. 方便性:方便用户使用
    3. 可扩充性:硬件不断发展,依然适配OS
    4. 开放性:兼容不同软件和硬件
  • 功能

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

      image-20230315190337288

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

      接口主要体现在三个方面:操作系统提供的程序接口(也就是系统调用)、操作系统提供的命令接口、操作系统的图形用户接口(GUI)

    3. 实现了对计算机资源的抽象

      抽象的含义就是:将复杂的硬件资源抽象成软件资源,从而提供对外接口的方式,也就是封装

    4. 举个例子

      浏览器搜索:浏览器会将需要将发送的内容组装成报文,再通过系统调用需要使用浏览器所在设备的网络设备进行远程通信

OS的特征

并发特征是共享、虚拟和异步的前提,其中共享和并发互为前提

  • 并发是共享的前提

    如果只有单道程序运行,则不存在共享的可能。

  • 共享是并发的前提

    如果多道程序无法共享部分资源(比如磁盘、网卡等),显然就没有并发这一说(因为相当于只有单道程序访问资源,自然无需调度和管理啦)

  • 并发是虚拟的前提

    虚拟的目的就是表达出多道程序并发时的运行态。如果没有并发,自然虚拟就没有意义了

  • 并发是异步的前提

    如果没有并发的多道程序,那么单处理机上的多道程序的分时占用处理机的情况就不会发生,自然就谈不上异步了。

并发

指的是同一时间间隔内执行和调度多个程序的能力

  • 宏观上,处理机同时执行多道程序
  • 微观上,处理机在多道程序间高速切换(分时交替执行)(毕竟操作系统的核是有限的,然后程序的数量显然要大于核的数量)

主要关注**单个处理机(单个核)**在同一时间段内处理任务数量的能力

并行与并发的区别:

并行指的是同一时刻发生,并发指的是同一时间段内发生

共享

指的是资源共享,系统中的资源供多个并发执行的应用程序共同使用(显然,共享的前提是并发)

  • 同时访问方式:同一时段,允许多个程序同时访问共享资源
  • 互斥共享方式:也叫独占式。允许多个应用程序在同一个共享资源上独立而互不干扰地工作

虚拟

指的是使用某种技术把一个物理实体变成多个逻辑上的对应物。

  • 时分复用技术

    虚拟处理机技术、虚拟设备技术

    多道程序宏观上同时运行在多个核上,微观上是占用核的时间片之后,就会切换下一个应用程序来占用核的时间片,这样轮流工作就保障了多道程序同时运行。

  • 空分复用技术

    虚拟磁盘技术(磁盘分区)、虚拟存储器技术

异步

指的是:多道程序环境下,允许多个程序并发执行;单个处理机环境下,多个程序分时交替运行;

加之程序运行的不可预知性(运行的时机、程序暂停、程序的运行时间、程序的性能)就会导致这样的状况:

  • 宏观上,所有的程序好像是一直在一起在运行,但是实际上由于多道程序的存在,那么单个处理机就一定会出现多道程序的分时占用处理机运行,也就是说微观上其实是”走走停停“,也就是说多道程序不是同步完成的,而是异步完成的。

显而易见,只有并发出现的多道程序,才会导致分时占用处理机的异步情况发生

操作系统的发展与分类

1、手工操作阶段

  在计算机发展的初期,没有操作系统,人们只能依靠手工操作来使用计算机。

  举个栗子,很多年前,人先手工把专门的 “打孔纸” 打好孔,交给机器计算。因为计算机算的快,人手工打孔慢,这就造成了资源的浪费。如下图所示:

在这里插入图片描述

2、批处理阶段

单道批处理系统

单道批处理系统:一种引入了脱机输入/输出技术 ,并由监督程序负责控制作业输入和输出,但在工作期间只能对单份作业进行处理的系统。

接着举个栗子,这次我们把很多人手工打好的 “打孔纸” 先通过某种手段(卫星机/外围机)包装好,假设我们把它们包装到一盘“磁带”里。接着我们在把一盘接着一盘包装好的 “磁带” 独立地送入到计算机进行计算。如下图所示:

在这里插入图片描述

主要优点:缓解了一定程度的人机速度矛盾,资源利用率有所提升。 主要缺点:内存中仅能有一道程序运行,只有该程序运行结束之后才能调入下一道程序。CPU有大量的时间是在空闲等待I/O完成。资源利用率依然很低。

多道批处理系统

多道批处理系统:也是一种引入了脱机输入/输出的技术 ,并由监督程序负责控制作业输入和输出,在工作期间能对多份作业同时进行处理的系统。

它就解决了 单道批处理系统 资源利用率依然很低的缺点

在接着举个栗子,在 “磁带” 都准备好后,我们在把一盘接着一盘包装好的 “磁带” 耦合地送入到计算机进行计算。如下图所示:

在这里插入图片描述

主要优点:多道程序并发执行,共享计算机资源。资源利用率大幅提升,CPU和其他资源更能保持“忙碌”状态,系统吞吐量增大。 主要缺点:用户响应时间长,没有人机交互功能(用户提交自己的作业之后就只能等待计算机处理完成,中间不能控制自己的作业执行。比如:无法调试程序/无法在程序运行过程中输入一些参数)。

3、分时操作系统

分时操作系统:计算机以时间片为单位,轮流为各个用户/作业服务,各个用户可通过终端与计算机进行交互。

它就解决了 多道批处理系统 不能人机交互的缺点

比如,由4个人在玩电脑,但他们用的是同一个分时操作系统。那么该系统就会按照 “①②③④①②③…” 的顺序轮流分 50ms 给每个用户使用。

在这里插入图片描述

主要优点:用户请求可以被即时响应,解决了人机交互问题。允许多个用户同时使用一台计算机,并且用户对计算机的操作相互独立,感受不到别人的存在。 主要缺点不能优先处理一些紧急任务。操作系统对各个用户/作业都是完全公平的,循环地为每个用户/作业服务一个时间片,不区分任务的紧急性。

4、实时操作系统

实时操作系统:实时反映的一种操作系统,不像分时操作系统那样呆板。在实时操作系统的控制下,计算机系统接收到外部信号后及时进行处理,并且要在严格的时限内处理完事件。实时操作系统的主要特点是及时性可靠性

主要优点:能够优先响应一些紧急任务,某些紧急任务不需时间片排队。

实时操作系统有时还可以被分为:硬实时操作系统和软实时操作系统。

在这里插入图片描述

5、其他几种操作系统

网络操作系统:是伴随着计算机网络的发展而诞生的,能把网络中各个计算机有机地结合起来,实现数据传送等功能,实现网络中各种资源的共享(如文件共享)和各台计算机之间的通信。(如:Windows NT 就是一种典型的网络操作系统,网站服务器就可以使用)

分布式操作系统:主要特点是分布性和并行性。系统中的各台计算机地位相同,任何工作都可以分布在这些计算机上,由它们并行、协同完成这个任务。

个人计算机操作系统:如 Windows XP、MacOS,方便个人使用。

这些操作系统的每一个抠出来单独讲的话,都是一门学问。我们在这里只了初步的了解。

操作系统的运行环境

操作系统的运行机制

image-20230317114100517

操作系统其实也是一种程序,程序的执行过程也就是CPU执行一行行机器指令的过程。区别于一般程序员开发的应用程序,实现操作系统的程序就是内核程序

1、内核程序&应用程序

内核程序:实现操作系统的程序称为内核程序,许多内核程序结合在一起便组成了操作系统内核。

应用程序:普通程序员借助编程工具以及高级语言所完成的程序叫做应用程序。

2、特权指令&非特权指令

**特权指令:**作为系统资源的管理者,操作系统可以使用一些直接关系重大的指令(内存清零等),这些指令被称为特权指令,而且应用程序没有办法直接使用特权指令,这保证了操作系统的安全。

**非特权指令:**应用程序可以使用的指令,如加减乘除指令等。

CPU在设计的时候便已经划分出了特权指令以及非特权指令,因此在执行这条命令前CPU就可以先判断指令的内容。

3、内核态&用户态

CPU有两种状态:内核态(或称核心态,管态)以及用户态(目态)。

  • 当CPU处于内核态时,说明此时正在运行的是内核程序(CPU上加载的是内核程序,是操作系统这个管理者角色在发挥作用),此时可以执行特权指令;

  • 当CPU处于用户态时,说明此时正在运行的是应用程序,此时只能执行非特权指令。在CPU中有一个寄存器叫做程序状态寄存器(PSW),该寄存器的01状态来表示此时处于内核态还是用户态。

下面我们来讲解一下,用户态与内核态之间是如何相互进行变化的。

内核态–>用户态:需要执行一条特权指令(指令内容是修改PSW寄存器状态),此时内核态转变为用户态,CPU主动让出使用权,CPU会去加载用户态。

用户态–>内核态:由“中断”引发,当CPU检测到中断时,操作系统会强制将CPU变为内核态夺回CPU使用权,再执行与中断有关的一系列操作。

下面我们用一个小栗子来解释一下这个过程:

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

中断是操作系统夺回CPU使用权的唯一方式(也是由用户态切换到内核态的唯一方式)

4、操作系统的内核

当我们刚开始使用操作系统的时候,会发现一些程序并不是必需的(记事本等),这些程序称为操作系统的非内核功能,下图是将操作系统进行了更进一步的划分。

img

有人将内核划分为大内核以及微内核,这两种划分在不同的时期各有优势。下面用企业来类比一下操作系统:

内核就是企业的管理层,负责一些重要的工作。只有管理层(内核程序)才能执行特权指令,普通员工(应用程序)只能执行非特权指令。用户态、核心态之间的切换相当于普通员工和管理层之间的工作交接。

大内核:企业初创时体量不大,管理层的人会负责大部分的事情。优点是效率高;缺点是组织结构混乱,难以维护。

微内核:随着企业体量越来越大,管理层只负责最核心的一些工作。优点是组织结构清晰,方便维护;缺点是效率低。

5、小结

img

需要注意的是:特权指令只能在核心态下执行; 内核程序只能在核心态下执行。

操作系统的重要部件和机制

0、时钟

操作系统的时钟是一个很重要的核心部件。CPU时间片的计时、系统本身计时等

1、中断

操作系统会响应中断信号强制夺回CPU使用权,使用户态转换为内核态。**中断是操作系统夺回CPU使用权的唯一方式,**如果没有“中断”机制,那么一旦应用程序上CPU运行,CPU就会一直运行这个应用程序,其他程序就没有办法再使用CPU,这样的话就不存在并发机制了。一般来说,中断分为两种情况即内中断和外中断。

内中断

包括:陷入(由应用程序主动引发,如应用程序的系统调用)、故障(由错误条件引发)、终止(由致命错误引发)

内中断(也称异常)与当前执行的指令有关,中断信号来源于CPU内部。比如,当用户妄图执行特权指令时,CPU便会产生中断,由用户态变为内核态;再比如,当进行除法运算除数为0时同样会发生错误,产生中断。总的来说,就是当前指令是非法的指令,那么一定会引起中断。

当应用程序想要进行一次系统调用使用内核的服务时,会执行一条**陷入(trap)**指令,陷入指令会引发一条中断信号,操作系统就会夺回CPU的使用权,也就是说,执行“陷入指令”,意味着应用程序主动地将CPU控制权还给操作系统内核。

例如,一个读文件的应用程序开始运行时,并不是由应用应用程序来读取系统文件,而是该应用程序执行到读文件这一段程序时,自己会发生中断,之后操作系统产生陷入指令,再之后执行操作系统的特权指令进行读取

外中断

外中断与当前执行的指令无关,中断信号来源于CPU外部。每次在一条指令结束之后CPU都会检查是否有外中断信号。比如时钟信号,或者I/O设备都可以发出外中断信号。

中断分类

img

中断的原理:不同的中断信号,需要用不同的中断处理程序来处理。当CPU检测到中断信号后,会根据中断信号的类型去查询“中断向量表”,以此来找到相应的中断处理程序在内存中的存放位置。所以,显然中断处理程序一定是内核程序,工作在内核态。

中断处理过程
  1. 关中断

    CPU不再响应高级中断的请求

  2. 保存断点

    断点指的是PC(或叫IP,也就是执行程序的地址)

  3. 引出中断程序

    每个中断都会有一个中断程序,拿到中断程序的地址,但并没有开始执行中断程序

  4. 保存现场和屏蔽字

    将中断前CPU的所有状态,包括:寄存器的值等现场数据进行保存,方便后续中断执行完毕,CPU现场的恢复

  5. 开中断

    可以响应其他中断请求

  6. 执行中断程序

  7. 再关中断

  8. 恢复现场和屏蔽字

  9. 开中断

在上面的中断处理过程中,只有执行中断程序的过程里CPU才能去响应其他中断信号,其余阶段都不能响应。

2、原语

由若干条指令组成的一个程序段,用以完成某个特定的功能,且执行过程中不会被中断,也就是说具备原子性

本质上就是多条指令的封装,通过中断机制里的开关中断来实现

3、系统数据结构

  • 进程管理:作业控制块、进程控制块
  • 存储器管理:存储器分配与回收
  • 设备管理:缓冲区、设备控制块

4、系统调用

  • 有操作系统实现,给应用程序调用
  • 是一套接口的集合
  • 应用程序访问内核服务的方式
  • 会导致内核从用户态切换到内核态

如拷贝问题:我如果频繁的读取某项数据,会导致用户态和内核态频繁的切换,就比较消耗资源。可以通过零拷贝的方式来避免这种情况的发生

虽然出现了用户态和内核态,比较消耗资源,但是更加安全,避免用户态的肆意妄为导致系统崩溃掉

操作系统的结构设计

大内核OS结构-传统的操作系统结构

  • 无结构OS

    • 设计基于功能实现和获得高的效率
    • OS是为数众多的一组过程的集合
    • OS整体无结构(程序之间)
    • 程序内部代码无结构(goto语句非常多)
  • 模块化OS

    模块的独立性

    • 模块大小的划分
    • 衡量模块独立性的指标
    • 内聚性:模块内部各部分间联系的紧密程度
    • 耦合度:模块间相互联系和相互影响的程度

    模块化OS的优点

    • 提高OS设计的正确性、可理解性和可维护性
    • 增强OS的可适应性
    • 加速OS的开发过程

    模块化OS的缺点

    • 设计时对模块的划分与接口的规定不精确
    • 模块间存在复杂依赖关系
  • 分层式OS

    分层设计的基本原则:每一层都仅使用其底层所提供的功能和服务。

    分层设计考虑的因素

    • 程序嵌套 作业调度/进程控制/内存分配
    • 运行频率 频率高-> 低层(速度快)时钟管理
    • 公共模块
    • 用户接口 最高层

微内核OS结构

微内核技术:精心设计的、能实现现代OS核心功能的小型内核,它与一般OS不同,更小更精练,运行于核心态,开机后 常驻内存。但是微内核并不是完成的操作系统,只是抽出了操作系统最核心部分的功能

微内核OS结构的特征

  • 以微内核为OS核心
  • 以客户/服务器为基础
  • 采用面向对象的程序设计方法