预览加载中,请您耐心等待几秒...
1/4
2/4
3/4
4/4

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

Windows操作系统的线程调度机制 2011010***热动***** 在操作系统的历史演变中,人们总是为了提高CPU的效率而一直努力着。从串行处理到简单批处理、中断机制的引入,到多道程序设计批处理和分时系统,CPU的利用率便一直在提高,同时程序的执行的复杂性也日益增多。随着多道程序操作系统的出现,怎样有序高效的管理程序的执行成为了当时人们关注的焦点。 为了程序执行的正确性和高效性,我们通常需要达到以下几个目的:1.资源对多个应用程序可见2.物理处理器能够在多个应用程序间切换保证每个程序都在执行中,即并发执行3.提高资源利用率和系统吞吐量。在这些目的的推动下,“进程”这样作为能分配给处理器并由处理器执行的实体便氤氲而生了。众所周知,一个进程既是资源分配单位,即每个进程拥有虚拟地址空间,保存进程映像,控制一些资源(文件,I/O设备),有状态、优先级等,也是CPU调度单位,即进程是一个程序的执行轨迹。进程的这两个属性也是能够并发执行的基础。当产生一个中断时,处理器保存当前执行进程的所有信息(进程控制块),调入中断处理程序,并继续到下一个指令周期,当中断处理结束后,处理器恢复刚刚被中断进程的所有信息和分配的资源,保证该进程可以从被中断处重新开始执行。简单情形下,进程主要有三个状态:就绪态、运行态、阻塞态。简单的轮转调度中,处于运行态的进程超时后,CPU产生时钟中断,将该进程转回就绪态,并重新调度另一个排队的就绪态进程进入运行态运行;当运行态的进程执行I/O或其他调用后,为了不让CPU做长时间的等待,该进程会被置为阻塞态,I/O准备完毕后该进程会重新进入就绪态进行排队。采用这样的方式能够让所有的程序依次执行,由于CPU的速度很快、时间片的长度很短,看上去就像所有程序并发执行一样,同时CPU的利用率也会提高。 引入进程最开始的目的是为了程序并发执行、提高CPU利用率,但是由于前述的“进程是资源资源分配单位”,因而在创建、终止、切换过程中,系统必须为之付出较大的时空开销。正因为如此,系统中并发执行的进程的数目不宜过多,进程切换才频率也不宜过高,这样就限制了系统的并发程度。人们解决这个问题的思路,就是将进程中两个属性切分开来,由操作系统分别来进行处理,这样“线程”的概念便产生了。在支持多线程的操作系统中(例如Windows),进程只作为资源分配单位,而线程则作为CPU调度单位。这样,进程被定义为资源分配的单位和一个被保护的单位,有存放进程映像的虚拟地址空间,可以受保护地对处理器、其他进程(通信)、文件和I/O资源进行访问。而处于这个进程中的每个线程则有执行状态(运行、就绪等)、未运行时保存的线程上下文、执行栈、局部变量的存储空间。这样,进程中的所有线程共享该进程的状态和资源,他们驻留在同一块地址空间中,并且可以访问到相同的数据。另外的,允许多线程的操作系统使得一个程序中的相互独立的代码可以并发地执行,也大大的提高了程序的运行效率。 而Windows操作系统就是一个支持多线程、支持内核级线程、采用严格的抢先式动态优先级调度,依据优先级和分配的时间配额来调度线程的操作系统。 上面已经谈到了线程和多线程的基本概念以及出现的意义,至于线程的实现则可以大致分为两大类:用户级线程和内核级线程(和混合实现),其中Windows操作系统支持内核级线程。在支持内核级线程的操作系统中,所有线程管理由操作系统内核完成。操作系统以 用户级线程内核级线程 线程为基础进行调度,内核维护进程和线程的上下文,线程之间的切换需要操作系统内核支持,这时没有线程库,而在操作系统内核中有记录系统中所有线程的线程表。内核级线程的优点是:1.对于多处理器,内核可以同时调度同一进程的多个线程2.阻塞是在线程一级完成3.内核例程是多线程的。当然,有利总有弊,内核级线程的缺点就是在同一进程内的线程切换调用内核,导致速度下降。 Windows操作系统的线程状态主要有7种:就绪态、备用态、运行态、等待态、过渡态、终止态、初始化态,一个线程在处理机调度中就是根据不同情况在这7种状态中进行切换。其中就绪态、运行态、等待(阻塞)态的解释和上述轮转调度中的线程状态一样。而备用态是指线程已选择好处理器,正等待上下文切换,系统中每个处理器上只能有一个处于备用状态的线程。过渡态是指线程在准备执行而其内核堆栈处于外存时,线程进入过渡状态;当其内核堆栈调回内存,线程进入就绪状态。而初始化态和终止态的含义非常明了,不作赘述。 Windows线程状态 Windows操作系统采用严格的抢先式动态优先级调度,根据优先级和分配的时间配额来调度。大体上说来,每个优先级的就绪线程排成一个先进先出队列,当一个线程状态变成就绪时,它可能立即运行或排到相应优先级队列的尾部,运行优先级最高的就绪线程总是被系统运行。同时,系统