Windows进程与线程数据结构
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《操作系统原理实验》
Windows进程与线程数据结构
主讲:黄伯虎
Windows 体系结构
简化的windows 结构图
Kernel: 由低层次的操作系统功能构成,比如线程调度、中断和异常分发、多处理器同步等。
提供了一些例程和基本对象。
执行体可以利用这些对象实现更高层次的功能。
Executive: 包含了基本的操作系统服务,包括内存管理、进程和线程管理、安全性、I/O 、网络和跨进程通信等。
Windows基本对象暴露给windows API的执行体对象
执行体对象:
指由执行体的各种组件(比如
进程管理器、内存管理器、
I/O子系统等)所实现的对
象。
用户可见。
内核对象:
指由Windows内核实现的一
组更为基本的对象。
内核对
象对用户而言是不可见的,
只能在执行体内部被创建和
使用。
Windows进程的组成(从最高抽象层次看)
一个私有的虚拟地址空间
一个可执行的程序:定义了代码和数据,并被映射到进程的虚拟地址空间。
一个已经打开句柄的列表:指向各种资源,比如信号量、文件,该进程的所有线程都可访问这些系统资源。
一个被称为访问令牌的安全环境:标识与该进程关联的用户、安全组和特权
一个被称为进程ID的唯一标识
至少一个执行线程
Windows进程的关键数据结构
执行体进程块(EPROCESS)
执行体进程对象的对象体,包括进程ID、父进程ID、程序名、进程优先级、内存管理信息、设备映像等。
核心进程块(KPROCESS)
内核进程对象的对象体,又称PCB,包括线程调度时需要的信息,如进程状态、线程时间片等。
进程环境块(PEB)
包括用户态代码需要和修改的信息。
Windows环境子系统核心态部件win32k.sys为每个进程建立的进程信息数据结构WIN32KPROCESS
Windows环境子系统进程csrss(用户态)为每个进程建立的进程信息数据结构
Process environment
block
Win32 process block
Handle table
Process address space
System address space
Process block (EPROCESS)
PCB
组成线程的基本部件
一组代表处理器状态的CPU寄存器中的内容
两个栈:一个用于当线程在内核模式下执行的时候,另一个用于线程在用户模式下执行的时候。
一个被称为线程局部存储区(TLS, Thread Local Storage)的私有存储区域:各个子系统、运行库和DLL都会用到该存储区域
一个被称为线程ID的唯一标识符
安全环境
Windows线程的关键数据结构
执行体线程块(ETHREAD)
执行体线程对象的对象体,包括:进程ID、起始执行地址、访问令牌、LPC消息、定时器信息、KTHREAD等。
核心线程块(KTHREAD)
内核线程对象的对象体,包括线程调度信息、同步信息、核心栈信息等。
线程环境块(TEB)
包括用户态代码需要和修改的信息。
Windows环境子系统核心态部件win32k.sys为每个线程建立的线程信息数据结构WIN32THREAD
Windows环境子系统进程csrss(用户态)为每个线程建立的线程信息数据结构
Thread environment
block
Thread block (ETHREAD)
...
Process address space
System address space
TCB Process environment
block
Win32 process block Handle table
Process block (EPROCESS)
PCB
Dispatcher Header
Processor Affinity Kernel Time User Time
Inwwap/Outswap List Entry
Process Spin Lock Resident Kernel Stack Count
Process Base Priority Default Thread Quantum
Process State Thread Seed Disable Boost Flag Process Page Directory
KTHREAD
. . .
KPROCESS
Windows 进程线程内部数据结构
EPEOCESS & KPROCESS
Quota Block
Exit Status Primary Access Token Process ID Parent Process ID
Exception Port Debugger Port
Handle Table
Process Environment Block
Create and Exit Time Next Process Block Image File Name Process Priority Class
Memory Management Information
EPROCESS
Kernel Process Block (or PCB)
Image Base Address Win32 Process Block EPROCESS
PEB
Quota Block
Exit Status Primary Access Token Process ID Parent Process ID
Exception Port Debugger Port
Handle Table
Process Environment Block
Create and Exit Time Next Process Block Image File Name Process Priority Class
Memory Management Information
EPROCESS
Kernel Process Block (or PCB)
Image Base Address Win32 Process Block EPROCESS
PEB
Image base address
Module list
Thread-local storage data
Code page data Critical section time-out Number of heaps Heap size info GDI shared handle table OS version no info Image version info Image process affinity mask
Process heap
Total User Time Total Kernel Time
Thread Scheduling Information
Synchronization Information List of Pending APCs Timer Block and Wait Blocks List of Objects Being Waiting On
System Service Table
TEB
KTHREAD
Thread Local Storage
Kernel Stack Information Dispatcher Header Trap Frame
ETHREAD & KTHREAD
ETHREAD
Create and Exit Time
Process ID
Thread Start Address
Impersonation Information LPC Message Information
EPROCESS
Access Token
KTHREAD Timer Information
Pending I/O Requests
TEB
Exception list
Stack base
Stack limit
Thread ID
Active RPC handle
LastError value Count of owned crit. sect.
Current locale
User32 client info
GDI32 info
OpenGL info
TLS array Subsyst. TIB Fiber info
PEB Winsock data
Windows进程线程模型
参考资料
Books
Mark E. Russinovich and David A. Solomon, Microsoft Windows Internals, 4th Edition, Microsoft Press, 2004.
Chapter 6 -Processes, Thread, and Jobs。