版本:V0.0作者:刘娟日期:2016-4-2最后修改:2016-4-2Windows系统机理技术报告修改历史:2013-1-17:完善协议转换部分河北科技大学信息科学与工程学院卫星应用中心技术报告共5页,第2页1、windows抢占式任务介绍在以前的操作系统中,如Windows3.1,多任务方式是“协作式多任务”,意思是说一个任务得到了CPU时间,除非它自己放弃使用CPU,否则将完全霸占CPU,所以任务之间需要协作——使用一段时间的CPU,放弃使用,其它的任务也如此,才能保证系统的正常运行;而在现行使用的操作系统中,如Window95及之后的Windows版本,使用的就是“抢占式多任务”了,它的总控制权在操作系统手中,操作系统会轮流询问每一个任务是否需要使用CPU,需要使用的话就让它用,不过在一定时间后,操作系统会剥夺当前任务的CPU使用权,把它排在询问队列的最后,再去询问下一个任务……。这种方式上的不同造成95和3.1性能上的不同:3.1中如果有一个任务死锁,则系统也同样死锁;95中有一个任务死锁,系统仍能正常运行。具有最高优先级的线程就是当前正在运行的那个线程。驻留在CPU内正在运行的线程会在什么时候中止呢?一是属于它的时间片已经到期,二是加入了另一个优先级更高的线程。通过不断从一个线程到另一个线程的切换,给人的感觉是线程的执行是同时进行的。线程并非随时需要运行,经常发生的情况是某个线程需要等待用户的输入,另一个线程的信息或等待I/O请求,否则便无法执行下去。有些线程也许本来就处于挂起状态。抢占式多任务处理(preemptivemultitasking)是将同时进行的各项任务(task),依照重要程度来排定优先顺序。在抢占式多任务系统中,操作系统必须具有从任何一个运行的程序上取走控制权和使另一个程序获得控制权的能力。一个抢占式系统下运行的应用程序不用担心独占系统,因为系统会合理地给每个运行的任务分配时间块。将这种系统称做抢占式系统是因为它不管在所给时间块内会发生什么事,都抢占运行程序的控制权。OS/2和UNIX都是抢占式系统。实时系统:指电脑使用者发出一要求时,在一个限定的时间内,电脑系统回复使用者的要求。一般的反应时间视行业而定,约在数秒之内,时间越短则使用者的满意度越高,但也需要较好的电脑系统。大部分线上系统以响应时间的长短来评估系统的效率,越短的反应时间表示系统效率越高。或指计算机对于外来信息能够及时进行处理,并在控制对象允许时间范围内作出快速反应,实时系统对响应时间的要求比分时系统更高。实时系统按其使用方式不同可分为:实时控制系统、实时信息处理系统。分时系统:分时是指多个用户分享使用同一台计算机。多个程序分时共享硬件和软件资源。分时(TimeSharing)操作系统的工作方式是:一台主机连接了若干个终端,每个终端有一个用户在使用。用户交互式地向系统提出命令请求,系统接受每个用户的命令,采用时间片轮转方式处理服务请求,并通过交互方式在终端上向用户显示结果。用户根据上步结果发出下道命。技术报告共5页,第3页分时操作系统将CPU的时间划分成若干个片段,称为时间片。操作系统以时间片为单位,轮流为每个终端用户服务。每个用户轮流使用一个时间片而使每个用户并不感到有别的用户存在。分时系统具有多路性、交互性、“独占”性和及时性的特征。多路性指,伺时有多个用户使用一台计算机,宏观上看是多个人同时使用一个CPU,微观上是多个人在不同时刻轮流使用CPU。交互性是指,用户根据系统响应结果进一步提出新请求(用户直接干预每一步)。“独占”性是指,用户感觉不到计算机为其他人服务,就像整个系统为他所独占。及时性指,系统对用户提出的请求及时响应。2、Windows的线程管理和调度机制线程,有时被称为轻量级进程,是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针,寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。既然线程作为程序执行流的最小单元,那么在Windows中,是怎样管理和调度线程的呢?在WindowsNT以后,Windows实现了一个基于优先级的抢先式多处理器调度系统。调度系统总是运行优先级最高的就绪线程。通常线程可在任何可用处理器上运行,但也可限制某线程只能在某处理器上运行。先看一下优先级是怎么划分的。线程总共分为32个优先级,具体看下图:线程优先级分为实时(从16到31,如设备监控线程)和可变优先级(从1到15),级别0技术报告共5页,第4页保留为系统使用。线程的基本优先级=[进程的基本优先级-2,进程的基本优先级+2],由应用程序控制。线程的动态优先级=[进程的基本优先级-2,31],由NT核心控制。为了提高调度速度,WindowsNT维护了一个称为就绪位图的32位量。就绪位图中的每一位指示一个调度优先级的就绪队列中是否有线程等待运行。还有一个称为空闲位图的32位量用来指示一个处理机是否处于空闲状态。但光有线程的优先级的话那么相同优先级的线程中只有一个执行到底,其他的都处于等待,所以还有一个时间配额的制度。时间配额是一个线程从进入运行状态到系统检查是否有其他优先级相同的线程需要开始运行之间的时间总和。一个线程用完了自己的时间配额时,如果没有其它相同优先级线程,Windows2000将重新给该线程分配一个新的时间配额,并继续运行。每个线程都有一个代表本次运行最大时间长度的时间配额。在每个线程拥有优先级和时间配额后,通常线程先在许多等待函数的调用中进入等待状态,进入等待状态线程的时间配额不会被重置,而是在等待事件出现时,线程的时间配额被减1相当于1/3个时钟间隔;如果线程的优先级大于等于14在等待事件出现时,线程的优先级被重置。可能在这两种情况下出现抢先的情况:一个是高优先级线程的等待完成,即一个线程等待的事件出现。一个是一个线程的优先级被增加或减少。在判断一个线程是否被抢先时,并不考虑线程处于用户态还是内核态,调度器只是依据线程优先级进行判断。当线程被抢先时,它被放回相应优先级的就绪队列的队首。如果刚用完时间配额的线程优先级降低了,系统将寻找一个优先级高于刚用完时间配额线程的新设置值的就绪线程。如果刚用完时间配额的线程的优先级没有降低,并且有其他优先级相同的就绪线程,系统将选择相同优先级的就绪队列中的下一个线程进入运行状态,刚用完时间配额的线程被排到就绪队列的队尾(即分配一个新的时间配额并把线程状态从运行状态改为就绪状态)。如果没有优先级相同的就绪线程可运行,刚用完时间配额的线程将得到一个新的时间配额并继续运行。当线程完成运行时,它的状态从运行状态转到终止状态。线程完成运行的原因可能是通过调用函数而从主函数中返回或通过被其他线程通过调用函数来终止。如果处于终止状态的线程对象上没有未关闭的句柄,则该线程将被从进程的线程列表中删除,相关数据结构将被释放。这是Windows中大概的线程管理和调度的方法,而WindowsNT中还有一个很重要的多线程的机制。由于线程比进程开销小而且创建得更快,同一进程内的多个线程共享同一块内存,便于线程之间数据共享和传送以及所有的进程资源对线程都有效的原因,系统采用多线程而不采用多进程来实现多任务。首先一个处理器在一个时刻只能执行一个线程,WindowsNT允许用户同时运行多个任务。技术报告共5页,第5页这是通过下述方法实现的:(1)运行一个线程,直到它被中断或进入等待状态;(2)保存该线程的描述表;(3)操作系统从等待执行的线程队列中挑选一个动态优先级最高的线程作为执行线程,装入它的描述表(一旦线程获得CPU时间片,它的动态优先级就降低,但不会低于它的基础优先级);(4)若还存在等待被执行的线程,则重复上述过程。处理器就是这样根据优先级不断地切换执行线程,它的高速度使人产生多个线程同时执行的错觉。所以一个处理器实际上仍然只能处理一个线程,这只是利用了高速度上的近似同时性。当计算机系统有多个处理器时,多线程就能实现真正的同时执行。目前,NT的对称多处理器结构(SMP)最多支持32个处理器。WindowsNT是占先式多任务操作系统,这意味着操作系统不必等待一个线程,它可主动将处理器让给其它线程。在这种方式下,当一个线程已运行了配额的时间后,或出现抢先情况时,操作系统将中断该线程。如图所示:线程转让CPU处理时间是被迫的。占先式多任务可以防止线程独占CPU,允许其它线程公平地分享CPU执行时间,这和16位Windows环境下的协作式多任务有着本质的区别。在16位Windows环境下,如果一个程序进入无限循环,则其它应用程序可能永远没有机会执行;而在WindowsNT环境下这种情况不会发生,相反,许多线程的执行部分都采用了循环扫描的结构。这也是实现了多线程的基础。以上就是Windows中大概的线程管理和调度机制。