一、操作系统的概念

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

操作系统的功能
  1. 负责管理协调硬件、软件等计算机资源的工作(从上往下看)
  2. 为上层应用程序、用户提供简单易用的服务(从下往上看)

OS作为资源的管理者
提供的功能:处理机管理、存储器管理、文件管理、设备管理
目标:安全、高效

OS作为用户和计算机之间的接口
提供的功能:命令接口(联机命令接口,脱机命令接口)、程序接口、GUI(图形用户界面)
目标:方便用户使用

二、操作系统的特征

操作系统的4个特征:并发、共享、虚拟、异步

并发:指两个或多个事件在同一时间间隔内发生,从用户体验来说事件是同时发生的,而对于CPU来说事件是交替发生的
共享:即资源共享,是指系统中的资源可供内存中多个并发的进程共同使用
虚拟:是指把物理上的实体变为若干个逻辑上的对应物,物理实体是实际存在的,而逻辑上对应物是用户感受到的(例如组成原理讲过的虚拟存储技术)
异步:指多道程序环境下,允许多个程序并发执行,但由于资源受限,进程不是一次性执行完的,以不可预知的速度向前推进

注:没有并发和共享,就谈不上虚拟和异步,并发和共享是两个最基本的特征,并且互为存在条件

三、OS的发展与分类

用一张王道视频中的截图(真的总结得很好啊,值得学习)
在这里插入图片描述

1、手工处理阶段

主要缺点:用户独占全机、CPU等待人工操作、人机速度矛盾导致资源利用率低

2、单道批处理阶段

引入脱机输入/输出技术(用磁带完成),并且监督程序(操作系统的雏形)负责控制作业的输入、输出
主要优点:

  • 由于IO操作在磁带和计算机之间完成,解决了人机速度矛盾导致资源利用率低的缺点,资源利用率有所提升
  • 由于减少了IO操作占用的时间,CPU将会有更多的时间用于处理事务

主要缺点

  • 内存中只能有一道程序运行,只有一道程序运行结束后才能调入另一道程序
  • 由于CPU相对磁带而言运行还是太快,CPU依然有大量的时间等待输入输出,资源利用率不够高
2、多道批处理阶段

在多道批处理系统中,人们将自己的程序输入到磁带中,计算机一次从磁带读取多道程序,这些程序并发执行。
主要优点:

  • 多道程序并发执行,共享计算机资源。资源利用率大幅提升(相对于单道批处理系统采用了流水线的方法),CPU和其他资源(存储器、打印机、IO设备等)保持忙碌状态,系统的吞吐量大

主要缺点:

  • 用户等待时间长,在提交自己的作业后只能等待计算机处理,无法控制自己的程序执行(比如不想执行了,停止程序的执行),没有人机交互功能
4、分时操作系统

为了解决多道批操作系统无法进行人机交互的问题,人们发明了分时操作系统。计算机以时间片为单位轮流为各个用户服务,各个用户可通过中断与计算机交互
主要优点:

  • 用户的请求可以及时响应,解决了人机交互问题
  • 允许多个用户同时使用一台计算机,并且用户对计算机的操作相互独立,感受不到别人的存在

主要缺点:

  • 不能优先处理比较紧急的任务(比如无人驾驶地刹车)
  • 操作系统对每个用户/作业都是完全公平的,循环地为每个用户服务一个时间片,不区分任务地优先级
5、实时操作系统

为了解决分时操作系统不区分任务优先级的问题,人们又发明了实时操作系统。在实时操作系统的控制下,计算机系统接收到外部信号后及时处理,并且要在严格的时间内处理完成。主要特点是及时性和可靠性
主要优点:

  • 能够优先相应优先级高的任务,紧急任务不需要排队

还可以细分为硬实时操作系统、软实时操作系统

  • 硬实时操作系统:必须在绝对严格的规定时间内完成处理,比如导弹控制系统、无人驾驶系统
  • 软实时操作系统:能接收偶尔违反时间的规定,比如景点门票查询系统
四、OS的运行机制与体系结构

在这里插入图片描述

1、运行机制

A. 两种指令

  • 非特权指令:简单的、不对计算机资源造成很大影响的指令。比如算术运算指令,用户程序就可以执行
  • 特权指令:权限较高,影响较大的指令。比如内存清零指令,用户程序不可使用,否则内存数据很危险。

那么CPU如何判断当前是否可以执行特权指令呢?下面我们引入CPU的状态

B.两种处理器状态

  • 用户态,此时CPU可以执行非特权指令
  • 核心态,此时CPU可以执行非特权、特权指令

CPU的这两种状态是用程序状态字寄存器(PSW)中的标志位来标识的,如用户态时将标志位置为0,核心态时将标志位置为1

C.两种程序
有的程序需要使用非特权指令,而有的程序需要使用非特权指令,因此操作系统将程序划分为两类:内核程序、应用程序

  • 内核程序:操作系统的内核程序是系统的管理者,既可以执行特权指令,也可执行非特权指令,运行在核心态
  • 应用程序:为了保证系统能稳定安全地运行,普通用户程序只能执行非特权指令,运行在用户态
2、操作系统内核

内核对于操作系统而言,相当于管理层对于企业。负责一些重要地操作,只有管理层才能执行特权指令,普通员工只能执行非特权指令。CPU在用户态和核心态之间切换,就相当于企业中普通员工和管理层地工作交接(实际上是CPU不断地扮演员工和管理层地的角色)
说到内核,我们先来看看操作系统的层次结构
在这里插入图片描述

