2011-11-18 60 views
5

我正在做一些关于MIPS架构的研究,并想知道如何通过mips提供的有限指令和内存保护来实现操作系统。我特别想知道操作系统如何防止某些地址范围被执行。例如,操作系统如何限制PC在特定范围内运行?换句话说,防止从动态分配的内存执行某些内容?MIPS内存执行预防

浮现在脑海的第一件事是与TLB的,但只有TLB的内存提供写保护(不执行)。

我不太清楚操作系统如何处理它,因为那意味着每个指令都会导致异常,然后很多周期会被烧毁,只是检查PC是否在一个合理的地址范围。

如果有人知道,它通常如何完成?它是在初始化过程中以某种方式处理由硬件(例如,它给了一个地址范围和例外被击中如果超出了范围?)

回答

2

大多数保护检查都在硬件中完成,由CPU本身,并且不需要来自操作系统方面的大量参与。

的OS建立了一些特殊的表(页表或段描述符或一些这样的),其中存储器范围具有相关联的读,写,执行和用户/内核权限则CPU在内部缓存。

每个指令检查,然后,CPU内存是否访问遵守OS建立的权限,如果一切正常,进行。如果试图违反这些权限,则CPU会引发操作系统处理的异常(类似于CPU I/O设备外部中断的形式)。在大多数情况下,操作系统在发生这种异常时会简单地终止违规应用程序。

在它试图处理他们,使看似断码工作的一些其他情况。其中一种情况是支持虚拟磁盘内存。当没有物理内存备份时,操作系统将该区域标记为不可访问/不可访问,并且其数据位于磁盘上某处。当应用程序尝试使用该区域时,操作系统会从试图访问此内存区域的指令中捕获异常,使用物理内存备份该区域,使用磁盘中的数据填充该区域,将其标记为存在/可访问并重新启动导致异常的指令。只要操作系统内存不足,它就可以将数据从特定范围卸载到磁盘,将这些范围标记为不再存在/不可访问,并将这些区域的内存回收用于其他目的。

也可能有特定的硬编码由CPU内存范围无法访问操作系统内核和CPU的软件运行外可以很容易地检查在这里。

这似乎是为MIPS (from "Application Note 235 - Migrating from MIPS to ARM")的情况下:

3.4.2存储器保护 MIPS提供存储器保护只对前面描述即地址 在地址空间的上部2GB不允许的范围内当处于用户模式时。 没有更细粒度的保护机制是可能的。

enter image description here

This document名单“MEM - 缺页上的数据读取未对齐的内存访问,存储,保护违反”其他MIPS例外之一。

如果某个特定版本的MIPS CPU没有更多的细粒度保护检查,则只能由操作系统模拟,并且成本很高。操作系统需要通过指令来执行代码指令,或者将其转换为几乎相同的代码,并插入地址和访问检查,然后执行代码,而不是原始代码。

2

这确实是用TLB完成的。 No Execute Bits (NX bits)仅在几年前才开始流行,所以老式的MIPS处理器不支持它。 MIPS architecture(Release 3)和SmartMIPS Application-Specific Extension的最新版本支持它作为名为XI(执行禁止)的可选功能。

如果你有没有这个功能的芯片,你是运气不好。像Alex已经说过的,没有简单的方法来模拟这个功能。