操作系统(一):简述Linux下进程虚拟空间布局

在x86 32bit Linux下,我们的系统会给每个进程分配一个4G大小的虚拟地址空间。其中前3G内存是用户空间,最后1G是内核空间。所有的进程有各自的用户空间,但所有的进程都共享一个内核空间。

从下到上依次:

1,0*00000000-0*08048000  128M的不可访问区域

2,text: 代码中的指令

3,data:代码中的数据

4, bss段:代码中未赋值或赋值为0的数据

5,紧接着是给堆预留的空间

6,栈:起始地址:0xBFFFFFFB 储存着局部变量 并且函数运行在此处

7,内核部分:0XC0000000—0xFFFFFFFF 1GB

内核空间为0XC0000000—0xFFFFFFFF 1GB, 如果物理内存大于896MB,则内核的虚拟地址0xC0000000—0xF8000000 和 物理内存0—896MB对等映射。所以内核 为了访问大于896MB的物理内存需要设置一段虚拟区域映射其他的物理内存,这段虚拟地址叫做高端内存,VMALLOC区用函数vmalloc分配内存页面不保证连续,持久映射用函数kmap建立映射,这段映射是长期映射,固定映射是虚拟地址和物理内存固定的地址进行映射。

用户空间:3G

内核空间:1G

如果为64位基本相似, 地址空间变大, 内核空间取消高端内存。

详细内容大家可以参考:https://blog.csdn.net/a7980718/article/details/80852576

猜你喜欢

转载自blog.csdn.net/hzw9806/article/details/89522889