首页 > TAG信息列表 > virtual-memory

c-Linux将虚拟内存范围映射到现有虚拟内存范围?

在Linux中,是否有一种方法(在用户空间中)将虚拟地址范围映射到支持现有虚拟地址范围的物理页? mmap()函数仅允许一个映射文件或“新”物理页面.我需要能够执行以下操作: int* addr1 = malloc(SIZE); int* addr2 = 0x60000; // Assume nothing is allocated here fancy_map_func

访问linux虚拟内存

在新的内核版本中,/ dev / kmem已禁用,还有其他方法可以访问linux虚拟内存吗?我的目标是搜索内存,查找函数调用并在其地址上插入kprobes.解决方法:禁用kmem的想法恰恰阻止了您执行自己想做的事情.您可以使用CONFIG_DEVKMEM = Y重新编译内核以重新启用/ dev / kmem

Linux:页面错误和网络文件系统

如果Linux系统的物理内存不足,它会丢弃不活动的可执行代码页吗?我认为答案是肯定的,因为没有理由让它们保持交换状态,因此只要有必要,就将它们丢弃并重新装入(据我所知,这就是FreeBSD所做的). 如果以上情况适用于Linux,我的问题是,它如何处理从网络文件系统(例如NFS)运行的可执行文

在Eclipse中增加Java堆大小-使用虚拟内存

我正在Eclipse(Windows)中运行程序,并且需要相对较大的内存.将-Xmx1500m传递给程序似乎还不够,而Eclipse不允许我分配更大的值.有了这种配置,我得到了内存不足的异常. 我将虚拟内存大小增加到40GB.没有办法使该内存可供我的程序使用吗?对于几乎相同的工作,我很容易用C#做到了.解决方

Linux 3/1虚拟地址拆分

在了解highmem需要超过1GB的RAM时,我遗漏了一些东西.有人能指出我哪里出错吗?谢谢! 我知道的: > 1 GB的进程虚拟内存(高内存区域)保留用于内核操作.用户空间可以使用剩余的3 GB.这是3/1分裂. > VM的虚拟内存功能将(连续)虚拟内存页面映射到物理页面(RAM). 我不知道的是: >哪些操作使用

Linux页面表的过程

Intel core i5, Ubunu 16.04 我正在阅读有关内存分页here的内容,现在正在尝试使用它. I wrote a simple assembly program for getting Segmentation Fault并在gdb中运行.这里是: section .text global _start _start: mov rax, 0xFFFFFFFFFFFF0A31 mov [val],

linux – 在/ proc / pid / smaps中为给定进程更新PSS值的频率

因此,如果n个进程共享大小为M的库L,则对其PSS的贡献是M / n. 现在假设其中一个进程终止.因此贡献将是M /(n-1). 问题1:我的问题是这个变化多久反映在仍在运行和使用共享库的进程的PSS值中? Q2:作为一个简单的例子,假设只有两个进程正在使用大小为100K的共享库. PSS对每个过程的贡献是5

记忆 – 程序执行2天

我有一个实现匈牙利算法的java程序.我以这样一种方式对现有代码进行了更改,即从文件中读取输入.我有大约32,000行的巨大输入,我正在计算最大边缘权重. 问题是,当我使用命令运行程序时, java Hungarian_algorithm.java 为此,我收到一个错误,java.lang.outofMemoryError:java堆空间

没有交换分区使用Linux的提示

在过去,我已经厌倦了Linux上的内存不足情况,其中虚拟内存开始交换并占用磁盘活动,并且机器速度变慢. 所以,当我在我的MacBook Pro上安装Ubuntu时,我注意到它有8 GB的内存,我对自己说,“这似乎已经足够了,我想我会避免交换问题而不为虚拟内存预留分区.我反正需要磁盘空间.“ 好吧,令

Linux / JVM – OutOfMemoryError:无法创建新的本机线程

我的Linux服务器(CentOS)存在内存问题.它是一个VM.以下是上下文. 它有70Gb的RAM.有2个tomcat在上面运行. 给一个tomcat一堆13Gb,另一个给一堆20Gb. 具有20Gb的那个具有JVM选项-Xss160k设置(试图解决我的问题). 这2个tomcat可以使用高达48Gb的RAM(virt.) Linux将使用70Gb,并且将有大

linux – 无法交换,但有足够的物理内存可用

关闭交换我有一个奇怪的问题. 服务器有192 GB内存,154 GB可用. 它是一个运行许多Linux KVM虚拟机的Hypervisor. 当试图: # swapoff -a swapoff: /dev/sda2: swapoff failed: Cannot allocate memory 但记忆是免费的: # cat /proc/meminfo MemTotal: 197805748 kB MemFree:

linux – 如何vmtouch目录(而不是它包含的文件)?

vmtouch(8)工具允许锁定内存中的文件.它具有递归模式,但目录仅用于发现文件而不是自己锁定. 如何锁定内存中的目录,以便readdir在我解锁之前总是快速的?解决方法:vmtouch绝对不会管理这个. vmtouch确实打开(2)& mmap(2)关于你指示它的文件. 即使你让内核缓存readdir(2),它仍然是一个

linux – CPU如何知道哪个物理地址映射到哪个虚拟地址?

