当前位置:  技术问答>linux和unix

如何写个吃内存的demo,让内核直接分配大块物理页面?

    来源: 互联网  发布时间:2017-03-14

    本文导语:  我试了下,不论是用for循环一个个字节的写入malloc所申请的线性地址还是用memset,内核里都是单次最多给order为零的4KB的页面,即使我写入总共为512MB的数据也是如此,每次都是从大空闲页块中分裂出4KB的最小页面,...

我试了下,不论是用for循环一个个字节的写入malloc所申请的线性地址还是用memset,内核里都是单次最多给order为零的4KB的页面,即使我写入总共为512MB的数据也是如此,每次都是从大空闲页块中分裂出4KB的最小页面,而不是直接分配大页面写入。

|


应用程序只能申请虚拟地址,malloc --> glibc --> sys_brk 。我还不能理解sys_brk的实现,只能确定映射到物理页肯定是一页一页的,不保证物理地址连续。不知道sys_brk是否会调alloc_pages

应用程序的mmap 能得到物理地址连续的缓冲区,但是需要驱动程序的配合,本质还是驱动来申请的大块连续的物理内存,那么也会受到buddy的限制。

所以应用程序是无法得到大于一页的连续的物理内存。

|
因为内核在工作的时候也会有大量的小对象分配和使用,buddy算法正是适合它的。至于用户空间的,内核只管分配4KB的虚拟内存页,至于怎么管理,用什么堆都是应用程序和库文件的工作。
2楼说的很对,如果你需要大块连续物理内存,必然就会和分页内存冲突,这部分内存不能进入虚拟内存,不能分页,也不能交换到硬盘,类似Windows里的AWE
再说虚拟内存已经很好的掩盖了物理内存地址,再说不同内存地址的访问速度通常也不会有差异。对于应用程序来说虚拟内存地址连续就已经可以了,没有必要再要求物理连续。

    
 
 

您可能感兴趣的文章:

  • 如何移动整体移动大块内存,用哪个函数???
  • 现有linux内核中共享内存机制如何移植到linux0.11内核中
  • 内核不能使用虚拟内存?
  • 内核最大可用内存是多少,怎样扩大可用内存?
  • 请问重新编译LINUX内核是否能将没有用的外设的驱动程序删除并减少内核占有内存的资源?请好心人仕指教!
  • 内核内存泄露检测
  • [求助]如何设置uclinux内核中的内存
  • linux内核分配内存,及管理?
  • 请问高手们,有没有一款工具可以测试内核内存泄露的?
  • 内核启动内存问题
  • 内核操作用户空间内存
  • 内核里内存拷贝用什么函数?
  • linux下如何实现内核态和用户空间进程共享内存?
  • linux内核 怎么能增加虚拟内存?
  • 如何在内核中分配一个带有VM_EXEC权限的内存页面?
  • 驱动中如何将用户空间内存映射到内核空间使用?
  • 如何在内核中获取当前进程的内存使用及CPU占用率
  • 有人做过内核空间和用户空间的内存映射吗 内核空间和用户空间交换数据用内存映射的方法,结果做的驱动可以工作,但经常会引起死机
  • 在内核里如何访问这段内存?
  • linux内核加载到哪个内存区间了?
  • Linux内核中怎样给DMA分配没有进行Cache映射的内存?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C++ Vectors 成员 get_allocator():返回vector的内存分配器
  • 一个问题,关于kmalloc分配的内存和编译器自动分配的内存的问题(堆和栈)
  • C++ Vectors 成员 capacity():返回vector所能容纳的元素数量(在不重新分配内存的情况下)
  • 【求助】AIX下进程内存分配问题,无法分配超过256M的内存
  • c/c++内存堆分配和栈分配理解
  • 请教一个关于内存分配的问题(系统和DMA共享一块物理内存空间)
  • c/c++中的内存分配 malloc 和 new介绍及相互之间的区别
  • 问个LINUX内存分配的问题。
  • 64位系统是否可以分配超过2GB的内存
  • 内存池和SLAB分配器有什么区别呀,在用法上
  • 请教Linux内存分配策略与Windows有何异同?
  • *****什么命令可以看到unix的最小内存分配单位?*****
  • 动态分配内存后,memset失败
  • Linux 如何获得分配内存的起始地址
  • C语言内存分配问题。
  • 分配的内存不可用?真是晕死!
  • 进行内存分配时为什么要对给定的大小重新计算大小???
  • 关于内存分配
  • 请问:在JAVA中创建句柄后,有没有给这个对象分配内存?
  • 请教一个AIX下内存分配的问题
  • 系统内存分配的情况???
  • tcmalloc内存泄露优化c++开源库下载,安装及使用介绍
  • 我的机器内存128 ,安装redhat9 后,可用内存很少了,如何节省内存呢?
  • C/C++内存池实现介绍及基本要求
  • 奇闻:Apache+Apache JServ 1.1.1+1G内存居然报内存不够,那位高友知道参数设置,把俺的1G内存都利用起来,感激不尽啊
  • linux下free命令显示的内存使用情况分析
  • 怎样读取指定内存地址处指定长度的内存数据???(
  • Ubuntu查看内存,进程相关命令介绍
  • 【操作系统虚拟内存和物理内存疑惑】
  • Linux 共享内存介绍及实现代码
  • Solaris下如何获得物理内存和虚拟内存的大小?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3