进程与线程.ppt

上传人:sccc 文档编号:5330956 上传时间:2023-06-26 格式:PPT 页数:39 大小:1.98MB
返回 下载 相关 举报
进程与线程.ppt_第1页
第1页 / 共39页
进程与线程.ppt_第2页
第2页 / 共39页
进程与线程.ppt_第3页
第3页 / 共39页
进程与线程.ppt_第4页
第4页 / 共39页
进程与线程.ppt_第5页
第5页 / 共39页
点击查看更多>>
资源描述

《进程与线程.ppt》由会员分享,可在线阅读,更多相关《进程与线程.ppt(39页珍藏版)》请在三一办公上搜索。

1、Windows进程与线程,操作系统课程组,-2-,内容安排,Windows基本概念Windows进程Windows线程Windows进程线程模型Windows进程线程内部数据结构Windows进程的创建过程Windows线程调度线程的同步和互斥,-3-,Windows 核心系统文件,Windows基本概念,执行体(executive)和内核(kernel),简化的windows结构图,Kernel:由底层次的操作系统功能构成,比如线程调度、中断和异常分发、多处理器同步等。提供了一些例程和基本对象。执行体可以利用这些例程和对象实现更高层次的功能。,Executive:包含了基本的操作系统服务,包

2、括内存管理、进程和线程管理、安全性、I/O、网络和跨进程通信等。,-4-,Windows基本概念,执行体对象和内核对象,暴露给windows API的执行体对象,执行体对象:指由执行体的各种组件(比如进程管理器、内存管理器、I/O子系统等)所实现的对象。,内核对象指由Windows内核实现的一组更为基本的对象。内核对象对用户模式代码而言是不可见的,只能在执行体内部被创建和使用。,-5-,Windows基本概念,对象结构,对象头:和对象类型无关的数据,为所有对象共有。由对象管理器(object manager)管理。,对象体:单个对象特有的数据。由执行体组件控制和维护。,类型对象:某类对象共有的

3、数据。,-6-,Windows基本概念,标准的对象头属性,-7-,Windows基本概念,进程对象和进程类型对象,-8-,Windows基本概念,对象句柄即对象标识符。当一个进程通过名称创建或打开一个对象时,它会接收到一个句柄,此后通过此句柄来访问该对象。对象句柄实际上是一个索引,指向与进程相关的句柄表中的表项。对象句柄表(Handle Table)一个进程的句柄表包含所有已被该进程打开的那些对象的指针。一个句柄表项的结构如下:,-9-,Windows基本概念,Windows2000进程句柄表结构图,级联结构,-10-,Windows进程,Windows进程的组成(从最高抽象层次看)一个私有的

4、虚拟地址空间一个可执行的程序,定义了代码和数据,并被映射到进程的虚拟地址空间一个已经打开句柄的列表指向各种资源,比如信号量、文件,该进程的所有线程都可访问这些系统资源一个被称为访问令牌的安全环境标识与该进程关联的用户、安全组和特权一个被称为进程ID的唯一标识至少一个执行线程,-11-,Windows进程,Windows进程的关键数据结构执行体进程块(EPROCESS,Executive Process Block)执行体进程对象的对象体,包括进程ID、父进程ID、程序名、进程优先级、内存管理信息、设备映像等。核心进程块(KPROCESS,Kernel Process Block)内核进程对象的

5、对象体,又称PCB,包括线程调度时需要的信息,如进程状态、线程时间片等。进程环境块(PEB,Process Environment Block)包括用户态代码需要和修改的信息。Windows环境子系统核心态部件win32k.sys为每个进程建立的进程信息数据结构WIN32KPROCESSWindows环境子系统进程csrss(用户态空间)为每个进程建立的进程信息数据结构,-12-,Windows线程,组成线程的基本部件一组代表处理器状态的CPU寄存器中的内容两个栈一个用于当线程在内核模式下执行的时候,另一个用于线程在用户模式下执行的时候。一个被称为线程局部存储区(TLS,Thread Loca

6、l Storage)的私有存储区域各个子系统、运行库和DLL都会用到该存储区域一个被称为线程ID的唯一标识符安全环境,-13-,Windows线程,Windows线程的关键数据结构执行体线程块(ETHREAD,Executive Thread Block)执行体线程对象的对象体,包括:进程ID、起始执行地址、访问令牌、LPC消息、定时器信息、KTHREAD等。核心线程块(KTHREAD,Kernel Thread Block)内核线程对象的对象体,包括线程调度信息、同步信息、核心栈信息等。线程环境块(TEB,Thread Environment Block)包括用户态代码需要和修改的信息。Wi

7、ndows环境子系统核心态部件win32k.sys为每个线程建立的线程信息数据结构WIN32THREADWindows环境子系统进程csrss(用户态空间)为每个线程建立的线程信息数据结构,-14-,Windows进程线程模型,Windows进程线程模型图,-15-,Windows进程线程模型,Windows中与进程和线程相关联的数据结构,-16-,Windows进程线程内部数据结构,EPEOCESS&KPROCESS,EPROCESS,-17-,Windows进程线程内部数据结构,PEB,EPROCESS,-18-,Windows进程线程内部数据结构,ETHREAD&KTHREAD,-19-

