问题标签 [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 回答
310 浏览

c - 为什么在尝试将上层 BIOS 内存映射到虚拟地址空间时 mmap 失败

我正在尝试(m)将以下地址映射到虚拟地址空间:

---物理地址为 0xf6c50 --- 该地址是 EBDA 基本指针和高级 Bios 内存窗口 (ACPI_HI_RSDP_WINDOW_BASE) 的总和

目的是将 ACPI 表映射到进程的地址空间并在以后使用。

我打开一个文件描述符来读取“/ dev / mem”。我使用pread到达地址并读取ACPI头结构,一旦签名匹配我希望将它映射到虚拟地址空间,但是当我这样做时我得到一个错误比如:“无法分配内存”

我正在使用 FreeBSD 8.x 。我可以确认通常 mmap 有效。导致错误的调用如下:

我什至尝试过使用 MAP_SHARED,但这并没有太大变化。

这里的pa是上面由'ACPI_HI_RSDP_WINDOW_BASE'宏定义的地址。任何人都可以对此或如何解决这个问题有所了解。

0 投票
1 回答
246 浏览

linux - 根据指令指针确定上下文

我正在开发一个模拟器,其指令跟踪来自 QEMU 模拟器。轨迹中的指令指针是虚拟指令指针。

我对 32 位 Linux 操作系统的基本理解是,在 4GB 地址空间中,较低的 3GB 即 0-3GB 是为应用程序保留的,而较高的 1GB 即 3GB-4GB 是为内核保留的。

我的基本理解正确吗?

为了确定指令的上下文,即内核或应用程序,我使用了一个简单的检查 ip>3G。这有效吗?

还有一件事,这个简单的方法很容易扩展到 64 位操作系统吗?

0 投票
1 回答
1006 浏览

c++ - windows中的虚拟地址空间

所有,请原谅我是 Windows 驱动程序开发的新手,从 WDK 阅读此文档后,我有一些我不明白的地方。

文件说

进程可用的虚拟地址范围称为进程的虚拟地址空间。每个用户模式进程都有自己的私有虚拟地址空间。对于 32 位进程,虚拟地址空间通常是 2 GB 范围 0x00000000 到 0x7FFFFFFF。对于 64 位进程,虚拟地址空间是 0x000'00000000 到 0x7FF'FFFFFFFF 的 8 TB 范围。虚拟地址范围有时称为虚拟内存范围。

我的问题是:

假设有一台具有 8 GB 内存库的计算机。

  1. 所有的虚拟地址空间都是从这 8 GB 的内存中实际分配的吗?
  2. 如果一个进程需要分配2g的虚拟地址空间,我可以说如果系统中有4个进程在运行。他们完全需要 8 GB 内存?如果答案是肯定的,这是否意味着在这些计算机中可以运行的最大进程数是 4?

我不知道我是不是误会了什么。请纠正我。多谢。

0 投票
1 回答
1023 浏览

visual-studio-2010 - 如何撤消应用程序的 LARGEADDRESSAWARE 标志?

好的,我使用以下命令使我的 32 位 Excel 使用地址> 2GB

editbin /largeaddressaware EXCEL.EXE

现在我想撤消这个..请帮帮我..我在谷歌试过但找不到撤消命令

0 投票
1 回答
12153 浏览

caching - 物理或虚拟寻址在处理器 x86/x86_64 中用于在 L1、L2 和 L3 中进行缓存?

处理器 x86/x86_64 中使用哪种寻址来缓存 L1、L2 和 L3(LLC) - 物理或虚拟(使用 PT/PTE 和TLB ), PAT(页面属性表)会以某种方式影响它?

在这种情况下,驱动程序(内核空间)和应用程序(用户空间)之间有区别吗?


简短的回答 - 英特尔使用虚拟索引、物理标记(VIPT) L1 缓存:在一个具有 HT 的核心上执行线程之间的数据交换将使用什么?

  • L1 -虚拟寻址(在8-way缓存中定义Set需要低12 bits,这在 virt & phys 中是相同的)
  • L2 -物理寻址(需要访问 TLB 以获得 Virt-2-Phys)
  • L3 -物理寻址(需要访问 TLB 以获得 Virt-2-Phys)
0 投票
1 回答
341 浏览

virtual-address-space - 为什么内核模式下的驱动程序必须非常小心地直接读取或写入用户空间中的地址?

来自 msdn:

在内核模式下运行的驱动程序必须非常小心地直接读取或写入用户空间中的地址。这个场景说明了原因。

  1. 用户模式程序发起从设备读取某些数据的请求。程序提供缓冲区的起始地址来接收数据。
  2. 在内核模式下运行的设备驱动程序启动读取操作并将控制权返回给它的调用者。
  3. 稍后,设备会中断当前正在运行的任何线程,以表示读取操作已完成。中断由运行在该任意线程上的内核模式驱动程序处理,该线程属于任意进程。
  4. 此时,驱动程序不得将数据写入用户模式程序在步骤 1 中提供的起始地址。该地址位于发起请求的进程的虚拟地址空间中,这很可能与当前进程。

任何人都可以用其他方式解释这一点吗?第 2、3、4 点不是很清楚。谢谢。

0 投票
1 回答
1149 浏览

c++ - 在虚拟地址空间中使用内存映射文件

出色地。memory mapped file我对used in的概念感到非常困惑virtual address spaces

在下面的链接中,我用谷歌搜索了。

http://en.wikipedia.org/wiki/Virtual_address_space

我找到了一个部分

现在这个内存映射文件与特定虚拟地址空间中的特定进程有什么关系(在上一节的最后一条语句中混淆了)?

为什么明确需要包含用于创建对应于特定进程的内存映射文件的代码?

0 投票
1 回答
1855 浏览

memory - 虚拟地址空间和计算机的实际地址空间有什么区别?

我认为虚拟地址空间是分配给特定进程的一部分 RAM。但是我正在阅读的书说 4 gbs 是虚拟地址空间的标准限制。这不是全部的RAM吗?如果是这种情况,那么我对虚拟地址空间是什么感到困惑。任何人都可以启发我吗?

0 投票
1 回答
1969 浏览

c++ - 虚拟内存地址驻留在哪里?

我知道如果页面不在主内存中,CPU 将从交换文件中获取它。因此,如果虚拟地址没有对应的物理地址,CPU 将从磁盘中获取它。所以映射到虚拟地址可以在两个地方之一:它要么在物理内存中,要么在磁盘中。我的问题是虚拟地址本身驻留在哪里?因为 CPU 需要这个虚拟地址才能执行映射。CPU从哪里得到这个地址?当我们使用 gdb 查看虚拟地址空间时,gdb 将所有这些虚拟地址带到哪里?

例如:

虚拟地址 0x420000
页表 20
RAM 0x800000

这里 20(页表条目)驻留在 RAM 中。0x800000(物理地址)位于 RAM 中。0x420000 信息在哪里?CPU 从某个地方需要这些信息,否则它将如何执行地址转换?

现在我想我知道虚拟地址信息来自何处。它来自应用程序本身,来自 pc 计数器,此时它将它传递给 CPU,然后 CPU 进行翻译。

0 投票
1 回答
1057 浏览

c++ - 如何通过虚拟寻址区域中的指针获取物理寻址区域中的地址?

如果我在当前进程的虚拟寻址区域中有一个指向固定(页面锁定)内存的地址(指针),那么如何使用 POSIX 在该内存区域的物理寻址区域中获取地址(指针)?

  • 中央处理器:x86
  • 操作系统:Linux 2.6 和 Windows 7/8(服务器 2008R2)