当前位置:首页>Linux>Linux内存管理:内核内存的布局图

Linux内存管理:内核内存的布局图

  • 2026-03-23 00:40:00
Linux内存管理:内核内存的布局图
内核内存布局图对于理解内存管理至关重要,有了布局图对于理解内存管理初始化,以及虚拟内存,各种内存分配都有辅助作用。

所以可以用一张图来总领,然后逐个介绍每一段的来历,作用等等。

内核内存布局图和内存管理框架图是不同视角的内存管理框图,还包括后面介绍的用户空间内存布局图。

一、内核内存布局图框图

二、内核内存布局打印

在内核基本完成内存初始化工作,整体布局稳定之后,start_kernel-->mm_init-->mem_init打印了一段内存layout。

Vexpress平台打印如下:

Memory: 1031428K/1048576K available (4787K kernel code, 156K rwdata, 1364K rodata, 1348K init, 166K bss, 17148K reserved, 0K cma-reserved, 270336K highmem)Virtual kernel memory layout:    vector  : 0xffff0000 - 0xffff1000   (   4 kB)    fixmap  : 0xffc00000 - 0xfff00000   (3072 kB)    vmalloc : 0xf0000000 - 0xff000000   ( 240 MB)    lowmem  : 0xc0000000 - 0xef800000   ( 760 MB)    pkmap   : 0xbfe00000 - 0xc0000000   (   2 MB)    modules : 0xbf000000 - 0xbfe00000   (  14 MB)      .text : 0xc0008000 - 0xc060a09c   (6153 kB)      .init : 0xc060b000 - 0xc075c000   (1348 kB)      .data : 0xc075c000 - 0xc07833c0   ( 157 kB)       .bss : 0xc07833c0 - 0xc07acbf0   ( 167 kB)

这里面的地址都是虚拟地址,其中lowmem是线性映射区。

线性映射区的意思是0xc0000000 - 0xef800000这段虚拟地址,和0x60000000 - 0x8f800000这段物理地址是一一对应的。

.text、.init、.data、.bss都属于lowmem区域,也即ZONE_NORMAL;vector、fixmap、vmalloc属于ZONE_HIGHMEM区域。

pkmap、modules属于用户空间。

