电脑CPU是如何在WINDOWS下处理多任务的?
发布网友
发布时间:2022-04-23 22:21
我来回答
共6个回答
热心网友
时间:2022-04-03 08:41
windows任务处理可分为两类:协同式多任务和抢先式多任务处理模式。
1)使用协同式多任务处理模式,CPU的分配直接由应用程序决定,所以系统性能好坏取决于应用程序设计好坏。而运行抢先式多任务处理模式,各进程占用CPU的时间由系统调度程序决定,当调度程序检测出有比当前任务优先级更高的程序事件后,暂停当前任务并将CPU时间分配给优先级更高的进程。所有的Win16应用程序都在同一台虚拟机上运行,各程序之间采用的是协同式多任务处理。每个Win32应用程序和MS-DOS应用程序都具有自己专用的虚拟机,其进程按抢先式多任务处理方式运行。
2)
Windows中的多任务调度策略
Windows中调度的任务有两种状态:运行状态和等待状态。正在运行的任务处于运行状 态,当该任务把CPU控制权交给其他任务后,就被置为等待状态。为了便于任务调度和保存每个任务运行的参数,Windows在装载应用程序时,由LoadMole()函数创建一任务数据库(简称TDB),该任务数据库在内存中是以链表的形式存在,TDB链表中的结点记下了每个任务切换时的堆栈指针、中断处理程序地址及此任务对应的模块句柄和实例句柄等
Windows就是根据TDB链表中存放的各个任务的数据信息来完成任务调度的。 对Windows而言,CPU属于临界资源,在某一时刻只有一个任务独占CPU。为了合理分配CPU,提高系统的性能,Windows根据任务是否存在等待事件来进行任务调度。如果当前任务没有事件可供处理,那么就应该把控制权交给其他具有等待事件的任务。为了记录每个任务的等待事件个数,在TDB链表中,为每个任务建立一个事件计数器(TDB偏移6处的值),系统调度程序就是根据该计数器来进行任务调度。我们可以通过Windows中未公开的核心函数PostEvent()把指定任务的事件计数器值增1,人为地伪造一个事件,引起相应的任务被唤醒。 当有多个任务都具有等待事件时,Windows采用的最高优先级(HPF)算法进行调度。为此Windows定义了任务的优先权值:范围从-32到+15,任务的优先权值越小,它的优先级就越高,其任务结点在TDB链表中的位置也越靠前。而在实际应用中,绝大多数Windows应用程序的优先值都是0,若优先权值相同,则按先来先服务的原则进行。任务的优先权值只对具有等待事件的任务生效,如果一个任务没有等待事件,即使优先权再高,也不会被调度。 若当前任务所分配的时间片用完或当前任务再无等待事件,任务调度程序就要释放当前任务的控制权,把控制权交给已选中的可调度任务。但在WindowsAPI中并没直接公开这样一个函数,许多具有释放控制权功能的函数都被隐藏在GetMessage()或PeekMessage()这样的消息函数中,当应用程序在消息环中没有消息可供接收时,它就会把控制权交给别的任务,以防止当前任务进入死循环。当前任务释放控制权以后,如果没一个任务被调度程序选中,调度程序就会使Windows进入系统空闲状态,相应的电源管理软件就会使整个系统处于低能耗的睡眠状态,直至有任务被唤醒而重新开始正常运转
知识点延伸--多任务处理
多任务处理是指用户可以在同一时间内运行多个应用程序,每个应用程序被称作一个任务.Linux、windows就是支持多任务的操作系统,比起单任务系统它的功能增强了许多。当多任务操作系统使用某种任务调度策略允许两个或更多进程并发共享一个处理器时,事实上处理器在某一时刻只会给一件任务提供服务。因为任务调度机制保证不同任务之间的切换速度十分迅速,因此给人多个任务同时运行的错觉。多任务系统中有3个功能单位:任务、进程和线程。
热心网友
时间:2022-04-03 09:59
运行速度的提升是提高CPU性能的最重要途径之一,以英特尔的CPU为例,从1993年的Pentium 60MHz至2002年11月推出的Pentium 4 3.06GHz,在不到10年内运行速度提高了50倍。除了更高的运行速度和全新的CPU架构,CPU的研发者还在CPU中应用了其他多种能提高CPU性能的技术。英特尔在其Pentium 4 3.06GHz处理器上,就采用了一项全新的能够大幅度提高CPU性能的技术-英特尔超线程技术(Hyper-Threading Technology)。
去年,我们曾经在“专题测试”栏目中介绍过双CPU电脑的强劲性能(本刊,2002年2月,第60页),而在本文中我们将看到:英特尔是如何应用超线程技术让一个物理CPU在实际应用中表现为两个逻辑CPU,从而充分利用一个CPU芯片的运算资源大幅度提高CPU性能。此外,通过对英特尔超线程技术的分析,还将让我们很好地了解应用软件在现代CPU中是如何运行的。
超线程技术与关键词
以下我们先对贯穿本文的一些关键词进行简单的介绍:
并行运算(Concurrency):即电脑同时执行多项结构不同的运算处理。并行运算可出现在同一个应用中的多任务过程,或多个应用中的多任务过程。例如在同一时刻进行计算、硬盘访问和网络访问。
多处理器(Multi-processor):在一台电脑的系统总线上包含不只一个CPU。对于多CPU电脑系统,操作系统必须能检测到不只有一个CPU存在,才能发挥多CPU的作用。
线程(Thread):线程是在一个程序中可被独立运算处理的那部分程序,它可以和其他部分程序在同一时刻被运算处理。一个线程与一个完整的运算处理过程或应用(多线程应用)通常存在着多对一的关系。
英特尔NetBurst微架构:英特尔应用于其Pentium 4的CPU芯片架构。
英特尔超线程技术(Hyper-Threading Technology):在一个CPU中增加电路,让它以两个逻辑CPU的形式出现。其结果是:物理上的一个CPU,在操作系统和多线程应用中以两个逻辑CPU的形式表现出来,每个逻辑CPU可以执行多线程应用中的一个线程。超线程技术让单个CPU可以如同两个CPU那样并行处理数据指令,而不是如常规单CPU系统那样一次只能处理一条数据指令,超线程设计提高了系统的性能和效率。
线程的执行(Execution of Threads):遇到多线程应用程序,操作系统会将要执行的线程安排给多CPU电脑系统中的每个CPU进行运算处理。如果操作系统检测到电脑中含有超线程技术的CPU,它会将线程安排给每个逻辑CPU和物理CPU。
英特尔超线程技术
运行环境的比较-单CPU电脑
在一个常规的单CPU电脑系统中,尽管多个应用程序可以和操作系统共驻于内存之中,但在每一时刻只有一个应用程序可以利用CPU的运算资源,各个应用
软件中的程序编码排队等待CPU的执行处理。下图为应用软件的线程编码在常规单CPU电脑上的执行情况的三个示意图。在每个示意图中,左边部分示意了CPU正在
处理(图中彩色部分)和等待CPU处理(图中深灰色部分)的应用,右边的部分示意了线程编码在CPU上的执行情况(彩色部分代表CPU正运算处理的过程)。
运行环境的比较-双普通CPU电脑
对于双CPU电脑,多线程编码可以在两个CPU上同时执行,两个应用程序可以同时应用CPU的运算资源。两条编码可以在两条
并行的路径上同时连续执行,这大大提高了系统总运算处理能力,但专门为个人用户所设计的双CPU电脑系统并不多见。下
图为应用软件的线程编码在常规双CPU电脑上的执行情况的三个示意图。
运行环境的比较-单个拥有超线程技术CPU的电脑
当一个CPU被检测出是一个拥有超线程技术的CPU的时候,操作系统可以对那些等待运算处理的线程进行调度,将线程安排给每一个逻辑CPU,就如同在双CPU系
统上那样。对于应用了超线程技术的CPU系统,两个线程的编码可以在同一时刻在一个CPU上被执行处理,这就让多个应用程序可以同时利用CPU资源,因此拥有超
叱碳际CPU的系统的用户不必再添加第二颗CPU就可以获得性能的提升。下图为应用软件的线程编码在单个拥有超线程技术CPU电脑上的执行情况的三个示意图。
运行环境的比较-单个拥有超线程技术CPU的电脑
当一个CPU被检测出是一个拥有超线程技术的CPU的时候,操作系统可以对那些等待运算处理的线程进行调度,将线程安排给每一个逻辑CPU,就如同在双CPU系
统上那样。对于应用了超线程技术的CPU系统,两个线程的编码可以在同一时刻在一个CPU上被执行处理,这就让多个应用程序可以同时利用CPU资源,因此拥有超
叱碳际CPU的系统的用户不必再添加第二颗CPU就可以获得性能的提升。下图为应用软件的线程编码在单个拥有超线程技术CPU电脑上的执行情况的三个示意图。
超线程技术
目前许多操作系统和电脑应用程序(如互动游戏等)是多线程设计的,它们可通过多CPU系统来获得更好的运行性能。在这些系统中,不同的CPU并行对编码进行处理运算。
在应用了英特尔的超线程技术后,一颗拥有超线程技术的CPU可以同时处理两个线程的编码,提高了多线程编码在单个CPU上的性能。
CPU资源的应用
英特尔的超线程技术提高了多线程应用软件的运行性能,这种提高是通过对具有英特尔NetBurst微架构的芯片资源的有效利用来达到的。
一条基于英特尔IA32常规混合指令集的普通线程编码,通常只能利用了大约35%的英特尔NetBurst微架构处理资源。为了同时控制和调度两条线程编码,通过在CPU芯片上加入必要的逻辑和资源控制器,超线程技术让那些没有充分利用的资源可被用于第二个线程的编码处理,提高了CPU的总运算处理性能和电脑系统的总性能。
超线程技术在一个单芯片封装中提供了第二个逻辑CPU(两个逻辑CPU的运行频率和物理CPU的运行频率相同),以此来提高CPU的运算处理性能。而对于含有多个拥有超线程技术CPU的系统则可以获得更高性能的提升。
超线程技术的工作原理
多线程应用
事实上,所有现代的操作系统(如Microsoft Windows和Linux)将它们的运算处理任务分为进程(processes)和线程(threads),这些进程和线程可被独立地调度和分派给CPU进行运算处理。许多高性能应用诸如数据库处理引擎、科学计算程序、工程工作站工具、多媒体应用和大型图像处理、网络游戏中的部分运算处理过程,使用CPU内的同一部分运算资源进行运算处理。
为了提高CPU的运算处理性能,软件开发者将这些程序设计成可以在双CPU(DP,al-processor)或多CPU(MP,multiprocessor)环境下运行。进程和线程可以在好几个物理CPU中被调度和分派。
对于多线程应用,来源于几个不同线程的指令可被几个CPU同时处理。而对于拥有超线程技术的CPU,一个CPU可以同时执行处理两个线程,超线程技术通过无序调度让CPU中的那些运算功能单元在每个一个运行周期中尽可能多地处于工作状态。
英特尔NetBurst微架构运算处理管线
如果没有应用超线程计算技术,NetBurst微架构在其运算处理管线中只能处理单条线程(右图中,运算处理管线为单一颜色示意只处理一条线程),而基于常规混合指令集的普通线程编码只能利用35%的NetBurst微架构的运算资源。
拥有超线程技术的英特尔NetBurst微架构运算管线
英特尔超线程技术通过复制、划分、共享NetBurst微架构的资源让一个物理CPU中具有两个逻辑CPU。
资源的复制为两条线程提供必要的运算资源,资源的划分将运算资源划分给正在运算的不同线程,资源共享利用相同的资源同时运算处理两个线程。
对于拥有超线程技术的英特尔NetBurst微架构运算管线,每一部分的运算处理资源可以被复制、划分、共享来执行运算处理管线上的两个线程。在左图中,运算处理管线为两种颜色示意同一条运算处理管线可以同时处理两条线程。
英特尔NetBurst微架构管线
当CPU微架构对通过其运算管线的编码进行处理时,CPU中的每个运算处理功能单元在不同的位置对编码进行调度选择。
当每条线程通过运算管线时,CPU处于运算管线不同位置的选择指针(上图中的彩色圆点示意了CPU中的选择指针)决定在下一个管线中将利用哪个逻辑运算处理单元的资源,选择指针选择一个逻辑运算处理单元的运算结果并将其输入到下一步的运算处理管线中。
任务的调度
操作系统将线程编码调度到每个CPU。当一个线程没有被调度时,相关的逻辑CPU处于闲置状态。
当一条线程被调度到一个逻辑CPU(LP0)上时,超线程技术动用必要的CPU资源来执行这条线程。
当第二条线程被调度到另一个逻辑CPU(LP1)上时,运算资源将被复制、划分、共享来处理第二条线程。当每条线程完成后,操作系统将没用的逻辑CPU闲置,释放出运算处理资源。
为了对拥有超线程技术的多CPU系统进行性能优化,操作系统必须在将线程优先调度到不同的实物CPU上,然后再考虑不同的逻辑CPU。
下图通过CPU架构示意图上的颜色示意CPU对线程的运算。超线程技术通过对英特尔NetBurst微架构管线上的运算资源进行复制、划分、共享,在一个物理CPU上提供两个了逻辑CPU。操作系统将线程调度到每个逻辑CPU上,就如同在双CPU或多CPU系统上。当系统将进程调度和安排到运算管线中时,必要的资源被用于进行两条进程运算处理。CPU中的运算处理功能单元在管线的一定位置对线程进行选择和处理。
热心网友
时间:2022-04-03 11:34
这是操作系统的工作。他可以把CPU的时间分成很小的片段,然后给每个片段一次执行的机会,这样,几个程序轮流执行。我们感觉上是同时执行的,实际上还是一个一个的。只不过我们感觉不到这种切换。
http://zhidao.baidu.com/question/13928724.html
http://www.baidu.com/s?ct=0&ie=gb2312&bs=cpu+%B5%F7%B6%C8&sr=&z=&cl=3&f=8&wd=%B4%A6%C0%ED%BB%FA%B9%DC%C0%ED
热心网友
时间:2022-04-03 13:25
一个程序可以分成很多条指令,程序的执行并不是说执行一个程序就会一直把这个程序的所有指令从头到尾一次性执行完,而是和其它程序的指令间插着执行,因为CPU执行的速度很快,所以我们感觉好像是同时运行的,这涉及到很多不同的调度算法
热心网友
时间:2022-04-03 15:33
时间段,第一个程序用0.1秒,然后执行第二个程序0.1秒,在换成第一个程序0.1秒,人是感觉不出来的,基本就是这个原则
热心网友
时间:2022-04-03 17:58
a,