专利名称:对多处理器系统进行负荷平衡的装置和方法
技术领域:
本发明系针对计算机系统中的资源分配。更具体言之,本发明系针对根据系统管理员设定的某些限制或使用策略对计算机系统的资源进行负荷平衡的方法和装置。
注意,进程是一个程序。当一个程序执行时,不严格地称其是一个任务。在多数操作系统中,在任务和程序之间存在一对一的关系。然而,有些操作系统容许将一个程序分割成为多个任务或线程。这种系统称为多线程操作系统。为简单起见,下面线程和进程可以互换使用。
调度器是一个可以协调计算机系统的共享资源(比如,CPU)的使用的软件程序。调度器通常使用先进先出(即FIFO)、轮转法或后进先出(LIFO)、优先级排队、树等等算法或多个算法的组合来进行调度。基本上,如果一个计算机系统具有3个CPU(CPU1、CPU2和CPU3),每个CPU将相应地具有一个就绪待处理队列或运行队列。如果用来对运行队列分配进程的算法是轮转法并且如果生成的最后进程是分配与CPU2相关联的队列,则生成的下一个进程将分配CPU3的队列。而生成的下一个进程将分配与CPU1相关联的队列,依此类推。这样,调度器的设计可使每个进程公平共享计算机系统的资源。
有时系统管理员可能希望不同的进程对资源的共享是不同的。在此场合,与调度器相结合使用工作负荷管理器(WLM)。WLM对每个进程分配一个数字表示一个进程可利用计算机系统的资源的时间的百分比。每当一个进程使用资源时,减小其被分配的数字。这一方案容许具有较低分配数字的进程仍然可以利用资源。
在某些时候,将这一概念应用于各类进程。在此情况下,一类进程可以是属于一组特定用户的一组进程。于是,恰好与给一个进程分配一个数字的情况一样,当一类进程利用资源时,分配给此类进程的数字减小。同样,这一方案也是保证具有较低分配数字的那些类进程有机会利用资源。
然而,问题是有时在一个例如具有两类进程(每一类进程都具有不同的分配数字)的两处理器系统中,最终是一个处理器处理其队列中的一类进程,而另一处理器处理其队列中的另一类进程。当出现这种情况时,计算机系统的两个处理器的利用效率可能不如系统管理员希望的那样高。特别是,一个运行队列中的进程将得到比容许其得到的更多的处理时间。
这样,需要有一种系统、装置和方法来保证系统的每个队列永远包含分配数字不同的各类进程的混合以保证系统管理员建立的处理器使用策略可以得到坚持。
在一个
具体实施例方式
中,按类组织线程,每一类由一组相关的线程构成。每一类都与遵循使用策略的优先级相关联。此优先级用于修改分配给此类中的每个线程的调度优先级。根据类优先级的值,类和该类中的每个线程可处于多个优先级区域或范围之一中。本发明周期性地判断一运行队列中一个优先级区域内的线程数另一运行队列中该优先级区域内的线程数相比是否超过一个预先确定的数值。如果是这样,系统就被认为是负荷失衡。本发明就力图均衡此系统的负荷,从线程数大的运行队列中移动该优先级区域内的一个线程送到线程数较小的运行队列。如果此系统在最高优先级区域的负荷是平衡的,本发明将通过检查了解系统在次高优先级区域的负荷是否平衡,依此类推。
图1为示出根据本发明的分布式数据处理系统的示例性框图。
图2为根据本发明的服务器装置的示例性框图。
图3为根据本发明的客户机的示例性框图。
图4示出可由系统管理员设计的资源使用策略。
图5示出了类优先级如何影响运行队列中的线程。
图6示出了由3组不同的用户共享的计算机系统的运行队列。
图7为可用来实现本发明的软件程序的流程图。
在示例中,服务器104以及存储单元106与网络102连接。此外,客户机108、110和112与网络102相连。这些客户机108、110和112可以是,例如,个人计算机或网络计算机。在示例中,服务器104向客户机108、110和112提供数据,如引导文件、操作系统映像及应用。客户机108、110和112是服务器104的客户机。网络数据处理系统100可包括附加的服务器、客户机和其他未示出的装置。在示例中,网络数据处理系统100是由网络102代表使用TCP/IP协议集互相通信的全世界网络和网关集合的因特网。在因特网的中心是在主节点或主计算机之间的主干高速数据通信线路,由成千上万个传送数据和消息的商用、政府、教育及其他计算机系统组成。当然,网络数据处理系统100也可以由不同类型的网络实现,比如像内联网、局域网(LAN)或广域网(WAN)。图1的意图是作为一个示例,而不是对本发明的体系结构的限制。
下面参照图2,图2示出的是根据本发明的优选实施例的数据处理系统的框图,此系统,可以作为服务器,例如图1中的服务器104。数据处理系统200可以是对称的多处理器(SMP)系统,包含多个与系统总线206连接的处理器202和204。另一种方案是采用单处理器系统。与系统总线206相连接的还有可提供与局部存储器209的接口的存储器控制器/高速缓存208。I/O总线桥210与系统总线206相连接并提供与I/O总线212的接口。存储器控制器/高速缓存208和I/O总线桥210可如图所示地集成。
与I/O总线212连接的外围部件互连(PCI)总线桥214可提供与PCI局部总线216的接口。可以有多个调制解调器与PCI局部总线216相连接。典型的PCI总线设备可支持4个PCI扩展槽或附加连接器。至图1的网络计算机108、110和112的通信链路可通过藉助附件电路板连接到PCI局部总线216的调制解调器218和网络适配器220来提供。附加的PCI总线桥222和224可提供对附加的PCI局部总线226和228的接口,从这些接口附加的调制解调器或者网络适配器可以得到支持。以这种方式,数据处理系统200允许与多个网络计算机相连接。存储器映像图形适配器230和硬盘232也可以或者直接或者间接地与I/O总线212相连接,如图所示本技术领域的人员可以理解,图2所示的硬件是可以变化的。比如,其他的外围设备,如光盘驱动器等等,也可以用来代替所示的硬件或者与其一起使用。上述的示例并不意味着对本发明进行系统结构上的限制。
图2所示的数据处理系统也可以是,例如,IBM的e-Server pSeries系统,纽约阿芒口国际商业机器公司的产品,可运行先进交互执行(AIX)操作系统或LINUX操作系统。
下面参考图3,图中示出可以应用本发明的数据处理系统的框图。数据处理系统300是客户计算机的一个示例。数据处理系统300采用外围部件互连(PCI)局部总线系统结构。虽然示出的示例采用PCI总线,但是也可以采用其他的总线结构,如加速图形端口(AGP)和工业标准体系结构(ISA)。处理器302和主存储器304通过PCI桥308与PCI局部总线306相连接。PCI桥308也可包含应用于处理器302的集成存储器控制器和高速缓冲存储器。至PCI局部总线306的附的连接,可以通过元件直接互连或通过附加电路板来实现。在上述示例中,局域网(LAN)适配器310、SCSI主机总线适配器312和扩展总线接口314通过元件直接互连连接到PCI局部总线306。与此相对,音频适配器316、图形适配器318和音频/视频适配器319通过插入扩展槽的附加电路板与PCI局部总线306相连接。扩展总线接口314可提供到键盘和鼠标适配器320、调制解调器322和附加存储器324的连接。小型计算机系统接口(SCSI)主机总线适配器312可提供到硬盘驱动器326、磁带驱动器328和CD-ROM驱动器330的连接。典型的PCI局部总线装置可以支持三个或者四个扩展槽或附加连接器。
操作系统在处理器302上运行并且用来协调和提供对图3中的数据处理系统300内的各种部件的控制。操作系统可以是市售的操作系统,如微软公司出售的Windows 2000。面向对象的编程系统,如Java,可以与操作系统配合运行并提供从在数据处理系统300上执行的程序或应用对操作系统的调用。“Java”是Sun微系统公司的商标。操作系统的指令、面向对象的操作系统、应用或程序存储在存储装置,如硬盘驱动器326中,并且装载到主存储器304由处理器302执行。
本领域的人员可以理解,图3所示的硬件可随实现而改变。其他的内部硬件或外设,如闪速ROM(或等效的非易失性存储器)或光盘驱动器等等,也可以用来代替图3所示的硬件或者与其一起使用。同样,本发明的进程也可应用到多处理器数据处理系统。
另外一个例子,数据处理系统300可以是一个独立系统,配置成为可以引导而无需依靠某种网络通信接口,不管数据处理系统300是否包含某种网络通信接口。再举一个例子,数据处理系统300可以是个人数字助理(PDA),其配置为具有ROM和/或闪速ROM存储器,用来提供存储操作系统文件和/或用户生成的数据的非易失性存储器。
图3中的示例和上述的示例并不代表对本发明的体系结构的限制。比如,数据处理系统300除了采取PDA形式之外,也可以是笔记本计算机或手持计算机。数据处理系统300也可以是信息站设备或web设备。
本发明可以提供一种装置、系统和方法来保证多处理器系统的每个运行队列包含不同线程类中的进程,每个类具有不同的优先级数,从而保证建立的使用策略可以得到遵守。对于图1的客户机108、110和112或对于服务器104或对于服务器104及客户机108、110和112两者,本发明也可以是局部性质的。因此,本发明可以驻留在计算机系统所使用的任何数据存储介质(即软盘、CD盘、硬盘、ROM、RAM等等)之上。
图4示出可由系统管理员设计的资源使用策略。如图4A所示,此资源使用策略的开发是针对一个大学中的3个系(例如物理系、化学系和数学系)共享的计算机系统(例如服务器)。根据此策略,物理系400的用户402得到60%的计算机系统CPU时间,化学系410的用户412得到30%的计算机系统CPU时间,而数学系420的用户422得到10%的计算机系统CPU时间。为了互相区别各组线程,将其标记为类。具体说,属于物理系的用户的线程标记为A类,属于化学系的用户的线程标记为B类,而属于数学系的用户的线程标记为C类。
此资源使用策略的一个附加策略是区域分布策略。此区域分布策略示于图4B。其中显示出两个区域,区域1和区域2。这一分布策略将优先级在0-14之间的所有类归类到区域1中,而将优先级在15-30之间的所有类归类到区域2中。这样,新创建的属于数学系用户的线程将落在区域1中,而属于物理系或化学系用户的线程将落在区域2中。
与现有技术中一样,生成的每个线程具有默认的优先级。此默认优先级对于所有的线程都相同。然而,当线程置于运行队列中时,其优先级根据其所属的类进行调节。例如,对A类线程的默认优先级将加上30。与此类似,对B类线程的默认优先级将加上20,而对C类线程的默认优先级将加上10。这样,运行队列中的线程的总优先级为P总=P默认+P类。
图5示出类优先级如何影响运行队列中的线程。在图5中,处理器的优先级空间500分割为优先级数0、10、20和30。还示出A类线程520、B类线程540和C类线程560。线程的P默认分配零(0)值。于是,所有的线程都从同一优先级零(0)开始。将优先级增量ΔA530,30加在A类线程之上,将优先级增量ΔB550,20加在B类线程之上,而将优先级增量ΔC570,10加在C类线程之上。于是,处理器对待A类线程将会优先于B类线程。与此类似,处理器对待B类线程将会优先于C类线程。
在现有技术中,在线程受到处理时,其优先级也减小。这一方案容许运行队列中的所有线程可以公平地得到处理器的注意。在本发明中也采用同一方案。即在线程受到处理时,其P默认将减小。这容许类内的线程互相公平地竞争。此外,在一类线程受到处理时,类优先级也同样地减小。例如,由于A类线程具有比B类线程和C类线程高的优先级,A类线程将在其他两类之前处理。但是,在A类线程受到处理时,A类优先级30也将减小,直到达到20或20以下。此时,A类和B类线程两者都将受到处理。两类的优先级将减小到10或10以下,到那时所有三类中的线程将受到处理。
在类优先级减小时,类可能从一个区域进入另一个区域。于是,类优先级可看作是流动的。当类中的线程受到处理时,优先级减小,而当线程未受到处理时,优先级增加,如在使用策略中所示。
图6示出共享的计算机系统的运行队列。其中假设计算机系统具有两个CPU和两个运行队列,每个运行队列都与一个CPU(即CPU0600和CPU1650)有联系。还假设每一类的优先级增量已经加到线程上。系统中存在三类线程。具体地说,与CPU0600相联系的运行队列既包含A类610的线程,也包含B类620的线程。与CPU1相联系的运行队列包含C类630的线程。
在运行中,当创建一个线程时,工作负荷管理器根据其属于的用户判断线程的类,而调度器利用放置算法(比如,轮转法)将线程放置于运行队列中。当线程受到处理脱离运行队列并且新的线程放置到运行队列中时,可能出现线程按照图6所示分布到系统的场合。
图6中线程的分布并不理想,因为由系统管理员设定的使用策略(见图4A)将不会得到坚持。例如,由于C类线程是与CPU1650相联系的运行队列中的唯一的线程,这些线程将得到50%的系统处理时间。显然,这比容许其得到的10%高得多。一种保证其一点儿都不会得到多于容许其得到的处理时间的方法是使运行队列中存在另一类线程。这将促使两类线程之间的竞争。的确,线程的理想分布是使每个运行队列中包含所有三个不同类的线程。
保证建立的使用策略得到坚持的一种方法是周期地检查每个运行队列来判断其中是否至少存在不同的两类线程(即一个优先级较高的类和一个优先级较低的类)。如不是如此,则应该在该运行队列中放置一个具有比现在存在于其中的类优先级高的不同类的线程。另外,如果尽管在运行队列中具有这样不同的两类线程,但两类中的任何一类或两类仍然得到高于容许的处理时间,那就需要在运行队列中再放置一个具有更高的类优先级的不同的类的线程。
为了检查运行队列中的所有的线程来判断其中是否每一个都包含至少两类不同的线程,需要花费很多时间并且使CPU高强度运行。结果,本发明每0.1秒检查线程的一部分以便了解其是否分布于全部运行队列中。本发明利用此前引入的区域概念(见图4B)来判断对哪一部分线程进行调查。具体说,本发明将在每一个运行队列中包括相同数目的特定区域中的线程的系统定义为良好平衡系统。如果两个A类线程、两个B类线程和两个C类线程存在于两个处理器中的每一个的运行队列中(见图6B),此系统将是平衡系统。此系统之所以是平衡系统是因为在两个运行队列中都有四个区域2中的线程和两个区域1中的线程。
如果系统不是平衡系统(即,如果一个运行队列比另一个运行队列具有更多的某一特定区域中的线程),则线程将从具有较大线程数的运行队列转移到在该区域中具有较小线程数的运行队列。应该指出,此系统是很强的动态系统。就是说,在任何时刻,一个线程可以放置到运行队列中,而一个或多个线程可以受到处理脱离运行队列,而一个类或多个类可从一个区域转移到另一个区域等。于是,因为这一动态机制,本发明在一个时候只处理一个区域,并且当系统不平衡时只有一个线程从一个运行队列中转移到另一个运行队列。
再参考图6A。当本发明检查区域2时,将会发现在该区域中有八(8)个线程,不过其全部都是在与CPU0610相联系的运行队列中。因此,系统将被确定为不平衡的。结果,一个线程将从与CPU0相联系的运行队列转移到与CPU1相联系的运行队列,并且该过程结束。
在此场合,转移的线程是A类还是B类线程实际上没什么关系,因为两类都早在区域2中。如果系统是平衡的并且在此进程中所有的B类线程从与CPU0相联系的运行队列转移到与CPU1相联系的运行队列,则B类线程可能会启动取得大量的处理时间(因为其类优先级高于C类线程)。当发生这种情况时,其类优先级将开始减小。如果其类优先级减小到足够使其类优先级现在进入区域1,系统将会再变成为不平衡的。此时,A类线程将从一个运行队列转移到另一个运行队列以使系统重新变为平衡系统。
在使区域2平衡之后,区域1将受到检查。在此场合,将会发现系统是非平衡系统,因为所有的C类线程(请注意C类是区域1中唯一的一类)处于与CPU1相联系的运行队列中。结果,C类线程将每次转移一个直到两个运行队列都包含相同数目的C类线程。
在我们的示例中,理想的线程分布是示于图6B中的情况。在图6B中,每个运行队列都包含相同数目的各类线程。于是,假设线程既没有放置于运行队列中,也没有进行处理脱离运行队列,则系统将会永远保持平衡。如果一个类从一个区域转移到另一个区域,该类中的所有线程将会发生迁移。因此,系统将会继续保持平衡。
图7为可用来实现本发明的软件程序的流程图。当计算机系统打开或重置时,此软件程序启动(步骤700)。此程序监视每个运行队列中的每个类中的线程数。此程序做到这一点的方法是通过对运行队列每秒取样100次以便得到在每个运行队列中每个类中的平均线程数。之后,每0.1秒此过程利用线程类来判断一个运行队列最高区域中的线程数(例如区域2)平均来讲是否比另一运行队列中同一区域(即区域2)中的线程数大1.5个线程。如果是,则此系统将被认为是不平衡的。此过程将尝试通过将在该区域中具有最高线程数的运行队列中的一个线程转移到在该区域中具有最低线程数的运行队列中来平衡此系统。
如前所述,因为此系统具有很强的动态性,此过程将不能保证此系统的确是平衡的(即此过程将不能保证在每个运行队列中在该区域都存在相同数目的线程)。此外,因为这需要花费很多时间并且使CPU高强度运行来保证从所有区域来看此系统是平衡的,此过程将在此中止。
这样,此过程永远从最高区域开始。如果最高区域是不平衡的,则此过程将尝试平衡此区域并在该处中止。如果最高区域是平衡的,则此过程将会调查次高区域。每个区域都将受到调查,从最高的到最低的,直到一个运行队列的线程数比另一运行队列的中的线程数大1.5个线程。当发生这种情况时,将把具有最高线程数的运行队列的一个线程转移到具有最低线程数的运行队列中而此过程将结束。如果在所有的运行队列中所有的区域中的线程数都相等,则此过程将结束而不将任何线程从一个运行队列转移到另一个运行队列(步骤700-714)。
对本发明的上述描述的目的在于显示和描述,而并不企图包罗一切或局限于所公开的形式的本发明。对于本技术领域的人士各种改变和变形是显而易见的。本实施方式的选择和描述是为了最好地说明本发明的原理,实际应用,并且使本技术领域的其他人士理解本发明的可适应预期的各种实际利用的各种改型的各种实施方式。
权利要求
1.一种对多处理器系统进行负荷平衡的方法,所述系统的构成包括多个处理器运行队列,每个运行队列用于保持待处理的线程,此方法的构成包括对每个创建的线程分配一个优先级并且将创建的线程放置于运行队列中,分配的优先级将线程归类到一个区域中;判断系统是否负荷不平衡,如归类到一个运行队列中的一个区域中的线程数多于另一运行队列中的同一区域中的线程数,系统就是负荷不平衡的;以及对系统进行负荷平衡处理,如果系统是负荷不平衡的,可通过将在该区域中具有较高线程数的运行队列中的线程转移到在该区域中具有较低线程数的运行队列中来平衡此系统。
2.如权利要求1所述的方法,其中按类来组织每个队列的线程。
3.如权利要求2所述的方法,其中根据线程所属于的多处理器系统的用户,来确定线程所属于的类。
4.如权利要求3所述的方法,其中分配的优先级是线程属于的类的优先级。
5.如权利要求4所述的方法,其中当类中的线程受到处理时,类优先级减小,而当类中的线程在容许的范围内未受到处理时,其类优先级增加。
6.如权利要求5所述的方法,其中当类优先级减小或增加时,线程可重新归类到另一个区域。
7.如权利要求6所述的方法,其中如果一个运行队列的一个区域中的线程数超过另一个运行队列的同一个区域中的线程数一个预定的数目以上,则系统是负荷不平衡的。
8.一种在计算机可读介质上用来对多处理器系统进行负荷平衡的计算机程序产品,所述系统的构成包括多个处理器运行队列,每个运行队列用于保持待处理的线程,此计算机程序的构成包括对每个创建的线程分配一个优先级并且将创建的线程放置于运行队列中的代码单元,分配的优先级将线程归类到一个区域;判断系统是否负荷不平衡的代码单元,如归类到一个运行队列中的一个区域中的线程数多于另一运行队列中的同一区域中的线程数,系统就是负荷不平衡的;以及对系统进行负荷平衡处理的代码单元,如果系统是负荷不平衡的,可通过将在该区域中具有较高线程数的运行队列中的线程转移到在该区域中具有较低线程数的运行队列中来平衡此系统。
9.如权利要求8所述的计算机程序产品,其中按类来组织每个队列的线程。
10.如权利要求9所述的计算机程序产品,其中根据线程所属于的多处理器系统的用户,来确定线程所属于的类。
11.如权利要求10所述的计算机程序产品,其中分配的优先级是线程属于的类的优先级。
12.如权利要求11所述的计算机程序产品,其中当类中的线程受到处理时,类优先级减小,而当类中的线程在容许的范围内未受到处理时,其类优先级增加。
13.如权利要求12所述的计算机程序产品,其中当类优先级减小或增加时,线程可重新归类到另一个区域。
14.如权利要求13所述的计算机程序产品,其中如果一个运行队列的一个区域中的线程数超过另一个运行队列的同一个区域中的线程数一个预定的数目以上,则系统是负荷不平衡的。
15.一种对多处理器系统进行负荷平衡的装置,所述系统的构成包括多个处理器运行队列,每个运行队列用于保持待处理的线程,此装置的构成包括对每个创建的线程分配一个优先级并且将创建的线程放置于运行队列中的装置,分配的优先级将线程归类到一个区域中;判断系统是否负荷不平衡的装置,如归类到一个运行队列中的一个区域中的线程数多于另一运行队列中的同一区域中的线程数,系统就是负荷不平衡的;以及对系统进行负荷平衡处理的装置,如果系统是负荷不平衡的,可通过将在该区域中具有较高线程数的运行队列的线程转移到在该区域中具有较低线程数的运行队列中来平衡此系统。
16.如权利要求15所述的装置,其中按类来组织每个队列的线程。
17.如权利要求16所述的装置,其中根据线程所属于的多处理器系统的用户,来确定线程所属于的类。
18.如权利要求17所述的装置,其中分配的优先级是线程属于的类的优先级。
19.如权利要求18所述的装置,其中当类中的线程受到处理时,类优先级减小,而当类中的线程在容许的范围内未受到处理时,其类优先级增加。
20.如权利要求19所述的装置,其中当类优先级减小或增加时,线程可重新归类到另一个区域。
21.如权利要求20所述的装置,其中如果一个运行队列的一个区域中的线程数超过另一个运行队列的同一个区域中的线程数一个预定的数目以上,则系统是负荷不平衡的。
22.一种可自行进行负荷平衡处理的多处理器系统,所述系统的构成包括多个处理器运行队列,每个运行队列用于保持待处理的线程,此系统的构成包括至少一个用来存储代码数据的存储系统;以及至少一个用来处理代码数据以便进行以下处理的处理器对每个创建的线程分配优先级并且将创建的线程放置于运行队列中,分配的优先级将线程归类到一个区域中;判断系统是否负荷不平衡,如归类到一个运行队列中的一个区域中的线程数多于另一运行队列中的同一区域中的线程数,系统就是负荷不平衡的;以及对系统进行负荷平衡处理,如果系统是负荷不平衡的,可通过将在该区域中具有较高线程数的运行队列中的线程转移到在该区域中具有较低线程数的运行队列中来平衡此系统。
23.如权利要求22所述的多处理器系统,其中按类来组织每个队列的线程。
24.如权利要求23所述的多处理器系统,根据线程所属于的多处理器系统的用户,来确定线程所属于的类。
25.如权利要求24所述的多处理器系统,其中分配的优先级是线程属于的类的优先级。
26.如权利要求25所述的多处理器系统,其中当类中的线程受到处理时,类优先级减小,而当类中的线程在容许的范围内未受到处理时,其类优先级增加。
27.如权利要求26所述的多处理器系统,其中当类优先级减小或增加时,线程可重新归类到另一个区域。
28.如权利要求27所述的多处理器系统,其中如果一个运行队列的一个区域中的线程数超过另一个运行队列的同一个区域中的线程数一个预定的数目以上,则系统是负荷不平衡的。
全文摘要
本发明公开了一种对多处理器系统进行负荷平衡的方法,系统和装置,所述多处理器系统包括多个处理器运行队列,每个运行队列用于保持待处理的线程。本发明对每个创建的线程分配一个优先级并且将创建的线程放置于运行队列中,分配的优先级将线程归类到一个区域中;如归类到一个运行队列中的一个区域中的线程数多于另一运行队列中的同一区域中的线程数,系统就是负荷不平衡的;如果系统是负荷不平衡的,可通过将在该区域中较高线程数的运行队列中的线程转移到在该区域中较具有低线程数的运行队列中来平衡此系统。
文档编号G06F9/00GK1469246SQ0314515
公开日2004年1月21日 申请日期2003年6月16日 优先权日2002年6月20日
发明者L·B·布伦纳, D·J·伯迪克, L B 布伦纳, 伯迪克 申请人:国际商业机器公司