<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 53, 文章 - 0, 評論 - 3, 引用 - 0
    數據加載中……

    kernel memory mapping summay

    kernel memory mapping summay

    Today, finally I become clear about the relationship between
    fixed mapping
    permanent kernel mapping
    temporary kernel mapping
    noncontiguous memory area mapping
    (I feel that most of the name is not appropriate, to some text, it will mislead the reader.)

    4G linear virtual address space is divided into two major part.
    kernel space mapping     [3G, 4G)
    user space mapping        [0, 3G)

    kernel space mapping is divided into more pieces
    linear mapping [3G, 3G + 896M)
    non linear mapping [3G + 896M + 8M, 4G)
    1. Fixed Mapping (wrong name, should be compile time mapping, the virtual address is decided in compile time. )
    2. Temporary mapping
    3. Permanent mapping
    4. noncontiguous memory area mapping (Vmalloc area)

    The following is the diagram for the reference.

    FIXADDR_TOP            (=0xfffff000)
     
                        fixed_addresses (temporary kernel mapping is part of it)
                         #define __FIXADDR_SIZE  (__end_of_permanent_fixed_addresses << PAGE_SHIFT)
                    
    FIXADDR_START        (FIXADDR_TOP - __FIXADDR_SIZE)
                            
                        temp fixed addresses (used in boot time)
                         #define __FIXADDR_BOOT_SIZE     (__end_of_fixed_addresses << PAGE_SHIFT)
                    
    FIXADDR_BOOT_START    (FIXADDR_TOP - __FIXADDR_BOOT_SIZE)
                            
                        Persistent kmap area (4M)
     
    PKMAP_BASE            ( (FIXADDR_BOOT_START - PAGE_SIZE*(LAST_PKMAP + 1)) & PMD_MASK )
     
                         2*PAGE_SIZE
     
    VMALLOC_END            (PKMAP_BASE-2*PAGE_SIZE) or (FIXADDR_START-2*PAGE_SIZE)

                         noncontiguous memory area mapping (Vmalloc area)
                        
    VMALLOC_START        (((unsigned long) high_memory + 2*VMALLOC_OFFSET-1) & ~(VMALLOC_OFFSET-1)) 

    high_memory            MIN (896M, phisical memory size)
     
    below the excerp of the source code.

    #ifdef CONFIG_X86_PAE
    #define LAST_PKMAP 512
    #else
    #define LAST_PKMAP 1024
    #endif
                                                                             
    #define VMALLOC_OFFSET  (8*1024*1024)
    #define VMALLOC_START   (((unsigned long) high_memory + \                         
                            2*VMALLOC_OFFSET-1) & ~(VMALLOC_OFFSET-1))   
                                  
    #ifdef CONFIG_HIGHMEM                                             
    # define VMALLOC_END    (PKMAP_BASE-2*PAGE_SIZE)
    #else                                                                    
    # define VMALLOC_END    (FIXADDR_START-2*PAGE_SIZE)              
    #endif

    enum fixed_addresses {
            FIX_HOLE,
            FIX_VDSO,
            FIX_DBGP_BASE,
            FIX_EARLYCON_MEM_BASE,
    #ifdef CONFIG_X86_LOCAL_APIC
            FIX_APIC_BASE,  /* local (CPU) APIC) -- required for SMP or not */
    #endif
    #ifdef CONFIG_X86_IO_APIC
            FIX_IO_APIC_BASE_0,
            FIX_IO_APIC_BASE_END = FIX_IO_APIC_BASE_0 + MAX_IO_APICS-1,
    #endif
    #ifdef CONFIG_X86_VISWS_APIC
            FIX_CO_CPU,     /* Cobalt timer */
            FIX_CO_APIC,    /* Cobalt APIC Redirection Table */
            FIX_LI_PCIA,    /* Lithium PCI Bridge A */
            FIX_LI_PCIB,    /* Lithium PCI Bridge B */
    #endif
    #ifdef CONFIG_X86_F00F_BUG
            FIX_F00F_IDT,   /* Virtual mapping for IDT */
    #endif
    #ifdef CONFIG_X86_CYCLONE_TIMER
            FIX_CYCLONE_TIMER, /*cyclone timer register*/
    #endif
    #ifdef CONFIG_HIGHMEM
            FIX_KMAP_BEGIN, /* reserved pte's for temporary kernel mappings */
            FIX_KMAP_END = FIX_KMAP_BEGIN+(KM_TYPE_NR*NR_CPUS)-1,
    #endif
    #ifdef CONFIG_ACPI
            FIX_ACPI_BEGIN,
            FIX_ACPI_END = FIX_ACPI_BEGIN + FIX_ACPI_PAGES - 1,
    #endif
    #ifdef CONFIG_PCI_MMCONFIG
            FIX_PCIE_MCFG,
    #endif
    #ifdef CONFIG_PARAVIRT
            FIX_PARAVIRT_BOOTMAP,
    #endif
            __end_of_permanent_fixed_addresses,
            /* temporary boot-time mappings, used before ioremap() is functional */
    #define NR_FIX_BTMAPS   16
            FIX_BTMAP_END = __end_of_permanent_fixed_addresses,
            FIX_BTMAP_BEGIN = FIX_BTMAP_END + NR_FIX_BTMAPS - 1,
            FIX_WP_TEST,
            __end_of_fixed_addresses
    }

    posted on 2008-07-16 17:05 InPractice 閱讀(305) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 高清在线亚洲精品国产二区| 免费观看激色视频网站bd| 四虎影视永久免费视频观看| 亚洲中文字幕精品久久| 国语成本人片免费av无码| 亚洲三级中文字幕| 夜夜嘿视频免费看| 亚洲av午夜电影在线观看| 国产免费变态视频网址网站| 在线播放亚洲精品| 亚洲综合色在线观看亚洲| 一级A毛片免费观看久久精品 | 一级白嫩美女毛片免费| 亚洲人成无码网站| 99久热只有精品视频免费看| 久久99亚洲网美利坚合众国| 91免费资源网站入口| 久久亚洲精品无码av| 中文字幕不卡亚洲| 久久中文字幕免费视频| 亚洲人成在线中文字幕| 韩国18福利视频免费观看| 日韩免费高清一级毛片| 国产成人无码综合亚洲日韩| 成人免费视频69| 18女人腿打开无遮掩免费| 亚洲天堂中文字幕在线观看| 青青草国产免费久久久91| 一道本在线免费视频| 久久狠狠高潮亚洲精品| 国产高清免费的视频| a级毛片毛片免费观看久潮喷| 亚洲精品视频久久| 日韩一区二区三区免费体验| 久久性生大片免费观看性| 亚洲国产日韩女人aaaaaa毛片在线| 免费一级特黄特色大片在线 | 亚洲日韩一区二区三区| 国产aⅴ无码专区亚洲av麻豆 | 亚洲一级毛片免费看| 成人亚洲国产精品久久|