【问题标题】:How to determine whether a memory address is free in OS?如何确定操作系统中的内存地址是否空闲?
【发布时间】:2012-11-04 11:03:21
【问题描述】:
假设我在内核中创建了一个函数指针(类似于中断服务程序并在中断向量表中维护函数的地址)并开始编译和链接,那么链接器可能会从它那里静态分配函数的地址应该被执行。
内核开发人员可能不知道函数的执行地址。
但是当一个新的内核进程被创建时,它应该为这个进程动态分配内存。
那么,如何判断RAM中是否有空闲内存并将内存分配给进程呢?
另外如何找到链接器分配的内存地址?
我想知道 malloc 或 kmalloc 是如何分配空闲内存来处理的。
【问题讨论】:
标签:
linker
operating-system
kernel
【解决方案1】:
首先,您还没有指定您的操作系统。你在问操作系统特定的内核内存管理器是如何工作的。这不是在封闭的操作系统(如 Windows)中暴露的东西。在开源操作系统中,您只需浏览 kmalloc 或类似功能的代码即可。但是除非你非常清楚自己在做什么,否则你真的不应该搞砸它。
链接器不决定在哪里加载代码,它只是解析代码中各个项目的位置并在它们之间建立适当的链接(这就是为什么它被称为链接器...)
【解决方案2】:
那么,如何判断 RAM 中是否有空闲内存并分配
进程的内存?还有如何找到分配的内存地址
通过链接器?
我认为您在这里感到困惑。这些是虚拟地址,这就是像malloc 这样的库的意义所在。到实际内存地址的映射以及系统中是否有空闲内存来运行进程由操作系统透明处理