01 Aug 2022
进程是操作系统分配内存资源的最小单位,每个进程都有自己独立的内存布局(虚拟内存)。包含:
memory mapping的内存会统计在top命令的SHR字段,所以,这个字段统计的内存并不全是共享内存,也包含其他被映射的文件,例如代码库文件
linux内核给每个进程一个独立的虚拟内存地址。这个虚拟内存的地址是连续的,虚拟内存又分为“用户空间”和“内核空间”。当进程在用户态的时候,只能访问“用户空间”,相反地,只有进程在内核态的时候,才能访问“内核空间”。虽然每个进程的内存空间都包含了“内核空间”,但其实它们是同一段物理内存,这样进程在进入内核态时,都能方便的访问内核态空间内存。
关于“用户空间”,它的结构,一般是从低地址开始依次为text、data、heap、memory mapping。然后stack是从高地址往下分配。

通常情况下,频繁被执行的程序,其text一般是共享并且是只读的。例如gcc、shell、text editor等