问题标签 [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.
linux-kernel - 无法使用 iowrite() 写入虚拟地址
我正在尝试在 linux 内核中创建一个硬件驱动程序模块。硬件通过 UART 连接到 CPU,因此我试图通过 iowrite() 直接访问 UART 寄存器。但是我发现我永远无法写入寄存器地址。下面是我正在使用的代码:
输出printk
始终是默认值,而不是我写给它的那个。
我不知道如何解决这个问题,请帮助,任何想法都会有所帮助。
先感谢您!
詹姆士
memory-management - 内核虚拟地址空间中分配给用户进程的页面的映射
当为进程创建页面(将映射到进程地址空间)时,该页面是否会映射到内核地址空间?
如果没有,那么它将没有内核虚拟地址。那么如果需要,交换器将如何找到页面并将其交换出去?
mmap - mmap地址提示的合理有效起始地址,以保证一切正常
在我们的一项任务中,我们需要在两台机器之间构建一个分布式共享内存,我使用了一种基于分页的技术,这样两台机器上的基地址都不同。但是有这个链表测试用例几乎要求两个地址范围相同。mmap 使用 MAP_FIXED 的固定地址会导致从机崩溃(因为回复服务器线程的堆栈被覆盖),我认为在两个进程的初始化期间创建一个保证在开始时免费的地址是合理的。但是,经过数小时的网络搜索后,我仍然很不幸地找到了该默认地址。我们的要求是 10000 页。如果有人可以指出 sbrk 保证不会增长的堆地址基址,我可以使用它。
最好的,Subramanian
paging - 查找最大页表大小
我有这个家庭作业问题,我很难找到答案。想知道这里是否有人可以告诉我我的计算是否在正确的轨道上,或者我是否偏离了方向。我不是在找人给我答案。如果我的答案不正确,任何为我指明正确方向的帮助将不胜感激。这是问题所在:
进程的虚拟地址空间为 2 MB 大。假设一个页面的大小是 4KB。如果每个页表条目需要 2 个字节,则内存中页表的最大大小是多少?
我计算背后的逻辑是每个页面大小为 4096 字节(4KB),每个页表条目为 2 个字节。因此,每个页面实质上占用了 4098 字节的内存。如果我将 2MB 除以每页的内存总量,我最多可以在内存中拥有 511 页。(第 512 页是页表)。每个页面都需要一个页表条目,因此 511 页 * 2 字节 = 1022 字节是我解决此问题的最大页表大小。
我在任何方面都在正确的道路上吗?或者我应该以不同的方式计算这个?任何提示或建议将不胜感激。提前致谢。
sandbox - 沙盒线程
我想创建具有自己的虚拟地址空间的线程或进程(它可能必须是单独的进程),而地址空间中没有系统库。我的目标是为外国源代码创建一个执行环境。
我想创建一个没有系统库的线程,只有几个可执行页面,用户代码将被复制并放置线程入口点,还有几个 RW 页面用于堆栈和与主线程的数据交换。
是否可以从应用程序级别的虚拟内存中完全取消映射 Windows(或可能是 Linux)上的所有系统库?
memory - 非规范线性地址和一般保护异常
英特尔手册对规范地址和一般保护异常进行了以下说明:
来自(第 1 卷,第 3-13 页):
“如果线性内存引用不是规范形式,则实现应该生成异常。在大多数情况下,会生成通用保护异常 (#GP)。...”
来自(第 3A 卷,第 6-52 页):
“以下情况会导致 64 位模式下的一般保护异常:
- 如果内存地址采用非规范形式。
- 如果段描述符内存地址采用非规范形式......”
我很想知道 RIP 的内容是否也被归类为“内存地址”,如上面引用中所述。还是 RIP 可以包含非规范地址但在 RIP 用于引用内存中的位置之前不会引发#GP?
[编辑]
我现在更仔细地阅读手册,尤其是 CALL、RET 和 JMP 指令的伪代码(因为它们可以随意更改 RIP)。我注意到在 64 位模式下,地址的规范性检查是在它存储到 RIP 之前完成的,因此在 RIP 获得非规范地址之前会引发#GP。所以,我的问题的答案是 RIP 永远不能包含非规范地址。
我担心的情况 --- 因为包含非规范地址的 RIP 用于引用内存位置而引发#GP --- 根本不会出现。
c - C 内存映射
我知道有两种类型的地址。虚拟和物理。打印整数变量的地址将打印其虚拟地址。是否有有助于打印该变量的物理内存的功能?
虚拟内存是否意味着硬盘上被操作系统视为 RAM 的部分?
c - GDB 检查内存权限
我在内存中有一个地址,我想找出该内存地址的权限(r/w/x)。
例如
这里,字符串文字“hello”存储在只读存储器中。通过 gdb 运行程序时,是否有可能检查该内存地址的权限(是否允许仅读取等)?
assembly - 64 位模式下的地址覆盖前缀
在 64 位模式下,默认地址大小为 64 位。如果存在地址大小覆盖前缀 (67h),则地址大小为 32 位。
我知道规范 64 位地址的第 63 位到实现的最高有效位全为 0 或全为 1。32 位地址(通过在 64 位模式下的指令前加上 67h 获得)是否需要采用规范形式?如果是,这种规范形式是如何定义的?
linux - 是否可以在单独的虚拟地址空间中运行每个线程?
在 Linux 上,是否可以让进程的线程在不同的虚拟地址空间上运行?如果是这样,怎么做?