Windows线程的数据结构


Windows实现了Windows API,这是Microsoft操作系统系列(Windows 98、NT、2000和XP,以及Windows 7)的主要API。基本上,Windows应用程序作为单独的进程运行,每个进程可能包含一个或多个线程。此外,Windows使用一对一的映射,其中每个用户级线程都映射到一个关联的内核线程。线程的一般组件包括:

  • 唯一标识线程的线程ID

  • 一组寄存器,表示处理器的状态

  • 一个用户栈(线程在用户模式下运行时使用)和一个内核栈(线程在内核模式下运行时使用)

  • 各种运行时库和动态链接库 (DLL) 使用的私有存储区。寄存器集、堆栈和私有存储区称为线程的上下文。

线程的主要数据结构包括:

  • ETHREAD - 执行线程块
  • KTHREAD - 内核线程块
  • TEB - 线程环境块

ETHREAD 的基本组成部分包括指向线程所属进程的指针以及线程开始控制的例程的地址。ETHREAD 还包含指向相应 KTHREAD 的指针。KTHREAD 包含线程的调度和同步信息。此外,KTHREAD 包含内核堆栈(线程在内核模式下运行时使用)和指向 TEB 的指针。ETHREAD 和 KTHREAD 完全存在于内核空间中;这意味着只有内核才能访问它们。TEB 是一个用户空间数据结构,在线程在用户模式下运行时访问。TEB 包含线程标识符、用户模式堆栈和线程局部存储的数组等字段。下图说明了 Windows 线程的结构:

图:Windows XP 线程的数据结构

更新于:2019年10月17日

536 次浏览

启动你的职业生涯

完成课程获得认证

开始学习
广告