操作系统之——中断

一.概念铺垫

1.操作系统

在了解中断之前,我们先来了解一下操作系统.

  • 首先,操作系统是一种软件,它控制和管理计算机硬件和软件资源,为用户和应用程序提供统一的接口和环境。
  • 它负责管理计算机的内存、文件系统、输入输出设备、进程调度、网络通信等功能。
  • 操作系统使得计算机可以高效地运行各种应用程序,并提供了用户与计算机之间的交互界面,例如图形用户界面(GUI)或命令行界面(CLI)等。
  • 常见的操作系统包括Windows、Mac OS、Linux等。

2.操作系统的运行环境和运行机制

(1)运行环境

首先,什么是操作系统的运行环境呢?

操作系统的运行环境是指操作系统与计算机硬件之间的交互环境。它包括了计算机的处理器、内存、外部设备(如硬盘、键盘、鼠标等)等。

操作系统要能够有效地管理这些硬件资源,并提供给应用程序一个相对抽象的接口,使得应用程序可以方便地访问和利用这些资源。

举个例子来说:

我们打开一个音乐软件,点击播放之后,音乐就从电脑或者手机的扬声器里播放出来,这就是一次硬件和软件的交互,也就是操作系统的作用,具体就是通过CPU,相关寄存器等通过系统调用完成了这样的交互,就是操作系统的运行环境了.

(2)运行机制

接下来,我们来谈谈操作系统的运行机制.

  1. 进程管理:操作系统将计算机的任务划分为多个进程,每个进程拥有自己的内存空间和执行上下文。操作系统负责进程的创建、调度、切换和终止,以保证多个进程可以共享计算机的资源,并且能够按照一定的策略高效地执行。

  2. 内存管理:操作系统管理计算机的内存资源,负责分配内存空间给进程,并管理内存的使用情况。它可以将内存划分为多个区域,比如代码区、数据区、堆栈区等,并提供内存映射机制,实现虚拟内存和物理内存之间的映射关系。

  3. 文件系统:操作系统负责管理计算机的文件和文件夹。它提供文件的创建、读写、删除等操作,并将文件存储在硬盘或其他存储介质上。操作系统还负责管理文件的权限和保护,以确保数据的安全性和完整性。

  4. 设备管理:操作系统管理计算机的输入输出设备,如显示器、打印机、网络接口等。它负责设备的初始化、驱动程序的加载和管理,以及提供统一的接口和协议,使得应用程序可以方便地访问和使用这些设备。

  5. 网络通信:现代操作系统支持网络通信功能,可以管理计算机的网络接口,并提供网络通信的API和协议。操作系统可以实现网络连接的建立、数据的传输、错误处理等功能,使得计算机可以通过网络与其他计算机进行通信。

正是通过这些运行机制使得操作系统能够高效地管理计算机资源,提供稳定、安全的运行环境,同时为用户和应用程序提供友好的接口和功能。

那么,这些是怎么样的一种关系呢?

操作系统之——中断_第1张图片

3.CPU状态

什么是处理器(CPU)的状态?

当CPU没有执行程序的时候,是没有什么状态的,当它执行的程序是用户程序的时候就叫用户态,当执行的程序是操作系统的代码时就叫系统态或者内核态.

关于内核态和用户态的内容,详细可见我的另一篇博客

详谈操作系统中的内核态和用户态

4.什么是CPU运行现场?处理器(CPU)的状态放在哪里?

处理器(CPU)的状态被保存在一组特定的寄存器中。这些寄存器包含了当前执行程序的指令指针、程序计数器、堆栈指针以及其他关键的寄存器信息。

指令指针(Instruction Pointer,简称IP)用于指示处理器当前正在执行的下一条指令的位置。程序计数器(Program Counter,简称PC)记录了当前正在执行的指令地址。堆栈指针(Stack Pointer,简称SP)则指示了当前堆栈的位置。

除了这些寄存器以外,处理器还有其他用于保存状态和执行指令的寄存器,包括通用寄存器、标志寄存器等。

