- 1、本文档共76页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
4.4.2 多线程 由于不同进程中的线程可能并发执行(好像同时在执行),因而Windows支持进程间的并发性。此外,同一个进程中的多个线程可以分配给不同的处理器并且同时执行(实际上同时执行)。一个含有多线程的进程在实现并发时,不需要使用多进程的开销。同一个进程中的线程可以通过它们的公共地址空间交换信息,并访问进程中的共享资源,不同进程中的线程可以通过在两个进程间建立的共享内存交换信息。 4.4.2 多线程 一个面向对象的具有多线程的进程是实现服务器应用程序的一种有效方法。例如,一个服务器进程可以并发地为许多客户服务。 4.4.3 线程状态 一个还存在于系统中的Windows线程处于以下六种状态之一(见图4-9): 就绪态:就绪线程可以被调度执行。内核分派器跟踪所有就绪线程,并按优先级顺序进行调度。 备用态:备用线程已经被选择下一次在一个特定的处理器上运行。该线程在这个状态等待,直到那个处理器可用。如果备用线程的优先级足够高,正在那个处理器上运行的线程可能被这个备用线程抢占。否则,该备用线程要等到正在运行的线程被阻塞或时间片结束。 图4-9 Windows线程状态 4.4.3 线程状态 运行态:一旦内核分派器执行了线程切换,备用线程将进入运行状态并开始执行。执行过程一直持续到该线程被抢占、用完时间片、被阻塞或终止。在前两种情况下,它将回到就绪态。 等待态:① 当线程被一个事件(如I/O)阻塞,② 为了同步自愿等待,或者③ 一个环境子系统指引它把自身挂起时,该线程进入等待状态。当等待的条件满足时,如果它的所有资源都可用,线程转到就绪态。 过渡态:一个线程在等待后,如果准备好运行但资源不可用时,进入该状态。例如,一个线程的栈被换出内存。当该资源可用时,线程进入就绪状态。 4.4.3 线程状态 终止态:一个线程可以被自己或者被另一个线程终止,或者当它的父进程终止时终止。一旦完成了清理工作,该线程从系统中移出,或者被执行体保留(Windows执行体包含基本操作系统服务,如存储管理、进程和线程管理、安全、I/O及进程间通信),供以后重新初始化。 4.4.4 对OS子系统的支持 通用的进程和线程设施必须支持各种操作系统客户端的特定进程和线程结构,可以利用Windows进程和线程的特征来模仿相应操作系统中的进程和线程设施。 4.4.4 对OS子系统的支持 进程创建从应用程序的一个创建新进程的请求开始。创建进程的请求从一个应用程序发向相应的受保护子系统,该子系统又给Windows执行体发送一个进程请求,Windows创建一个进程对象并给子系统返回该对象的一个句柄。当Windows创建一个进程时,它不会自动创建线程。在Win32中,一个新进程往往和一个线程一起创建。因此,Win32子系统再次调用Windows进程管理器,为这个新进程创建一个线程,并从Windows接收该线程句柄,正确的线程和进程信息返回给应用程序。 4.4.4 对OS子系统的支持 POSIX子系统不支持线程,因此,POSIX子系统从Windows得到新进程的线程,使得该进程可以被激活,但仅给应用程序返回该进程的信息。而POSIX进程通过Windows执行体的进程和线程来实现这一点,对应用程序是不可见的。 4.4.4 对OS子系统的支持 当执行体创建一个新进程时,这个新进程继承了创建它的进程的许多属性。但是,在Windows环境中,进程的创建是间接完成的。一个应用程序客户端进程给Win32子系统发出一个进程创建请求,该子系统又给Windows执行体发出一个进程创建请求。由于期待的效果是新进程继承客户端进程的特点而不是服务器进程的特点,因而Windows允许子系统指定新进程的父进程。新进程随后继承了父进程的访问令牌、配额限制、基本优先级和默认处理器亲和性。 4.4.5 对称多处理的支持 Windows支持SMP硬件配置。任何进程的线程,包括执行体的线程,都可以在任何处理器上运行。在没有亲和性限制的情况下,内核分派器把一个就绪线程指定给下一个可用的处理器,这就可以确保存在没有就绪线程时没有处理器是空闲的,以及当一个高优先级的线程就绪时处理器不会去执行一个低优先级的线程。同一个进程中的多个线程可以在多个处理器上同时执行。 4.4.5 对称多处理的支持 默认情况下,微内核在把线程指定到处理器时使用软亲和性的策略:分派器试图把一个就绪线程指定给上一次运行它的同一个处理器。这有助于重新使用前一次执行该线程后仍处于处理器中的内存高速缓冲区中的数据。应用程序也可以限制它的线程在某些处理器上执行(硬亲和性)。 Thanks! 4.2 用户级和内核级线程 线程的实现可以分为两大类:用户级线程(User-Level Thread,ULT)和内核级线程(Kernel-Level
文档评论(0)