我有一个关于MIPS处理器实际使用的内存类型的问题。我知道,当MIPS程序被组装时,程序的不同部分将被存储在内存的不同区域,根据它是静态数据,动态数据,要在堆栈上分配的数据,还是指令。我知道MIPS内存分为内核空间、动态内存、静态内存、指令文本内存和堆栈内存。我的问题是,从硬件的Angular 来看,这是所有的RAM内存吗?有时MIPS内存的静态内存部分被称为ROM内存,但它不能是ROM,因为数据可能会被覆盖。那么所有的MIPS内存都只是RAM内存吗?从硬件的Angular 来看,内核部分是用于OS ROM内存还是RAM?
我试着在网上找,但我找不到一个明确的答案,处理器内存的硬件细节。
2条答案
按热度按时间agyaoht71#
这完全取决于您的系统设计。MIPS本身只有一个要求--“在CPU复位时,地址0x 1FC 00000必须包含启动代码”。
代码和只读数据可以驻留在ROM或RAM中。MIPS CPU不区分代码和常量数据-它们可以混合在一起。如果它们驻留在RAM中-它们仍然可以被虚拟内存保护不受修改。
可复制数据必须驻留在RAM中。如果它在ROM中启动-它必须在程序启动时复制到RAM中。堆栈和堆总是在RAM中。在程序启动时它们是空的。
所有这些配置都是可能的:
4ioopgfo2#
现在你必须区分MIPS处理器和MIPS芯片产品。我假设你的意思是mips的核心/架构。
与任何其他购买的IP或架构(arm,riscv等)一样,是芯片人员决定的,有时架构对他们有限制,但芯片人员决定,而不是为核心处理器创建IP的人。
可悲的是,文档仍然使用像“内存Map”这样的术语,使人们认为整个事情都有内存,ram,在它后面,然后内存MapI/O是如何工作的,I/O是否读取内存,等等。
从硬件的Angular 来看,(在这里再次如果你是使用一个字面上无数的每一个其他计算机工程师不得不作出一个或两个mips核心在大学mips核心,或一个真实的一个你买了,甚至在那里,总线细节因实现而异),具有某些地址,作为芯片人员,您只需在架构限制和合理范围内做出决定(包括制作一个可以销售或使用的产品)如何划分地址空间以及在后面放什么。
静态内存与动态内存我假设你是指SRAM和DRAM。一般来说,当通电时,CPU不会神奇地工作。你需要一些init或很多init和一个典型的/理智的设计,你把它留给软件/ Bootstrap 的人,你把控制器的控制寄存器和物理层连接到处理器的地址空间,并帮助他们这样做,但软件做。那么.....如果他们没有密码,那么他们在哪里运行这些代码呢?
SRAM你倾向于有一定数量的片内SRAM或可能的片外SRAM,但至少有少量(kbytes)引导加载程序可以用于非常早期的引导任务,包括初始化内存或其他更大的内存。SRAM是一个通用术语,它涵盖了大范围的解决方案和实现,但一般来说,对于这个答案,它是逻辑。硬件人员选择地址空间的某个部分来定位该SRAM。
同样适用于闪存/rom/等非易失性存储来保存 Boot 和其他东西,或者一些解决方案不一定有闪存,设计是这样的,你下载固件,您的鼠标和键盘等可能以这种方式工作,即逻辑本身对USB总线做足够的工作,以使内核驱动程序将外围设备的固件下载到外围设备上的SRAM中,然后外围设备复位并重新在总线上枚举为键盘或鼠标或摄像头或其他东西。
你可以在很多设计中看到这一点,比如基于arm的设计(手机,平板电脑等),处理器的地址空间中可能有也可能没有闪存空间,但是逻辑本身可以读取sd卡并将内容复制到ram中,处理器可以看到自己的sram,可以初始化并看到闪存,但不能直接看到闪存(在地址空间中作为可读存储器)。人们会期望一些mips设计也这样做,但.这取决于芯片的人。
好的你说了静态数据和动态数据但是你问的是硬件。
内核指令、读/写内存、堆栈和堆、应用程序指令、读/写内存、堆栈和堆都只是RAM。SRAM或DRAM。它只是拉姆。
MIPS架构如何缓存与不缓存与ARM架构如何缓存是不同的,据我所知,然后你有MMU,除了提供保护(经常),他们还帮助你进行内存管理(所有三分之二的名字,如果不是三分之三)。一个应用程序可以分配16兆的“内存”,预期从返回的基址开始是线性的,但是可以是一个/几十个/几百个单独的、非线性的物理内存块,使用mmuMap到一个线性虚拟空间中。
你的问题也会导致物理内存的寻址,因为内核与应用程序,内核意味着操作系统意味着,不需要,但意味着应用程序在虚拟地址空间中。内核堆栈、堆、读/写、指令、只读数据都在一个地址空间中,可能是物理的。应用程序,复数,每个都有自己的堆栈,堆,读/写,只读和指令空间。出于多种原因,两者都类似于一些线性空间,程序员(间接地通过选择工具链和库等知道你的目标并可能为你划分它,但实际上是你控制的)选择如何将内存划分为这些不同的部分。当你进入嵌入式系统时,这个规则也有例外,但对于你的通用Linux/windows/mac机器来说,这一切都是免费的,没有神奇的内存。
在某些嵌入式系统中,除了具有缓存层之外,您可能知道并选择例如将某些内容放在片上SRAM空间中,例如堆栈或一些性能关键代码,使用链接器魔术或mmu魔术或其他,以便通过使用SRAM而不是缓存或SRAM来获得性能增益。把这当作一个例外,而不是规则。
对于典型的基于操作系统的通用计算或服务器产品(如笔记本电脑/台式机/服务器,甚至智能手机和平板电脑),从硬件Angular 来看,它是一个巨大的线性物理地址空间,在Linux中实现。操作系统人员首先为自己占用空间,然后将一定比例的空间用于应用程序。操作系统人员定义了每个应用程序的虚拟空间,并假设它看起来也像一个扁平的线性空间,由xml 2支持,但通过一个mmu和缓存。(毫无疑问,内核也会得到缓存的好处)。
那么所有的MIPS内存都只是RAM内存吗?
是的
我试着在网上找,但我找不到一个明确的答案,处理器内存的硬件细节。
你不仅要看具体的芯片(不是MIPS核心,而是基于MIPS的芯片),而且还要看基于这些芯片的系统,所以虽然芯片人员有广泛的选择,(无论他们能想到什么适合架构)购买芯片和制造电路板的人往往有一个小到广泛的选择。因此,对于mips,它已经存在了多久,假设有无数种组合,没有办法搜索到每个人都使用的答案。没有,你必须看看特定的电路板与特定的芯片,其中大部分是专有信息,但也有树莓派一样的产品是开放的硬件式的.与原理图等,并使用芯片,你可以得到文档没有保密协议。在数十个/数百个/数千个中,您可以一次查看一个,看看他们是如何做到的,包括这些单个板级产品的参考设计或板级支持包或这些产品的参考设计。
虽然从技术上讲,一个尺寸并不适合所有人,但这是一个安全的假设,对于足够大级别的解决方案(在台式机或服务器等大型计算机上运行windows或Linux或macos),您所要求的所有内存都是一个由操作系统人员划分的备份线性空间,包括关于应用程序虚拟地址空间的规则。