标签: virtual-memory

将逻辑(虚拟)地址转换为物理地址

我有如下页表process1:

在此输入图像描述

假设寻呼系统使用16bit地址和页面大小4k

我想将逻辑地址16000转换为物理地址.

我对这个话题有点新意,所以对我很轻松:

部分解决方案:地址16000适合3页表中的单元格编号,所以我想我需要处理该单元格及其存储的框架 - 2.

我现在如何找到偏移量和物理地址?

谢谢

memory-management process virtual-memory

0
推荐指数
1
解决办法
2万
查看次数

如果为进程页表中的条目设置了当前位,这意味着什么?

这是否意味着引用的页面位于进程的逻辑地址空间内?我在想也许引用的页面是内存驻留的?

x86 operating-system osdev virtual-memory page-tables

0
推荐指数
1
解决办法
2578
查看次数

指针的地址将存储在内存中的哪个位置?

我正在研究虚拟内存和自由空间管理.

我知道我们使用malloc分配的指针将在堆中请求一块内存.但是当我们调用malloc()系统调用时,它将返回一个整数作为专用内存块的地址,但是这个地址将在何处存储?

假设

int *ptr = malloc (16);
Run Code Online (Sandbox Code Playgroud)

返回mem的4008地址.它从4008到4022开始.这个块在堆中.但4008本身在哪里?

它存储在堆栈中吗?

c memory-management virtual-memory

0
推荐指数
1
解决办法
112
查看次数

为什么我的 C 程序中的虚拟地址如此之大?

我最近了解了虚拟内存和分页,并且编译器只生成从 1 开始并简单向上计数的虚拟地址。我想我会测试这个并在下面写了一个简短的 C 程序,它实例化一个全局变量并打印它的地址,期望一个非常小的值,因为 CPU 只看到虚拟地址,但我得到4247584。这是怎么回事,我的假设是错误的吗?如果可能的话,显示从 1 开始生成虚拟地址的程序是什么?

我的程序:

#include <stdio.h>

int x = 0;

int main(){
    printf("%d\n", &x);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

(我在 Windows 10 上使用 gcc 4.8.1)

c virtual-memory

0
推荐指数
1
解决办法
60
查看次数