1、操作系统原理知识复习(day01)--操作系统相关原理概述

4,663 阅读19分钟

第一章:操作系统概述

0、操作系统知识总览

image.png

1、操作系统的概念

首先,结合生活经验来理解计算机系统的层次结构:裸机(纯硬件)=> 操作系统 => 应用程序(软件)=> 用户

image.png

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

  • 负责管理协调硬件、软件等计算机资源的工作
  • 为上层的应用程序、用户提供简单易用的服务
  • 操作系统是系统软件,而不是硬件

image.png

2、操作系统的功能和目标

1、作为系统资源【软件、硬件、文件等资源】的管理者

  • 功能:文件管理、存储器管理(内存管理)、处理机【cpu】管理、设备管理
  • 目标:安全、高效

我们用通俗的知识来讲解这4个功能:如下图

image.png

2、作为用户和计算机硬件之间的接口

  • 功能【命令接口和程序接口统称为用户接口
    • 命令接口 (允许用户直接使用)
      • 联机命令接口(交互式命令接口,用户说一句,系统做一句),比如我们的windows系统的cmd窗口里面输入命令
      • 脱机命令接口(批处理命令接口,用户说一堆,系统做一堆),类似Linux的shell脚本
    • 程序接口(允许用户通过程序间接使用):由一组系统调用组成(程序接口=系统调用)
      • 备注:有些地方显示:系统调用=系统调用命令=广义指令
    • GUI(图形用户界面)
  • 目标:方便用户使用

3、作为最接近硬件的层次

  • 功能:实现对硬件机器的拓展

3、操作系统的四个特征

image.png

3.1、并发

并发:两个或多个事件在同一时间间隔内发生。这些事件宏观上是同时发生的,但微观上是交替发生【CPU时间分片】的。

并发 VS 并行(两个或多个事件在同一时刻同时发生)

image.png

操作系统的并发性指计算机系统中同时存在着多个运行着的程序:一个单核处理机(CPU)同一时刻只能执行一个程序,因此操作系统会负责协调多个程序交替执行(这些程序微观上是交替执行的,但宏观上看起来就像在同时执行,比如我电脑可以同时打开QQ或微信处理事情)。

事实上,操作系统就是伴随着多道程序技术出现的,因此,操作系统和程序并发是一起诞生的。

当今的计算机,一般都是多核CPU,比如Intel的第八代i3处理器就是4核CPU这意味着同一时刻可以有4个程序并行执行,但是操作系统的并发性依然必不可少,比如我们使用计算机有时候要开4个以上的程序需要同时工作。

image.png

3.2、共享

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

两种资源共享方式:

  • 互斥共享方式(一个时间段内只允许一个进程访问该资源)

  • 同时共享方式(允许一个时间段内由多个进程”同时“对该资源进行访问,宏观上的同时,而在微观上,这些进程可能是交替的对该资源进行访问的【分时共享CPU等资源】)

生活实例:

  • 互斥共享方式:使用QQ和微信视频。同一时间段内摄像头只能分配给其中一个进程。
  • 同时共享方式:使用QQ发送文件A,同时使用微信发送文件B。宏观上看,两边都在同时读取并发送文件,说明两个进程都在访问硬盘资源,从中读取数据。微观上看,两个进程是交替着访问硬盘的。

并发和共享是两个最基本的特征,二者互为存在条件。

并发和共享的关系:如果失去并发性,则系统中只能有一个应用程序正在运行,则共享性失去存在的意义;如果失去共享性,则QQ和微信不能同时访问硬盘资源,就无法实现同时发送文件,也就无法并发。

3.3、虚拟

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

image.png

虚拟技术——

  • 空分复用技术 (虚拟存储器技术)如上图
  • 时分复用技术 (虚拟处理器技术)-- 时间片轮转。如下图

image.png

显然,如果失去了并发性,则一个时间段内系统中只运行一个程序,那么就失去了实现虚拟性的意义了。因此,没有并发性,就谈不上虚拟性。

3.4、异步

