Linux多页边界和cpu段

Linux多页边界和cpu段,linux,operating-system,Linux,Operating System,我感到困惑的是,Linux为什么能够有这么多的段,它仍然可以进行边界检查。据我所知,现代CPU有两个段数据寄存器(代码、数据等) 但是Linux有自己的多个段:堆栈、BSS、堆、代码、全局以及更多(特别是当堆很大并且由许多段组成时)。并非每个CPU都有足够的寄存器来跟踪所有这些段 如果我没有弄错的话,Linux将每个段存储在一个单独的页面中,那么它如何能够防止其中一个页面读写越界呢 我唯一可能的解释是Linux: 对每次写入执行一些手动检查 将所有页面紧密地放在一起,这样就可以用几个寄存器跟踪它

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

但是Linux有自己的多个段:堆栈、BSS、堆、代码、全局以及更多(特别是当堆很大并且由许多段组成时)。并非每个CPU都有足够的寄存器来跟踪所有这些段

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

我唯一可能的解释是Linux:

  • 对每次写入执行一些手动检查
  • 将所有页面紧密地放在一起,这样就可以用几个寄存器跟踪它们

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

    但是Linux有自己的多个段:堆栈、BSS、堆、代码、全局以及更多(特别是当堆很大并且由许多段组成时)

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


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

    您也可以在此论坛中提问:。它可能会帮助更多。这不是操作系统做的。这是硬件。操作系统只是告诉它什么是允许的,什么是不允许的。简单地说,非常感谢你的回答;但是你能解释一下这些属性规则是如何执行的吗?例如,为了防止进程写入只读内存,CPU在写入之前是否进行了某种检查,或者操作系统是否进行了这种检查?现在,他们使用页面保护。