内核是计算机上配置的底层软件,是操作系统最基本、最核心的部分。实现操作系统内核功能的程序就是内核程序,具有以下功能:

  • 时钟管理:实现计时功能,内核必备。
  • 原语:是一种特殊的程序,这种程序具有原子性。是最接近硬件的部分,设备驱动、CPU切换都是由原语实现的
  • 中断处理:实现多任务的基本要求,内核必备

除了以上3种功能内核必备,其他的功能都不是内核必备的,例如进程管理、存储器管理、设备管理等。有的操作系统内核不仅包含最基本的三种功能,也包含其他一些比较重要的功能,而有的操作系统内核却只有最基本的三种功能。由此引出了操作系统的体系结构的问题

3、操作系统体系结构

操作系统的体系结构比较经典的分法是将内核分为微内核和大内核两种。正如上面所提到的:

  • 若进程管理、存储器管理、设备管理等功能加入到内核功能中,那操作系统的内核将变得比较大,称为大内核体系结构
  • 反之,若内核中只有一些最基本的、必不可少的功能,例如时钟管理、原语、中断处理等功能,就称为微内核体系结构

大内核体系结构
将操作系统的主要功能模块都作为系统内核,运行在核心态
优点:高性能,CPU无需在核心态和用户态之间频繁切换
缺点:内核代码庞大,结构复杂,难以维护

微内核体系结构
只把最基本的功能保留在内核
优点:内核代码少,结构清晰,易于维护
缺点:CPU需要频繁地在核心态和用户态之间切换,性能低

五、中断和异常

在这里插入图片描述

1、中断机制的诞生

早期计算机处理作业只能是采用串行的方式处理,在计算机的内存当中同一时刻最多只能有一道程序执行,系统资源利用率很低。于是人们发明操作系统,引入中断机制,实现了多道程序并发执行。

2、中断的概念和作用

中断本质:发生中断就意味着需要需要操作系统介入,开展管理工作

  • 当中断发生时,CPU立即进入核心态
  • 当中断发生后,当前运行的进程暂停运行,并由操作系统内核对中断进行处理
  • 对于不同的中断信号,会进行不同的处理

发生了中断,就意味着需要操作系统介入,开展管理工作。由于操作系统的管理工作(如进程切换、IO设备分配)需要使用特权指令,因此CPU得从用户态转为核心态。中断可以使CPU从用户态切换为核心态,使操作系统获得计算机的控制权。

有了中断机制,才能实现多道程序并发执行

小问题:CPU如何在用户态和核心态之间切换?

  • “用户态----->核心态” 通过中断实现,并且中断是唯一途径
  • “核心态----->用户态”通过执行一个特权指令,将程序状态字(PSW)的标志位设置为“用户态”
3、中断的分类

在这里插入图片描述
内中断(也称异常): 中断信号来源于CPU内部,与当前执行的指令有关。比如缺页故障,除数为0等

外中断(狭义中断): 中断信号来源于CPU外部,与当前执行的指令无关。比如IO操作完成后,IO设备会向CPU发送一个中断信号,或者执行程序时键盘按下ctrl+c等

4、外中断的处理过程

在CPU执行多条指令的过程中

  1. 执行完每条指令后,CPU都要检查当前是否有外部中断信号
  2. 如果检测到外部中断信号,则需要保护此时被中断进程的CPU环境(比如PSW、PC、各种通用寄存器),以便于下次接着执行
  3. CPU切换到核心态,根据中断信号类型转入相应的中断处理程序
  4. 退出中断,恢复原进程的CPU环境,继续往下执行
六、系统调用

在这里插入图片描述

1、什么是系统调用、有何作用

操作系统向下连接纯硬件,向上面的应用程序提供一些服务,包括命令接口和程序接口
命令接口:允许用户直接使用,包括联机命令接口(用户说一句,系统做一句)和脱机命令接口(用户说一堆,系统做一堆)
程序接口:允许用户通过程序间接使用,由系统调用组成

系统调用:是操作系统提供给应用程序使用的接口,可以理解为可供应用程序使用的特殊函数,应用程序可以发出系统调用来获取操作系统的服务

操作系统为什么要提供系统调用功能?
对于许多系统资源,比如IO设备,存储空间。若让用户进程(可以简单理解为运行起来的程序)随意让访问,会导致存储空间非常混论,IO操作无法正常进行等问题。
为了避免用户进程随意使用系统资源,操作系统规定所有的用户进程想要使用系统资源时必须通过系统调用的方式发出请求,最后有操作系统对这些请求进行协调管理,这样可以保证系统稳定性和安全性,防止用户进行非法操作

2、系统调用和库函数的区别

前面提到了系统调用是可供应用程序使用的特殊函数,那我们和平常使用的高级语言的库函数有什么区别呢?
在现在的高级语言的库函数(比如C语言文件的fopen、fwrite)中,底层封装了相应的系统调用功能。由于文件操作是要请求系统资源的,所以系统调用运行在核心态

3、系统调用背后的过程

以C语言的库函数fwrite()举例
当我们写完C程序后,编译器进行编译,将高级语言转换成汇编语言指令。就这样一个write函数背后其实对应着很多的汇编语言指令,包括:

  • mov:将写入的内容放入通用寄存器
  • trap:陷入指令,使得CPU从用户态切换到核心态

当执行到陷入指令时,CPU从用户态切换到核心态,然后执行系统调用相应的程序,执行系统调用程序时操作系统介入进行相关操作,最后返回用户程序接着执行

注意:

  • 陷入指令在用户态执行,执行后立即引发内中断,使得CPU进入核心态
  • 发出系统调用请求是在用户态,而对此系统调用的处理在核心态进行
  • 核心态下可以执行特权指令以及非特权指令,用户态下只能执行非特权指令。然而陷入指令是唯一一个只能在用户态下执行,不能在核心态下执行的指令

参考资料:王道操作系统

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