用户页表和内核页表

发布于 2024-08-31  501 次阅读


01_用户页表

1.概念

用户页表是为用户进程(也就是运行在用户模式下的进程)管理虚拟内存映射的页表。用户页表包含用户进程的虚拟地址空间与物理地址的映射关系。

2.例子

假设有一个用户进程运行,它的虚拟地址空间如下:

  • 代码段(Text Segment):从虚拟地址0x004000000x004FFFFF映射到物理地址0x001000000x001FFFFF
  • 数据段(Data Segment):从虚拟地址0x006000000x006FFFFF映射到物理地址0x002000000x002FFFFF
  • 堆(Heap):从0x00800000开始分配物理内存

用户页表将虚拟地址0x00400000映射到物理地址0x00100000,虚拟地址0x00600000映射到物理地址0x00200000。当用户进程尝试访问某个虚拟地址时,CPU会通过用户页表将其转换为对应的物理地址进行访问。

02_内核页表

1.概念

内核页表是操作系统内核用来管理内核空间内存映射的页表。内核页表包含内核空间的虚拟地址映射,但在很多操作系统中,内核页表还包含了所有用户进程共享的内核空间的虚拟地址映射。

2.例子

操作系统内核地址空间可能是这样的:

  • 内核代码段:从虚拟地址0xC00000000xC01FFFFF映射到物理地址0x001000000x001FFFFF
  • 内核数据段:从虚拟地址0xC02000000xC03FFFFF映射到物理地址0x002000000x002FFFFF

内核页表会将虚拟地址0xC0000000映射到物理地址0x00100000。内核空间的地址范围通常是固定的,并且在不同用户进程之间共享。因此,每个用户进程在访问内核空间时,实际上使用的是相同的内核页表。

03_用户页表和内核页表的区别

1.访问权限不同
  • 用户页表:用户进程只能访问自己的页表,不允许访问内核空间。
  • 内核页表:内核可以访问整个系统的地址空间,包括所有用户空间和内核空间。
2.地址空间不同
  • 用户页表:只管理用户进程的虚拟地址空间,通常在低地址范围(例如,0x00000000到0xBFFFFFFF)。
  • 内核页表:管理内核空间,通常在高地址范围(例如,0xC0000000以上)。
3.隔离对象不同
  • 用户页表:用户进程之间隔离,防止一个进程访问或修改另一个进程的内存。
  • 内核页表:通常所有进程共享一个内核页表,内核可以直接访问用户空间和内核空间。

踏上取经路,比抵达灵山更重要