Reb*_*ure 5 memory operating-system mips computer-architecture tlb
我正在使用MIPS架构进行一些研究,并想知道如何使用mips提供的有限指令和内存保护来实现操作系统.我特别想知道操作系统如何阻止执行某些地址范围.例如,操作系统如何限制PC在特定范围内运行?换句话说,防止诸如从动态分配的内存执行的事情?
首先想到的是TLB,但TLB只提供内存写保护(而不是执行).
我也不太清楚操作系统是如何处理的,因为这意味着每条指令都会导致异常,然后只需要检查PC是否在一个合理的地址范围内,就会烧掉多个周期.
如果有人知道,通常如何做?是否在初始化期间由硬件以某种方式处理(例如,它给出了一个地址范围,如果超出范围则会触发异常?)
大多数保护检查都是由 CPU 本身在硬件中完成的,不需要操作系统方面的太多参与。
操作系统设置一些特殊的表(页表或段描述符等),其中内存范围具有关联的读、写、执行和用户/内核权限,然后 CPU 在内部缓存这些权限。
然后,CPU 在每条指令上检查内存访问是否符合操作系统建立的权限,如果一切正常,则继续。如果试图违反这些权限,CPU 会引发操作系统处理的异常(一种类似于来自 CPU I/O 设备外部的中断形式)。在大多数情况下,操作系统在遇到此类异常时只是终止有问题的应用程序。
在其他一些情况下,它会尝试处理它们并使看似损坏的代码正常工作。其中一种情况是支持虚拟磁盘内存。当某个区域没有物理内存备份并且其数据位于磁盘上的某个位置时,操作系统会将其标记为不存在/不可访问。当应用程序尝试使用该区域时,操作系统会从尝试访问该内存区域的指令中捕获异常,使用物理内存支持该区域,用磁盘中的数据填充该区域,将其标记为存在/可访问,然后重新启动该区域。导致异常的指令。每当操作系统内存不足时,它就可以将某些范围的数据卸载到磁盘,再次将这些范围标记为不存在/不可访问,并从这些区域回收内存用于其他目的。
还可能存在由 CPU 内存范围进行的特定硬编码,操作系统内核之外运行的软件无法访问,并且 CPU 也可以轻松地在此处进行检查。
MIPS 似乎就是这种情况(摘自“应用笔记 235 - 从 MIPS 迁移到 ARM”):
3.4.2 内存保护 MIPS 仅在前面描述的范围内提供内存保护,即在用户模式下不允许使用地址空间上部 2GB 中的地址。不可能有更细粒度的保护机制。

本文档列出了其他 MIPS 异常中的“MEM - 数据获取时的页面错误;内存访问未对齐;内存保护违规”。
如果特定版本的 MIPS CPU 没有任何更细粒度的保护检查,则它们只能由操作系统进行模拟,并且成本很高。操作系统需要逐条指令执行代码,或者将其转换为插入地址和访问检查的几乎等效的代码,然后执行该代码而不是原始代码。