是否有可能告诉JVM提示操作系统某个对象最好不会被推出交换空间?
我想在Linux进程中的特定地址分配一块内存。实际上我想做一些类似的事情:我将有多个进程。每个进程都会调用库(由我编写)中的初始化函数,该函数将在进程的地址空间中分配一些内存(它将存储进程相关信息)。这将由每个进程完成
一旦分配了该内存,程序就会调用库中的其他函数。现在这些函数想要访问第一个函数分配的内存(包含进程相关信息)。
问题是我无法存储库中进程地址空间中分配的内存的地址(甚至不能存储在静态指针中,因为有多个进程),而且我什至不希望用户程序存储该地址。我只是不想让用户程序知道库在其地址空间中分配了内存。库函数对他们来说是抽象的,他们只能使用它们。
有没有可能克服这个问题。我在想,每当任何进程调用分配内存的库的初始化函数时,内存总是在所有进程中分配在相同的地址(比如 10000),而不管其他所有事情。
因此任何想要访问该内存的库函数都可以轻松地通过以下方式完成:
char *p=10000;
然后访问,访问的是调用库函数的进程的地址空间。
当我在Linux中学习虚拟内存系统时,我感到困惑.
由于每个进程都有自己的虚拟地址空间和自己的页表,将其虚拟地址转换为物理地址(我是对吗?),它怎么可能试图错误地访问其他进程的内存?页面表中应该没有条目,对吧?
我正在尝试了解程序的可执行程序集在程序加载/运行时的确切位置.我发现有两个资源在讨论这个问题,但它们有点难以阅读:
所以,这是一个简短的例子; 我很感兴趣tail程序的可执行部分最终在哪里.基本上,objdump告诉我这个:
$ objdump -dj .text /usr/bin/tail | head -10
/usr/bin/tail: file format elf32-i386
Disassembly of section .text:
08049100 <.text>:
8049100: 31 ed xor %ebp,%ebp
8049102: 5e pop %esi
8049103: 89 e1 mov %esp,%ecx
...
Run Code Online (Sandbox Code Playgroud)
我假设我在这里看到了tail's' main()的调用,没有删除符号.无论如何,可执行部分的开头是,根据这个,0x08049100; 我对它最终到底的地方感兴趣.
然后,我tail在后台运行,得到它的pid:
$ /usr/bin/tail -f & echo $!
28803
Run Code Online (Sandbox Code Playgroud)
......我检查一下/proc/pid/maps:
$ cat /proc/28803/maps
00547000-006a8000 r-xp 00000000 08:05 3506 /lib/i386-linux-gnu/libc-2.13.so
...
008c6000-008c7000 r-xp 00000000 00:00 0 …Run Code Online (Sandbox Code Playgroud) 我知道页面表存储在内存中,每个进程都有自己的表,但是每个表都有条目作为虚拟内存中虚拟页面的数量,所以每个进程如何有一个表,每个表都驻留在主内存中,每个表中的条目数量大于主存储器中的物理页面数量...有人可以向我解释我很困惑,在此先感谢.
来自维基百科:
页表查找可能由于两个原因而失败。第一个是如果没有可用于虚拟地址的转换,则意味着虚拟地址无效。
此外,如果每个进程都有自己的页表,这意味着页表中的条目都会有一些从虚拟地址到物理地址的转换。那么页表条目无效是什么意思呢?如果条目存在,则意味着转换存在,因为条目只不过是从虚拟地址到物理地址的映射。
When we print the address a variable in c program, as per my understanding it displays the virtual address because every time it comes same (except for auto variables). Is there any way we can know the physical memory address. I am using Linux 32 bit machine.
我正在尝试制作内存管理的一个端口,其中一些分配器使用虚拟内存机制来保留地址空间,而不(在开始时)分配任何物理内存,然后仅在需要时分配内存。
该代码基于Windows的VirtualAlloc和VirtualFree来使事情正常工作,现在我正在尝试将此代码移植到Apple OS X,据我所知,没有这样的API,过了一会儿我出现了使用以下代码:
//to reserve virtual address space
//equivalent of VirtualAlloc(NULL, size, MEM_RESERVE, PAGE_NOACCESS)
void* ptr = mmap(NULL, size, PROT_NONE, (MAP_PRIVATE | MAP_ANON), -1, 0);
msync(ptr, size, (MS_SYNC | MS_INVALIDATE));
//to free ALL virtual address space
//equivalent of VirtualFree(addr, 0, MEM_RELEASE)
//where "size" is the size of the entire virtual address space and "addr" the starting address
msync(addr, size, MS_SYNC);
munmap(addr, size);
//to allocate physical memory
//equivalent of VirtualAlloc(addr, size, MEM_COMMIT, PAGE_READWRITE)
void* ptr = mmap(addr, size, (PROT_READ | …Run Code Online (Sandbox Code Playgroud) 有点像家庭作业问题,但我更想围绕这个概念进行思考:
如果我在两级分页系统中有一个 32 位虚拟地址,其中页面大小为 8KB,外表有 1024 个条目,我如何计算代表(大小)二级/外页表的位数?
答案应该是 9 位,但我不确定如何计算它或公式是什么。
我在2节点纱线集群上运行火花作业.我的数据集不是很大(<100MB),只是用于测试而且工作人员因为要求过多的虚拟内存而被杀死.这里的金额是荒谬的.使用11GB物理内存2GB,使用300GB虚拟内存.
16/02/12 05:49:43 WARN scheduler.TaskSetManager:阶段2.1中丢失的任务0.0(TID 22,ip-172-31-6-141.ec2.internal):ExecutorLostFailure(执行者2退出由其中一个引起正在运行的任务)原因:容器标记为失败:容器上的容器_1455246675722_0023_01_000003:ip-172-31-6-141.ec2.internal.退出状态:143.诊断:容器[pid = 23206,containerID = container_1455246675722_0023_01_000003]正在超出虚拟内存限制.当前用法:使用2.1 GB的11 GB物理内存; 使用305.3 GB的23.1 GB虚拟内存.杀死容器.container_1455246675722_0023_01_000003的进程树转储:| - PID PPID PGRPID SESSID CMD_NAME USER_MODE_TIME(MILLIS)SYSTEM_TIME(MILLIS)VMEM_USAGE(BYTES)RSSMEM_USAGE(PAGES)FULL_CMD_LINE | - 23292 23213 23292 23206(python)15 3 101298176 5514 python -m pyspark .daemon | - 23206 1659 23206 23206(bash)0 0 11431936 352/bin/bash -c/usr/lib/jvm/java-7-openjdk-amd64/bin/java -server -XX:OnOutOfMemoryError ='kill%p '-Xms10240m -Xmx10240m -Djava.io.tmpdir =/TMP/Hadoop的根/纳米本地-DIR/usercache /根/应用程序缓存/ application_1455246675722_0023/container_1455246675722_0023_01_000003/TMP '-Dspark.driver.port = 37386' -Dspark.yarn .app.container.log.dir =/mnt/yarn/logs/application_1455246675722_0023/container_1455246675722_0023_01_000003 -XX:MaxPermSize = 256m org.apache.spark.executor.CoarseGrainedExecutorBackend --driver-url spark://CoarseGrainedScheduler@172.31.0.92:37386 --executor-id 2 --hostname ip-172-31-6-141.ec2.internal --cores 8 --app-id application_1455246675722_0023 --user-class- 路径文件:/ tmp/hadoop-root/nm-local-dir/usercache/root/appcache/application_1455246675722_0023/container_1455246675722_0023_01_000003/app .jar 1>/mnt/yarn/logs/application_1455246675722_0023/container_1455246675722_0023_01_000003/stdout …
memory memory-management virtual-memory apache-spark pyspark