在研究操作系统时(主要以 Linux 为参考),有几点我在所研究的材料中没有得到很好的解释。
加载到内存中的程序通常被描述为被划分为文本、数据、堆栈等段,即使在像 Linux 这样的虚拟内存完全基于分页的操作系统的上下文中也是如此。是否只是程序而不是内存本身被称为分段?如果是这样,我发现术语令人困惑。
我看到可以在 Linux 中使用增加数据段大小的调用“sbrk”来实现 malloc。同样,这个“数据段”是否只是按惯例用于数据的内存区域,而不是“真实”段?(额外的问题:“sbrk”似乎无法减小“段”的大小。这是否意味着进程除了退出之外永远不能向操作系统释放内存?)
我也有兴趣知道为什么现代操作系统似乎没有使用(分页)分段。将代码驻留在自己的受保护段中,是否可以防止某些类型的攻击,从而提高安全性?另一方面,这会使例如 JIT 编译变得不可能/困难吗?
除了对上述问题的“是”/“否”回答之外,我对任何关于该主题的有见地的阐述感兴趣。