呃,以前考过好几遍了,但是发现和具体问题结合起来仍旧会有认识不好的地方。在总结下吧。
总结时候就用ps3(其实就是linux,涉及到权限说一声,我赶紧删除,囧)来做实际结合(唔,不敢保证都正确,对照书,文档和自己理解来吧)
virtual memory本质上属于一种抽象表示,让system可以脱离开硬件的限制(比如memory大小)来工作。
所以cpu与之交互的是virtual address,cpu每写一个byte,实际是对一个virtual address进行操作,然后这个virtual address再转换成物理地址,最后落实到写到一个memory上去。
virtual address到物理地址映射由page table完成,映射的最小单元是page,page table的条数就是virtual_memory_size/page_size。所以page table有可能很大,查询地址映射过程也可能很慢,这里就会对这个映射进一步做一个cache,也就是translation lookaside table。
体系结构书上讲virtual memory映射有segment(size变化的)和page(size固定的)的两种,但是在ps3系统中segment变成process address映射到virtual address的东东了,所以这个多少有些出入,以实际应用为准吧,毕竟这是想怎么弄怎么弄的东西,完全看实现OS的人的心情,囧。
virtual memory使用的时候会遇到page fault,就是用到的virtual memory部分没有对应的physical memory呢,这时候就要做换页了,涉及到换页策略问题(FIFO,Priority...)。然后page size也是一个影响因素,影响到碎片,交换效率,cache效率等等,好在这一般是OS实现者操心的事情,实际应用中,我们一般就2选择64k和1M,好了坏了试下就知道了。
这些事情都是有操作系统来完成,基本概念如此,实际实现中有很多可以变化的地方。
在现在操作系统中,可以是多process的,那么每个process有个地址空间,形成一个segment,segment再通过segment table map到virtual address, virtual address在通过page table map到物理地址
下面结合ps3上的一堆概念,来看下:
PS3上相应一堆概念:
在ps3上,概念复杂一些,首先有个virtual address
-
LPAR----logical partition, (wikipedia上说)一个电脑可以划分成多个LPAR,每个LPAR可以承载一个操作系统,是一个硬件资源的子集。应也就是物理地址。
-
VirtualAddress----80bit 的address, 它通过page map到LPAR,page size可以指定,64k或者1M。
-
EffectiveAddress----64bit address used by PPU. spu和ppu交互用的地址就是这个。其实是一个segment的概念,是以256M大小map到virtual address space
-
SLB : segment lookaside table :这个和TLB很像,TLB是一个virtual address到physical address转换的page table的cache,SLB是effective address到virtual address mapping信息(segment table)的cache。
-
TLB:上面说了呃。
-
Process address space----是针对effective address来说的(segment的概念),从0到0xffffffff,然后每个segment map到不同的virtual address,这样不同的process不会互相访问彼此的address。
-
LocalStorage----专门给spu访问的。
-
TLS----thread local storage----专门给某个thread访问的storage。
一些memory management的相关概念
ps3操作系统提供了一些memory相关函数来用,
- 直接操作系列:sys_memory_allocate:alloc page size为单位的memory,map到process address上,然后返回map好的process address space上的地址。这种就是操作map好的memory
- 自己map系列:sys_mmapper_xxx系列,这个就要自己手动去alloc一个物理地址,然后alloc一块process address,然后自己map。这种对于高杆一些的memory管理很有用。
virtual memory:
- 除了256M main memory之外,还可以弄最多不超过256M的virtual memory,可以给ppu,spu用,对于一些memory巨缺的项目这个是相当有帮助的,当然这也是托了ps3标配硬盘的福,360就没这个能力了。
- 初始化设置的时候,可以通过函数把virtual memory map到physical memory上,比如做100M map到40M这样的,出现miss,就自己换页。
- Page fault----当游戏访问一个没有physical memory的virtual memory的时候,系统会试着去alloc一个physical memory。如果没有phsical memory可以alloc了,就交换出一个page(根据一些优先级规则),然后腾出一个地方。整个交换时间可能比较长,这个时候线程会sleep,甚至出现切换线程的情况。
小结下,总之说来我们在游戏里面用的pointer一类东西,里面是process address的逻辑地址。
这个逻辑地址通过segment table到virtual address, virtual address 通过page table到physical address。
physical address的allocate free等操作由操作系统管理,可以在游戏中调用相应函数来操作。
分享到:
相关推荐
编译时虚拟内存不足(Virtual Memory Exhausted)是指在编译程序时出现的内存不足的问题,可能是由于虚拟机的内存设置太小或swap空间不足所致。解决这个问题的方法是扩展swap空间,增加虚拟机的内存大小。 在解决这...
elasticsearch启动后自动关闭:max virtual memory areas vm.max_map_count [65530] is too low, increase to at… elasticsearch 我遇到的问题是用docker 启动elasticsearch后会自动关闭,具体关闭时间点没注意,...
《深入理解Linux虚拟内存管理》 在Linux操作系统中,虚拟内存管理是系统核心的重要组成部分,它使得进程可以独立地使用内存,而无需关心物理内存的实际分布情况。这一机制的实现,使得Linux系统能够高效地利用有限...
Linux虚拟内存是Linux操作系统中非常重要的一个概念,它是现代操作系统内存管理技术的核心部分。理解Linux虚拟内存的管理,对掌握Linux系统的工作原理,进行系统优化和故障排查有重要作用。 Linux虚拟内存管理主要...
Linux虚拟内存管理系统(Virtual Memory Manager,VMM)是Linux内核的核心组件之一,它负责为进程提供独立、私有的地址空间,并通过内存映射、交换机制等手段优化物理内存的使用。 Linux虚拟内存的主要目标是提供一...
虚拟内存是操作系统中的一种核心机制,它在Linux系统中扮演着至关重要的角色。虚拟内存提供了一种抽象,使得每个进程都拥有独立的、私有的地址空间,即使它们共享同一物理内存资源。这种机制大大增强了系统的安全性...
Real time virtual memory operating system. Should support multiple hardware architectures. Now only i386 is supported. It uses a partitioned memory system and can have multiple virtual memory contexts...
在“Virtual memory management ppt”中,主要探讨了虚拟内存管理的多个关键概念和策略。 11.1 引言:这部分介绍了虚拟内存管理的基本原理,包括替换策略和获取策略。替换策略是当内存满时,系统用来选择哪些页面...
详细描述Linux虚拟内存,提供理论基础和逐行源代码注释。 它系统地涵盖了从物理内存描述到内存不足管理的所有内容。
ch9-Virtual Memory.ppt
虚拟内存(Virtual Memory)是现代计算机系统中一项关键的技术,它允许程序访问比物理内存大得多的地址空间,从而简化了内存管理并提高了资源利用效率。以下是对虚拟内存概念、功能以及其实现机制的深入解析。 ### ...
a shared virtual memory system for parallel computing
操作系统英文教学课件:Chapter 9 Virtual Memory.ppt
Linux is developed with a strong practical ...Virtual Memory (VM) system were designed by theorists but the implementations have now diverged from the theory considerably.很经典详解linux的虚拟内存管理