当前位置: 首页 > 面试题库 >

sbrk / brk如何在Linux中实现?

阎麒
2023-03-14
问题内容

我在考虑Linux内核如何实现系统调用,并且想知道是否有人可以向我全面介绍sbrk / brk的工作方式?

我已经审查了内核代码,但是其中有很多,我不理解。我希望有人总结一下?


问题答案:

在一个非常高级的视图中,Linux内核将进程可见的内存跟踪为几个“内存区域”(struct vm_area_struct)。还有一个结构(再次以非常高的层次表示)表示进程的整个地址空间(struct mm_struct)。每个进程(某些内核线程除外)都只有一个struct mm_struct,它依次指向struct vm_area_struct它可以访问的所有内存。

sys_brk系统调用(中发现的mm/mmap.c)简单地调整某些内存区域。(sbrk是glibc包装器brk)。通过比较brk地址的旧值(位于内部struct mm_struct)和请求的值来做到这一点。

首先看一下mmap功能族会比较简单,因为这brk是一个特殊情况。



 类似资料:
  • 问题内容: 所有, 下面的代码来自“ Unix环境中的高级编程”,它创建一个新线程,并打印主线程和新线程的进程ID和线程ID。 在书中,它表示在linux中,此代码的输出将显示两个线程具有不同的进程ID,因为pthread使用轻量级进程来模拟线程。但是,当我在Ubuntu 12.04中运行此代码时,它具有内核3.2,并打印了相同的pid。 那么,新的Linux内核是否会更改pthread的内部实现

  • 问题内容: 在多处理器上,每个内核可以有自己的变量。我以为它们是在不同地址中的不同变量,尽管它们在同一过程中并且具有相同的名称。 但是我想知道,内核如何实现呢?它是否分配了一块内存来存放所有的percpu指针,并且每次它通过shift或其他方式将指针重定向到某个地址时? 问题答案: 普通全局变量不是每个CPU的。自动变量位于堆栈中,并且不同的CPU使用不同的堆栈,因此自然会得到单独的变量。 我猜您

  • 问题内容: 我正在考虑将我的产品从RTOS迁移到嵌入式Linux。我没有很多实时要求,而我有几个RT要求大约是10毫秒。 有人可以给我指出一个参考,该参考可以告诉我当前版本的Linux如何实时吗? 从转向商业RTOS到Linux还有其他陷阱吗? 问题答案: 您可以从Real Time Linux Wiki和FAQ中获得大部分答案。 库存的2.6 linux内核的实时功能是什么? 传统上,Linux

  • 如何在没有GUI干预的情况下自动化整个jprofile过程? 启动jprofiling时,在向客户端提交100个请求之前还是之后? 在Linux系统中安装jprofiler后,我没有找到config.xml(/root/.jprofiler8)。如何创建它? 如何创建没有GUI的会话? 为了分析jprofiler输出,我将在window system上进行复制,并将使用GUI jprofiler。

  • 问题内容: 我是Linux新手。我正在使用Linux Mint 18.1。我已经使用系统软件管理器安装了R。我当前的R版本是3.2。但我想将其升级到版本3.4。 我该怎么做? 问题答案: 注意 :现在,我在GitHub(此处)上有关于在Linux Mint或UbuntuLinux上升级R的最新指南,其中还包含有关流行的数据处理程序集的系统依赖项的一些额外信息,例如以及流行的R包开发…包。 FedR

  • 编译以下代码时: 我得到警告提示: 在I之后,程序中断似乎没有改变。 以下是输出: 问题2:进程在启动时是否在堆上分配内存以供将来使用?还是编译器更改了分配的时间点?否则,为什么? 可以设置参数来控制的行为,并且有一个名为的参数,一般情况下: 如果请求的内存小于它,则将使用; 如果请求的内存大于或等于它,则将使用; 该参数的默认值是(在我的系统上),但在我的测试程序中我使用了1MB,所以选择了,当