内核

2023-10-08 01:30

内核是计算机操作系统核心的计算机程序,通常可以完全控制系统中的所有内容。它是操作系统代码的一部分,始终驻留在内存中,促进硬件和软件组件之间的交互。完整的内核通过设备驱动程序控制所有硬件资源(例如,I/O、内存、加密),仲裁涉及这些资源的进程之间的冲突,并优化公共资源的利用,例如CPU缓存使用、文件系统和网络套接字。在大多数系统上,内核是启动时首先加载的程序之一(在引导加载程序之后)。它处理其余的启动以及内存、xxx 设备和来自软件的输入/输出 (I/O) 请求,将它们转换为 CPU 的数据处理指令。

内核的关键代码通常加载到内存的单独区域中,该区域受到保护,不被应用程序软件或操作系统的其他不太关键的部分访问。内核在这个受保护的内核空间中执行其任务,例如运行进程、管理硬盘等硬件设备以及处理中断。相比之下,浏览器、文字处理器或音频或视频播放器等应用程序使用单独的内存区域,称为用户空间。这种分离可以防止用户数据和内核数据相互干扰并导致不稳定和缓慢。它还可以防止出现故障的应用程序影响其他应用程序或导致整个操作系统崩溃。即使在内核包含在应用程序地址空间内的系统中,内存保护也用于防止未经授权的应用程序修改内核。

内核的接口是低级抽象层。当进程向内核请求服务时,它必须调用系统调用,通常是通过包装函数。

有不同的内核架构设计。单片内核完全在单个地址空间内运行,CPU 在管理模式下执行,主要是为了速度。微内核在用户空间中运行大多数但不是所有服务,就像用户进程一样,主要是为了弹性和模块化。 MINIX 3 是微内核设计的一个著名例子。相比之下,Linux 内核是整体式的,尽管它也是模块化的,因为它可以在运行时插入和删除可加载的内核模块。

计算机系统的核心组件负责执行程序。内核负责决定在任何给定时间将许多正在运行的程序中的哪一个分配给处理器。

随机存取存储器(RAM)用于存储程序指令和数据。通常,两者都需要存在于内存中才能执行程序。通常有多个程序需要访问内存,通常需要比计算机可用的内存更多的内存。内核负责决定每个进程可以使用哪些内存,并决定当内存不足时要做什么。

I/O 设备包括键盘、鼠标、磁盘驱动器、打印机、USB 设备、网络适配器、显示设备等 xxx 设备。内核将应用程序的请求分发到适当的设备来执行 I/O,并提供方便的方法来使用设备(通常抽象到应用程序不需要知道设备的实现细节)。

资源管理中必要的关键方面是执行域(地址空间)的定义以及用于协调对域内资源的访问的保护机制。内核还提供了同步和进程间通信(IPC)的方法。这些实现可能驻留在内核本身中,或者内核可能依赖于它运行的其他进程。虽然内核必须提供IPC来提供对彼此提供的设施的访问,但内核还必须提供一种方式让正在运行的程序请求访问这些设施。内核还负责进程或线程之间的上下文切换。

内核拥有对系统内存的完全访问权限,并且必须允许进程在需要时安全地访问该内存。这样做的第一步是虚拟寻址,通常通过分页和/或分段来实现。虚拟寻址允许内核使给定的物理地址看起来像是另一个地址,即虚拟地址。不同进程的虚拟地址空间可能不同;一个进程在特定(虚拟)地址访问的内存可能与另一进程在同一地址访问的内存不同。这允许每个程序的行为就好像它是正在运行的程序(内核除外)一样,从而防止应用程序相互崩溃。