问题标签 [virtual-memory]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
permissions - 页表之外的虚拟内存
我正在开展一个研究项目,为多核(1000+)芯片开发操作系统。我们正在研究为内存权限(读/写/执行)实现一个虚拟内存类型系统,这将允许内存在内核之间安全共享。
基本上我们想要一个系统,它允许我们将“页面”标记为可由另一个可写的核心子集读取......等等。我们不会进行地址转换(至少在这一点上),但我们需要一种有效设置和查询权限的方法。它将是一个软件填充的数据结构,带有一个简单的 TLB 样式缓存。
我们的直觉是,简单地为每个核心复制页表将太昂贵(就内存使用而言)。
什么样的数据结构对这类问题有效?
谢谢
kernel - 内核设计中的“遵循弹跳内核”技术
晚上好。我想知道有关上述技术的一些细节。主要目标是允许用户应用程序使用完整的 4GB 虚拟内存空间。目前,每个用户应用程序在其虚拟内存布局中都有很多关于内核数据结构的只读信息。不幸的是,谷歌在“跟随弹跳内核”方面并没有给我太多帮助,所以我很好奇这种技术是否有一些通用名称或者它是关于什么的?
windows - 内存泄漏和缓慢的用户体验
在我的一个应用程序中,我一直遭受大量内存泄漏的困扰:只要发生泄漏,我的计算机就会变得非常慢。在我修复泄漏之前,我想了解为什么会发生这种情况。
例如,以下带有泄漏的小 C++ 代码:
根据我对虚拟内存、磁盘缓存等的理解,我希望当上面的代码在最后一行等待用户输入时,它的 1GB 缓冲区不再被使用,因此操作系统应该逐渐将其交换为磁盘并“忘记”它。我(用户)会遭受一段时间的减速,但一段时间后事情会恢复正常。
这不是我的系统(Windows XP,32 位,2 GB RAM)上发生的情况。当我运行上述代码时(两次,在 2 个单独的cmd
窗口中,为了浪费所有可用内存),我觉得我的系统速度非常慢;几分钟后它会变得更好,但没有接近最大性能。在我终止泄漏的“应用程序”后,系统恢复正常。
只是为了显示一些数字,我使用一些源代码的编译作为性能测试。我连续编译了几次以进行多次测量(以秒为单位)。
- 泄漏前:14、2、2、3、2、...
- 泄漏后:183、40、9、7、9、...
- 关闭泄漏的“应用程序”后:12、2、2、...
减速 3 倍,我预计不会。这怎么解释?
memory - 文件系统 - 内存映射文件
我的操作系统课程的最后一个示例问题:
大多数操作系统都支持“内存映射文件”;这描述了映射到正在运行的进程的地址空间的文件。对文件的读取和写入转换为内存读取和写入。我们可以想象存在两个新的系统调用,map() 和 unmap()。
a) 考虑 map();它接受文件名和虚拟地址,使操作系统将文件映射到从虚拟地址开始的地址空间。描述如何使用虚拟内存系统来支持这个调用。
b) 考虑 unmap();它将文件与虚拟地址空间分离。描述实现此系统调用应采用的统计信息。列出你所有的假设。
c) 在许多 UNIX 系统中,inode 保存在磁盘的开头。另一种设计是在创建文件时分配一个 inode,并将该 inode 放在文件第一个块的开头。讨论这种替代方案的利弊。
d) 如果包含空闲磁盘块信息的位图或空闲列表由于崩溃而完全丢失,会发生什么情况?无论如何要从这场灾难中恢复,还是磁盘不再可用。讨论您对 UNIX 和 FAT 样式的磁盘块分配的答案。
非常感谢有关这些问题的任何讨论信息。
performance - Windows 7 上的虚拟内存管理
我在technet上找到了关于这个主题的这篇文章:
http://technet.microsoft.com/en-us/magazine/ff382717.aspx
微软对各种手册页文件配置有一些基准吗?
有人告诉我,最好在带有 4.5 Gig 操作系统的驱动器上创建一个额外的分区,并将页面文件移动到这个分区,同时禁用操作系统的第一个分区。此外,建议手动将页面文件大小设置为限制 2 / 2 Gig。
在我看来,这没有任何意义。有人可以对此发表评论吗?
linux - 在 Linux 中分配特定地址
我想在特定地址的进程中分配 Linux 中的内存。实际上我想做一些类似的事情:我将有一些过程。每个进程都会调用库(由我编写)中的初始化函数,该函数将在进程的地址空间中分配一些内存(将存储进程相关信息)。这将由每个进程完成
一旦分配了该内存,稍后程序将调用库中的其他函数。现在这些函数想访问第一个函数分配的内存(包含进程相关信息)。
问题是我无法将分配的内存地址存储在库中的进程地址空间中(即使在静态指针中也没有,因为有进程数),我什至不希望用户程序存储该地址。我只是不希望用户程序知道库在其地址空间中分配了内存。库功能将是他们的抽象,他们必须使用它们。
是否有可能克服这个问题。我在想,每当任何进程调用分配内存的库的初始化函数时,内存总是在所有进程中分配到相同的地址(比如 10000),而与所有其他事情无关。
因此,任何想要访问该内存的库函数都可以通过以下方式轻松完成:
char *p=10000;
然后访问,就是访问调用库函数的进程的地址空间。
operating-system - 限制虚拟内存的因素有哪些?
我所知道的是,虚拟内存的大小仅受地址线数量的限制。但是在William Stallings 的操作系统内部和设计原则中,我读到虚拟内存也受到辅助内存大小的限制。
1.如何?
2.交换(在主内存和辅助内存之间)是虚拟内存的必要条件吗?我的意思是,如果不允许交换,那么我们仍然可以将其称为虚拟内存,尽管好处会受到限制吗?
然后我有几个基于答案的后续问题。
编辑:
我想我一定引用了书中的原话:
一种存储分配方案,其中辅助存储器可以像主存储器的一部分一样被寻址。程序可以用来引用内存的地址与内存系统用来识别物理存储站点的地址不同,程序生成的地址会自动转换为相应的机器地址。虚拟存储的大小受计算机系统的寻址方案和可用辅助存储器的数量限制,而不是受主存储位置的实际数量限制。
在“虚拟内存”和“虚拟存储的大小”中是否存在某种文字游戏?
windows - 为什么锁定页面不计入工作集大小?
WinAPI 调用的目的VirtualLock
是将页面锁定到进程的工作集中。但是,WorkingSet64
API 莫名其妙地不计算这些页面。
可能因此,进程资源管理器和标准任务管理器都不会在其每个进程的内存使用统计信息中计算锁定页面。
这是怎么回事?非常熟悉 WinNT 中的虚拟内存的人能否解释一下这种不一致,这会导致千兆字节的已用 RAM 基本上未被检测到?(想想 SQL Server 或 VirtualBox)
c - 了解分页虚拟内存的第一步:在初始页面错误时创建页表条目
我想了解虚拟内存分页。我有以下代码片段,代表该过程的第一步。这里search_tbl
从主程序调用每个逻辑地址,以检查页表是否已经有一个条目,该条目将提供的逻辑地址映射到物理内存中的某个位置。vfn
是虚拟帧号。
编辑: 这个实现有什么意义吗?还是我走错了路?
任何帮助/建议将不胜感激。谢谢你。
android - Android virtual memory and paging
Can anyone elaborate or provide a link to android memory management. I am confused about Android virtual memory scheme. How is paging done in Android? Without a hard disk, how do they do it? Do they have caching?