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

是否将整个进程的虚拟地址空间拆分为页

  •  1
  • Aaron  · 技术社区  · 16 年前

    注: 我试图研究虚拟内存分配的高级概述

    是将整个进程的虚拟地址空间拆分为特定大小的页面:

      .text
      .bss
      .data
    

    3 回复  |  直到 16 年前
        1
  •  2
  •   caf    16 年前

    例如,对于32位线性地址和4kB页,上面的20位是页码,下面的12位是页偏移量。

        2
  •  2
  •   Artelius    16 年前

    首先请注意,“页面”只是地址空间的区域。一个“不可分页”的区域(我想你的意思是它不能被交换到磁盘)在逻辑上仍然被划分为多个页面,但是操作系统可能在这些页面上实现不同的策略。

    每个虚拟页面都有特定的附加权限,比如它是否可读、可写、可执行(取决于硬件支持)。操作系统可以使用它来帮助加强安全性、缓存一致性(用于共享内存)以及从物理内存中交换页面。

    .text , .bss 和 .data 操作系统不需要知道区域(尽管出于安全和性能原因,大多数操作系统确实知道它们)。

        3
  •  1
  •   Pascal Cuoq    16 年前

    .data 是程序初始化的全局变量所在的位置。 .bss 包含没有显式初始值设定项的全局变量(默认值为0)。堆和堆栈是彼此独立的内存区域。进程看到的所有内存都是分页的虚拟内存。进程只能看到虚拟内存。

    推荐文章