一、页
内核把物理页作为内存管理的基本单位,尽管处理器的最小可寻址单位通常为字(或者字节),但是,内存管理单元(MMU,管理内存并把虚拟地址转换为物理地址的硬件)通常以页为单位进行处理。正因为如此,MMU以页(page)大小为单位来管理系统中的页表(这也是页表名的由来),从虚拟内存的角度来看,页就是最小单位;体系结构不同,支持的页大小也不尽相同,还有些体系结构甚至支持几种不同的页大小,大多数32位体系结构支持4KB的页,而64位体系结构一般会支持8KB的页,这就意味着,在支持4KB页大小并有1GB物理内存的机器上,物理内存会被划分为262144个页。
内核用struct page结构表示系统中的每个物理页;flag域用来存放页的状态,这些状态包括页是不是脏页,是不是被锁定在内存中等。flag的每一位单独表示一种状态,所以它至少可以同时表示出32种不同的状态;_count域存放页的引用计数,也就是这一页被引用了多少次,当计数值变为-1时,就说明当前内核并没有引用这一页,于是,在新的分配中就可以使用它了,内核代码不应当直接检查该域,而是调用page_count()函数进行检查,该函数唯一的参数就是page结构。当页空闲时,尽管该结构内部的_count值是负的,但是对page_count()函数而言,返回值为0表示页空闲,返回一个正整数表示页在使用,一个页可以由页缓存使用,或者作为私有数据,或者作为进程页表中的映射。virtual域是页的虚拟地址,通常情况下,它就是页在虚拟地址中的地址,有些内存并不永久地映射到内核地址空间上,在这种情况下,这个域的值为NULL,需要的时候,必须动态地映射这些页。
struct page {
unsigned long flags;
atomic_t _count;
atomic_t _mapcount;
unsigned long private;
struct address_space *mappi

本文介绍了Linux内核如何管理内存,包括以页为基本单位的管理方式,页的结构和状态,以及区分不同特性的区(ZONE_DMA、ZONE_NORMAL等)。此外,还讨论了内存访问过程中的MMU和页表的作用,以及多级页表如何节省内存。最后,阐述了物理地址和虚拟地址的分布,以及内核和用户空间的地址映射策略。
最低0.47元/天 解锁文章
1621

被折叠的 条评论
为什么被折叠?



