gpt4 book ai didi

Linux 多页边界和 cpu 段

转载 作者:太空宇宙 更新时间:2023-11-04 10:06:28 30 4
gpt4 key购买 nike

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

但是 Linux 有自己的多个段:Stack、BSS、heap、code、globals 等等(尤其是当堆很大并且由很多段组成时)。并非每个 CPU 都有足够的寄存器来跟踪所有这些段。

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

我唯一可能的解释是 Linux:

  1. 对每次写入执行一些手动检查
  2. 将所有页面放在一起,以便可以用几个寄存器跟踪它们

最佳答案

随着 64 位 Intel 的出现,硬件段的概念本应在 1970 年代消亡。

But Linux has multiple segments of its own: Stack, BSS, heap, code, globals, and many more (especially if the heap is large and composed of many segments).

这些是教学概念,与链接器实现之外的现实关系不大——但有关操作系统的坏书一直在使用这些概念。

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

关于Linux 多页边界和 cpu 段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52251195/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com