Linux内存相关的一些概念

Linux内存相关的一些概念:

物理内存:
        指通过物理内存条而获得的内存空间,也就是计算机运行时实际的内存地址空间
    
虚拟内存:
        计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。
    32位的地址空间,每个进程对应的虚拟内存地址为4G(2^32),64位的是(2^64)
    
虚拟地址空间的内部又被分为内核空间和用户空间两部分,也对应着进程的两种状态:用户态和内核态

当在系统中执行一个程序时,大部分时间是运行在用户态下的,在其需要操作系统帮助完成一些用户态自己没有特权和能力完成的操作时就会切换到内核态。

用户态切换到内核态的3种方式:
1.系统调用
2.异常(如缺页异常)
3.外围设备的中断
    
内存映射:
       既然每个进程都有一个这么大的地址空间,那么所有进程的虚拟内存加起来,自然要比实际的物理内存大得多。
       所以,并不是所有的虚拟内存都会分配物理内存,只有那些实际使用的虚拟内存才分配物理内存。
       内存映射就是将虚拟内存地址"翻译成"物理内存地址,这个操作由CPU中的通过MMU来完成,在MMU中维护着页表,记录虚拟内存地址和物理内存地址映射关系。


       Linux 提供了两种页表机制:多级页表和大页(HugePage)

TOP指令查看内存:

VIRT:进程虚拟内存的大小,只要是进程申请过的内存,即便还没有真正分配物理内存,也会计算在内。
RES:常驻内存的大小,也就是进程实际使用的物理内存大小,但不包括 Swap 和共享内存。
SHR:共享内存的大小,比如与其他进程共同使用的共享内存、加载的动态链接库以及程序的代码段等(共享内存 SHR 并不一定是共享的,比方说,程序的代码段、非共享的动态链接库,也都算在 SHR 里)。
%MEM:进程使用物理内存占系统总内存的百分比。

FREE指令查看内存:

total:总物理内存大小
used:已使用物理内存的大小,包含了共享内存
free:未使用物理内存的大小
shared:共享内存的大小
buffers:Buffers缓存大小
cached:PageCache缓存大小

-buffers/cache:第一行的used-buffers-cached
+buffers/cache:第一行的free+buffers+cached

(参考:https://time.geekbang.org/column/article/161660

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章