标签 virtual-memory 下的文章

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

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

  • 📂访问linux虚拟内存教程

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

  • 📂Linux:页面错误和网络文件系统教程

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

  • 📂Linux 3/1虚拟地址拆分教程

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

  • 📂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, 0xFFF...

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

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

  • 📂没有交换分区使用Linux的提示教程

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

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

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

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

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

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

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

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

    根据我的理解,每个进程通过虚拟地址而不是物理地址访问内存,并且CPU负责通过MMU单元将这些虚拟地址转换为物理地址,并且两个或多个进程可以具有相同的虚拟地址.因此,假设进程A正在尝试访问虚拟地址12345,并且进程B也尝试访问虚拟地址12345.MMU如何将每个进程的虚拟地址转换为物理地址,是否为每个进程映射表,将虚拟地址映射到物理地址(因为我认为CPU甚至不知道“进程”是什么,并且唯一的责...

  • 📂linux – Zswap,Zram,Zcache桌面使用场景教程

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

  • 📂linux – pmap输出的含义教程

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

  • 📂Linux不使用分段而只使用分页吗?教程

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

  • 📂linux – 为什么64位cpu不存在高内存?教程

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

  • 📂堆栈内存是否在Linux中是连续的?教程

    据我所知,堆栈内存在虚拟内存地址中是连续的,但堆栈内存在物理上是连续的吗?这是否与堆栈大小限制有关?编辑:我曾经认为堆栈内存不必在物理上是连续的,但为什么我们认为堆栈内存总是比堆内存更快?如果它不是物理上连续的,那么堆栈如何更好地利用缓存呢?还有另一件事总是让我感到困惑,cpu在数据段中执行指令,它不在虚拟内存中的堆栈段附近,我不认为操作系统会使堆栈段和数据段在物理上彼此接近,所以这可能会对...

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

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

  • 📂objdump vs / proc / pid / maps的虚拟内存地址?教程

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

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

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

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

    我知道程序首次启动时,由于代码不在内存中,因此在开始时会出现大量页面错误,因此需要从磁盘加载代码.程序退出后会发生什么?二进制文件是否留在内存中?该程序的后续调用是否会发现代码已经在内存中,因此没有页面错误(假设两者之间没有任何运行,并且页面填充到磁盘)?在我的Linux机器上运行一些实验似乎没有答案.我一遍又一遍地运行一些程序,每次都观察到相同数量的页面错误.这是一个相对安静的机器,所以我...

  • 📂在linux中配置虚拟页面大小教程

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

  • 📂linux – hypervisor guest os中的内存地址转换教程

    假设有这样的代码.MOV [0x1234], EAX (intel assembly) 假设CPU想要处理此指令. 我们假设没有管理程序. 我们只是在linux环境中使用普通的x86 CPU(保护模式).现在,我理解的是 由于0x1234是虚拟地址,因此需要进行转换 到物理地址.(让我们跳过分段部分)CPU只是将此地址(0x1234)传递给MMU硬件. MMU遍历页表并使用物理地址...