8、,Windows进程线程内部数据结构,TEB,Subsyst.TIB,Fiber info,PEB,Winsock data,-20-,Windows进程的创建过程,与进程相关的函数,-21-,Windows进程的创建过程,Open EXE andcreate selection object,Create NTprocess object,Create NTthread object,Notify Windowssubsystem,Set up for newprocess andthread,Start execution of the initialthread,Return to ca

9、ller,Finalprocess/imageinitialization,Start executionat entry point toimage,CreaeProcess(),Windows subsystem,New process,Step 1,Step 2,Step 3,Step 4,Step 5,Step 6,-22-,Windows线程调度,调度算法(Windows XP/2000/2003)采用动态优先级多队列调度算法优先级,-23-,Windows线程调度,Windows线程的基本优先级,动态优先级:每个线程的“动态优先级”以线程的基本优先级为初始值,随着进程所做工作类型的

10、不同而上下浮动,-24-,Windows线程调度,调度器Dispatcher(分发器):内核中负责调度的例程的集合。为方便调度,内核维护着一个数据结构,称为“Dispatcher Database”(分发器数据库),分发器数据库(就绪队列),-25-,Windows线程调度,Windows Server 2003线程状态,备用,转换,延迟的就绪,抢占,自愿切换,-26-,Windows线程调度,Windows线程的基本状态,Ready(1),Running(2),Waiting(5),voluntaryswitch,preemption,quantum end,抢占,时间约束,自愿切换,-27

11、-,Windows线程调度,调度情形Preemption(抢占),181716151413,Running Ready,from Wait state,-28-,Windows线程调度,Ready after Wait Resolution(等待结束进入就绪状态),181716151413,Running Ready,from Wait state,-29-,Windows线程调度,Voluntary Switch(自愿切换),181716151413,Running Ready,to Waiting state,-30-,Windows线程调度,Quantum End(时间片用完),Runn

12、ing Ready,181716151413,-31-,线程的同步和互斥,同步对象Windows 2000/XP中提供了同步对象来解决线程同步和互斥问题。在任何时刻,同步对象都处于两种状态中的一种信号态(signaled state)或者非信号态(nonsignaled state)这些对象包括事件对象信号量对象临界区对象定时器对象队列对象等,-32-,线程的同步和互斥,事件对象(Event)是最简单的同步对象,它包括有信号和无信号两种状态。在线程访问某一资源之前,需要等待某一事件的发生,这时用事件对象最合适。相关API:CreateEvent:创建一个事件对象,返回对象句柄。OpenEven

13、t:返回一个已存在的事件对象句柄,用于后续访问。SetEvent:设置指定事件为可用状态。ResetEvent:设置指定事件对象为不可用状态。,-33-,线程的同步和互斥,信号量对象(Semaphore)信号量对象是同步对象,初值为0至某个最大值之间的正整数,它允许同时对多个线程共享资源进行访问,用于限制并发资源的线程数。相关API:CreateSemaphore:创建一个信号量对象,返回对象句柄。OpenSemaphore:返回一个已存在的信号量对象句柄,用于后续访问。ReleaseSemaphore:释放对信号量对象的占用。,-34-,线程的同步和互斥,互斥体对象(Mutex)互斥体对象的

14、状态在它不被任何线程拥有时才有信号,而当它被拥有时则无信号。互斥体对象适合用来协调多个线程对共享资源的互斥访问,它在同一时刻只能被一个线程占用。相关API:CreateMutex:创建一个互斥对象,返回对象句柄。OpenMutex:打开并返回一个已存在的互斥对象句柄,用于后续访问。ReleaseMutex:释放对互斥体对象的占用,使之成为可用。,-35-,线程的同步和互斥,临界区对象(CriticalSection)临界区对象只能用于同一进程的线程之间共享资源处理,同一进程内各线程对它的访问是互斥进行的。把变量类型说明为CRITICAL_SECTION,就可作为临界区使用。相关API:Init

15、ializeCriticalSection:对临界区对象进行初始化。EnterCriticalSection:等待占用临界区的使用权,得到使用权时返回。LeaveCriticalSection:释放临界区的使用权。DeleteCriticalSection:释放与临界区对象相关的所有系统资源。,-36-,线程的同步和互斥,用户级等待同步函数WIN32提供了一组能使线程阻塞其自身执行的等待函数。线程调用函数而被阻塞,知道函数参数中的一个或多个同步对象产生了信号,或者阻塞超过了规定的等待时间才会返回。在等待函数未返回时,线程处于等待状态,此时线程只消耗很少的CPU时间。使用等待函数既可以保证线程的

16、同步,又可以提高程序的运行效率。最常用的等待函数是用户级等待同步函数: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 Jo

17、bsProcess Internals Flow of Create Process Thread InternalsThread SchedulingThread StatesScheduling Scenarios,-38-,Source Code References,Windows Research Kernel sourcesbasentoskeprocobj.c-Process objectthredobj.c,thredsup.c Thread objectWait.c quantum management,wait resolutionWaitsup.c dispatcher

18、exit(deferred ready queue)basentoskei386,amd64thredini.c architecture specific thread initializationCtxswap.asm Context SwapClockint.asm Clock Interrupt Handlerbasentosincke.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.53 Windows Academic Program,Windows OS Internals Curriculum Resource Kit(CRK),UnitOS4-Scheduling and Dispatch.,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号