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的对应关系 例如,若驱动程序处于内核模式,操作系统如何管理其与系统的集成,以避免恶意软件作为驱动程序添加 这实际上取决于操作系统架构。我举两个例子:
您的意思是MMU而不是VMU,没有MMU的ARM CPU通常有一个MPU,可以让您设置一些内存区域(在ARM946E-S中为8个),并具有用户/内核的访问权限。