前言

操作系统的基本概述,内容来源自《王道操作系统》并略有补充,此为本人笔记,仅供参考

操作系统的基本概念

操作系统概念

操作系统(英语:Operating System,缩写:OS)是一组主管并控制计算机操作、运用和运行硬件、软件资源和提供公共服务来组织用户交互的相互关联的系统软件程序。根据运行的环境,操作系统可以分为桌面操作系统,手机操作系统,服务器操作系统,嵌入式操作系统等

内容来源:百度百科

操作系统特点

  • 并发:指两个或者多个程序在同一个时间间隔内发生。

    注意:区分并行,并行指同一时刻发生。这就意味着,对于单核的CPU同一时刻只能执行一个程序,各个程序只能并发的执行,而对于多核CPU可以同时执行多个程序,多个程序可以并行的执行。

  • 共享,指系统中的资源可以供内存中多个并发执行的进程共同使用。
    共享可以分为两种类型:互斥共享方式同时访问方式

    如果失去并发性,也就没必要实现共享性,反之同理,两者互为存在条件。

  • 虚拟,指把一个物理上的实体变为若干个逻辑上的对应物。
    虚拟技术也可以分为两种类型:空分复用技术时分复用技术

  • 异步,由于并发运行的程序会争抢着使用系统资源,而系统中的资源有限,因此进程的执行不是一贯到底的,而是走走停停的,以不可预知的速度向前推进。

操作系统的发展和分类

手工操作系统

在这个阶段的操作系统并没有诞生,对于计算的工作都需要进行人工干预,例如:程序的装入,运行,输出结果等等。使用手工操作的方式,存在两个缺点:

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

其对应的解决办法是使用高速的机器代替较慢的手工操作。

批处理阶段

为了解决上述手工操作系统的人机矛盾和CPU以及I/O设备速度不匹配的问题,出现了批处理系统。

单道批处理系统

引入脱机输入/输出技术,并由监督程序负责控制作业的输入/输出。

优点:缓解了一定程度的人机矛盾

缺点:内存中仅能有一道程序运行,只有该程序结束运行后,才能调入下一道程序。CPU有大量的时间是处于等待I/O完成,资源的利用率依然很低。

多道批处理系统

为了解决上述的问题,诞生了真正意义上的操作系统。其每次往内存中读入多道程序,使得其并发运行。

优点:多道程序并发执行,共享计算机的资源,资源利用率大大提升。

缺点:没有人机交互功能(用户提交作业之后只能等待计算机处理完成,不能中间控制自己的作业)

分时操作系统

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

优点:用户的请求可以直接被响应,解决了人机交互的问题。

缺点:不能优先处理一些紧急任务。其对每个用户/作业都是公平分配的。

实时操作系统

优点:能够优先相应一些紧急任务,解决了分时操作系统的问题,

实时操作系统的主要特点是:及时性可靠性

实时操作系统又可以分为

  • 硬实时操作系统
  • 软实时操作系统

其他操作系统

还有一些其他的操作系统,包括但不限于网络操作系统分布式操作系统个人计算机操作系统

操作系统的运行机制

内核程序:微软或者苹果有一帮人负责实现操作系统,其写的就是内核程序。由很多内核程序组成了“操作系统内核”,也是最接近硬件的部分。甚至可以说,一个操作系统只要有内核就可以了。

应用程序:平时普通程序员所编写的。

特权指令:不允许用户直接使用的指令,包含一些危险指令。

非特权指令:允许用户直接使用的指令。

根据特权指令的是否使用,CPU使得有两种状态,即“内核态”和“用户态”

CPU中有一个寄存器叫 程序状态字寄存器(PSW),其中包含一个二进制位,1 表示内核态,0 表示用户态

内核态也称为:管态,用户态也成为“目态

内核态用户态的切换

内核态切换到用户态执行了一条特权指令——来修改 PSW 的标志位为“用户态”,这就意味着操作系统将主动让出 CPU 使用权。

用户态切换到内核态,是由“中断”引发的,硬件自动完成变态过程,触发中断信号意味着操作系统将强行夺回 CPU 的使用权。

只要需要操作系统介入的地方,就会触发中断信号。

中断和异常

