Skip to content

Latest commit

 

History

History
27 lines (18 loc) · 2.16 KB

2014-03-15-task-size.md

File metadata and controls

27 lines (18 loc) · 2.16 KB
layout title category description tags
post
进程地址空间
基础
进程地址空间,寻址...
task_size

由于内存区域是通过指针寻址,因此CPU的字长,如32位,64位决定了所能管理的地址的空间的最大长度。对64位的处理器而言,可以管理2^64B的长度。

地址空间的最大长度和实际可用的物理内存数量无关,因此被称为虚拟地址空间。从系统中每个进程的角度来看,地址空间中只有自己一个进程,因为无法感知其他进程的存在,况且,应用程序也不需要关注其他应用程序的存在,就好像计算机中只有一个进程一样。

Linux将虚拟地址空间划分为两个部分,分别称为内核空间用户空间

system 进程地址空间

系统中每个用户进程都有自身的虚拟地址范围,从0到TASK_SIZE。其中内核空间保留给内核专用,用户的进程不能访问。TASK_SIZE是一个特定于计算机体系结构的常数。比如在某些系统中,地址空间在3x2^30处划分,因此每个进程的虚拟地址空间是3x2^30长。假设虚拟地址空间的总长度4x2^30,那么留给内核的就是1x2^301。不同的计算机,体系结构的划分也不尽相同。

这种划分与可用内存的数量无关。由于地址空间虚拟化的结果,每个用户进程都认为自己有3x2^30长的地址空间,各个系统进程的用户空间是完全彼此分离的。

64位计算机的情况更加复杂,因为它们在实际管理自身巨大的虚拟地址空间时,更倾向于使用小于64的位数2。因此,地址空间中实际可寻址的部分小于理论长度。但无论怎样,该值仍大于计算机上实际可能的内存数量,是完全够用的。这种做法的一个优点是,与寻址完整的虚拟地址空间相比,管理有效地址空间所需的位数较少,因此CPU可以节省一些工作量3

Footnotes

  1. 虚拟地址空间的顶部和内核空间总是同样的,无论当前执行的是哪个进程。

  2. 如42位或47位。

  3. 但这样,虚拟地址空间会包含一些不可寻址的洞。