日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

Windows进程与线程学习笔记(六)—— 线程切换

發布時間:2025/3/21 windows 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Windows进程与线程学习笔记(六)—— 线程切换 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Windows進程與線程學習筆記(六)—— 線程切換

    • 主動切換
      • 分析KiSwapContext
      • 分析SwapContext
      • 分析KiSWapThread
      • 總結
    • 時鐘中斷切換
      • 系統時鐘
      • 分析INT 0x30
      • 分析HAL.dll
    • 異常處理

主動切換

  • 在上一篇中,分析了模擬線程切換:SwitchThread
  • 在Windows中,也有類似的函數:KiSwapContext
  • 分析KiSwapContext


    查看405837處ECX的來源:KiSwapThread

    分析SwapContext


    分析KiSWapThread

    查看交叉引用表,也就是有哪些函數調用了這個函數

    再查看其中 KeWaitForSingleObject 的交叉引用

    總結

  • Windows中絕大部分API都調用了SwapContext這個函數,也就是說,只要調用了該函數,就會導致線程切換
  • 線程切換時會比較是否屬于同一個進程,如果不是,便切換Cr3,Cr3換了,進程也就切換了
  • 思考

  • 如果不調用API,就可以一直占用CPU嗎?
  • 如果當前線程不去調用系統API,操作系統如何實現線程切換
  • 時鐘中斷切換

    中斷一個正在執行的程序的方式:

  • 異常:比如缺頁,或者INT N指令
  • 中斷:比如時鐘中斷
  • 系統時鐘

  • 在Windows操作系統當中,沒個10~20毫秒便會觸發一次時鐘中斷
  • 如要獲取當前的時鐘間隔值,可使用Win32 API:GetSystemTimeAdjustment
  • 執行流程

    分析INT 0x30

    ALT+T定位IDT表




    KiStartUnexpectedRange 跳到了另一個函數:KiUnexpectedInterruptTail

    KiUnexpectedInterruptTail 調用了 HalBeginSystemInterruptHalEndSystemInterrupt

    在導入表中查看這兩個函數來源,都來自HAL.dll

    分析HAL.dll

    HalBeginSystemInterrupt

    HalEndSystemInterrupt

    KiDispatchInterrupt 又來自 ntoskrnl

    最終,KiDispatchInterrupt 調用了 SwapContext

    異常處理

  • 如果一個線程不調用API,并且在代碼中屏蔽中斷(調用CLI指令),并且不會出現異常,那么當前線程將永久占有CPU
  • 單核CPU占用率100%,2核CPU占用率50%
  • Windows并非是“搶占式”操作系統,所謂的“搶“”必須是當前線程允許其它線程“搶”,否則是“搶”不到的
  • 總結

    以上是生活随笔為你收集整理的Windows进程与线程学习笔记(六)—— 线程切换的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。