问题标签 [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.

0 投票
1 回答
170 浏览

unix - 更改子进程的进程虚拟地址空间

我想知道在 Unix 之类的操作系统中更改子进程的虚拟地址空间是否可行。我想有能力

(a) 加载/卸载共享库

(b) 写入子进程的随机用户空间内存位置(不是共享内存)

我基本上想要对子进程的进程地址空间进行完全控制(想想 windows 95 之类的控制)。

我知道调试器在一定程度上实现了这一点,但是你实现了这一点(要使用的系统调用,关于主题的教程等)?

0 投票
1 回答
220 浏览

cpu - POWER8 架构“平面”虚拟地址空间

如此处所述,任何人可以解释“平坦”32位空间的含义吗?

懒人的文字:

该架构的另一个有趣特性是虚拟地址系统,它将所有地址映射到 52 位空间。通过这种方式,应用程序可以在“平坦”的 32 位空间中共享内存,并且所有程序都可以有不同的 32 位块。

0 投票
1 回答
1009 浏览

linux - 进程区域表&全局描述符&虚拟地址

我正在阅读这里的培训机构之一的 linux 笔记。根据这一点,每当创建一个进程时,就会为其分配一个区域。区域包含进程的所有段。

区域也由区域表指定。区域表包含以下条目;--
虚拟地址到 - 物理地址指针 + 磁盘块描述符

磁盘块描述符指向磁盘上的交换或 exe 文件。

我有两个问题:-----

1> Global & Local Descriptor 角色在哪里。

http://www.google.co.in/imgres?um=1&hl=en&sa=N&tbo=d&biw=1366&bih=677&tbm=isch&tbnid=GSUGxm8x4QWQ1M:&imgrefurl=http://iakovlev.org/index.html%3Fp%3D945&docid= 8Y36SIxwT17J6M&imgurl=http://iakovlev.org/images/intel/31.jpg&w=1534&h=1074&ei=oBX8UKuwBoHsrAer8YHQAw&zoom=1&iact=hc&vpx=79&vpy=377&dur=609&hovh=188&hovw=268&tx=150&ty=107&sig=103468883298920883665&page=1&tbnh=155&tbnw=221&start= 0&ndsp=27&ved=1t:429,r:14,s:0,i:124

2> 每个进程都有自己的全局描述符表吗?我认为是的,否则两个进程的虚拟地址将指向相同的物理地址。

请建议

0 投票
2 回答
703 浏览

memory - 程序具有相同虚拟地址空间的情况有哪些

如果您在两个不同的终端中运行程序 foo.c,并打印正在执行的局部变量的地址。他们会是一样的。但是,在分叉和执行的上下文中,例如在 shell 中,我运行了一个程序,例如 foo.c 。它将创建一个完全相同的 shell 副本,然后执行 foo.c 。它们是否具有相同的虚拟地址空间。如果一个程序递归调用自己,递归调用的同一个变量是否仍然具有相同的地址空间,这个程序如何在自己的地址空间内增长?

0 投票
1 回答
354 浏览

memory - 访问进程的 vm 区域

我正在尝试编写一个必须从进程中读取 vm 区域地址的 LKM。我正在使用 pid_task() 来获取指向 task_struct 的指针,但是当我尝试使用它来获取 vmarea 的起始地址时出现编译错误。

我收到错误“错误:取消引用指向不完整类型的指针”

我是一个 Linux 菜鸟,在 LKM 中完全是菜鸟。

我会很感激任何帮助。

谢谢你们

0 投票
1 回答
210 浏览

operating-system - 如何对虚拟地址空间进行分页?

当我阅读这篇 Wikipedia 文章http://en.wikipedia.org/wiki/Memory_management_unit#How_it_works时,我遇到了将虚拟地址空间(处理器使用的地址范围)划分为页面。但我了解到只有物理内存(RAM)被分成页面。那么进程的虚拟地址空间是如何划分的呢?

此外,这里虚拟地址空间的定义是处理器使用的地址范围。处理器使用的地址范围是指处理器中地址总线的长度,对吗?因此,如果我有一个 32 位地址总线的处理器和一个 4 GB (2^32) 的 RAM,我的物理地址空间和虚拟地址空间是否相同?

如果问题太天真,请耐心等待。我仍然没有得到非常清晰的地址空间可视化。提前致谢。

0 投票
1 回答
2502 浏览

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 GBor 4 GB

有人能指出 32 位字大小如何达到 4GB 页面范围吗?

谢谢

0 投票
4 回答
4269 浏览

c - 哪个是 printf() 在 c 中以 %p 格式打印的地址?

我有简单的代码如下:

上述程序的输出是: 第一次运行:

第二次运行:

我正在研究虚拟和物理地址。我有以下问题:

  1. 变量“a”的打印地址(物理/虚拟)是哪个?
  2. 如果它是虚拟的,那么它在同一程序的每次运行中如何变化?据我了解,编译器在编译时为变量提供虚拟地址?
  3. 为什么每次程序运行时全局变量的地址都是不变的?

在 Linux 上执行此程序:2.6.18-308.el5 x86_64 GNU/Linux

编译使用:gcc 版本 4.1.2 20080704 (Red Hat 4.1.2-52)

0 投票
1 回答
1279 浏览

c - 我怎样才能跳转到上半部分内核

我目前正在构建更高半的内核,我的引导加载程序在物理地址 0x100000(1M) 处加载内核,并且身份映射已设置为 0-4MB。这是一个问题:我怎样才能跳转到更高的虚拟地址(例如 3GB)。

我用谷歌搜索了这个问题,发现了两种方法:一种是使用地址空间扭曲,一种是设置页面条目以将 3GB~3GB+4MB 映射到 0-4MB 然后“跳转”到更高的地址。我决定使用第二种方式,但找不到足够的信息来实现它。我反汇编了我的内核,发现所有的地址都是绝对的,所以我相信单个“jmp”指令是不够的。我能想到的唯一方法是在 3GB 以上的虚拟地址中有一个函数,我们在较低空间调用这个函数,然后我们将在高空间执行,这个函数永远不应该返回。如果这是真的,我该怎么做?

0 投票
2 回答
6324 浏览

linux - 虚拟地址空间与虚拟内存

虚拟地址空间和虚拟内存有什么区别吗?如果是这种情况,32 位操作系统将不会有超过 4GB 的 vaddr 空间和虚拟内存。

提前致谢

好的 虚拟内存可以存在于本地或远程的任何地方。虚拟地址空间是用于寻址内存的每个进程的指针。这意味着我的最大虚拟内存容量受到地址空间限制的限制。如果错了,请纠正我。