Rit*_*esh 4 linux memory memory-management model vxworks
平面内存模型和受保护内存模型之间的区别?VxWorks支持平面内存模型,Linux是否也支持平面内存模型?
Ben*_*oit 14
为了给出有意义的答案,让我们先回顾一些概念.
大多数现代处理器都有一个内存管理单元(MMU),可用于多种用途.
一个目的是在虚拟地址(CPU"看到的")和物理地址(芯片实际连接的地方)之间进行映射.这称为地址转换.
另一个目的是为某些虚拟内存位置设置访问属性(内存是读写,只读或不可访问)
使用MMU,您可以拥有所谓的"统一映射",其中处理器的虚拟地址与物理地址相同(即您不使用地址转换).例如,如果处理器访问0x10000,则它正在访问物理位置0x10000.
"平坦"存储器模型通常指的是CPU访问的任何虚拟地址都是唯一的.因此,对于32位CPU,您最多只能使用4G的地址空间.
通常(但不一定)用于指代虚拟和物理存储器之间的统一映射.
相反,在工作站领域,大多数操作系统(Linux/Windows)使用"重叠"内存模型.例如,您在Windows中启动的任何程序(进程)将具有0x10000的起始地址.
Windows如何从地址0x10000运行10个进程?
这是因为每个进程使用MMU将虚拟地址0x10000映射到不同的物理地址.P1可能有0x10000 = 0x10000而P2有0x10000 = 0x40000等...
在RAM中,程序位于不同的物理地址,但CPU虚拟地址空间对于每个进程看起来都是相同的.
据我所知,Windows和标准Linux总是使用重叠模型(即它们没有平面模型).uLinux或其他特殊内核可能具有扁平模型.
现在,保护与平面与受保护模型无关.我会说大多数重叠的模型操作系统将使用保护,以便一个进程不会影响(即写入内存)另一个进程.
使用VxWorks 6.x和实时进程的引入,即使使用扁平内存模型,也可以通过使用保护来保护各个RTP(以及内核应用程序).
如果您不使用RTP并运行vxWorks内核中的所有内容,则不会使用任何保护.
那么,保护如何工作(无论是在VxWorks RTP还是其他操作系统进程中)?从本质上讲,RTP/Process存在于"内存泡沫"中,其中包含一定范围的(虚拟)地址,其中包含代码,数据,堆和其他各种内存位置.
如果RTP /进程尝试访问其外部的内存位置,则MMU会生成异常并调用OS(或信号处理程序).典型的结果是段违例/总线异常.
但是,如果一个进程无法逃脱内存泡沫,它如何将数据包发送到以太网端口?这取决于处理器体系结构,但实际上,用户端(RTP)套接字库(例如)进行"系统调用" - 这是一种将cpu切换到内核空间和管理程序模式的特殊指令.此时,某种设备驱动程序(通常驻留在内核中)运行以将数据推送到某些硬件设备.完成后,系统调用将返回,我们将返回运行用户代码的RTP /进程空间.
操作系统负责所有MMU编程,系统调用处理等......这对应用程序是不可见的.
归档时间: |
|
查看次数: |
4734 次 |
最近记录: |