您好,欢迎访问三七文档
双核与程序的关系王亿首(郑州大学信息与工程学院)摘要:伴随着计算机的发展,双核计算机已经成为了一个主流,有些程序在运行时只能使用一个内核进行工作,另外一个内核是闲置的,造成了资源的浪费。程序在运行过程中是怎样合理分配使用这两个内核进行运算,使硬件资源得到合理的使用,了解程序的运行机制,以及cpu的调度问题,采用多线程编程,合理分配硬件资源。关键词:双核程序调度操作系统进程线程1双核1.1双核的定义双核处理器即是基于单个半导体的一个处理器上拥有两个一样功能的处理器核心。换句话说,将两个物理处理器核心整合入一个核中。双核心处理器技术的引入是提高处理器性能的有效方法。因为处理器实际性能是处理器在每个时钟周期内所能处理器指令数的总量,因此增加一个内核,处理器每个时钟周期内可执行的单元数将增加一倍。将两个内核做在一个Die(晶元)上,通过直连架构连接起来,集成度更高。1.2双核的工作原理双核CPU的工作原理就是在一个处理器上集成两个运算核心,从而提高计算能力。当然如果你想让系统达到最大性能,必须充分利用两个内核中的所有可执行单元:即让所有执行单元都工作。这个就涉及到双核CPU的优化设置问题了。解决两个核心同时工作,这就涉及到内存的分配问题,双通道内存技术是解决CPU总线带宽与内存带宽的矛盾的低价、高性能的方案。双通道内存技术其实是一种内存控制和管理技术,它依赖于芯片组的内存控制器发生作用,在理论上能够使两条同等规格内存所提供的带宽增长一倍。2程序进程线程程序在编译之后实际的运行中是一个或多个进程,而进程又被分成多个线程,cpu对程序的处理是对与线程而讲的,也就是线程的调度,线程的调度与操作系统有关,而哪一个线程先被cpu调度,又是有线程的优先级来决定的。2.1操作系统操作系统(OperatingSystem,简称OS)是一管理电脑硬件与软件资源的程序,同时也是计算机系统的内核与基石,是控制其他程序运行,管理系统资源并为用户提供操作界面的系统软件的集合。2.2进程进程是操作系统结构的基础;是一个正在执行的程序;计算机中正在运行的程序实例;可以分配给处理器并由处理器执行的一个实体;由单一顺序的执行显示,一个当前状态和一组相关的系统资源所描述的活动单元。2.3线程线程(thread)是进程中某个单一顺序的控制流。也被称为轻量进程(lightweightprocesses)。计算机科学术语,指运行中的程序的调度单位。线程(thread),有时被称为轻量级进程(LightweightProcess,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。2.4进程与线程的关系线程与进程的关系,线程是一种操作系统对象,代表着一个进程中要被执行的代码的路径。每一个WIN32应用程序至少有一个线程--通常称为主线程或默认线程--但应用程序可以自由地创建其他线程来执行其他任务。进程是程序的一次动态执行过程,它对应了从代码加载、执行到执行完毕的一个完整过程,这个过程也是进程本身从产生、发展到消亡的过程,线程是比进程更小的执行单位。一个进程在其执行过程能够中,可以产生多个线程,形成多条执行线索。每条线索,即每个线程也有它自身的产生、存在和消亡过程,也是一个动态的概念。一个程序应该只有一个进程吧,但是可以拥有多个线程。可以说,一个执文件被运行后,就可以称为是一个进程了。但是进程只是存在内存中,实际上他是不会做任何事情的。这个时候,起作用的就是线程了。线程是程序的执行者,一个程序至少有一个线程,但是在多线程的操作系统中,可以有一个以上的线程。3计算机工作原理计算机工作的原理:如图(1)图(1)计算机在运行时,先从内存中取出第一条指令,通过控制器的译码,按指令的要求,从存贮器中取出数据进行指定的运算和逻辑操作等加工,然后再按地址把结果送到内存中去。接下来,再取出第二条指令,在控制器的指挥下完成规定操作。依此进行下去,直至遇到停止指令。在执行程序和处理数据时必须将程序和数据从外存储器装入主存储器中,然后才能使计算机在工作时能够自动调整地从存储器中取出指令并加以执行。程序与数据一样存贮,按程序编排的顺序,一步一步地取出指令,自动地完成指令规定的操作[1]。做一个cpu对一般程序的执行实验,初步了解cpu与程序之间的关系,分析双核情况与单核情况对程序的处理能力试验环境1)处理器;双核①Intel(R)Pentium(R)Dcpu2.80GHZ②Intel(R)Pentium(R)Dcpu2.80GHZ2)内存;480MB3)操作系统windowsXP4)实验环境.net2005实验目的验证双核的处理能力并不等单核的二倍,而是小于单核处理能力的二倍,即:外存(硬盘、光盘)输入设备(CPU)中央处理器输出设备(RAM)内存单核处理能力*2双核处理能力实验方法先将程序在单核情况下运行,记录cpu运行情况,再将程序在双核情况下运行,再次记录cpu运行情况。实验程序staticvoidMain(string[]args){doublem=999.999,n=88.88;while(true){m=m*n;}}实验结果:实验结果分析:通过图像处理分析,双核处理资源消耗是单核的4/3倍,但资源的占有程度是单核的2倍,时间处理与单核的基本相等(单核运行情况下cpu也没有达到100%),总体来说,以牺牲硬件为代价来换取换取更高效的数据处理能力和运算能力。4程序分解与cpu调度4.1程序到进程一个程序是怎样分解成多个线程的,一个程序经过编译之后形成一个可执行文件,经操作系统的执行,形成一个进程,程序运行的独立的单位,拥有自己的资源,但是他并没有做什么事情,只有当cpu开始执行程序的时候,进程将被分解成多个线程,线程只是是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器、一组寄存器和栈),但是它可与同属—个进程的其他的线程共享进程所拥有的全部资源。4.2进程到线程一个进程又是怎样分解成多个线程的,一个进程创建一个主线程,主线程有根据需要产生辅助线程,主线程创建其它线程并设定其优先级。优先级共有32级,从0到31,系统按照不同的优先级调度线程的运行。0--15级是普通优先级,线程的优先级可以动态变化。高优先级线程优先运行,只有高优先级线程不运行时,才调度低优先级线程运行。优先级相同的线程按照时间片轮流运行。16--31级是实时优先级,实时优先级与普通优先级的最大区别在于相同优先级进程的运行不按照时间片轮转,而是先运行的线程就先控制cpu,如果它不主动放弃控制,同级的或低优先级的线程就无法运行。例如:生产线上的计算机通讯接收数据.又要响应用户的输入并改变通讯传输中所传送的数据内容,根据以上对进程、线程的分析,同进程内的线程间切换比进程间的切换要短,尤其是用户级线程间的切换;同一进程内的线程间通信的比进程间的通信效率要高,考虑用一个应用程序(一个进程)、两个线程主线程接收用户的输入并通知辅线程,辅线程由主线程刨建并不停地向五条生产线要历史数据当辅线程接收判主线程的信息。在主线程中创建辅线程优先级tpHlgher困辅线程作为不停地通讯,而主线程只接收用户输入[2]。4.3cpu调度Cpu对多个线程的调度,操作系统会负责为每个线程分配cpu时间。一个线程所分配到的cpu时间主要取决于该线程的优先级,而线程的优先级又取决于进程的优先级类和线程本身的相对优先级。调度程序运行时,要在所有可运行状态的进程中选择最值得运行的进程投入运行。在每个进程的task_struct结构中有以下四项:policy、priority、counter、rt_priority。这四项是选择进程的依据。其中,policy是进程的调度策略,用来区分实时进程和普通进程,实时进程优先于普通进程运行;priority是进程(包括实时和普通)的静态优先级;counter是进程剩余的时间片,它的起始值就是priority的值;由于counter在后面计算一个处于可运行状态的进程值得运行的程度goodness时起重要作用,因此,counter也可以看作是进程的动态优先级。rt_priority是实时进程特有的,用于实时进程间的选择。函数goodness()来衡量一个处于可运行状态的进程值得运行的程度。该函数综合了以上提到的四项,还结合了一些其他的因素,给每个处于可运行状态的进程赋予一个权值(weight),调度程序以这个权值作为选择进程的唯一依据。因此进程的优先级可以由程序来设置,在程序运行过程中,优先级又会动态的改变。线程优先级别是从两个不同的方面来分配的:一个是从Win32应用程序编程接口,另一个是从Windows的内核。Win32API的进程在创建时所分配的优先级包括:Real-time,High,AboveNormal,Normal,BelowNormal,andIdle,进程中各个线程的相关优先级包括:Time-critical,Highest,Above-normal,Normal,Below-normal,Lowest,andIdle。应用程序默认的优先级为Normal。运行在内核模式的线程可以被用户模式的线程抢占掉,这与线程的状态无关,优先级是决定性因素。综上所述,在程序中设置进程与线程的优先级,并不能完全决定程序执行时对cpu的调度,因为优先级还是动态变化的,具体的方法由操作系统来决定,不同的操作系统又会采用不同的算法改变优先级,以达到不同的目的。例如实时性操作系统等。了解一些基本的知识后在深入分析一下双核机器上运行程序的效果,还做前边的实验,不过这次改成多线程。试验环境1)处理器;双核①Intel(R)Pentium(R)Dcpu2.80GHZ②Intel(R)Pentium(R)Dcpu2.80GHZ2)内存;480MB3)操作系统windowsXP4)实验环境.net2005实验目的验证在多线程情况下双核的分配情况,以及处理的效率。实验方法将程序运行在双核的条件下,记录cpu情况,以及时间情况,运行单核条件下,cpu情况,以及时间情况。实验程序staticvoidMain(string[]args){ThreadStartthreadstart=newThreadStart(done);Threadthread=newThread(threadstart);thread.Start();done();}publicstaticvoiddone(){doublem=999.999,n=88.88;while(true){m=m*n;}}实验结果实验分析:与上一个实验相比,在多线程情况下,才能更好的体现出双核的意义,在仅有一个程序运行的时候,双核与单核的处理时间基本相等,只是把以前本应该由一个核来处理的任务分给两核来处理,从程序的执行来说还是串行,在多线程情况下,每个进程是一个独立的实体,基于每个进程产生的线程,由不同的核来处理,相对于单核的串行处理来说,双核对线程进行并行调度,减少了程序的执行时间,从理论上来说,应给能过将其执行速度减少为单核处理的一半,但由于总线分配,资源争夺等因素,很难达到理论的结果,但在一定程度上来说已经加快了程序的运行。从以上对的对比分析来说,在编程时,如果程序在多核处理器下运行,这时就要考虑采用多线程编程,以达到合理使用处理器,加快程序的运行速度。[1]冯.诺依曼原理[2]王群蔡朝晖浅谈进程与线程的区别[3]程昌品张愉荣VC实现Windows操作系统下多线程的调度与应用[4]JeffreyRichterMicrosoftPress机械工业出版社《Windows核心编程》[5]王群蔡朝晖浅谈进程与线程的区别[6]周晓慧王建中李强王申康现代操作系统中的进程、线程及在WindowsOS下的应用
本文标题:双核与程序的关系
链接地址:https://www.777doc.com/doc-2614705 .html