代码之家  ›  专栏  ›  技术社区  ›  Jas

Linux多页边界和cpu段

  •  0
  • Jas  · 技术社区  · 6 年前

    我很困惑,为什么Linux能够有这么多的段,它仍然可以有边界检查。据我所知,现代CPU有几个段数据寄存器(代码、数据等)。

    如果我没弄错的话,Linux将每个段存储在一个单独的页面中,那么它如何防止这些页面中的一个读写越界呢?

    我唯一可能的解释是Linux:

    1. 在每次写入时执行一些手动检查
    1 回复  |  直到 6 年前
        1
  •  2
  •   user3344003    6 年前

    随着64位Intel的出现,硬件段的概念已经消亡了,这本应发生在20世纪70年代。

    但是Linux有自己的多个段:Stack、BSS、heap、code、globals等等(尤其是当heap很大并且由许多段组成时)。

    这些是教学概念,它们与链接器实现之外的现实几乎没有关系,但关于操作系统的坏书仍然在使用。

    堆栈就是内存。堆就是内存。操作系统不知道内存是否用于堆栈,也不知道内存是否用于堆。操作系统只是将内存分配给具有不同属性(例如,读/写、只读、读/执行)的进程。进程如何处理这些内存是它自己的事情。