热门关键字:  ubuntu  分区  Fedora  linux系统进程  函数

当前位置 :| 主页>Linux教程>内核研究>

/sys/i386/include/pmap.h中与页表相关宏值的含义

来源: 作者: 时间:2008-08-27 Tag: 点击:

第一个内核页表页面的下方,而页表目录项只占一个页表页面,因此PTDPTDI就等于768减去1,
即767。
根据上述定义,4G虚拟地址空间的页表目录项可划分如下:0 ... 766 | 767 | 768 ... 1022 | 1023 。
/sys/i386/include/param.h中定义的宏值:
77 #define PAGE_SHIFT 12 /* LOG2(PAGE_SIZE) */
78 #define PAGE_SIZE (1<<PAGE_SHIFT) /* bytes/page */
79 #define PAGE_MASK (PAGE_SIZE-1)
80 #define NPTEPG (PAGE_SIZE/(sizeof (pt_entry_t)))
81
82 #ifdef PAE
83 #define NPGPTD 4
84 #define PDRSHIFT 21 /* LOG2(NBPDR) */
85 #else
86 #define NPGPTD 1
87 #define PDRSHIFT 22 /* LOG2(NBPDR) */
88 #endif
89
90 #define NBPTD (NPGPTD<<PAGE_SHIFT)
91 #define NPDEPTD (NBPTD/(sizeof (pd_entry_t)))
92 #define NPDEPG (PAGE_SIZE/(sizeof (pd_entry_t)))
93 #define NBPDR (1<<PDRSHIFT) /* bytes/page dir */
94 #define PDRMASK (NBPDR-1)
PAGE_SHIFT是页表索引在32位地址中的起始比特。
PAGE_SIZE是页面尺寸,此处定义为4096字节。
PAGE_MASK是一个低12比特全1的常量。
NPTEPG是一个页面中能够存放的页表项的数目,对于非PAE的i386而言,
一个页表项占4个字节,因此NPTEPG为1024。
NPGPTD是页表目录所占用的页面数目,对于非PAE的情况,页表目录共需
4*(2^10)=4096字节,即1个页面。
PDRSHIFT是页表目录索引在32位地址中的起始比特。
NBPTD是页表目录所占用的字节总数,因为NPGPTD是1,所以NBPTD就是4096。
NPDEPTD是页表目录项的总数,对于非PAE的i386而言,一个页表目录项占4个字节,
因此NPDEPTD是1024。
NPDEPG是一个页面中存放的页表目录项的总数,即1024。
NBPDR是同属一个页表目录项的字节数目,即4M。
PDRMASK是一个低22比特全1的常量。
KERNBASE是在/sys/i386/include/vmparam.h中定义的:
142 #define KERNBASE VADDR(KPTDI, 0)
实际上就是根据第一个内核页表目录项的索引KPTDI算出其对应的虚拟地址,
计算方法为768*(2^22),即0xC0000000,即3072M,即3G。



相关文章:
精通initramfs构建step by step
Linux利用kexec迅速切换内核
进程上下文VS中断上下文
内核通知链 学习笔记
linux spi子系统驱动分析
menuconfig 配置选项
《Linux操作系统内核实习》之练习一
udev详解
什么叫微内核,宏内核?
Linux 信号signal处理机制
开发简单的 Linux2.6 内核模块
删除内核的perl脚本
Linux2.6内核usb gadget驱动移植
GCC hacks in the Linux kernel
iomem
kernel学习的想法
让自己的驱动支持udev
linux内核编译步骤
内核的等待队列
Linux内核wait_queue深入分析
升级和删除内核
SD卡驱动分析2
Linux Kernel VDSO本地权限提升漏洞
内核中的TCP的追踪分析-15-TCP(IPV4)的客户端与
linux 2.6内核可加载模块的编译
内核模块HelloWorld
在环回接口上发送一个数据报
ARP初始化
1分钟编译FreeBSD内核
linux设备模型之uart驱动架构分析