在多道程序环境下,允许多个程序并发执行,但由于资源有限,进程的执行不是一贯到底的,而是走走停停【比如执行进程A到一半,突然时间片到了就去执行下一个进程B[让出CPU--单核处理器],然后这个进程执行到一半,然后又回到原来进程A的未执行位置继续执行】,以不可预知的速度向前推进,这就是进程的异步性。

image.png

显然,如果失去了并发性,则系统只能串行地处理各个程序,每个进程的执行会一贯到底【即执行完一个程序以后才会执行下一个】。只有系统拥有并发性,才有可能导致异步性。

4、操作系统的发展与分类

image.png

4.1、手工操作阶段

【打孔机】主要缺点:用户独占全机,人机速度矛盾导致资源利用率极低

4.2、批处理阶段

在多道程序设计技术和分时技术的支持下,出现了批处理系统和分时系统,在这两类系统中配置的操作系统分别称为批量操作系统和分时操作系统,这两类操作系统的出现标志着操作系统的形成。

多道程序运行的特征有如下3点:

  • 多道:计算机内存中同时存放几道相互独立的程序。
  • 宏观上并行:同时进入系统的几道程序都处于运行过程中,即它们都开始运行,但都未运行完毕。
  • 微观上串行:从微观上看,主存中的多道程序轮流或分时的占有处理机,交替执行。

批处理系统采用多道程序设计技术,对提交给系统的用户程序组织成作业形式,由操作员将一批作业存储到辅存设备上,形成一个作业队列,等待运行。

单道批处理系统:引入脱机输入/输出技术(用磁带完成),并监督程序负责控制作业的输入输出

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

image.png

多道批处理系统(操作系统开始出现,并且引入中断技术,由操作系统赋值管理这些程序的运行,各个程序并发执行):

  • 主要优点:多道程序并发执行,共享计算机资源【CPU、内存】
  • 主要缺点:没有人机交互功能

image.png

下面我们用一个甘特图演示:多道批处理系统为何能使得资源利用大幅度提升

假设计算机需要处理三个作业

  • 作业一:输入1秒,计算1秒,输出1秒.
  • 作业二:输入1秒,计算1秒,输出1秒.
  • 作业三:输入1秒,计算1秒,输出1秒

若采用单道批处理技术:

image.png

若采用多道批处理技术

image.png

4.3、分时操作系统

引入分时技术,所谓分时技术,是把处理机时间划分成很短的时间片,轮流地分配给各个用户程序使用,如果某个用户程序在分配的时间片用完之前还未完成计算,该程序就暂停执行,等待下一轮继续计算,此时处理机让给另一个用户程序使用。

主要优点:用户请求可以被即时响应,解决了人机交互问题。

主要缺点:不能优先处理一些紧急任务,对每个用户、作业都是公平的

4.4、实时操作系统

主要优点:能够优先响应一些紧急任务【优先级队列】,不需要时间片排队,及时性、可靠性

  • 硬实时系统(必须在绝对严格的规定时间内完成处理)
  • 软实时系统(能接受偶尔违反时间规定)

4.5、现代操作系统

现代操作系统是指当前正广泛使用和流行的操作系统,包括:

  • 具有图形用户界面、功能强大的个人计算机操作系统;
  • 吞吐量大、处理能力强的现代批处理操作系统;
  • 交互能力强、响应快的分时操作系统;
  • 具有实时响应、可预测分析能力的实时操作系统;
  • 具有网络资源共享、远程通信能力的网络操作系统;
  • 具有单一系统映像、分布处理能力的分布式操作系统等。

5、操作系统的运行机制和体系结构

5.1、知识总览

image.png

5.2、运行机制

1、什么是指令?“指令”和我们平时所说的“代码”有什么区别?

  • C语言等高级语言代码→通过“翻译”→机器语言指令,操作系统才能识别,一条高级语言的代码翻译过来可能或对应多条指令。
  • 简单来说,“指令” 就是处理器(CPU)能识别、执行的最基本命令。

2、两种指令

  • 有的指令“人畜无害”。比如:加、减、乘、除这些普通的运算指令。
  • 有的指令需要很高的权限。比如:内存清零指令。如果用户程序可以使用这个指令,就意味着一个用户可以将其他用户的内存数据随意清零,这样做显然是危险的。这种特权指令不允许用户程序使用。

