内存细分?

时间:2018-05-22 09:57:50

标签: memory operating-system

我现在了解虚拟内存的工作原理以及设置此虚拟内存的原因。但是,几天前,我遇到了内存分段,将地址空间拆分为datatext等段。我找不到任何解释内存分段的明确,非模糊的资源(至少对我而言)。例如,我想知道,

将地址空间拆分成段的责任是什么?

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

我找到了this wiki article,但它并没有真正回答这些问题。

2 个答案:

答案 0 :(得分:0)

嗯,说实话,我更喜欢你查阅有基础知识和全面材料而非阅读文章的书籍。因为,他们的内容是特定的,并且高于基本水平(对我而言)。

您问题中的每个字词都是一个单独的主题,在下面的参考资料中有很好的描述。如果你真的想要答案和明确的概念,那么你应该通过这个:

宣读Abraham Silberschatz的“操作系统概念”。

第8章:内存管理

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

答案 1 :(得分:0)

术语“段”出现在至少两个不同的存储器上下文中。

在这些日子里,分割是用于记忆保护的方法。英特尔芯片在过时几十年后继续使用细分市场。英特尔最终在64位模式下放弃了段的使用,但它们仍然以残留形式存在,它们仍然以32位模式存在。

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

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

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

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

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

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

      

    负责将地址空间拆分成段?

    在现代系统上(即1970年之后设计而非英特尔)设计的地址空间不会分成第二类的段。一些令人困惑的书籍将其用作图表中的教学概念。一个过程可以(并且通常会)具有散布在数据页面中的代码页。

      

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

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