<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 閱讀(302) 評論(0)  編輯  收藏


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


    網站導航:
     
    主站蜘蛛池模板: 小草在线看片免费人成视久网| 亚洲精品天堂无码中文字幕| 久久高潮一级毛片免费| 免费观看午夜在线欧差毛片| 亚洲国产成人久久综合| 日本无卡码免费一区二区三区| 亚洲JLZZJLZZ少妇| 成人国产mv免费视频| 国产亚洲精品国产福利在线观看| 国产免费资源高清小视频在线观看| 亚洲aⅴ无码专区在线观看| 午夜一级毛片免费视频| 美女被爆羞羞网站在免费观看| 成人永久免费高清| 本道天堂成在人线av无码免费| 国产精品亚洲аv无码播放| 另类免费视频一区二区在线观看| 亚洲伊人久久大香线蕉苏妲己| 91手机看片国产永久免费| 日本亚洲色大成网站www久久| 国产成人免费永久播放视频平台| 爱情岛论坛免费视频| 亚洲高清专区日韩精品| 1000部禁片黄的免费看| 久久久国产亚洲精品| 一区国严二区亚洲三区| 免费视频成人手机在线观看网址| 亚洲va成无码人在线观看| 日韩精品无码人妻免费视频| 免费人成在线观看播放a| 久久亚洲高清观看| 国产人在线成免费视频| 一区二区三区免费在线观看| 亚洲大片在线观看| 日韩高清免费在线观看| 国产免费网站看v片在线| 亚洲熟妇色自偷自拍另类| 可以免费观看一级毛片黄a| 99精品一区二区免费视频| 亚洲国产精品成人综合色在线| 亚洲成av人在线视|