MIPS 地址空间

转载 2011年10月13日 09:58:19
 MIPS处理器对地址空间的使用和处理与传统的CISC CPU有着微妙的不同。
先看一些基本的原则。在MIPS CPU里,你写在程序中的地址绝不会和芯片的物理地址相同(有时变化很小,但并不相同),我们分别称之为程序地址和物理地址。
一个MIPS CPU可以运行在两种特权级之一上:用户模式和核心模式。简单来说,我们常说用户态和核心态。但是MIPS体系结构的一个特点就是从核心态到用户态的变化并不改变操作的行为,只是有时某些操作被认为是非法的。在用户态,地址最高位为一的任何程序地址都是非法的并会导致自陷。还有,有些指令在用户态将会导致异常。
在32位下(下图1.1 ),程序地址空间划分为四大区域,每个区域有一个传统的(完全没有意义的)名字。根据地址所处的区域不同,处理也不同:

useg Ox000 0000-Ox7FFF FFFF(低端2G):这些地址是用户态可用的地址。在有MMU的机器里,这些地址将一概被转换。除非MMU已经设置好,否则不应该使用这些地址。有些文档将这部分称为“useg” ,特别是在描述用户程序看到的地址空间的时候。本书不再采用“useg”。对于没有MMU的机器,这些地址的行为与具体实现机器相关。具体CPU的手册将会提供有关这方面的信息。如果想要你的代码能够移植到无MMU的处理器上,或者能够在不同的无MMU的处理器间移植,应避免使用这块区域。
kseg0 Ox8000 0000-Ox9FFF FFFF (512M):只要把最高位清零这些地址就会转换成物理地址,映射到连续的低端512M的物理地址。因为这种转换极为简单,常常称这段地址为“非转换的”的区域,但其实不然。该区域的地址几乎总是要通过高速缓存来存取,所以在高速缓存适当初始化之前,不能使用。这个区域在无MMU的系统中用来存放大多数程序和数据;在有MMU的系统中用来存放操作系统核心。
kseg1 OxA000 0000-OxBFFF FFFF (512M):这些地址通过把最高三位清零的方法来映射到物理地址,重复映射到了低端512M的物理地址。但是这一次存取不经过高速缓存。kseg1是唯一的在系统重启时能正常工作的地址空间。这也是为什么复位时的入口点(0xBFCO 0000)放在这个区域。入口点相应的物理地址是0x1FCO 0000——把这一点告诉你的硬件工程师。因此要使用这个区域去存取初始的程序ROM;大多数人也把该区用作I/O寄存器。如果硬件设计人员提议要把这些东西映射到物理内存的低512M空间之外,你得劝阻他。
kseg2 OxC000 0000-OxFFFF FFFF (1G):这块区域只能在核心态下使用并且要经过MMU的转换。在MMU设置好之前,不要存取该区域。除非你在写一个真正的操作系统,否则来说没有理由用kseg2。有时你可能会看到该区域被分成两半,分别叫做kseg2和kseg3,意在强调其低半部分(kseg2)可供运行在管理态的程序使用。

简单系统的寻址
MIPS的程序地址从来不会和物理地址简单相等。但对与简单的嵌入式软件而言可能只用kseg0和kesg1的地址,它们和物理地址有着非常简单的映射关系。
从0x2000 0000 (512M)开始向上的物理地址空间在上述简单情形下没有任何的映射,大多数简单的系统所有地址都映射到512M以下。但是如果真的需要,你可以通过设置存储器管理单元的(TLB)的方式,或者使用64位CPU的一些额外空间,来存取512M以上的物理地址。

核心与用户特权级
在核心特权级下(CPU启动时),可以作任何事情。在用户态下,2G(最高位置位的)以上的程序地址是非法的,会导致陷入异常。注意的是,如果CPU有MMU,这意味着所有的用户地址在真正到达物理地址之前必须经过MMU的转换,从而使得操作系统有能力可以防止用户程序失去控制/乱冲乱撞。同时也意味着对一个运行着没有地址转换的OS的MIPS CPU来说,用户特权级其实是多余的。
另外,在用户态下,有些指令――特别是操作系统需要的那些CPU控制指令——是非法的。
要注意的是,当你改变核心态/用户态特权级模式位时,并不改变对任何行为的解释―― 仅仅意味着某些功能在用户态下不允许了。在核心态下,CPU可以存取低位地址,就和在用户态一样,并且地址也是做同样的转换。
还要注意的是,尽管听上去好像是在说“核心态是操作系统用的,用户态是日常简单的代码用的”,但是事实与此相反。有些简单的系统(包括许多实时操作系统)全部代码都是运行在核心态下的。