void __init mem_init(void){#ifdef CONFIG_HAVE_TCM    /* These pointers are filled in on TCM detection */    extern u32 dtcm_end;    extern u32 itcm_end;#endif    set_max_mapnr(pfn_to_page(max_pfn) - mem_map);    /* this will put all unused low memory onto the freelists */    free_unused_memmap();    free_all_bootmem();#ifdef CONFIG_SA1111    /* now that our DMA memory is actually so designated, we can free it */    free_reserved_area(__va(PHYS_OFFSET), swapper_pg_dir, -1NULL);#endif    free_highpages();    mem_init_print_info(NULL);#define MLK(b, t) b, t, ((t) - (b)) >> 10#define MLM(b, t) b, t, ((t) - (b)) >> 20#define MLK_ROUNDUP(b, t) b, t, DIV_ROUND_UP(((t) - (b)), SZ_1K)    pr_notice("Virtual kernel memory layout:\n"            "    vector  : 0x%08lx - 0x%08lx   (%4ld kB)\n"#ifdef CONFIG_HAVE_TCM            "    DTCM    : 0x%08lx - 0x%08lx   (%4ld kB)\n"            "    ITCM    : 0x%08lx - 0x%08lx   (%4ld kB)\n"#endif            "    fixmap  : 0x%08lx - 0x%08lx   (%4ld kB)\n"            "    vmalloc : 0x%08lx - 0x%08lx   (%4ld MB)\n"            "    lowmem  : 0x%08lx - 0x%08lx   (%4ld MB)\n"#ifdef CONFIG_HIGHMEM            "    pkmap   : 0x%08lx - 0x%08lx   (%4ld MB)\n"#endif#ifdef CONFIG_MODULES            "    modules : 0x%08lx - 0x%08lx   (%4ld MB)\n"#endif            "      .text : 0x%p" " - 0x%p" "   (%4td kB)\n"            "      .init : 0x%p" " - 0x%p" "   (%4td kB)\n"            "      .data : 0x%p" " - 0x%p" "   (%4td kB)\n"            "       .bss : 0x%p" " - 0x%p" "   (%4td kB)\n",            MLK(UL(CONFIG_VECTORS_BASE), UL(CONFIG_VECTORS_BASE) +                (PAGE_SIZE)),#ifdef CONFIG_HAVE_TCM            MLK(DTCM_OFFSET, (unsigned long) dtcm_end),            MLK(ITCM_OFFSET, (unsigned long) itcm_end),#endif            MLK(FIXADDR_START, FIXADDR_END),            MLM(VMALLOC_START, VMALLOC_END),            MLM(PAGE_OFFSET, (unsigned long)high_memory),#ifdef CONFIG_HIGHMEM            MLM(PKMAP_BASE, (PKMAP_BASE) + (LAST_PKMAP) *                (PAGE_SIZE)),#endif#ifdef CONFIG_MODULES            MLM(MODULES_VADDR, MODULES_END),#endif            MLK_ROUNDUP(_text, _etext),            MLK_ROUNDUP(__init_begin, __init_end),            MLK_ROUNDUP(_sdata, _edata),            MLK_ROUNDUP(__bss_start, __bss_stop));#undef MLK#undef MLM#undef MLK_ROUNDUP    /*     * Check boundaries twice: Some fundamental inconsistencies can     * be detected at build time already.     */#ifdef CONFIG_MMU    BUILD_BUG_ON(TASK_SIZE                > MODULES_VADDR);    BUG_ON(TASK_SIZE                 > MODULES_VADDR);#endif#ifdef CONFIG_HIGHMEM    BUILD_BUG_ON(PKMAP_BASE + LAST_PKMAP * PAGE_SIZE > PAGE_OFFSET);    BUG_ON(PKMAP_BASE + LAST_PKMAP * PAGE_SIZE    > PAGE_OFFSET);#endif    if (PAGE_SIZE >= 16384 && get_num_physpages() <= 128) {        extern int sysctl_overcommit_memory;        /*         * On a machine this small we won't get         * anywhere without overcommit, so turn         * it on by default.         */        sysctl_overcommit_memory = OVERCOMMIT_ALWAYS;    }}

三、各部分框图详解

3.1 内核空间用户空间划分

内核和用户空间的分界点是由PAGE_OFFSET决定的,即内核image的起始地址为0xc0000000。

/* PAGE_OFFSET - the virtual address of the start of the kernel image */#define PAGE_OFFSET        UL(CONFIG_PAGE_OFFSET)#define CONFIG_PAGE_OFFSET 0xC0000000

3.2 kernel image空间

为什么kernel image空间从0xc0008000开始?

0xc0008000是由两部分组成的PAGE_OFFSET + TEXT_OFFSET。在arch/arm/kernel/vmlinux.lds.S中进行了明确定义。

生成的文件vmlinux.lds中,可以看出.text即从0xc000800开始。

OUTPUT_ARCH(arm)ENTRY(stext)jiffies = jiffies_64;SECTIONS{ /*     * XXX: The linker does not define how output sections are     * assigned to input sections when there are multiple statements     * matching the same input section name.  There is no documented     * order of matching.     *     * unwind exit sections must be discarded before the rest of the     * unwind sections get included.     */... . = 0xC0000000 + 0x00008000; .head.text : {  _text = .;  *(.head.text) } .text : { /* Real text segment        */  _stext = .; /* Text and read-only data    */... }

在了解.text其实地址来历之后,通过查看System.map就可以确定其余段的地址了。

从mem_init中打印的log,可以看出:_text - _etext,0xc060a09c - 0xc0008000=6153KB,采用1K对齐。

kernel image空间从text开始,到end结束。

c0008000 T _textc0008000 T stext...c060a09c T _etextc060b000 T __init_begin...c075c000 D __init_endc075c000 D _datac075c000 D _sdatac075c000 D init_thread_unionc075e000 D __nosave_begin...c07833c0 B __bss_startc07833c0 D _edata..c07acbf0 B __bss_stopc07acbf0 B _end

3.3 vmalloc空间

vmalloc的区域用于给vmalloc/ioremap动态分配内存。

vmalloc的空间确定较简单,首先确定vmalloc终点0xff000000。

#define VMALLOC_OFFSET        (8*1024*1024)#define VMALLOC_START        (((unsigned long)high_memory + VMALLOC_OFFSET) & ~(VMALLOC_OFFSET-1))#define VMALLOC_END        0xff000000UL

然后是确定vmalloc区域的起点,其中vmalloc和lowmem之间需要一个8MB空间的Gap。

static void * __initdata vmalloc_min =    (void *)(VMALLOC_END - (240 << 20) - VMALLOC_OFFSET);----------------------------vmalloc_min为VMALLOC_END向下偏移240MB。void __initsanity_check_meminfo(void){    phys_addr_t memblock_limit = 0;    int highmem = 0;    phys_addr_t vmalloc_limit = __pa(vmalloc_min - 1) + 1;    struct memblock_region *reg;    for_each_memblock(memory, reg) {        phys_addr_t block_start = reg->base;        phys_addr_t block_end = reg->base + reg->size;        phys_addr_t size_limit = reg->size;        if (reg->base >= vmalloc_limit)            highmem = 1;        else            size_limit = vmalloc_limit - reg->base;...        if (!highmem) {            if (block_end > arm_lowmem_limit) {                if (reg->size > size_limit)                    arm_lowmem_limit = vmalloc_limit;------------------------------此种情况arm_lowmem_limit等于vmalloc_min                else                    arm_lowmem_limit = block_end;            }...        }    }    high_memory = __va(arm_lowmem_limit - 1) + 1;---------------------------------所以high_memory也即vmalloc_min。...   memblock_set_current_limit(memblock_limit);-----------------------------------根据arm_lowmem_limit来作为ZONE_NORMAL的终点。}

最终VMALLOC_START即为VMALLOC_END向下偏移240MB,即VMALLOC_START=0xf0000000

关于vmalloc 8MB hole

vmalloc区域和lowmem区域之间有一个8MB的hole。

lowmem区域是线性映射,可以虚拟地址和物理地址是1:1对应的。

这个8MB由于捕获虚拟地址的越界访问。

3.4 ZONE_NORMAL和ZONE_HIGHMEM划分

zone的划分在bootmem_init-->find_limits中确定。其中memblock.current_limit是在sanity_check_meminfo中确定。

max_low即作为ZONE_NORMAL和ZONE_HIGHMEM分界点,即0xef800000。

ZONE_NORMAL大小760MB,从0xc0000000 - 0xef800000,ZONE_HIGHMEM大小264MB,从0xef800000 - 0xffffffff。

ZONE_HIGHMEM并不等同于vmalloc,还有8MB hole和末尾16MB空间。所以vmalloc=264-8-16=240MB。

staticvoid __init find_limits(unsignedlong *min, unsignedlong *max_low,                   unsigned long *max_high){    *max_low = PFN_DOWN(memblock_get_current_limit());    *min = PFN_UP(memblock_start_of_DRAM());    *max_high = PFN_DOWN(memblock_end_of_DRAM());}void __init_memblock memblock_set_current_limit(phys_addr_t limit){    memblock.current_limit = limit;}phys_addr_t __init_memblock memblock_get_current_limit(void){    return memblock.current_limit;}

对于ZONE_NORMAL线性映射区域,虚拟地址和物理地址转换比较简单。由于Vexpress的RAM起始地址映射在0x60000000。

所以计算的时候需要去除这部分偏移PHYS_OFFSET。

static inline phys_addr_t __virt_to_phys(unsigned long x){    return (phys_addr_t)x - PAGE_OFFSET + PHYS_OFFSET;}static inline unsigned long __phys_to_virt(phys_addr_t x){    return x - PHYS_OFFSET + PAGE_OFFSET;}

3.5 swapper_pg_dir

swapper_pg_dir用于存放内核PGD页表的地方,赋给init_mm.pgd。

swapper_pg_dir被定义了绝对地址,在arch/arm/kernel/head.S中有如下定义。

swapper_pd_dir的大小为16KB,对应的虚拟地址空间是从0xc0004000 - 0xc0008000,物理地址空间是0x6000400~0x60008000。

arch/arm/kernel/head.S:/* * swapper_pg_dir is the virtual address of the initial page table. * We place the page tables 16K below KERNEL_RAM_VADDR.  Therefore, we must * make sure that KERNEL_RAM_VADDR is correctly set.  Currently, we expect * the least significant 16 bits to be 0x8000, but we could probably * relax this restriction to KERNEL_RAM_VADDR >= PAGE_OFFSET + 0x4000. */#define KERNEL_RAM_VADDR    (PAGE_OFFSET + TEXT_OFFSET)#if (KERNEL_RAM_VADDR & 0xffff) != 0x8000--------------------------------------KERNEL_RAM_VADDR也确实是0xc0008000#error KERNEL_RAM_VADDR must start at 0xXXXX8000#endif#ifdef CONFIG_ARM_LPAE    /* LPAE requires an additional page for the PGD */#define PG_DIR_SIZE    0x5000#define PMD_ORDER    3#else#define PG_DIR_SIZE    0x4000#define PMD_ORDER    2#endif    .globl    swapper_pg_dir    .equ    swapper_pg_dir, KERNEL_RAM_VADDR - PG_DIR_SIZE-------------------.equ定义swapper_pg_dir的绝对地址,所以swapper_pg_dir=0xc0008000-0x4000=0xc0004000mm/init-mm.c:struct mm_struct init_mm = {    .mm_rb        = RB_ROOT,    .pgd        = swapper_pg_dir,...    INIT_MM_CONTEXT(init_mm)};

3.6 fixmap

fixmap是固定映射的意思,固定指的是固定虚拟地址。

那么这些固定的虚拟地址谁在用?都对应哪些物理地址?

fixmap区域很固定,大小为3MB,从0xffc00000 - 0xfff00000。

#define FIXADDR_START        0xffc00000UL#define FIXADDR_END        0xfff00000UL#define FIXADDR_TOP        (FIXADDR_END - PAGE_SIZE)-------------保留一页Hole

3.7 vector

vector区域用于映射CPU vector page,大小一页4KB,从0xffff0000 - 0xffff1000。

#define CONFIG_VECTORS_BASE 0xffff0000

在系统编译的时候,arch/arm/kernel/vmlinux.ld.S决定vectors_start、stubs_start起始地址。

    __vectors_start = .;    .vectors 0 : AT(__vectors_start) {        *(.vectors)    }    . = __vectors_start + SIZEOF(.vectors);    __vectors_end = .;    __stubs_start = .;    .stubs 0x1000 : AT(__stubs_start) {        *(.stubs)    }    . = __stubs_start + SIZEOF(.stubs);    __stubs_end = .;

这两部分的生成结果在System.map中也可以看出:

00000000 t __vectors_start00000024 A cpu_v7_suspend_size0000002A cpu_ca9mp_suspend_size00001000 t __stubs_start00001004 t vector_rst00001020 t vector_irq000010a0 t vector_dabt00001120 t vector_pabt000011a0 t vector_und00001220 t vector_addrexcptn00001240 t vector_fiq00001240 T vector_fiq_offset...

这两部分在early_trap_init中拷贝,拷贝到了0xffff0000。vextors_start占据一页,stubs_start占据一页。

void __init early_trap_init(void *vectors_base){...    memcpy((void *)vectors, __vectors_start, __vectors_end - __vectors_start);    memcpy((void *)vectors + 0x1000, __stubs_start, __stubs_end - __stubs_start);    kuser_init(vectors_base);    flush_icache_range(vectors, vectors + PAGE_SIZE * 2);    modify_domain(DOMAIN_USER, DOMAIN_CLIENT);...}

3.8 pkmap

pkmap的意思是Permanent Kernel MAPping,永久内核内存映射。

是一种将Highmem页面映射到内核空间的技术。所以就需要定义CONFIG_HIGHMEM,才会存在这个区域。

所以pkmap区域是2MB大小,从0xbfe00000 - 0xc0000000。

#define PKMAP_BASE        (PAGE_OFFSET - PMD_SIZE)---------------------0xc0000000-0x200000=0xbfe00000#define LAST_PKMAP        PTRS_PER_PTE#define PTRS_PER_PTE        512#define PMD_SHIFT        21#define PGDIR_SHIFT        21#define PMD_SIZE        (1UL << PMD_SHIFT)Documentation/arm/memory.txt:PKMAP_BASE    PAGE_OFFSET-1    Permanent kernel mappings One way of mapping HIGHMEM pages into kernel                space. 

3.9 modules

如果定义了CONFIG_MODULES功能,则需要在用户空间开辟一段空间给insmod插入的模块。

这部分空间是动态映射的,在定义CONFIG_HIGHMEM情况下为16MB-2MB=14MB,从0xbf00000 - 0xbfe00000。

/* * The module space lives between the addresses given by TASK_SIZE * and PAGE_OFFSET - it must be within 32MB of the kernel text. */#ifndef CONFIG_THUMB2_KERNEL#define MODULES_VADDR        (PAGE_OFFSET - SZ_16M)------------------0xc0000000-0x1000000=0xbf000000#else/* smaller range for Thumb-2 symbols relocation (2^24)*/#define MODULES_VADDR        (PAGE_OFFSET - SZ_8M)#endif#if TASK_SIZE > MODULES_VADDR#error Top of user space clashes with start of module space#endif/* * The highmem pkmap virtual space shares the end of the module area. */#ifdef CONFIG_HIGHMEM#define MODULES_END        (PAGE_OFFSET - PMD_SIZE)----------------0xc0000000-0x200000=0xbfe00000#else#define MODULES_END        (PAGE_OFFSET)#endif
Linux内存管理系统前面2篇文章:
Linux内存管理:物理内存初始化
Linux内存管理:页表的映射过程

原作者:ArnoldLu

原文地址:

https://www.cnblogs.com/arnoldlu/p/8068286.html

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-03-28 01:41:46 HTTP/2.0 GET : https://f.mffb.com.cn/a/477770.html
  2. 运行时间 : 0.287517s [ 吞吐率:3.48req/s ] 内存消耗:4,640.59kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=109d9c1db9bde3ad8057a916e8ce9775
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000870s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001654s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000747s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000729s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001480s ]
  6. SELECT * FROM `set` [ RunTime:0.000736s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001524s ]
  8. SELECT * FROM `article` WHERE `id` = 477770 LIMIT 1 [ RunTime:0.053624s ]
  9. UPDATE `article` SET `lasttime` = 1774633307 WHERE `id` = 477770 [ RunTime:0.005328s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.000768s ]
  11. SELECT * FROM `article` WHERE `id` < 477770 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001272s ]
  12. SELECT * FROM `article` WHERE `id` > 477770 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.003438s ]
  13. SELECT * FROM `article` WHERE `id` < 477770 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.022013s ]
  14. SELECT * FROM `article` WHERE `id` < 477770 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.022457s ]
  15. SELECT * FROM `article` WHERE `id` < 477770 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.009692s ]
0.291111s