Memory 内存分割?

Memory 内存分割?,memory,operating-system,Memory,Operating System,我现在了解了虚拟内存是如何工作的,以及是什么负责设置这个虚拟内存。然而,几天前,我遇到了内存分割,它将地址空间分割为数据和文本等段。我找不到任何清晰、不含糊的资源(至少对我来说)来解释内存分割。比如说我想知道, 什么负责将地址空间拆分为段? 它到底是如何工作的?例如,如何将段转换为物理地址,以及如何检查某个段内的地址是否已被访问? 我发现了,但它并没有真正回答这样的问题。好吧,老实说,我更喜欢你查阅有基础和全面资料的书籍,而不是阅读文章。因为,他们的内容是具体的,并且高于基本水平(对我来说) 你

我现在了解了虚拟内存是如何工作的,以及是什么负责设置这个虚拟内存。然而,几天前,我遇到了内存分割,它将地址空间分割为
数据
文本
等段。我找不到任何清晰、不含糊的资源(至少对我来说)来解释内存分割。比如说我想知道,

什么负责将地址空间拆分为段?

它到底是如何工作的?例如,如何将段转换为物理地址,以及如何检查某个段内的地址是否已被访问?


我发现了,但它并没有真正回答这样的问题。

好吧,老实说,我更喜欢你查阅有基础和全面资料的书籍,而不是阅读文章。因为,他们的内容是具体的,并且高于基本水平(对我来说)

你们问题中的每个术语都是一个单独的主题,在下面的参考文献中有很好的描述。如果你真的想要答案和清晰的概念,那么你应该经历以下几点:

请阅读Abraham Silberschatz的“操作系统概念”

第8章:内存管理

子主题:分页基本方法和硬件支持,分段

术语“分段”至少出现在两种不同的内存上下文中

在古代,分割是用来保护记忆的方法。英特尔芯片在被淘汰后的几十年里继续使用分段技术。Intel最终放弃了64位模式下使用的段,但它们仍然以残留形式存在,并且仍然以32位模式存在

这就是维基百科链接中描述的“分段”类型

“代码”和“数据”类型的分割是完全不同的。另一个术语是“程序段”

链接代码时,链接器通常将具有相同属性的内存分组为“程序段”(也称为“段”)。通常,您将拥有以下内存:

  • 是只读/执行(代码)
  • 读/写并初始化为零
  • 读/写并初始化为指定值
  • 只读
  • 为了控制相关内存的分组,链接器通常使用命名段/程序段。默认情况下,链接器可以创建一个名为“代码”的程序段,并将所有可执行代码放在该段中。默认情况下,它创建一个称为“数据”的段,并将只读数据放在该段中

    强大的链接器允许程序员重写这些。某些汇编语言和系统语言允许您指定程序段

    在此上下文中,“段”仅存在于链接过程中。内存中没有标记“代码”或“数据”的区域(除非您使用的是旧的英特尔系统)

    什么负责将地址空间拆分为段

    在现代系统(即1970年后设计的系统,而非英特尔公司的系统)上,地址空间不会被分割成第二种类型的段。一些令人困惑的书籍在图表中将其用作教学概念。一个进程可以(而且通常确实)在代码页中穿插数据页

    例如,如何将段转换为物理地址,以及如何检查某个段内的地址是否已被访问

    该问题涉及顶部所述“分部”一词的使用。这种转换是使用硬件寄存器完成的