MIPS CPU地址空间简介

uMIPS CPU地址空间简介(整理自《See MIPS Run》和CPU文档):       注:首先需要明确的是CPU物理地址空间不仅仅包括RAM物理内存的空间,还包括CPU内部的一些总线、寄...
  • mrwangwang
  • mrwangwang
  • 2013-03-03 13:12:20
  • 3560

mips64 虚地址空间划分

在32位CPU下,程序地址空间划分为4个大区域。每个区域有一个传统的名字。对于在这些区域的地址,各自有不同的属性: kuseg: 虚拟空间0x0000 0000 - 0x7FFF FFFF (低...
  • lanxch
  • lanxch
  • 2012-11-05 22:47:35
  • 4061

MIPS VS ARM

1.流水线结构 pipeline     - MIPS 是最简单的体系结构之一,所以使大学喜欢选择 MIPS 体系结构来介绍计算体系结构课程。     - ARM has barrel shift...
  • nancygreen
  • nancygreen
  • 2013-07-08 11:16:10
  • 1793

看 mips 跑

第四章 MIPS的高速缓存管理机制 许多MIPS CPU都采用程序(虚拟)地址为一级高速缓存提供快速的索引,但是却采用物理地址标记每一个高速缓存行,而不是采用程序地址加地址地址空间标识符。对应高速缓...
  • hit_shaoqi
  • hit_shaoqi
  • 2017-08-12 17:16:55
  • 109

MIPS 在linux中的内存映射

如图: 一些说明: 1.内核从什么地方开始运行:MIPS Linux内核的代码构建为在kseg0区运行;虚拟地址从0x80000000向上。这个范围的地址仅仅是一个到物理内...
  • HAOMCU
  • HAOMCU
  • 2012-10-30 17:34:29
  • 4248

MIPS存储管理

在MIPS CPU里,你的程序中使用的地址绝对不会和芯片里的物理地址一样(有可能会很接近,但不会相同)。我们分别称为:程序地址和物理地址(Physical Address)。这里所讲的程序地址的含义同...
  • phunxm
  • phunxm
  • 2013-07-20 19:47:47
  • 10666

体系架构番外篇 - MIPS基本地址空间

From: ongoingcre 体系架构番外篇 - MIPS基本地址空间到底是无知者无畏还是博学者无畏? - XXX辩论场MIPS 图说地址空间 几大名词的描述:Kuseg - 低2G地址,所谓的...
  • ongoingcre
  • ongoingcre
  • 2015-11-16 22:48:12
  • 2123

mips地址空间说明

在32位MIPS体系结构下,最多可寻址4GB地址空间。这4GB空间的分配是怎样的呢?让我们看下面这张图:      +-----------------------------------------...
  • cybertan
  • cybertan
  • 2009-08-01 14:50:00
  • 3034

MIPS虚拟地址到物理地址转换过程

EntryHi 10 ù Mì˜å¤ ˜‡TLB L‘¤I˜ kéTLB Öч²L§‚"EntryHik V ASID¶MIPS32/64 CPUz˜‘Nü‡ëY VPN...
  • kklvsports
  • kklvsports
  • 2014-04-06 21:07:08
  • 1688

MIPS地址空间

原文来自:http://www.johnloomis.org/microchip/pic32/memory/memory.html 使用MIPS CPU时,你程序放入的地址永远不会和物理地址一致(有...
  • zkylqh123
  • zkylqh123
  • 2011-11-25 11:07:06
  • 364
收藏助手
不良信息举报
您举报文章:MIPS 地址空间
举报原因:
原因补充:

(最多只允许输入30个字)