当前位置:首页>学习笔记>linux 内核学习笔记->中断

linux 内核学习笔记->中断

  • 2026-03-02 12:20:06
linux 内核学习笔记->中断

什么是中断

中断是计算机系统中一种重要的机制,指CPU在正常执行程序的过程中,由于内部或外部事件的紧急请求,暂停当前任务,转去处理该事件,待处理完成后恢复原任务继续执行,就像工作中突然接到一个紧急电话,你暂停手头工作去接听,结束后再回来继续工作,本质上中断就是异步事件通知机制。

大概过程如下:

当(外部事件发生) {

    CPU暂停当前工作;

    保存现场;

    处理事件;

    恢复现场;

    继续之前的工作;

}

完整的中断处理链路

中断的初始化
Linux 内核在启动时(start_kernel函数开始处)调用 local_irq_disable()禁用中断,待中断系统初始化(如early_irq_initinit_IRQsoftirq_init等)之后,内核才会调用local_irq_enable()启用中断。试想,如果这里一开始允许使用中断,内核启动过程中,随便拍打一下键盘,那么系统就崩了
asmlinkage __visible void __init start_kernel(void){    .......    local_irq_disable();    early_boot_irqs_disabled = true;    .......    early_irq_init();    init_IRQ();    tick_init();    rcu_init_nohz();    init_timers();    hrtimers_init();    softirq_init();    timekeeping_init();    ......    early_boot_irqs_disabled = false;    local_irq_enable();    ......}

中断初始化调用链如下:

start_kernel()                      ├── setup_arch()                 │   ├── idt_setup_early_traps() // IDT早期初始化  │   │   ├── idt_setup_from_table(idt_table, early_idts) // 设置调试、断点陷阱  │   │   └── load_idt(&idt_descr) // 加载IDT描述符  │   └── idt_setup_early_pf()    // IDT早期页错误处理初始化  │       └── idt_setup_from_table(idt_table, early_pf_idts)  │  ├── trap_init()                //IDT核心初始化  │   ├── setup_cpu_entry_areas() // 初始化CPU入口区域  │   ├── idt_setup_traps()         │   │   └── idt_setup_from_table(idt_table, def_idts)   │   ├── cea_set_pte()           // 将IDT设置为只读保护  │   ├── cpu_init()              // CPU初始化  │   ├── idt_setup_ist_traps()     │   │   └── idt_setup_from_table(idt_table, ist_idts)   │   ├── x86_init.irqs.trap_init()   │   └── idt_setup_debugidt_traps()   │  ├── early_irq_init()           // 早期中断初始化  │   ├── arch_early_irq_init()  // 架构特定早期初始化  │   ├── init_irq_default_affinity() // 设置默认CPU亲和性  │   └── irq_init_percpu_irqstack()  // 初始化每CPU中断栈  │  ├── init_IRQ()                 // 主要中断初始化  │   ├── x86_init.irqs.intr_init() // 架构特定初始化  │   │   ├── native_init_IRQ()  │   │   │   ├── x86_init.irqs.pre_vector_init()  │   │   │   ├── idt_setup_apic_and_irq_gates() // IDT设置APIC和IRQ门  │   │   │   │   ├── idt_setup_from_table(idt_table, apic_idts) // APIC中断  │   │   │   │   ├── set_intr_gate() // 设置外部中断门 (32-255)  │   │   │   │   └── 为每个中断向量设置处理入口  │   │   │   ├── lapic_assign_system_vectors()  // 分配系统向量  │   │   │   └── setup_irq(2, &irq2)           // 设置级联中断  │   │   └── x86_init.irqs.intr_mode_init()    // 中断模式初始化  │   └── irq_ctx_init()         // 中断上下文初始化  │  ├── softirq_init()             // 软中断初始化  │   ├── open_softirq(TASKLET_SOFTIRQ, tasklet_action)  │   ├── open_softirq(HI_SOFTIRQ, tasklet_hi_action)  │   └── for_each_possible_cpu() // 为每个CPU创建ksoftirqd  │  └── local_irq_enable()         // 启用本地中断

在Linux内核中,start_kernel()会调用trap_init()来初始化前32个陷入或者异常中断,然后调用init_IRQ()来初始化设备中断。在init_IRQ()中,调用到native_init_IRQ(),最终会调用到idt_setup_apic_and_irq_gates()

