news 2026/5/12 2:20:06

nt!KiDispatchInterrupt函数调用nt!KiQueueReadyThread和调用nt!SwapContext切换线程到NextThread的一个例子老线程时间片没有用完--非常重要

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
nt!KiDispatchInterrupt函数调用nt!KiQueueReadyThread和调用nt!SwapContext切换线程到NextThread的一个例子老线程时间片没有用完--非常重要

nt!KiDispatchInterrupt函数调用nt!KiQueueReadyThread和调用nt!SwapContext切换线程到NextThread的一个例子老线程时间片没有用完--非常重要

CurrentThread    : 0x8999e3a0被NextThread       : 0x8999c8a0抢占了

CurrentThread    : 0x8999e3a0的kthread结构成员:[+0x10a] Preempted        : 0x1

VOID
FASTCALL
KiDeferredReadyThread (
    IN PKTHREAD Thread
    )
{

        if ((Thread1 = TargetPrcb->NextThread) != NULL) {

            ASSERT(Thread1->State == Standby);

            if (ThreadPriority > Thread1->Priority) {
                Thread1->Preempted = TRUE;
                Thread->State = Standby;
                TargetPrcb->NextThread = Thread;
                Thread1->State = DeferredReady;
                Thread1->DeferredProcessor = CurrentPrcb->Number;
                KiReleaseTwoPrcbLocks(CurrentPrcb, TargetPrcb);
                KiDeferredReadyThread(Thread1);
                return;
            }

        } else {
            Thread1 = TargetPrcb->CurrentThread;
            if (ThreadPriority > Thread1->Priority) {
               Thread1->Preempted = TRUE;
                Thread->State = Standby;
               TargetPrcb->NextThread = Thread;
                KiReleaseTwoPrcbLocks(CurrentPrcb, TargetPrcb);
               KiRequestDispatchInterrupt(Thread->NextProcessor);   这里请求了软件中断。
                return;
            }
        }

0: kd> g
Breakpoint 16 hit
eax=00000001 ebx=00000102 ecx=00000002 edx=00000000 esi=f7737120 edi=00000000
eip=804ee4f8 esp=f78d2878 ebp=f78d289c iopl=0         nv up ei pl nz na po nc
cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00000202
hal!HalRequestSoftwareInterrupt:
804ee4f8 643a0d95000000  cmp     cl,byte ptr fs:[95h]       fs:0030:00000095=02
1: kd> kc
 #
00 hal!HalRequestSoftwareInterrupt
01 nt!KiIpiServiceRoutine
02 hal!HalpIpiHandler
03 hal!HalpClockInterruptPn
04 Ntfs!NtfsCalculateNamedBytes
05 Ntfs!NtfsCheckpointVolume
06 Ntfs!NtfsCheckpointAllVolumes
07 nt!ExpWorkerThread
08 nt!PspSystemThreadStartup
09 nt!KiThreadStartup
1: kd> g
Breakpoint 14 hit
eax=f7737000 ebx=f78d2994 ecx=00000000 edx=899015b0 esi=804ecc3f edi=f7155ee1
eip=80b00720 esp=f78d2900 ebp=f78d2918 iopl=0         nv up ei pl nz na po nc
cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00000202
nt!KiDispatchInterrupt:
80b00720 648b1d1c000000  mov     ebx,dword ptr fs:[1Ch] fs:0030:0000001c=f7737000
1: kd> dx -id 0,0,89831250 -r1 ((basesrv!_KPRCB *)0xf7737120)
((basesrv!_KPRCB *)0xf7737120)                 : 0xf7737120 [Type: _KPRCB *]
    [+0x000] MinorVersion     : 0x1 [Type: unsigned short]
    [+0x002] MajorVersion     : 0x1 [Type: unsigned short]
    [+0x004] CurrentThread    : 0x8999e3a0 [Type: _KTHREAD *]
    [+0x008] NextThread       : 0x8999c8a0 [Type: _KTHREAD *]

    [+0x00c] IdleThread       : 0xf7739fa0 [Type: _KTHREAD *]
 
    [+0x8a4] TimerHand        : 0x0 [Type: unsigned long]
    [+0x8a8] TimerRequest     : 0x0 [Type: unsigned long]
    [+0x8ac] DpcThread        : 0x0 [Type: void *]
    [+0x8b0] DpcEvent         [Type: _KEVENT]
    [+0x8c0] ThreadDpcEnable  : 0x0 [Type: unsigned char]
    [+0x8c1] QuantumEnd       : 0x0 [Type: unsigned char]
    [+0x8c2] PrcbPad50        : 0x0 [Type: unsigned char]
    [+0x8c3] IdleSchedule     : 0x0 [Type: unsigned char]
    [+0x8c4] DpcSetEventRequest : 0 [Type: long]
    [+0x8c8] PrcbPad5         [Type: unsigned char [22]]
    [+0x8e0] CallDpc          [Type: _KDPC]
    [+0x900] PrcbPad7         [Type: unsigned long [8]]
    [+0x920] WaitListHead     [Type: _LIST_ENTRY]
    [+0x928] ReadySummary     : 0x100 [Type: unsigned long]
   
1: kd> g
Breakpoint 45 hit
eax=00000000 ebx=f7737000 ecx=00000000 edx=899015b0 esi=804ecc3f edi=f7155ee1
eip=80b0075b esp=f78d2900 ebp=f78d2918 iopl=0         nv up ei pl zr na pe nc
cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00000246
nt!KiDispatchInterrupt+0x3b:
80b0075b 80bbe109000000  cmp     byte ptr [ebx+9E1h],0      ds:0023:f77379e1=00
1: kd> p
eax=00000000 ebx=f7737000 ecx=00000000 edx=899015b0 esi=804ecc3f edi=f7155ee1
eip=80b00762 esp=f78d2900 ebp=f78d2918 iopl=0         nv up ei pl zr na pe nc
cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00000246
nt!KiDispatchInterrupt+0x42:
80b00762 7577            jne     nt!KiDispatchInterrupt+0xbb (80b007db)  [br=0]
1: kd> p
eax=00000000 ebx=f7737000 ecx=00000000 edx=899015b0 esi=804ecc3f edi=f7155ee1
eip=80b00764 esp=f78d2900 ebp=f78d2918 iopl=0         nv up ei pl zr na pe nc
cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00000246
nt!KiDispatchInterrupt+0x44:
80b00764 83bb2801000000  cmp     dword ptr [ebx+128h],0 ds:0023:f7737128=8999c8a0
1: kd> dx -id 0,0,89831250 -r1 ((basesrv!_KTHREAD *)0x8999c8a0)
((basesrv!_KTHREAD *)0x8999c8a0)                 : 0x8999c8a0 [Type: _KTHREAD *]
    [+0x000] Header           [Type: _DISPATCHER_HEADER]

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/12 2:19:07

【Spring框架】通过JDK动态代理实现AOP

首先需要创建 maven java 项目&#xff0c;引入开发的坐标<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.0.2.RELEASE</version></dependency>…

作者头像 李华
网站建设 2026/5/12 0:11:32

【课程设计/毕业设计】基于springboot的大学生科技竞赛管理系统的设计与实现基于Springboot+Vue的大学生竞赛管理系统的设计与实现【附源码、数据库、万字文档】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/5/11 9:03:17

Java计算机毕设之基于springboot的学科竞赛管理基于springboot的大学生科技竞赛管理系统的设计与实现(完整前后端代码+说明文档+LW,调试定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/5/10 18:06:52

Langchain-Chatchat结合规则引擎提升可控性

Langchain-Chatchat 结合规则引擎&#xff1a;构建可控、合规的私有知识问答系统 在企业智能化转型的浪潮中&#xff0c;如何让AI真正“听懂”组织内部的语言&#xff0c;并安全、准确地回应员工或客户的问题&#xff0c;成为越来越多IT与业务团队关注的核心命题。尤其是在金融…

作者头像 李华
网站建设 2026/5/11 12:53:57

Langchain-Chatchat在公共安全知识普及中的作用

Langchain-Chatchat在公共安全知识普及中的作用 在应急指挥中心的值班室内&#xff0c;一名新入职的消防员正焦急地翻阅厚厚的《城市综合应急预案》&#xff0c;试图查找“地下车库火灾扑救是否允许使用泡沫灭火剂”的具体规定。时间一分一秒过去&#xff0c;而现场情况却刻不容…

作者头像 李华