Windows实现了Windows API,这是微软操作系统(windows98, NT, 2000, XP,以及Windows 7)家庭的主要API。事实上,本节中提到的很多东西都适用于整个操作系统。

一个Windows应用程序作为一个单独的进程运行,每个进程可能包含一个或多个线程。

创建线程的Windows API包含在第4.4.2节中。

另外,Windows使用在4.3.2节描述的一对一映射模型,其中每个用户级线程映射到一个相关的内核线程。

一个线程的一般组件包括:

  1. 一个线程ID,以标识线程

  2. 一组寄存器集,以表示处理器状态。

  3. 一个用户栈,当线程以用户模式运行时使用;一个内核栈,当线程运行在内核模式时使用。

  4. 一个私有存储区域,为各种运行时库和动态链接库(DLL)所用

寄存器集、栈和私有存储区域称为线程的上下文

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

  1. ETHREAD-------执行线程块:该组件包括一个指向线程所属进程的指针和线程开始控制的例程的地址。ETHREAD还包含指向相应KTHREAD的指针
  2. KTHREAD-------内核线程块:KTHREAD包括线程的调度和同步信息。另外,KTHREAD包含内核栈(当线程在内核模式运行时使用)和指向TEB的指针。
  3. TEB---------线程环境块:ETHREAD和KTHREAD完全存在于内核空间中;这意味着只有内核可以访问它们。TEB是一个用户空间数据结构,当线程在用户模式下运行时,它将被访问。除了包含其他域之外,TEB还包含线程标识符、用户模式栈和用于线程本地存储的数组。

Windows线程的结构如图4.14所示。

results matching ""

    No results matching ""