3、CPU如何判断当前是否可以执行特权指令?==根据两种处理器状态

  • 用户态(目态):是用户程序执行时机器所处的状态,当CPU处于用户态时,此时CPU只能执行非特权指令;
  • 核心态(暂态):又称为系统态,是操作系统的管理程序执行时机器所处的状态,当CPU处于核心态时,此时特权指令、非特权指令都可执行。

而处理器的两种状态是用程序状态字寄存器(PSW)中的某标志位来标识当前处理器处于什么状态。如0为用户态,1为核心态。

4、特权指令:

在核心态下操作系统可以使用所有指令,包括一组特权指令,这些特权指令涉及如下几个方面:

  • 改变机器状态的指令
  • 修改特殊寄存器的指令
  • 涉及外部设备的I/O操作的指令

5、在下列情况下,由用户态自动转向核心态:

  • 用户进程访问操作系统,要求操作系统的某种服务,这种访问称为系统功能调用
  • 在用户程序执行时,发生一次中断。
  • 用户程序发生一个错误。(内部中断)
  • 在用户态下企图执行一条特权指令
  • 从核心态转回用户态是用一条指令实现的,这条指令本身也是特权指令。

6、两种程序

  • 内核程序
  • 应用程序

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

5.3、操作系统内核

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

image.png

内核中四个功能概述

image.png

5.4、操作系统体系结构

操作系统的体系结构分为大内核和微内核两种

  1. 大内核指的是一个操作系统包含了时钟管理、中断处理、原语(设备驱动、CPU切换等),以及进程管理、存储器管理、设备管理等功能;
  2. 微内核指的是一个操作系统包含了时钟管理、中断处理、原语这些基本内容。

image.png

类比: 操作系统的体系结构问题与企业的管理问题很相似。

  • 内核就是企业的管理层,负责一些重要的工作。只有管理层才能执行特权指令,普通员工只能执行非特权指令。
  • 用户态、核心态之间的切换相当于普通员工和管理层之间的工作交接
  • 大内核:企业初创时体量不大,管理层的人会负责大部分的事情。优点是效率高;缺点是组织结构混乱,难以维护。
  • 微内核:随着企业体量越来越大,管理层只负责最核心的一些工作,优点是组织结构清晰,方便维护,缺点是效率低

6、中断和异常

6.1、知识总览

image.png

6.2、中断机制的诞生

为了解决单道批处理系统的问题,发明操作系统引入中断机制,实现了多道程序并发执行。

中断是指某个事件(例如,电源掉电、浮点运算溢出、外部设备I/O传输完成或出错等)发生时,系统中止现运行程序的执行,引出处理事件程序对相应事件进行处理,处理完毕后返回断点继续执行。

中断源:引起中断的事件称中断源,如打印完成中断,其中断源是打印机。

断点:发生中断时正在运行的程序被暂时停止,程序的暂停点称为断点。例如,某程序正在执行0200地址的指令被中断,那么,0200地址就是断点, 在中断返回时就执行0200的下一条指令。

中断响应:是处理机发现有中断请求时,中止现运行程序的执行并自动引出中断处理程序的过程。

中断处理程序:对中断事件进行处理的程序叫中断处理程序。如时钟中断处理、打印机完成中断处理、打印机缺纸中断处理等等。它是操作系统中与硬件最接近的一部分,是操作系统与硬件的接口。

整个中断过程涉及用户程序和操作系统的中断程序这两类程序。

image.png

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

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

发生了中断,就意味着需要操作系统介入,开展管理工作。由于操作系统的管理工作需要使用特权指令,因此CPU要从用户态转核心态。中断可以使CPU从用户态切换为核心态,使操作系统获得计算机的控制权。有了中断,才能实现多道程序并发执行。处理完后,又会把CPU的使用权返回到用户态,继续执行主程序

用户态、核心态之间的切换使怎么实现的?

答:

  • “用户态 -->核心态”是通过中断实现的。并且中断是唯一途径。
  • “核心态 -->用户态”的切换是通过执行一个特权指令,将程序状态字的标志为设置为“用户态”。

