Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Operating system 操作系统到底是如何保护内核的_Operating System - Fatal编程技术网

Operating system 操作系统到底是如何保护内核的

Operating system 操作系统到底是如何保护内核的,operating-system,Operating System,我的问题是操作系统到底如何保护它的内核部分 据我所知,基本上有两种模式:内核模式和用户模式。如果内存段是内核段或用户空间段,那么内存段中应该有一些位。但这些碎片的起源在哪里?编译器中是否存在将程序标记为内核程序的“开关”?例如,若驱动程序处于内核模式,操作系统如何管理其与系统的集成,以避免恶意软件作为驱动程序添加 如果有人能在这个问题上启发我,我将非常感激,谢谢你当一台计算机启动时,它会从某个众所周知的位置开始运行代码。这段代码最终会将一些操作系统内核加载到内存并将控制权传递给它。然后,操作系统

我的问题是操作系统到底如何保护它的内核部分

据我所知,基本上有两种模式:内核模式和用户模式。如果内存段是内核段或用户空间段,那么内存段中应该有一些位。但这些碎片的起源在哪里?编译器中是否存在将程序标记为内核程序的“开关”?例如,若驱动程序处于内核模式,操作系统如何管理其与系统的集成,以避免恶意软件作为驱动程序添加


如果有人能在这个问题上启发我,我将非常感激,谢谢你当一台计算机启动时,它会从某个众所周知的位置开始运行代码。这段代码最终会将一些操作系统内核加载到内存并将控制权传递给它。然后,操作系统内核通过特定于CPU的方法设置CPU内存映射。

开关实际上位于处理器本身。某些指令仅在内核模式下可用(即i386上的环0)。从内核模式切换到用户模式很容易。然而,切换回内核模式的方法并不多。您可以:

  • 向处理器发送一个中断
  • 进行系统调用

在任何一种情况下,操作都会产生副作用,将控制权转移到一些受信任的内核代码。

通常的技术是使用大多数现代CPU中的虚拟内存管理器功能

硬件的工作方式是,它在缓存中保留一个内存片段列表,以及它们对应的地址列表。当程序试图读取该缓存中不存在的内存时,MMU不只是从主ram获取内存,因为缓存中的地址只是“逻辑”地址。相反,它调用另一个程序,该程序将解释该地址,并从该地址所在的任何位置获取该内存

该程序称为寻呼机,由内核提供,MMU中的特殊标志防止该程序被重写

如果该程序确定该地址对应于进程应该使用的内存,它将主内存中的物理地址提供给MMU,该物理地址对应于用户程序请求的逻辑地址,MMU将其提取到缓存中,然后继续运行用户程序

如果该地址是一个“特殊”地址,比如内存映射文件,那么内核会将文件的相应部分提取到缓存中,并让程序与之一起运行

如果地址在属于内核的范围内,或者程序尚未将该地址分配给自身,则寻呼机将引发SEGFAULT,终止程序

因为地址是逻辑地址,而不是物理地址,不同的用户程序可能使用相同的逻辑地址来表示不同的物理地址,内核寻呼机程序和MMU使这一切都是透明和自动的

这种级别的保护在较旧的CPU(如80286 CPU)和一些低功耗设备(如ARM CortexM3或Attiny CPU)上不可用,因为没有MMU,这些系统上的所有地址都是物理地址,ram和地址空间之间有1对1的对应关系

例如,若驱动程序处于内核模式,操作系统如何管理其与系统的集成,以避免恶意软件作为驱动程序添加

这实际上取决于操作系统架构。我举两个例子:

  • Linux内核:驱动程序代码可能非常强大。保护级别如下:
  • a) 允许驱动程序访问内核中有限数量的符号,这些符号是使用EXPORT\u符号指定的。导出的符号通常是函数。但是没有什么可以阻止驱动程序使用野生指针破坏内核。使用出口标志的安全是名义上的

    b) 驱动程序只能由对该框具有root权限的特权用户加载。所以,只要根用户权限没有被破坏,系统就是安全的

  • 像QNX这样的微内核:操作系统向用户输出足够的接口,这样驱动程序就可以实现为用户空间程序。因此,驱动程序至少不能轻易地破坏系统

  • 您的意思是MMU而不是VMU,没有MMU的ARM CPU通常有一个MPU,可以让您设置一些内存区域(在ARM946E-S中为8个),并具有用户/内核的访问权限。