Linux系统启动后内存使用分析详解

需积分: 29 3 下载量 83 浏览量 更新于2024-09-09 收藏 87KB DOCX 举报
Linux内存使用分析 Linux系统启动后,内核如何加载到内存,以及放在内存何处?文件系统如何加载,又放到内存何处?这些问题都是Linux内存使用分析的重点。本文将详细讲述Linux系统启动后,内存的实际使用情况,从设备上电后,内核加载、文件系统搬运、以及设备树读入是怎样进行的。 **Linux内核加载** 在Uboot的最后阶段会执行do_bootm命令,该命令是加载kernel、ramdisk、devicetree到内存指定的地址,将以上三个重要文件搬运到内存后,利用jump命令直接调到内核的入口处去执行。do_bootm_states是准备环境,load内核、文件系统到内存的函数。bootm_start是启动内核的函数,bootm_find_os是查找有效的os,bootm_find_other是加载文件系统到指定的内存处,bootm_load_os是加载内核到内存0x8000,boot_ramdisk_high是分配内存,用于存储ramdisk。 在加载内核时,会将内核加载到内存0x8000处,其中0-0x8000用于存储pagetable等信息。在加载文件系统时,会将文件系统加载到内存0x1f763000处,大小为34M左右。 **文件系统加载** 文件系统是基于ext2的ramdisk.tar.gz文件系统,由于含有qt库,因此即使压缩文件系统也有34M的大小,解压后至少100M还多!在加载文件系统时,会将文件系统加载到内存0x1f763000处,大小为34M左右。 **内存管理** 在Linux系统中,内存管理是非常重要的。从上图中可以看到kernel的实际加载地址为0x8000(实际的物理地址),文件系统实际加载的物理地址为0x1f763000,大小为34M左右。由于目前没有虚拟地址管理,所以到了内核阶段这些地址都会加上0xc0000000映射成虚拟地址,统一由MMU进行管理。 **MMU管理** MMU(Memory Management Unit)是Linux系统中的内存管理单元。MMU负责将物理地址映射到虚拟地址,以便进程可以访问内存。MMU同时也负责内存保护,防止进程访问非法的内存区域。 Linux系统启动后,内核加载到内存0x8000处,文件系统加载到内存0x1f763000处。Linux系统的内存管理是非常重要的,MMU负责将物理地址映射到虚拟地址,以便进程可以访问内存。