一、操作系统的概念、功能和目标
1. 概念
首先通过一张图来整体感知一下计算机系统的层次结构。
以这张图的视角来感知一下操作系统的概念:
-
中间看两边
操作系统是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机地工作和资源的分配。(这是从操作系统的视角来看应用程序和硬件结构)
-
从下往上看
以提供给用户和其他软件方便的接口和环境。(这是从应用程序的视角来看操作系统)
-
从上往下看
它是计算机系统中最基本的系统软件。(从硬件看操作系统)
2. 功能和目标
操作系统的功能不能从单一方面概括,对于不同的角度,操作系统都在执行不同的功能。
2.1 作为系统资源的管理者
首先我们模拟用QQ与别人视频聊天的情景:
- 在文件夹中找到QQ安装的位置。
- 双击打开QQ
- QQ程序正常运行
- 开始和朋友视频聊天
在这一连串的操作下,正好对应了操作系统作为系统资源的管理者所发挥的作用。
- 逐层打开文件夹,找到QQ.exe这个程序的存放位置。这是文件管理。
- 在打开程序的过程中把相关数据放到内存里。这是存储器管理。
- 程序运行时对应的进程被CPU处理。这是处理机管理
- 视频聊天的过程中,需要将摄像头设备分配给进程。这是设备管理。
综上所述:
2.2 作为用户和计算机硬件之间的接口
首先还是通过一张图来整体感知
在这种情况下,操作系统最大的作用就是充当“接口”,无论是命令接口还是程序接口,亦或者是GUI,都是提供了用户来操作自己的计算机的方法。
2.3 作为最接近硬件的层次
如果没有把任何软件支持的裸机当作锤子、锯子、木头之类的材料,那么操作系统就是工匠。工匠将原料组织成房子、车子,用户就可以直接使用这些房子和车子,并且不需要观主他们的底层实现。
总的来说,就是将裸机变成扩充机器。
二、操作系统的特征
1. 并发
并发:指两个或多个时间在同一时间间隔内发生。这些事件宏观上是同时发生的,但是微观上是交替发生的。
并行:指两个或多个事件在同一时刻同时发生。
在更深层的角度来看,并发的出现就意味着计算机系统中同时存在着多个运行着的程序。因此,可以理解为操作系统和程序并发是一起诞生的。
2. 共享
共享就是资源共享,指系统中的资源可供内存中多个并发执行的进程共同使用。
注意:在同时共享方式中,所谓的“同时”往往上是宏观的,而在围观上,这些 进程可能实在交替地对该资源进行访问。
3. 并发和共享的关系
- 并发是指计算机系统中同时存在多个运行的程序。
- 共享是指系统中的资源可供内存中多个并发执行的进程共同使用。
在了解了并发和共享的具体内容之后,再通过一个例子来了解它们之间的关系。
使用QQ发送文件A,同时使用微信发送文件B。
- 两个进程正在并发执行(并发性)
- 需要共享地访问硬盘资源(共享性)
从上面的例子可以看出:
- 如果失去并发性,则系统中只有一个程序正在运行,共享性就失去了存在的意义。
- 如果失去共享性,则QQ和微信不能同时访问硬盘资源,就无法实现同时发送文件,也就无法并发。
综上所述:并发性和共享性互为存在条件。
4. 虚拟
虚拟是指把一个物理上的实体变为若干个逻辑上的对应物。物理实体是实际存在的,而逻辑上对应物是用户感受到的。
下面两个例子可以帮我们更好得理解虚拟:
- 假如我的电脑只有4GB的内存,但是可以同时运行4GB的游戏,256MB的QQ,450MB的微信。这就是虚拟存储技术(空分复用技术)。
- 在某单核CPU的计算机中,用户可以打开多个应用程序。实际上只有一个单核CPU,在用户看来似乎有6个CPU。这就是 虚拟技术中的时分复用技术。
5. 异步
异步是指在多道程序下,允许多个程序并发执行,但由于资源有限,进程的执行不是一贯到底的,而是走走停停,以不可预知的速度向前推进,这就是进程的异步性。
显然,如果失去了并发性,则系统只能串行地处理各个进程,每个进程地执行会一贯到底。只有系统拥有并发性,才有可以导致异步性。
三、操作系统的发展与分类
1. 手工操作阶段
从图中可以看出,手工操作阶段的主要缺点是用户独占了全机,人机速度毛肚导致资源的利用率很低。
2. 批处理阶段———单道批处理系统
引入了脱机技术/输出技术(用磁带完成),并监督程序负责控制作业的输入、输出
- 优点:一定程度缓解了人机速度矛盾,资源利用率有所提升。
- 缺点:内存中仅有一道程序运行,只有该程序运行结束之后才能调入下一道程序,CPU有大量的事件是在空闲等待。资源利用率还是较低。
3. 批处理阶段——多道批处理系统
- 优点:多道程序并发执行,共享计算机资源,资源利用率大幅提升,CPU和其他资源保持“忙碌”状态,系统吞吐量正大。
- 缺点:用户响应时间长,没有人机交互功能(用户提交自己的作业之后就只能等待计算机处理完成,中间不能控制自己的程序)
4. 分时操作系统
计算机以时间片为单位轮流为各个用户/作业服务,各个用户可以通过终端与计算机进行交互。
- 优点:用户请求可以被即时响应,解决了人机交互问题,允许多个用户同时使用一台计算机,并且用户对计算机的操作相互独立,感受不到别人的存在。
- 缺点:不能优先处理一些紧急任务。操作系统对各个用户/作业都是完全公平的,循环地位每个用户/作业服务一个时间篇,不区分任务的紧急性。
5. 实时操作系统
能够有限处理一些紧急任务,不需要时间片排队。
四、操作系统的运行机制与系统结构
在学习运行机制之前,我们首先要知道什么是指令。
简单来说,指令就是CPU能识别、执行的最基本指令。例如加法指令、乘法指令等。
接下来,我们从两种指令、两种状态、两种程序来具体认识一下操作系统的运行机制。
两种指令
两种状态
两种程序
看到这里,是不是感觉这些概念冥冥中有某种联系,那么来吧
那么问题来了,操作系统中哪些程序是由内核来执行的呢?
首先,我们要先明确一个概念:内核是计算机配置上的底层软件,是操作系统最基本、最核心的部分。
注意:这里原语是具有原子性的一种程序。
从操作系统的内核划分可以得出体系结构
五、中断和异常
1. 中断的概念和作用
- 当中断发生时,CPU立即进入核心态
- 当中断发生后,当前运行的进程暂停云运行,并由操作系统内核对中断进行处理
- 对于不同的中断信号,会进行不同的处理
发生了中断,就意味着需要操作系统介入,开展管理工作。由于操作系统的管理工作(比如进程切换、分配I/O设备等)需要使用特权指令,因此CPU要从用户态转为核心态。中断可以使CPU从用户态转换为核心态,使操作系统获得计算机的控制权。有了中断,才能实现多道程序并发执行。
之前我们提到了两种程序状态——核心态和用户态,但是它们又是如何切换的呢?
- 用户态—>核心态:通过中断程序实现的,并且中断时唯一途径。
- 核心态—>用户态:通过执行一个特权指令,经程序状态字的标志位设置为“用户态”。
2. 中断分类
中断根据信号的来源可以分为两大类:
而内中断(内部异常)又可以更进一步划分:
- 陷阱、陷入:有意为之的异常,如系统调用
- 故障:由错误条件引起的,可能被故障处理程序修复,如缺页
- 终止:不可恢复的致命错误造成的结果,如整数除0
3. 外中断的处理过程
六、系统调用
1. 系统调用的功能
应用程序通过系统调用请求操作系统的服务,系统中的各种共享资源都由操作系统同一掌管,因此在用户程序中,凡是与资源有关的操作(如存储分配、I/O操作、文件管理等),都必须通过系统调用的方式想操作系统提出服务请求,由操作系统代为完成。这样可以保证系统的稳定性和安全性,防止用户进行非法操作。
注意:这些操作都需要在核心态下完成。
2. 系统调用与库函数的区别
操作系统的系统调用可以理解为让应用程序来使用的一种特殊的函数。那么它与我们在编程中使用到的高级语言的库函数有什么区别呢?
其中库函数也可以分为两类:
- 不涉及系统调用的库函数:如“取绝对值”的函数
- 涉及系统调用的库函数:如“创建一个新文件”的函数
3. 系统调用背后的过程
由此可见,系统调用的整个过程是:
传递系统调用参数—>执行陷入指令(用户态)—>执行系统调用相应服务(核心态)—>返回用户程序
注意:
- 陷入指令是在用户态执行的,执行陷入指令之后立即引发一个内中断,从而CPU进入核心态。
- 发出系统调用请求实在用户态,而对系统调用的相应处理在核心态下进行。
- 陷入指令是唯一一个只能在用户态执行,而不可以在核心态执行的指令。