当前位置: 技术问答>linux和unix
内核与用户态共享大内存问题
来源: 互联网 发布时间:2016-08-04
本文导语: 周六通过steptodream的指点实现了内核态与用户进程的内存共享。现在我要在两者之间共享一块很大的内存(1G),但get_free_pages()方法一次最大只能分配4M的连续空间,如果通过多个调用get_free_pages的话,又不能保证多次调...
周六通过steptodream的指点实现了内核态与用户进程的内存共享。现在我要在两者之间共享一块很大的内存(1G),但get_free_pages()方法一次最大只能分配4M的连续空间,如果通过多个调用get_free_pages的话,又不能保证多次调用之间得到的内存是一块连续的空间。
从网上看到说可以在系统启动完之前(也就是mem_init()函数执行之前)用类似alloc_bootmem()的函数来申请,但这块对我初学者怕是难度更大,而且时间也不允许。
请问,有没有其他方法可以实现我的需求呢?
我现在是在内核态通过get_free_pages申请内存,将地址传给了用户进程实现共享的。如果能实现大内存共享,从用户态分配通知内核来实现共享也可以。请多多指教。
从网上看到说可以在系统启动完之前(也就是mem_init()函数执行之前)用类似alloc_bootmem()的函数来申请,但这块对我初学者怕是难度更大,而且时间也不允许。
请问,有没有其他方法可以实现我的需求呢?
我现在是在内核态通过get_free_pages申请内存,将地址传给了用户进程实现共享的。如果能实现大内存共享,从用户态分配通知内核来实现共享也可以。请多多指教。
|
可以考虑预留一部分memory给你的用户程序,如:系统有1G物理内存,你可以修改内核设置内存大小为968M,预留最后的(1024-968)M,然后把这部分内存映射给用户程序使用。这个应该比较简单,也符合你的要求!
|
不知道你用的内存共享方法是什么。如果采用mmap机制的话,内存空间是否是连续的影响不大哦,只要合理的处理就行了。
|
可以使用bigphysarea补丁,再通过map进行申请就可以了。
提醒:不过bigphysarea补丁对大于4G内存存在问题(需要的bios支持)。
提醒:不过bigphysarea补丁对大于4G内存存在问题(需要的bios支持)。
|
up up up up up up
|
问题的关健还是如何申请大小1G的内存。get_free_pages()方法一次最大只能分配4M的连续空间,这个限制是哪里来的,不太理解。