linux内存管理

  • 虚拟内存

为了有效的管理内存,linux提出了虚拟内存的概念。虚拟内存是硬件异常、主存、硬件地址翻译、磁盘、和内核软件的完美交互。

虚拟内存提供了三个重要的能力:

1、将内存看作是磁盘的缓存

2、使得进程具一致的地址空间(线性地址)

3、使得进程的地址空间相互独立

  • 虚拟内存的实现机制

内核会为每个进程维护一个单独的任务结构(PCB / task_struct),其中有一个条目指向mm_struct,它描述了虚拟内存的当前状态。其中有两个字段pgd和mmap,pgd指向一级页表的基址,mmap指向一个虚拟内存区域结构的链表。

也就说每个进程都会有一个独立的页表,系统可以通过MMU将虚拟地址映射位物理地址。MMU通过虚拟地址的虚拟页号可以查询到存储在主存上的当前进程的页表条目,然后就可以获取物理页号,通过与页内偏移的结合就可获取物理地址。

特点:

1、虚拟地址是连续的,相应的物理地址可能不是

2、可能有多级页表,只有下一级页表被分配才会创建下一级页表,从而节约内存

3、页表查询分为命中和不命中,命中完全由硬件处理,不命中时内核会参与工作,包括选取一个牺牲页,更改页表。

  • 段式内存管理

程序通过分段划分为多个模块,如代码段、数据段等,给个段的大小不一样,可以存贮在内存不连续的区域。物理地址的寻址过程需要用到段表(类似于页表的数据结构)。分段的目的是为了更好的满足用户的需求。

原文地址:https://www.cnblogs.com/coderht/p/7196541.html