void __init idt_setup_apic_and_irq_gates(void){    int i = FIRST_EXTERNAL_VECTOR;  //i = 0x20 (32)    void *entry; //用于存储中断处理程序的入口地址    idt_setup_from_table(idt_table, apic_idts, ARRAY_SIZE(apic_idts), true);    for_each_clear_bit_from(i, system_vectors, FIRST_SYSTEM_VECTOR) {        entry = irq_entries_start + 8 * (i - FIRST_EXTERNAL_VECTOR);        set_intr_gate(i, entry);    }#ifdef CONFIG_X86_LOCAL_APIC    for_each_clear_bit_from(i, system_vectors, NR_VECTORS) {        set_bit(i, system_vectors);        entry = spurious_entries_start + 8 * (i - FIRST_SYSTEM_VECTOR);        set_intr_gate(i, entry);    }#endif}

中断描述符表

IDT(Interrupt Descriptor Table,中断描述符表)是 CPU 的一个核心数据结构,它是一张存储在内存中的“路由表”。它的唯一作用就是告诉 CPU:当发生特定编号的中断、陷阱或异常时,应该跳转到哪个内核函数去处理

x86 架构下每个cpu有独立的IDT表,可以处理256个中断
/* * Linux IRQ vector layout. * * There are 256 IDT entries (per CPU - each entry is 8 bytes) which can * be defined by Linux. They are used as a jump table by the CPU when a * given vector is triggered - by a CPU-external, CPU-internal or * software-triggered event. * * Linux sets the kernel code address each entry jumps to early during * bootup, and never changes them. This is the general layout of the * IDT entries: * *  Vectors   0 ...  31 : system traps and exceptions - hardcoded events *  Vectors  32 ... 127 : device interrupts *  Vector  128         : legacy int80 syscall interface *  Vectors 129 ... LOCAL_TIMER_VECTOR-1 *  Vectors LOCAL_TIMER_VECTOR ... 255 : special interrupts * * 64-bit x86 has per CPU IDT tables, 32-bit has one shared IDT table. * * This file enumerates the exact layout of them: */#define NMI_VECTOR          0x02#define MCE_VECTOR          0x12/* * IDT vectors usable for external interrupt sources start at 0x20. * (0x80 is the syscall vector, 0x30-0x3f are for ISA) */#define FIRST_EXTERNAL_VECTOR       0x20/* * Reserve the lowest usable vector (and hence lowest priority)  0x20 for * triggering cleanup after irq migration. 0x21-0x2f will still be used * for device interrupts. */#define IRQ_MOVE_CLEANUP_VECTOR     FIRST_EXTERNAL_VECTOR#define IA32_SYSCALL_VECTOR     0x80/* * Vectors 0x30-0x3f are used for ISA interrupts. *   round up to the next 16-vector boundary */#define ISA_IRQ_VECTOR(irq)     (((FIRST_EXTERNAL_VECTOR + 16) & ~15) + irq)/* * Special IRQ vectors used by the SMP architecture, 0xf0-0xff * *  some of the following vectors are 'rare', they are merged *  into a single vector (CALL_FUNCTION_VECTOR) to save vector space. *  TLB, reschedule and local APIC vectors are performance-critical. */#define SPURIOUS_APIC_VECTOR        0xff/* * Sanity check */#if ((SPURIOUS_APIC_VECTOR & 0x0F) != 0x0F)error SPURIOUS_APIC_VECTOR definition error#endif#define ERROR_APIC_VECTOR       0xfe#define RESCHEDULE_VECTOR       0xfd#define CALL_FUNCTION_VECTOR        0xfc#define CALL_FUNCTION_SINGLE_VECTOR 0xfb#define THERMAL_APIC_VECTOR     0xfa#define THRESHOLD_APIC_VECTOR       0xf9#define REBOOT_VECTOR           0xf8/* * Generic system vector for platform specific use */#define X86_PLATFORM_IPI_VECTOR     0xf7/* * IRQ work vector: */#define IRQ_WORK_VECTOR         0xf6#define UV_BAU_MESSAGE          0xf5#define DEFERRED_ERROR_VECTOR       0xf4/* Vector on which hypervisor callbacks will be delivered */#define HYPERVISOR_CALLBACK_VECTOR  0xf3/* Vector for KVM to deliver posted interrupt IPI */#ifdef CONFIG_HAVE_KVM#define POSTED_INTR_VECTOR      0xf2#define POSTED_INTR_WAKEUP_VECTOR   0xf1#define POSTED_INTR_NESTED_VECTOR   0xf0#endif#define MANAGED_IRQ_SHUTDOWN_VECTOR 0xef#if IS_ENABLED(CONFIG_HYPERV)#define HYPERV_REENLIGHTENMENT_VECTOR   0xee#define HYPERV_STIMER0_VECTOR       0xed#endif#define LOCAL_TIMER_VECTOR      0xec#define NR_VECTORS           256#ifdef CONFIG_X86_LOCAL_APIC#define FIRST_SYSTEM_VECTOR     LOCAL_TIMER_VECTOR#else#define FIRST_SYSTEM_VECTOR     NR_VECTORS#endif
中断大概分为以下几例
    向量范围
    十六进制
    用途
    0-31
    0x00-0x1F
    CPU异常和陷入
    32-47
    0x20-0x2F
    其他外部中断
    48-63
    0x30-0x3F
    ISA传统中断
    64-127
    0x40-0x7F
    动态设备中断
    128
    0x80
    系统调用
    129-235
    0x81-0xEB
    其他设备中断
    236-255
    0xEC-0xFF

    用于SMP架构的特殊中断(IPI)

    这里需要主要注意,这里的中断向量号和/proc/interrupts 看到的不是一个东西,但是他们有一个映射关系,以irq timer 0 为例:
    在init_IRQ建立IRQ→向量映射
    为IRQ0注册具体的函数

    根据上述宏定义计算一下:

    ((32 + 16) & ~15) + 0 = 48

    irq0 系统定时器是一个传统ISA设备,对应的idt表中的向量48

    中断描述符

    对于每一个中断,都有一个对应的描述结构体irq_desc
    在irq_desc结构体中,需要关注struct irqaction *action,他是中断处理程序链表

    irq_handler_t handler;  // 主中断处理函数

    参数(中断号, dev_id(用于区分共享中断链表上的不同设备))

    返回值(IRQ_HANDLEDIRQ_NONEIRQ_WAKE_THREAD)

    • IRQ_NONE:表示中断不是由这个设备产生的,或者这个设备没有处理这个中断。

      例如,在共享中断的情况下,多个设备共享同一个中断线,当中断发生时,每个设备的中断处理函数都会被调用。

      如果某个设备发现这个中断不是它产生的,它应该返回IRQ_NONE,这样中断子系统就知道这个设备没有处理中断,然后继续调用共享中断链上的下一个设备的中断处理函数。

    • IRQ_HANDLED:表示中断已经由这个设备处理了。

      例如,在定时器中断处理函数中,我们确实处理了定时器中断,所以返回IRQ_HANDLED。

    • IRQ_WAKE_THREAD:表示中断处理函数要求唤醒对应的线程。

      如果中断处理函数是在线程中运行的(即使用了IRQF_THREAD标志),那么当中断处理函数(上半部)返回IRQ_WAKE_THREAD时,内核会唤醒对应的线程(下半部)来处理中断。

      注意:这个标志通常与线程化中断一起使用

    比如:

    中断处理流程

    1. 设备产生中断信号发送给APIC

    2. APIC将信号转换为中断向量发给cpu

    3. 查找IDT,将向量号压栈,调转地址common_intrrrupt执行

    在common_intrrrupt 中:
    1. 恢复向量号
    2. 保存上下文interrupt_entry
    3. 调用中断处理函数(do_IRQ)

    在 do_IRQ中:

    unsigned vector = ~regs->orig_ax;

    //regs->orig_ax对应着之前在汇编中 addq $-0x80, (%rsp)调整后压入栈的中断向量号(即 ~vector,范围[-256, -1]),通过按位取反(~)操作,将其还原为原始的正数中断向量号。

    desc = __this_cpu_read(vector_irq[vector]);

    //根据中断向量号 vector,从当前CPU的 vector_irq映射表中,查找对应的 irq_desc描述符。

    执行generic_handle_irq_desc,这个函数会沿着中断描述符的链式结构,最终调用到设备驱动注册的中断处理函数

    exiting_irq();//退出中断上下文

    set_irq_regs(old_regs);://恢复旧的寄存器状态

    handle_irq最终通常会调用到handle_irq_event,handle_irq_event会调用handle_irq_event_percpu,后者调用handle_irq_event_percpu(第来遍历执行所有注册的中断处理函数(action->handler),至此,中断上半部就完成了。但是,如果某个action->handler返回了IRQ_WAKE_THREAD,那么还会唤醒内核中断线程(下半部)

    最新文章

    随机文章

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