operating-system – 现代操作系统中的内存分段

在研究操作系统(主要以 Linux作为参考)时,我在研究的材料中找不到很好的解释.

加载到存储器中的程序通常被描述为被分成文本,数据,堆栈等的段,甚至在诸如Linux的操作系统的上下文中,其中虚拟存储器完全基于分页.它只是程序,而不是被称为分段的内存本身吗?如果是这样,我发现术语令人困惑.

我看到malloc可以在Linux中使用调用’sbrk’来实现,这会增加数据段的大小.同样,这个“数据段”只是一个按惯例用于数据的内存区域而不是“真正的”段吗? (额外的问题:’sbrk’似乎无法减小’段’的大小.这是否意味着进程除了退出之外永远不会向操作系统释放内存?)

此外,我有兴趣知道为什么现代操作系统似乎不使用(分页)分段.难道它不会阻止某些类型的攻击让代码驻留在它自己的受保护段中,从而提高安全性吗?另一方面,这会使例如JIT编译不可能/困难?

除了上述问题的“是”/“否”答案之外,我对任何有关该主题的深刻阐述感兴趣.

先感谢您.

“数据段”中的段与硬件分段无关,硬件分段是与现代操作系统(即,关于分页的冗余)几乎没有关系的特征,其依赖于分页来实现虚拟存储器.与寻呼相比,段也具有严重的缺点(例如,段中的连续存储器必须是物理上连续的)而没有任何益处.对于用户空间程序,通过“段”,字面意思是该过程的虚拟空间的连续部分.

许多架构不再具有分段.在x86上,分段只是一个历史有效载荷,并且设置为具有覆盖整个地址空间的代码和数据段,因为不能绕过分段.

关于释放通过sbrk获得的记忆的问题在这里得到解答:How do I free memory obtained by sbrk()?

相关文章
相关标签/搜索