问题标签 [virtual-address-space]
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.
unix - 更改子进程的进程虚拟地址空间
我想知道在 Unix 之类的操作系统中更改子进程的虚拟地址空间是否可行。我想有能力
(a) 加载/卸载共享库
(b) 写入子进程的随机用户空间内存位置(不是共享内存)
我基本上想要对子进程的进程地址空间进行完全控制(想想 windows 95 之类的控制)。
我知道调试器在一定程度上实现了这一点,但是你实现了这一点(要使用的系统调用,关于主题的教程等)?
cpu - POWER8 架构“平面”虚拟地址空间
如此处所述,任何人都可以解释“平坦”32位空间的含义吗?
懒人的文字:
该架构的另一个有趣特性是虚拟地址系统,它将所有地址映射到 52 位空间。通过这种方式,应用程序可以在“平坦”的 32 位空间中共享内存,并且所有程序都可以有不同的 32 位块。
linux - 进程区域表&全局描述符&虚拟地址
我正在阅读这里的培训机构之一的 linux 笔记。根据这一点,每当创建一个进程时,就会为其分配一个区域。区域包含进程的所有段。
区域也由区域表指定。区域表包含以下条目;--
虚拟地址到 - 物理地址指针 + 磁盘块描述符
磁盘块描述符指向磁盘上的交换或 exe 文件。
我有两个问题:-----
1> Global & Local Descriptor 角色在哪里。
2> 每个进程都有自己的全局描述符表吗?我认为是的,否则两个进程的虚拟地址将指向相同的物理地址。
请建议
memory - 程序具有相同虚拟地址空间的情况有哪些
如果您在两个不同的终端中运行程序 foo.c,并打印正在执行的局部变量的地址。他们会是一样的。但是,在分叉和执行的上下文中,例如在 shell 中,我运行了一个程序,例如 foo.c 。它将创建一个完全相同的 shell 副本,然后执行 foo.c 。它们是否具有相同的虚拟地址空间。如果一个程序递归调用自己,递归调用的同一个变量是否仍然具有相同的地址空间,这个程序如何在自己的地址空间内增长?
memory - 访问进程的 vm 区域
我正在尝试编写一个必须从进程中读取 vm 区域地址的 LKM。我正在使用 pid_task() 来获取指向 task_struct 的指针,但是当我尝试使用它来获取 vmarea 的起始地址时出现编译错误。
我收到错误“错误:取消引用指向不完整类型的指针”
我是一个 Linux 菜鸟,在 LKM 中完全是菜鸟。
我会很感激任何帮助。
谢谢你们
operating-system - 如何对虚拟地址空间进行分页?
当我阅读这篇 Wikipedia 文章http://en.wikipedia.org/wiki/Memory_management_unit#How_it_works时,我遇到了将虚拟地址空间(处理器使用的地址范围)划分为页面。但我了解到只有物理内存(RAM)被分成页面。那么进程的虚拟地址空间是如何划分的呢?
此外,这里虚拟地址空间的定义是处理器使用的地址范围。处理器使用的地址范围是指处理器中地址总线的长度,对吗?因此,如果我有一个 32 位地址总线的处理器和一个 4 GB (2^32) 的 RAM,我的物理地址空间和虚拟地址空间是否相同?
如果问题太天真,请耐心等待。我仍然没有得到非常清晰的地址空间可视化。提前致谢。
byte - 以位为单位的字大小转换混淆
我有一个非常基本的问题,这让我有些困惑。对此进行一些复习会很棒。
每台计算机都有一个字长。字长是虚拟地址空间的最大尺寸。因此,如果我们说 a 32 bit word size
,我们有一个虚拟地址空间,其范围最大为2^32 values
. 在参考文献中它说2^32 bytes
?为什么是以字节为单位的范围。
另外,我无法理解的是2^32
可能的值如何成为可能的地址范围4GB
?所以,我的困惑源于将32 bit word size
变成4 byte word size
,然后如何4 bytes
,乘以得到2^32
的困惑4GB
。
我试图使其合理化的一种方法如下:
2^32
因此by 的连续除法2^10
结果为2^2 GB
or 4 GB
。
有人能指出 32 位字大小如何达到 4GB 页面范围吗?
谢谢
c - 哪个是 printf() 在 c 中以 %p 格式打印的地址?
我有简单的代码如下:
上述程序的输出是: 第一次运行:
第二次运行:
我正在研究虚拟和物理地址。我有以下问题:
- 变量“a”的打印地址(物理/虚拟)是哪个?
- 如果它是虚拟的,那么它在同一程序的每次运行中如何变化?据我了解,编译器在编译时为变量提供虚拟地址?
- 为什么每次程序运行时全局变量的地址都是不变的?
在 Linux 上执行此程序:2.6.18-308.el5 x86_64 GNU/Linux
编译使用:gcc 版本 4.1.2 20080704 (Red Hat 4.1.2-52)
c - 我怎样才能跳转到上半部分内核
我目前正在构建更高半的内核,我的引导加载程序在物理地址 0x100000(1M) 处加载内核,并且身份映射已设置为 0-4MB。这是一个问题:我怎样才能跳转到更高的虚拟地址(例如 3GB)。
我用谷歌搜索了这个问题,发现了两种方法:一种是使用地址空间扭曲,一种是设置页面条目以将 3GB~3GB+4MB 映射到 0-4MB 然后“跳转”到更高的地址。我决定使用第二种方式,但找不到足够的信息来实现它。我反汇编了我的内核,发现所有的地址都是绝对的,所以我相信单个“jmp”指令是不够的。我能想到的唯一方法是在 3GB 以上的虚拟地址中有一个函数,我们在较低空间调用这个函数,然后我们将在高空间执行,这个函数永远不应该返回。如果这是真的,我该怎么做?
linux - 虚拟地址空间与虚拟内存
虚拟地址空间和虚拟内存有什么区别吗?如果是这种情况,32 位操作系统将不会有超过 4GB 的 vaddr 空间和虚拟内存。
提前致谢
好的 虚拟内存可以存在于本地或远程的任何地方。虚拟地址空间是用于寻址内存的每个进程的指针。这意味着我的最大虚拟内存容量受到地址空间限制的限制。如果错了,请纠正我。