程序装载与虚拟内存
Linux下的可执行文件格式ELF
磁盘中的ELF(可执行文件)与内存中的ELF(进程内存映像)
磁盘中可读写(RW)的.data、.bss、.got .pit对应内存中的Data段
磁盘中可读执行(RX)的.rodata、.text、init、ELF Header对应内存中的Code(Text)段
不同的section由于读写执行权限相同被合并成segment,这个操作由Linker完成
而磁盘中的静态文件变为内存中的进程映像,是由os来完成映射的
进程虚拟地址空间
地址以字节编码,常以16进制表示
虚拟内存用户空间每个进程一份
虚拟内存内核空间所有进程共享一份
虚拟内存 mmap 段中的动态链接库仅在物理内存中装载一份,例:glibc(虽然在虚拟内存中被多次载入)
每个进程都会分到4GB的虚拟内存(因为32位的寻址限制),而其中1GB是共享的内核空间(Kernel),剩下的3GB为用户空间
拥有相同读写执行权限的不同section由Linker合并成为一个segment,接着从磁盘中的静态文件由os完成映射成为一个进程映像
//硬件读取物理内存,而程序员看的是由os转化物理内存成为的虚拟内存(虚拟地址空间)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Mandarava23!
评论


