Linux为每一个运行的程序(进程),都分配一个0~4GB的虚拟内存地址空间
每个虚拟内存空间都分为了两个部分
-
内核区(是受保护的,用户不能够对内核进行读写操作)
-
内存管理
-
进程管理
-
PCB 是一个结构体(task_struct),其中有一个文件描述符表(默认大小1024,一个进程最多打开1024个文件),其中存放着打开的文件描述符
前三个被占用, 分别是STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO
-
虚拟地址空间–》内核区–》PCB文件描述表–》文件描述符–》文件IO操作 使用文件描述符
-
-
设备驱动管理
-
VFS虚拟文件系统
-
-
用户区
- 环境参数
- 命令行参数
- 栈空间(自上向下增长):操作系统进行管理
- 共享库
- 堆空间(自下向上增长):一般为程序员进行管理
- .bss 未初始化以及初始化为0的全局变量
- .data 已初始化的全局变量
- .text (代码段,二进制机器指令)
- 受保护的地址
内存分布图如下所示