当处理器在执行程序时,这些状态信息会在执行指令的不同阶段进行更新。在中断或异常发生时,处理器会保存当前的运行现场(也就是保存当前状态的值),包括当前正在执行的指令、寄存器内容等。这样,在中断或异常处理完毕后,处理器可以根据保存的运行现场恢复到中断或异常发生前的状态,继续执行被中断的程序。

二.中断

1.中断引入 

 为什么要引入中断?

当我们通过键盘敲了个字符,尽管我们以为自己敲的飞速,但在CPU看来,我们慢如蜗牛,作为CPU总不能一直等着键盘输入的信息吧.于是,CPU在我们敲键盘时,趁机运行了其它的各种应用,这样看来,似乎CPU与键盘并行操作,而实际上,其实是当我们把字符敲完后,计算机赶紧向CPU发了个中断请求,CPU才来处理我们的请求,因此,中断的引入使得外设可以与CPU看起来并行工作,这样,效率就得到了极大的提升.这不就是操作系统一直追求的吗.

操作系统之——中断_第2张图片

2.中断的发生

中断到底什么时候发生?

中断是指在处理器执行程序时,由于某种事件的发生而打断当前程序的正常执行流程,转而去处理发生的事件。中断可以是来自外部设备的信号,如键盘输入、鼠标操作,也可以是来自处理器内部的异常情况,如除零错误、越界访问等。中断可以分为硬中断和软中断两种类型。

硬中断是由外部设备产生的信号,向处理器发出中断请求。例如,当你按下键盘上的一个键时,键盘控制器会向处理器发送中断信号来通知有键盘输入事件发生。

软中断是由程序运行过程中的指令触发的中断。程序可以使用特殊的指令,如软中断指令(例如x86架构中的INT指令)来主动触发中断。

无论是硬件中断还是软件中断,一旦中断请求被处理器接收到,处理器会在合适的时机暂停当前正在执行的程序,保存当前的运行现场(包括指令指针、寄存器状态等),跳转到中断处理程序来处理中断事件。处理完中断事件后,处理器会恢复之前保存的运行现场,继续原来的程序执行。

中断的发生机制能够提高系统的实时性和并发性,使处理器能够在处理多个任务或事件时能够灵活切换,并及时响应外部的设备操作。

如果真有中断发生,CPU就转去执行中断处理程序,若无,就继续执行指令,这个过程循环往复.

操作系统之——中断_第3张图片 

操作系统之——中断_第4张图片

3.中断模型

中断模型是一种C/S结构吗? 

操作系统之——中断_第5张图片 

C/S模型的本质就是请求/服务模型,我们看中断模型,中断控制器相当于中介,把外设与CPU链接在一起,只要外设发出中断请求,CPU就要去响应,也即是去服务,所谓服务,就是执行中断处理程序,所以中断模型就是C/S结构.

4.系统调用优化

系统调用的实现从用户态切换到内核态,执行完系统调用程序后又从内核态切换回用户态,对系统调用进行优化是因为这种来回切换的代价很大吗?

系统调用与中断在处理机制上非常类似,但有所不同,中断是程序在执行的过程中,随时被打断,正在执行的进程可能在用户态也可能在内核态,但系统调用不同,只有用户态程序才能调用系统调用,比如dos中的int21H,Unix/Linux中的read()函数,调用了系统调用后,执行权就从用户态切换到内核态,切换到底有什么代价,想想总统换届就知道了,不管是中断、异常和系统调用、切换都需要保留现场,返回后要恢复现场,能否对陷入内核,从内核返回的速度稍微提升一点,因为一个程序执行会调用很多系统调用,这一点可以通过Linux下的trace命令追踪,比如,tracels(追踪ls命令),可以看到调用了多少系统调用,因此说,底层稍微一点的优化,对整个系统性能的影响会非常巨大。 因此,我们需要进行系统调用的优化.

你可能感兴趣的:(微服务,架构,linux)