Memory Management
文章平均质量分 59
kernel_details
这个作者很懒,什么都没留下…
展开
-
使TLB的所有项失效 --- __flush_tlb_all()
# define __flush_tlb_all() do ...{ if (cpu_has_pge) __flush_tlb_global(); else原创 2007-01-16 16:04:00 · 3420 阅读 · 0 评论 -
set_pte()
将pteval写入pteptr所指的页表项中:#define set_pte(pteptr, pteval) (*(pteptr) = pteval)原创 2007-01-15 16:44:00 · 3561 阅读 · 0 评论 -
switch_mm()
switch_mm()进行用户空间的切换,更确切地说,是切换地址转换表(pgd),由于pgd包括进程系统空间(0xc000 0000 ~ 0xffff ffff)和用户空间(0x0000 0000 ~ 0xbfff ffff)的地址映射,但是由于所有进程的系统空间的地址映射都是相同的。所以实质上就是进行用户空间的切换。 每个进程都有其自身的页目录表pgd 读者也许会问:进程原创 2007-01-16 10:03:00 · 6010 阅读 · 2 评论 -
pfn_pte()
pfn_pte(pfn, prot)根据prot加工第pfn物理页所对应的页表项内容#define pfn_pte(pfn, prot) __pte(((pfn) #define PAGE_SHIFT 12#define pgprot_val(x) ((x).pgprot)原创 2007-01-15 16:49:00 · 3349 阅读 · 0 评论 -
kernel_physical_mapping_init()
pagetable_init() --> kernel_physical_mapping_init()static void __init kernel_physical_mapping_init(pgd_t *pgd_base){ unsigned long pfn; pgd_t *pgd; pmd_t *pmd; pte_t *pte; int pgd_idx,原创 2007-01-15 16:40:00 · 3601 阅读 · 2 评论 -
alloc_bootmem_low_pages()
从ZONE_DMA分配x数量的字节#define alloc_bootmem_low_pages(x) __alloc_bootmem_node(NODE_DATA(0), (x), PAGE_SIZE, 0)void * __init __alloc_bootmem_node (pg_data_t *pgdat, unsigned long size, unsig原创 2007-01-15 17:21:00 · 2778 阅读 · 0 评论 -
one_page_table_init()
pagetable_init() --> kernel_physical_mapping_init() --> one_page_table_init()one_page_table_init(pmd_t *pmd)初始化pmd索引的页表项(将该项索引的物理页面的首地址填写到pmd中),并返回pmd索引的物理页面的首地址(线性地址)static pte_t * __init one_pag原创 2007-01-15 17:14:00 · 1907 阅读 · 0 评论 -
one_md_table_init()
直接返回pgd所指向的页目录表项static pmd_t * __init one_md_table_init(pgd_t *pgd){ pud_t *pud; pmd_t *pmd_table;#ifdef CONFIG_X86_PAE pmd_table = (pmd_t *) alloc_bootmem_low_pages(PAGE_SIZE); set_pgd(p原创 2007-01-15 17:04:00 · 4369 阅读 · 0 评论 -
pagetable_init()
pagetable_init()根据物理内存初始化页目录项及页表项static void __init pagetable_init (void)...{ unsigned long vaddr; pgd_t *pgd_base = swapper_pg_dir;#ifdef CONFIG_X86_PAE int i; //初始化整个页目录项(1024项)原创 2007-01-15 16:36:00 · 3387 阅读 · 0 评论 -
paging_init()
当RAM小于896MB时,初始化主内核页全局目录表--最终内核页表void __init paging_init(void){#ifdef CONFIG_X86_PAE set_nx(); if (nx_enabled) printk("NX (Execute Disable) protection: active/n");#endif初始化页目录表的高256项及其所对应原创 2007-01-15 16:32:00 · 2525 阅读 · 0 评论 -
pgd_index()
pgd_index(PAGE_OFFSET)pgd_index(0xC0000000) = 768根据线性地址address,计算该地址所对应的页目录表项:#define pgd_index(address) (((address) >> PGDIR_SHIFT) & (PTRS_PER_PGD-1))#define PGDIR_SHIFT 22#define PTRS_PER_P原创 2007-01-15 16:58:00 · 4151 阅读 · 0 评论