????????????????????????????????????????????????????high_memory?????У???x86????????????896MB???????????????Χ????????棬??????????????????????????????x86???????????????RAM???Χ??4GB??????PAE????????64GB)???????Щ???????????in????????????????????x86??????????е???????3GB-4GB??
????????????????????????????????????棻???????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????????“????”????????????????????ж???????????????????????????????????????????????????????????????????????к????????????????????????????
???????????????????????·?????????????????????????·???????????????????ζ????????·??????????????????????????????·???п?????????????????????????????????
??????????
????????????????????????????????????????????????????????????????????????????????pkmap_page_table?У??????????????????????????????????????????е????????LAST_PKMAP????????????????ζ????2MB??4MB??????檔
????/*?????????????????????????????????4M???*/
????#define PKMAP_BASE ((FIXADDR_BOOT_START - PAGE_SIZE * (LAST_PKMAP + 1))
????& PMD_MASK)
?????????????????????PKMAP_BASE?????pkmap_count???????LAST_PKMAP??????????pkmap_page_table????е????????????
????????????????????????÷????(pkmap_count)????????????1024???????????????????????檔??????????????0????????????1????????????1??????????????????????????裬?????е????????????????????????е??????????????????????????????????????
????/*
????????????????????????÷????(pkmap_count)????????????1024??
?????????????????????????檔????????????????????????????1??
??????????????1??????????????????????????裬?????е?????
???????????????????????е?????????????????????????
?????????????????
????*/
????static int pkmap_count[LAST_PKMAP];
????/*last_pkmap_nr???????α?????????????pkmap_page_table???λ???????????????????η???????last_pkmap_nr?????*/
????static unsigned int last_pkmap_nr;
??????????????????????????????????????????????????????page_address_htable??б???????????page_address_map???????????????????е??????????е?????????????????????????????????????????????????????????
* Hash table bucket
*/
static struct page_address_slot {
struct list_head lh;            /* List of page_address_maps */
spinlock_t lock;            /* Protect this bucket's list */
} ____cacheline_aligned_in_smp page_address_htable[1<<PA_HASH_ORDER];
/*
* Describes one page->virtual association
*/
struct page_address_map {
struct page *page;
void *virtual;
struct list_head list;
};