6.3、中断分类

image.png

另一种分类方式

image.png

  • 陷阱、陷入(trap): 有意而为之的异常,如系统调用。
  • 故障(fault):由错误条件引起的,可能被故障处理程序修复,如缺页。
  • 终止(abort):不可恢复的致命错误造成的结果,终止处理程序不再将控制返回给引发终止的应用程序,如整数除0。

6.4、外部中断处理过程

image.png

  • step1:执行完每个指令之后,CPU都要检查当前是否有外部中断信号。
  • step2:如果检测到外部中断信号,则需要保护被中断经常的CPU环境(如程序状态字PSW、程序计数器PC、各种通用寄存器)
  • step3:根据中断信号类型转入相应的中断处理程序。
  • step4:恢复原进程的CPU环境退出中断,返回源程序继续向下执行。

7、系统调用

7.1、什么是系统调用,作用?

操作系统作为用户和计算机硬件之间的接口,需要向上提供一些简单易用的服务。主要包括命令接口和程序接口。程序接口由一组系统调用组成。

image.png

系统调用是操作系统提供给应用程序(程序员)使用的接口,可以理解为一种可供应用程序调用的特殊函数,应用程序可以发出系统调用请求来获得操作系统的服务。

例子问题:操作系统为什么要提供“系统调用”功能?

生活场景:你去学校打印店打印论文,当你按下“打印”之后,打印机开始工作。你的论文打印到一半时,另一位同学按下了“打印”按钮开始打印他自己的论文。最终,你的论文和该同学的论文页面并没有混杂在一起,都是按顺序依次打印的。

思考:如果各个进程可以随意地使用打印机,会发生什么情况?

你的论文打印到一-半时,另- -位同学按下了“打印”按钮开始打印他自己的论文。结果,你的后半部分论文与该同学的页面混杂在一起了。。。

解决方法:操作系统提供“系统调用”功能,用户进程想要使用打印机这种共享资源,只能通过系统调用向操作系统发出请求。操作系统会对各个请求进行协调管理。

应用程序通过系统调用请求操作系统的服务。系统中的各种共享资源都由操作系统掌管。因此,用户程序中,与资源相关的操作(存储分配、I/O操作、文件管理等),都必须通过系统调用的方式向操作系统提出服务请求,由操作系统代为完成。 这样可以保证系统的稳定性与安全性。 防止用户非法操作

image.png

系统调用会使处理器从用户态进入核心态(执行一个int指令(陷入指令))

7.2、系统调用与库函数的区别

应用程序通过操作系统提供的程序接口请求操作系统的服务、访问各类资源。应用程序发送请求,内核接收并处理请求。在任何操作系统中,系统调用是用户空间访问内核的唯一手段。应用程序可以使用各种语言编程,若用低级语言(如汇编程序设计语言)编制,则可直接使用系统提供的系统调用,即使用显式方式调用。若使用高级语言编程,则采用隐式方式调用。这种隐式调用是由API函数和标准C库函数来提供的。

一般情况下,应用程序通过API(应用程序编程接口)来请求操作系统服务。在UNIX和Linux系统中,应用程序编程接口是基于POSIX标准的。根据POSIX标准定义的API函数与系统调用之间存在着直接的关系。Linux 系统与UNIX系统一样,将系统调用作为C库的一部分来提供。C库实现了UNIX系统的主要API,包括标准C库函数和系统调用。图3.4说明了应用程序、C库和操作系统内核的关系

image.png

需要说明的是,系统调用与库函数之间是有区别的:**库函数由软件开发商提供,由编译链接工具链入用户程序,库函数的执行不会引起CPU状态的变化;而系统调用的代码属于OS,系统调用代码执行时使CPU的状态由用户态变为核心态。**有的库函数不涉及系统调用(如字符串操作函数stracat),有的库函数则会隐式地发出系统调用请求。

image.png

7.3、系统调用背后的过程

image.png

传递系统调用参数→执行陷入指令(用户态)→执行系统调用相应服务程序(核心态)→返回用户程序

注意:

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

7.4、总结

image.png