在RAM中锁定Linux进程的选择性代码和数据页

时间:2014-10-16 08:59:20

标签: c++ linux multithreading linker-scripts

当我使用mlockall来锁定内存中的所有进程时,我有一个多线程的Linux应用程序,其运行内存占用大约150MB。这样做可以避免一些具有低延迟要求的高优先级线程的页面错误。但是,只有选择执行流/上下文有这样的要求,我试图仅为这些流锁定代码和数据,以便我可以减少进程的锁定内存占用。 我们的想法是在单独的文本部分中收集所有这些功能,然后锁定页面。 该想法的蓝图如下

//Define a marker for compiler for all code that needs to be locked:
#define __hard_rt_fn  __section(.locked.txt)

//mark the identified functions with the marker
Event* __hard_rt_fn GetEvent();

//Ask the loader/linker script to give the start and end address of the 
.locked ():
{
    __locked_start = .;
    *(.text);
    *(.rodata.*);
}
__locked_size = SIZEOF(.locked);
Export(__locked_start);
Export(__locked_size);

//In the main initialisation function, lock the section

extern long int __locked_start;
extern long int __locked_size;

Main()
{
 ……
 mlock(__locked_start,__locked_size);
 ……

}

这种方法的灵感来自嵌入式系统所采用的方法,其中一部分代码需要重新定位在RAM中,而其余部分则留在ROM中。 我有以下疑问  1.这是用动态(gnu)连接器/装载器实现的吗?  2.如何为动态加载的共享库指定页面锁定  3.有更好的方法或工具来仅锁定已识别的代码和数据部分。

0 个答案:

没有答案