根据我的理解,每个进程通过虚拟地址而不是物理地址访问内存,并且CPU负责通过MMU单元将这些虚拟地址转换为物理地址,并且两个或多个进程可以具有相同的虚拟地址. 因此,假设进程A正在尝试访问虚拟地址12345,并且进程B也尝试访问虚拟地址12345. MMU如何将每个进程的虚拟地址转换为物理

linux – Zswap,Zram,Zcache桌面使用场景

我一直在努力了解Zswap,Zram和Zcache的用例差异.为长期/略微措辞问题提前道歉. 我已经完成了一堆谷歌搜索,我知道zram基本上是压缩交换的块设备,而zswap使用frontswap api在内核中压缩.似乎zswap的一个优点是它可以在LRU方式的压力下将一些页面移动到后备交换,而zram不能这样做(请

linux – pmap输出的含义

我在Linux中编写了main.c: int main() { while (1){} } 当我编译并启动它时,我可以对它进行pmap: # pmap 28578 28578: ./a.out 0000000000400000 4K r-x-- /root/a.out 000000000int main() { while (1){} } 00 4K r---- /root/a.out 0000000000601000

Linux不使用分段而只使用分页吗?

Linux编程接口显示进程的虚拟地址空间的布局.图中的每个区域都是一个细分市场吗? 从了解Linux内核, 以下是否正确,MMU中的分段单元将段内的段和偏移映射到虚拟内存地址,然后寻呼单元将虚拟内存地址映射到物理内存地址? The Memory Management Unit (MMU) transforms a logical add

linux – 为什么64位cpu不存在高内存?

虽然我试图了解32位CPU和Linux的高内存问题,但为什么64位CPU没有high-memory problem? 特别是,如何将虚拟内存划分为内核空间和用户空间,以便64位cpu不存在高内存需求? 谢谢.解决方法:32位系统只能处理4GB内存.在Linux中,它分为3GB的用户空间和1GB的内核空间.这1GB有时是不够的,因此

堆栈内存是否在Linux中是连续的?

据我所知,堆栈内存在虚拟内存地址中是连续的,但堆栈内存在物理上是连续的吗?这是否与堆栈大小限制有关? 编辑: 我曾经认为堆栈内存不必在物理上是连续的,但为什么我们认为堆栈内存总是比堆内存更快?如果它不是物理上连续的,那么堆栈如何更好地利用缓存呢?还有另一件事总是让我感到困惑,c

如何在Linux虚拟内存系统中尝试访问其他进程的内存

当我在Linux中学习虚拟内存系统时,我感到困惑. 由于每个进程都有自己的虚拟地址空间和自己的页表,将其虚拟地址转换为物理地址(我是对吗?),它怎么可能试图错误地访问其他进程的内存?页面表中应该没有条目,对吧?解决方法:除非特别安排,否则一个进程可以访问的虚拟地址不会修改分配给另

objdump vs / proc / pid / maps的虚拟内存地址?

我正在尝试了解程序的可执行程序集在程序加载/运行时的确切位置.我发现有两个资源在讨论这个问题,但它们有点难以阅读: > Understanding ELF using readelf and objdump Linux article(代码格式混乱) > Michael Guyver, Some Assembly Required*: Relocations, Relocations(很多我不

c中重复的物理地址

参见英文答案 > Printing the physical address of a C pointer                                    2个 当我们在c程序中打印地址变量时,根据我的理解,它会显示虚拟地址,因为每次它都相同(自动变量除外).有什么办法我们可以知道物理内存地址

告诉Java不要将对象推入交换空间

是否有可能告诉JVM提示操作系统某个对象最好不会被推出交换空间?解决方法:最简洁的答案是不. Java不允许您对交换的内容以及“固定”到RAM中的内容进行任何控制. 担心这类事情通常表明您的项目中存在其他问题.操作系统总体上可以更好地解决应该交换的内容和不应该交换的内容.你的工

linux – 连续的内存块如何减少内存访问时间?

当我们使用kmalloc()时,这个函数返回连续的内存物理块(如果可用)和vmalloc(),我们得到非连续的内存块(如果可用). 进一步指出,与非连续的存储器块[Source Link]相比,连续存储器块的访问更快. 更具体地说,让我们考虑两种情况: 设1个物理帧= 4 KB,页面大小= 4 KB 情况1:  在我的模块代

linux – 程序退出后二进制文件会留在内存中吗?

我知道程序首次启动时,由于代码不在内存中,因此在开始时会出现大量页面错误,因此需要从磁盘加载代码. 程序退出后会发生什么?二进制文件是否留在内存中?该程序的后续调用是否会发现代码已经在内存中,因此没有页面错误(假设两者之间没有任何运行,并且页面填充到磁盘)? 在我的Linux机器

在linux中配置虚拟页面大小

我正在测试CPU的硬件预取器. 众所周知,预取发生在页面边界之前.我想确保我的测试正常. 有谁知道如何在linux中更改虚拟页面大小?解决方法:在x86-64上,硬件支持的唯一页面大小为4kb和2MB.默认使用4kb;对于2MB页面,您可以使用Linux的hugetlb系统来分配它们.