linux 2.6源代码情景分析笔记之内存4
--------------------------------------------------
几个宏:
PGDIR_SHIFT:确定页全局目录项能映射的区域大小的对数。此宏用于计算页全局目录中一个单独表项所能映射区域的大小。PGDIR_MASK用于屏蔽offset table,middle air,upper dir.字段的所有位。
#define PGDIR_SHIFT 22//当物理地址扩展机制(pae)被禁止时,当激活的时候,此时就为30位(12位偏移,9位表,9位中间目录)
#define PGDIR_SIZE (1UL << PGDIR_SHIFT)//此时为2的22次方,4MB.当激活的时候,就是2的30次方,1GB.
#define PGDIR_MASK (~(PGDIR_SIZE-1))//0xffc00000
PUD_SHIFT:确定页上级目录项能映射的区域大小的对数。此宏用于计算全局目录中的一个单独表项所能映射的区域大小。PUD_MASK用于屏蔽offset字段,table字段,中间层字段,upper dir字段的所有位。
#define PUD_SHIFT PGDIR_SHIFT
#define PUD_SIZE (1UL << PUD_SHIFT)
#define PUD_MASK (~(PUD_SIZE-1))
指定线性地址的offset字段和table字段的总位数。是页中间目录项可以映射的区域大小的对数。size用于计算由页中间目录的一个单独表项所映射的区域大小(页表大小)mask用于屏蔽offset字段与table字段的所有位。。
#define PMD_SHIFT PUD_SHIFT
#define PMD_SIZE (1UL << PMD_SHIFT)
#define PMD_MASK (~(PMD_SIZE-1))
PAGE_SHIFT:指定offset字段的位数;当x86时,为12.再看他的尺寸:1<< PAGE_SHIFT将1左移12位,也就是1*2^12=4096个字节。1UL的意思是unsigned long的1.而PAGE_MASK用以屏蔽offset字段的所有位置。
#define PAGE_SHIFT 12
#define PAGE_SIZE (1UL << PAGE_SHIFT)
#define PAGE_MASK (~(PAGE_SIZE-1))
以上也就是全局->上级—>中间目录—>页表这个顺序。而除了上面的宏之外,还有表明各个层次之间表项个数的宏。
相关文档:
Service Discovery Protocol(SDP)提供一种能力,让应用程序有方法发现哪种服务可用以及这种服务的特性。
服务发现协议(SDP或Bluetooth SDP)在蓝牙协议栈中对蓝牙环境中的应用程序有特殊的含意,发现哪个服务是可用的和确定这些可用服务的特征。SDP定义了bluetooth client发现可用bluetooth server服务和它们的特征的方法。 ......
一:前言
最近在研究android的sensor driver,主要是E-compass,其中用到了Linux input子系统.在网上也看了很多这方面的资料,感觉还是这篇分析的比较细致透彻,因此转载一下以便自己学习,同时和大家分享!
(这篇博客主要是以键盘驱动为例的,不过讲解的是Linux Input Subsystem,可以仔细的研究一下!)
键盘驱动将检 ......
很简单的一个程序,sub模块提供两个函数sub_integer,add_integer,并将其导出到内核符号表中,sub_test模块对这两个函数进行调用。这算是自己写的第一个内核模块程序吧,纪念一下.
sub.c:
#include<linux/init.h>
#include<linux/kernel.h>
#include<linux/module.h>
MODULE_LICENSE("Dual BSD/GPL") ......
1. vmstat
这个工具可以让你了解到系统资源当前的负载率,包括CPU,内存,swap空间,io等等。
基本用法
$ vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r b swpd free buff cache si so&n ......