Electronic Joint Business

Solution for E-Business

Windows 内部探秘之线程

文章评价: 在当今的编程世界中,多线程已经成为 .NET、Java 或 C++ 等各种编程语言的一个必要组成部分。要编写具备高响应且可扩展的应用程序,就必须借、助多线程编程的力量。你也许用过 TPL、PLINQ、Task Factories、线程池、异步编程等等基础类库(Framework Class Libraries –FCL)进行过多任务处理,所有的这些在背后都依赖于 Windows 线程的力量来实现并行的场景。了解 Windows 线程的基本结构对于更好地运用和理解诸如 TPL、PLINQ 这些高级特性总是非常有帮助,并帮助你以可视化的方式了解在系统中多个线程是如何协同工作的,特别是当你在调试多线程应用程序的时候。在这篇文章中,我想和大家分享一些关于Windows线程的基础知识,它可以帮助您了解操作系统如何实现线程的。 Windows 线程由什么组成? 让我们看看 Windows 线程的一些基本组件。在 Windows 线程中有三个基本组件: 线程内核对象 栈 TEB 所有这三个组件一起创造了 Windows 线程。我会尝试逐一解释这些组件,但在这之前,让我们先对 Windows 内核和内核对象做简要介绍,因为这些都是Windows 操作系统最重要的部分 操作系统内核 内核是任何操作系统的主要组件。它是应用程序和硬件之间的桥梁。内核提供了抽象层,使得应用程序可以由此与硬件交互。 内核是操作系统最先加载的部分之一,它会一直保留在物理内存中。内核的主要功能是管理计算机的硬件和资源,让其他程序可以运行并使用这些资源。要更多地了解内核,请访问此链接。 内核对象 内核需要维护涉及众多资源的大量数据,如进程、线程、文件等等,为此内核使用了“内核数据结构”,即内核对象。每个内核对象只是内核分配的一个内存块,并只能给内核访问。该内存块是个数据结构,其数据成员维持有关该对象的信息。一些数据成员(如安全描述符,使用计数等等)是所有对象类型所共有的,但大多数数据成员只是特定内核对象类型所独有的。内核创建并负责操作多种类型的内核对象:如进程对象、线程对象、事件对象、文件对象、文件映射对象、I/O完成端口对象、作业对象、互斥对象、管道对象、信号量对象等。 如果你有兴趣,可以使用 Sysinternals 提供的免费工具 WinObj 来查看所有的内核对象的类型列表,如图1-3。 线程内核对象 Windows 线程的最基本的组件是线程内核对象。操作系统会为系统中的每个线程都创建一个线程内核对象。操作系统使用线程内核对象来管理和执行整个系统内的线程,该内核对象同时也是操作系统保存线程相关统计信息的地方。下面是一些线程内核对象的重要属性。 线程上下文 每个线程的内核对象包含了整套的 CPU 寄存器,称为线程上下文。上下文反映的是最后被执行时线程的 CPU 寄存器的状态。该线程的所有 CPU 寄存器被保存在 CONTEXT […]

, ,

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload CAPTCHA.