1 / 39

Windows 进程与线程

Windows 进程与线程. 操作系统课程组. 内容安排. Windows 基本概念 Windows进程 Windows线程 Windows进程线程模型 Windows进程线程内部数据结构 Windows进程的创建过程 Windows线程调度 线程的同步和互斥. 简化的 windows 结构图. Windows 核心系统文件. Windows 基本概念. 执行体 ( executive ) 和内核 (kernel). Executive: 包含了基本的操作系统服务,包括内存管理、进程和线程管理、安全性、 I/O 、网络和跨进程通信等。.

mikko
Télécharger la présentation

Windows 进程与线程

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Windows进程与线程 操作系统课程组

  2. 内容安排 • Windows基本概念 • Windows进程 • Windows线程 • Windows进程线程模型 • Windows进程线程内部数据结构 • Windows进程的创建过程 • Windows线程调度 • 线程的同步和互斥

  3. 简化的windows结构图 Windows 核心系统文件 Windows基本概念 • 执行体(executive)和内核(kernel) Executive: 包含了基本的操作系统服务,包括内存管理、进程和线程管理、安全性、I/O、网络和跨进程通信等。 Kernel: 由底层次的操作系统功能构成,比如线程调度、中断和异常分发、多处理器同步等。提供了一些例程和基本对象。执行体可以利用这些例程和对象实现更高层次的功能。

  4. 暴露给windows API的执行体对象 Windows基本概念 • 执行体对象和内核对象 执行体对象: 指由执行体的各种组件(比如进程管理器、内存管理器、I/O子系统等)所实现的对象。 内核对象 指由Windows内核实现的一组更为基本的对象。内核对象对用户模式代码而言是不可见的,只能在执行体内部被创建和使用。

  5. Windows基本概念 • 对象结构 对象头:和对象类型无关的数据,为所有对象共有。由对象管理器(object manager)管理。 类型对象:某类对象共有的数据。 对象体:单个对象特有的数据。由执行体组件控制和维护。

  6. 标准的对象头属性 Windows基本概念

  7. 共享 Windows基本概念 进程对象和进程类型对象

  8. Handle Table object object Windows基本概念 • 对象句柄 • 即对象标识符。当一个进程通过名称创建或打开一个对象时,它会接收到一个句柄,此后通过此句柄来访问该对象。 • 对象句柄实际上是一个索引,指向与进程相关的句柄表中的表项。 • 对象句柄表(Handle Table) • 一个进程的句柄表包含所有已被该进程打开的那些对象的指针。一个句柄表项的结构如下:

  9. Windows基本概念 Windows2000进程句柄表结构图 级联结构

  10. Windows进程 • Windows进程的组成(从最高抽象层次看) • 一个私有的虚拟地址空间 • 一个可执行的程序, • 定义了代码和数据,并被映射到进程的虚拟地址空间 • 一个已经打开句柄的列表 • 指向各种资源,比如信号量、文件,该进程的所有线程都可访问这些系统资源 • 一个被称为访问令牌的安全环境 • 标识与该进程关联的用户、安全组和特权 • 一个被称为进程ID的唯一标识 • 至少一个执行线程

  11. Windows进程 • Windows进程的关键数据结构 • 执行体进程块(EPROCESS, Executive Process Block) • 执行体进程对象的对象体,包括进程ID、父进程ID、程序名、进程优先级、内存管理信息、设备映像等。 • 核心进程块(KPROCESS, Kernel Process Block) • 内核进程对象的对象体,又称PCB,包括线程调度时需要的信息,如进程状态、线程时间片等。 • 进程环境块(PEB, Process Environment Block) • 包括用户态代码需要和修改的信息。 • Windows环境子系统核心态部件win32k.sys为每个进程建立的进程信息数据结构WIN32KPROCESS • Windows环境子系统进程csrss(用户态空间)为每个进程建立的进程信息数据结构

  12. Windows线程 • 组成线程的基本部件 • 一组代表处理器状态的CPU寄存器中的内容 • 两个栈 • 一个用于当线程在内核模式下执行的时候,另一个用于线程在用户模式下执行的时候。 • 一个被称为线程局部存储区(TLS, Thread Local Storage)的私有存储区域 • 各个子系统、运行库和DLL都会用到该存储区域 • 一个被称为线程ID的唯一标识符 • 安全环境

  13. Windows线程 • Windows线程的关键数据结构 • 执行体线程块(ETHREAD, Executive Thread Block) • 执行体线程对象的对象体,包括:进程ID、起始执行地址、访问令牌、LPC消息、定时器信息、KTHREAD等。 • 核心线程块(KTHREAD, Kernel Thread Block) • 内核线程对象的对象体,包括线程调度信息、同步信息、核心栈信息等。 • 线程环境块(TEB, Thread Environment Block) • 包括用户态代码需要和修改的信息。 • Windows环境子系统核心态部件win32k.sys为每个线程建立的线程信息数据结构WIN32THREAD • Windows环境子系统进程csrss(用户态空间)为每个线程建立的线程信息数据结构

  14. Windows进程线程模型 Windows进程线程模型图

  15. Process environment block Thread environment block Process address space System address space Win32 process block Process block (EPROCESS) Handle table Thread block (ETHREAD) ... Windows进程线程模型 Windows中与进程和线程相关联的数据结构

  16. Dispatcher Header KPROCESS Kernel Process Block (or PCB) Process Page Directory Process ID Kernel Time Parent Process ID User Time Exit Status Inwwap/Outswap List Entry Create and Exit Time . . . KTHREAD EPROCESS Next Process Block Process Spin Lock Processor Affinity Quota Block Resident Kernel Stack Count Memory Management Information Process Base Priority Exception Port Default Thread Quantum Debugger Port Process State Primary Access Token Thread Seed Disable Boost Flag Handle Table Process Environment Block Image File Name Image Base Address Process Priority Class Win32 Process Block Windows进程线程内部数据结构 • EPEOCESS & KPROCESS EPROCESS

  17. Kernel Process Block (or PCB) Process ID Parent Process ID Exit Status 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 Create and Exit Time PEB EPROCESS Next Process Block Quota Block Memory Management Information Exception Port Debugger Port Primary Access Token Processheap Handle Table Process Environment Block Image File Name Image Base Address Process Priority Class Win32 Process Block Windows进程线程内部数据结构 • PEB EPROCESS

  18. ETHREAD KTHREAD Create and Exit Time Process ID EPROCESS KTHREAD Thread Start Address Dispatcher Header Access Token Total User Time Impersonation Information Total Kernel Time LPC Message Information Kernel Stack Information Timer Information System Service Table Pending I/O Requests TEB Thread Scheduling Information Trap Frame Thread Local Storage Synchronization Information List of Pending APCs Timer Block and Wait Blocks List of Objects Being Waiting On Windows进程线程内部数据结构 • ETHREAD & KTHREAD

  19. 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 Windows进程线程内部数据结构 • TEB Subsyst. TIB Fiber info PEB Winsock data

  20. Windows进程的创建过程 • 与进程相关的函数

  21. Windows进程的创建过程 CreaeProcess() Open EXE andcreate selection object Step 1 Create NTprocess object Step 2 Create NTthread object Windows subsystem Step 3 New process Set up for newprocess andthread Notify Windowssubsystem Step 4 Finalprocess/imageinitialization Step 6 Start execution of the initialthread Step 5 Start executionat entry point toimage Return to caller

  22. Windows线程调度 • 调度算法(Windows XP/2000/2003) • 采用动态优先级多队列调度算法 • 优先级

  23. 动态优先级: 每个线程的“动态优先级”以线程的基本优先级为初始值,随着进程所做工作类型的不同而上下浮动 Windows线程调度 Windows线程的基本优先级

  24. Windows线程调度 • 调度器 • Dispatcher(分发器):内核中负责调度的例程的集合。 • 为方便调度,内核维护着一个数据结构,称为“Dispatcher Database”(分发器数据库) 分发器数据库(就绪队列)

  25. Windows线程调度 • Windows Server 2003线程状态 备用 抢占 延迟的就绪 自愿切换 转换

  26. Windows线程调度 • Windows线程的基本状态 抢占, 时间约束 preemption, quantum end Ready (1) Running (2) voluntary switch 自愿切换 Waiting (5)

  27. Windows线程调度 • 调度情形 • Preemption(抢占) Running Ready from Wait state 18 17 16 15 14 13

  28. Windows线程调度 • Ready after Wait Resolution(等待结束进入就绪状态) Running Ready 18 17 16 15 14 13 from Wait state

  29. Windows线程调度 • Voluntary Switch(自愿切换) Running Ready 18 17 16 15 14 13 to Waiting state

  30. Windows线程调度 • Quantum End (时间片用完) Running Ready 18 17 16 15 14 13

  31. 线程的同步和互斥 • 同步对象 • Windows 2000/XP中提供了同步对象来解决线程同步和互斥问题。在任何时刻,同步对象都处于两种状态中的一种 • 信号态(signaled state) • 或者非信号态(nonsignaled state) • 这些对象包括 • 事件对象 • 信号量对象 • 临界区对象 • 定时器对象 • 队列对象等

  32. 线程的同步和互斥 • 事件对象(Event) • 是最简单的同步对象,它包括有信号和无信号两种状态。在线程访问某一资源之前,需要等待某一事件的发生,这时用事件对象最合适。 • 相关API: • CreateEvent:创建一个事件对象,返回对象句柄。 • OpenEvent:返回一个已存在的事件对象句柄,用于后续访问。 • SetEvent:设置指定事件为可用状态。 • ResetEvent:设置指定事件对象为不可用状态。

  33. 线程的同步和互斥 • 信号量对象(Semaphore) • 信号量对象是同步对象,初值为0至某个最大值之间的正整数,它允许同时对多个线程共享资源进行访问,用于限制并发资源的线程数。 • 相关API: • CreateSemaphore :创建一个信号量对象,返回对象句柄。 • OpenSemaphore :返回一个已存在的信号量对象句柄,用于后续访问。 • ReleaseSemaphore:释放对信号量对象的占用。

  34. 线程的同步和互斥 • 互斥体对象(Mutex) • 互斥体对象的状态在它不被任何线程拥有时才有信号,而当它被拥有时则无信号。互斥体对象适合用来协调多个线程对共享资源的互斥访问,它在同一时刻只能被一个线程占用。 • 相关API: • CreateMutex :创建一个互斥对象,返回对象句柄。 • OpenMutex :打开并返回一个已存在的互斥对象句柄,用于后续访问。 • ReleaseMutex:释放对互斥体对象的占用,使之成为可用。

  35. 线程的同步和互斥 • 临界区对象(CriticalSection) • 临界区对象只能用于同一进程的线程之间共享资源处理,同一进程内各线程对它的访问是互斥进行的。把变量类型说明为CRITICAL_SECTION,就可作为临界区使用。 • 相关API: • InitializeCriticalSection:对临界区对象进行初始化。 • EnterCriticalSection:等待占用临界区的使用权,得到使用权时返回。 • LeaveCriticalSection:释放临界区的使用权。 • DeleteCriticalSection:释放与临界区对象相关的所有系统资源。

  36. 线程的同步和互斥 • 用户级等待同步函数 • WIN32提供了一组能使线程阻塞其自身执行的等待函数。线程调用函数而被阻塞,知道函数参数中的一个或多个同步对象产生了信号,或者阻塞超过了规定的等待时间才会返回。在等待函数未返回时,线程处于等待状态,此时线程只消耗很少的CPU时间。使用等待函数既可以保证线程的同步,又可以提高程序的运行效率。最常用的等待函数是用户级等待同步函数: • WaitForSingleObject与WaitForMultipleObjects 。 • WaitForSingleObject可以用来监测单个同步对象, • WaitForMultipleObjects可以用来监测单个同步对象。

  37. Further Reading • Mark E. Russinovich and David A. Solomon, Microsoft Windows Internals, 4th Edition, Microsoft Press, 2004. • Chapter 6 - Processes, Thread, and Jobs • Process Internals • Flow of Create Process • Thread Internals • Thread Scheduling • Thread States • Scheduling Scenarios

  38. Source Code References • Windows Research Kernel sources • \base\ntos\ke • procobj.c - Process object • thredobj.c, thredsup.c – Thread object • Wait.c – quantum management, wait resolution • Waitsup.c – dispatcher exit (deferred ready queue) • \base\ntos\ke\i386, amd64 • thredini.c – architecture specific thread initialization • Ctxswap.asm – Context Swap • Clockint.asm – Clock Interrupt Handler • \base\ntos\inc\ke.h, ps.h – structure/type definitions

  39. References [1] Mark E. Russinovich and David A. Solomon, Microsoft Windows Internals, 4th Edition, Microsoft Press, 2004. [2]孟静,《操作系统教程——原理和实力分析》(第二版), 高等教育出版社, 2006.5 [3] Windows Academic Program, Windows OS Internals Curriculum Resource Kit (CRK) , UnitOS4 - Scheduling and Dispatch.

More Related