简析Windows系统的调度机制_2015011224

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

电子系 无51班 赵少靖 学号:**********
Windows系统的调度的粒度为线程,首先Windows为每一个线程分配调度优先级。调度根据优先级采用抢占式的调度策略,具有最高优先级的总是最先被执行。每一个线程都分配了一定的时间片,系统通过改变线程的状态来进行线程调度。
Windows系统使用32个优先级来表示线程要求执行的紧迫性,优先级用0~ 31的数字来表示。其中0优先级为内存页清零线程保留,1~ 15为可变优先级,16~ 31为实时优先级别。在应用创建线程时用户可以用形象的优先级描述来设置优先级,当创建进程时可以,可以赋予实时、高、高于一般、一般、低于一般和空闲的优先级别,当创建线程时可以在进程优先级的基础上进一步赋予尽量实时、最高、高于一般、一般、低于一般、最低和空闲的优先级别。处理器调度时参考两个优先级设置,一个是从当前线程所在进程的基准优先级,另一个是线程的优先级。一般来说,应用线程运行在可变优先级别1~ 15范围内,如果需要进入实时优先级别16~ 31范围内来运行,必须取得更高的调度优先级特权。Windows操作系统只有一个内存页清零线程具有最低的调度优先级级别0,以便系统利用空闲时间对内存页清零。
系统中同时有多个线程存在,而处理器一次只能运行一个线程。Windows通过调度数据库来为每一个优先级的线程维护一个就绪等待队列,当处理器需要调入一个线程运行的时候,系统会从调度数据库中找到一个具有最高优先级的就绪线程,并给它分配时间。如果等待队列中有线程比正在运行的线程优先级高,运行的线程就会保存它的上下文环境并进入就绪队列,高优先级的线程恢复它的上下文环境,并进入运行状态。当一个线程进入运行状态时,它就获得了一个可以运行的时间配额。时间配额用完后,调度器会查找调度数据库看是否有就绪的线程在等待,如果有就会将等待的线程运行,而将当前的线程转入等待或者就绪态,如果没有则再分配一个时间片给这个线程。
1.参考资料:《计算机操作系统教程》作者:张尧学、史美林、张高,清华大学出版社
在处理器进行线程调度的过程中,系统通过改变线程的状态对多个线程进行有效的管理。可以用下图来表示一个线程在调度过程中的可能的状态变迁:
初始态是一个线程刚被创建时的内部状态。就绪态表示一个线程已经准备就绪,等待运行。调度器查找到线程库中处于就绪状态的线程,来决定下一个运行的线程。预备态表示一个线程已经被选择作为下一个运行的线程,如果条件满足,调度器会根据上下文环境切换到该线程。但处于预备态的线程也可能会被转换到就绪态继续等待。当调度器将上下文环境切换到一个进程,该线程就处于运行态。当分配给线程的时间片或者具有更高优先级的线程抢占CPU时,它会让出处理器。如果一个线程需要等待资源,它会进入等待态,直达所等待的资源就绪。如果一个线程已经准备就绪,但运行它所需要的核心都在外存,它就会进入就绪挂起态,等待核心栈调入内存。当一个线程执行完后就会进入终止态,对象管理器会释放相应的执行程序块资源。
当一个正在运行的线程需要等待某一对象时,包括事件、互斥状态的解锁等,会主动地让出处理器而进入等待状态。系统为每一个需要等待的对象维护了一个中具有最高优先级的线程将被分配执行时间,并开始运行。
处理器调入和调出一个线程时通过切换上下文来实现的。如果系统需要调出一个正在运行的线程时,需要保存的线程上下文信息为:运行指令的指针、用户栈和核心栈指针、线程所在进程的虚拟地址空间指针。线程的核心栈用来完成上下文的切换,调度器将调出线程的上下文信息压入该线程的核心栈,并将栈指针保存到该线程的核心进程块中。在调入一个线程执行的时候,核心栈指针指向调入栈的核心栈,并将恢复调入线程的执行上下文。如果调入的线程所在的进程需要改变,处理器会将相关的地址寄存器设置到新进程的虚拟地址空间。处理器再将控制转到调入线程的运行指令指针,并开始运行该线程。
相关文档
最新文档