Download presentation
Presentation is loading. Please wait.
Published bySamuël Pauwels Modified 5年之前
1
本节内容 Windows线程切换_时钟中断切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
2
内容回顾 在上一节中我们讲过了,绝大部分系统内核函数都会调用SwapContext 函数,来实现线程的切换,那么这种切换是线程主动调用的。 那如果当前的线程不去调用系统API,操作系统如何实现线程切换呢?
3
1、如何中断一个正在执行的程序? 1) 异常 比如缺页,或者INT N指令 2) 中断 比如时钟中断
4
2、系统时钟 (IDT表)中断号 IRQ 说明 0x30 IRQ0 时钟中断 Windows系列操作系统: 毫秒 如要获取当前的时钟间隔值,可使用Win32 API: GetSystemTimeAdjustment DWORD adjustment,clockInterval; BOOL adjustmentDisabled; GetSystemTimeAdjustment(&adjustment, &clockInterval, &adjustmentDisabled ); printf( "The systemclock interval is %d ms\n", clockInterval / );
5
3、时钟中断的执行流程 时钟中断执行流程: KiStartUnexpectedRange HalEndSystemInterrupt KiEndUnexpectedRange KiDispatchInterrupt KiUnexpectedInterruptTail SwapContext HalBeginSystemInterrupt
6
4、总结: 线程切换的几种情况: 1) 主动调用API函数 2) 时钟中断 3) 异常处理 如果一个线程不调用API,在代码中屏蔽中断(CLI指令),并且 不会出现异常,那么当前线程将永久占有CPU,单核占有率 100% 2核就是50%
7
5、课后练习: 《线上班》学员可见
Similar presentations