ARM Linux基本数据类型综合应用实例

本文章将带读者走进Linux内核,亲身感受一下这个优秀的操作系统Linux的具体搭建过程。其实读者可以看到,若将这一高楼大厦分解细分为砖瓦,那么每一部分其实也并不是那么难的。

在Linux内核中,直接使用基本数据类型来构建的关键数据结构微乎其微,一般都是将基本数据类型组合起来,构成构造数据类型(如结构体等),来组成其关键的数据结构。

本文就以Linux中内存管理中的物理页为例进行讲解。

1、内存页管理机制

内存把物理页作为内存管理的基本单位。尽管处理器的最小可寻址单位通常为字,但是,内存管理单元(MMU,管理内存并把虚拟地址转换为物理地址的硬件)通常是以页为单位进行处理的。也正因为如此,MMU以页的大小为单位来管理系统中的页表。因此,从虚拟内存的角度来看,页就是最小分配单位。

不同的体系结构,所支持的页大小也不尽相同,读者可以查看/include/asm../page.h中的定义,如下所示:

/*include/asm-i386/page.h*/

/*PAGE_SHIFT决定页大小,页大小为4KB*/

#define PAGE_SHIFT  12

/*include/asm-alpha/page.h*/

/*页大小为8KB*/

#define PAGE_SHIFT  13

/*include/asm-arm/page.h*/

/*页大小为4KB*/

#define PAGE_SHIFT  12

/*include/asm-arm26/page.h,arm2600*/

/*若定义了页大小为16KB*/

#if defined(CONFIG_PAGESIZE_16)

#define PAGE_SHIFT  14      /*16KB*/

/*其他情况页大小为32KB*/     

#else  /*default*/

#define PAGE_SHIFT  15       /*32KB*/

#endif

/*include/asm-ppc/page.h*/

/*页大小为4KB*/

#define PAGE_SHIFT  12

这里的PAGE_SHIFT是用于决定页大小的,将它的数值进行以2为底取幂运算,所得到的结果就是页得大小,比如2的12次方为4K。可以看到,不同的体系结构的页大小是不同的,有些体系结构甚至可以支持多种不同的页大小,在ARM中,就可以支持3种页大小,其中S3C2410的页大小为4KB。

相关推荐