CPU 上会运行两种程序,即操作系统的内核程序和应用程序。

“中断”是让操作系统内核夺回 CPU 使用权的唯一途径

中断的类型

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

    例如:试图在用户态下执行特权指令,或者在执行除法指令时发现除数为 0 等。若当前执行的指令是非法的,则会引起一个中断信号。

    例如:有时候应用程序想请求操作系统的内核服务,此时会执行一条特殊的指令——陷入指令,该指令会引发一个内部的中断信号。

    陷入指令是特殊指令但不是特权指令

  • 外中断:与当前执行指令无关,中断信号来源于 CPU 外部

    例如:时钟中断,由时钟部件发来的中断信号。

狭义的中断指的是外中断,而内中断称为异常。

image-20230302203421746

中断的基本原理

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

image-20230302203619865

图片来源:王道操作系统

系统调用

操作系统作为用户和计算机硬件之间的接口,需要向上提供一些简单易用的服务。主要包括命令接口和程序接口。其中,程序接口由一组系统调用组成应用程序可以通过系统调用来请求获得操作系统内核的服务

系统调用与库函数的区别

系统调用是比库函数更底层的库,可以理解为为了便于编程而做的封装,而我们也可以直接使用汇编语言来进行系统调用而不使用其库函数来实现。

image-20230302203957207

当然,不是所有的库函数都是要使用系统调用,对于一些不需要特权指令的操作,库函数就并不需要使用系统调用

image-20230302204435406

系统调用的过程

image-20230302205941762

注意:

  1. 陷入指令是用户态下执行的,执行陷入指令之后立即引发一个内中断,使 CPU 进入核心态
  2. 发出系统调用请求是在用户态,而系统调用的相应处理是在核心态下进行。

操作系统的体系结构

操作系统的内核

image-20230302210410788

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

操作系统有可以根据对于其内核功能的实现来分为如下两种:

  • 大内核:包含全部的内核基本程序
    • 优点:高性能
    • 缺点:内核代码庞大,结构混乱,难以维护
  • 微内核:仅包含那些和硬件紧密结合的基本程序
    • 优点:内核功能最少,结构清晰,方便维护
    • 缺点:需要频繁的在核心态和用户态之间切换,性能低

微内核下的操作系统在工作下会一定程序影响效率

操作系统的结构

分层结构

image-20230302215551314

优点:

  1. 便于调试和验证,自底向上逐层调试验证
  2. 易维护,各层之间调用接口清晰固定

缺点:

  1. 仅可调用相邻低层,难以合理定义各层的边界
  2. 效率低,不可跨层调用,系统调用执行时间长

模块化

image-20230302215909296

将内核划分为多个模块,各模块相互协作。

内核 = 主模块 + 可加载内核模块

主模块:只负责核心功能,如进程调度,内存管理

可加载内核模块:可以动态加载新模块到内核,则无需重新编译整个内核;例如:驱动就是可加载内核模块。

优点:

  1. 模块间逻辑清晰易于维护,确定模块间接口后即可多模块同时开发
  2. 支持动态加载新的内核模块(如:安装设备驱动程序、安装新的文件系统模块到内核) ,增强OS适应性
  3. 任何模块都可以直接调用其他模块,无需采用消息传递进行通信,效率高

缺点:

  1. 模块间的接口定义未必合理、实用
  2. 模块间相互依赖,更难调试和验证

宏内核(大内核)

所有的系统功能都放在内核里(大内核结构的OS通常也采用了“模块化”的设计思想)

微内核

参考前面,此处略

外核

内核负责进程调度、进程通信等功能,外核负责为用户进程分配未经抽象的硬件资源,且由外核负责保证资源使用安全

优点:

  1. 外核可直接给用户进程分配“不虚拟、不抽象”的硬件资源,使用户进程可以更灵活的使用硬件资源
  2. 减少了虚拟硬件资源的“映射层”,提升效率

缺点:

  1. 降低了系统的一致性
  2. 使系统变得更复杂

操作系统的引导

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

虚拟机

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

VMM直接运行在硬件上

image-20230302222124256

VMM运行在宿主操作系统上

image-20230302222346932

End

基本情况结束,希望复试顺利。