【存储管理】brk()系统调用

brk()系统调用在Linux内核中用于管理进程的动态内存分配,主要服务于malloc和new操作。它维护着用户空间的堆边界,当动态分配内存时,brk()会更新边界。在内核中,sys_brk()实现该功能,若请求减少内存则调用do_munmap()释放,否则分配新空间。do_munmap()涉及解除映射和释放物理页面。分配空间时,内核会检查资源限制、空间冲突及内存可用性,通过do_brk()处理分配,可能触发缺页异常进行页面设置。
摘要由CSDN通过智能技术生成

尽管应用程序编程时很少直接调用brk()系统调用,但是它是最经常使用的系统调用;


(1)C语言中的malloc以及C++语言中的new都在间接的调用着brk()这个系统调用;内核中含有3GB的用户虚存空间,会部分映射到物理存储空间;用户程序经过编译,链接形成的映像文件中含有一个代码段(在下)和一个数据段(在上,分为data段和bss段),包含所有的静态空间(包含全局变量和static的局部变量)是一个进程所基本必须的,所以在一个进程运行时就必须分配好这些空间,包括虚拟空间和物理页面及其映射;堆栈空间在虚存空间的顶部,运行时向下生长,代码段和数据段在底部,运行时不向上伸展;故数据段的顶部end_data和堆栈空间的下沿是个巨大的空洞,这就是运行时动态分配的空间;最初这个动态分配空间时从进程的end_data开始的,每次动态分配一块内存,这个边界就往上推进一段距离;内核中管理这个边界记录到该进程的mm_struct的 br

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值