模型机虚拟实验平台的设计与实现
盛 羽,王建新,谢朝辉
(中南大学 信息科学与工程学院,湖南 长沙,410083)
摘 要:
摘 要:提出一种基于组件的模型机虚拟实验平台(CPU_VLAB)的设计模型和实现方法。CPU_VLAB采用Java语言实现,具有良好的平台无关性;以Java Bean组件技术开发模型机的基本部件,提高软件的重用性;结合多线程技术的wait和notify机制以及锁的同步控制技术,提出一种组件分类触发调度机制,有效地解决具有复杂关系组件之间的调度运行问题,保证微命令的有序执行。与已有的模型机虚拟实验平台相比,该实验平台不仅在通用性、自主性和可重用性等方面有较大的提高,而且具有良好的可交互性,同时,CPU_VLAB的组件调度机制为开发计算机硬件类课程虚拟实验平台提供参考。实验结果表明:在此平台上,学生能够搭建和验证模型机实验,从而巩固对CPU工作原理的理解,大大提高学生的实践动手能力和创新能力。
关键词:
中图分类号:TP391.9 文献标志码:A 文章编号:1672-7207(2009)06-1609-07
Design and implementation of model computer virtual lab
SHENG Yu, WANG Jian-xin, XIE Zhao-hui
(School of Information Science and Engineering, Central South University, Changsha 410083, China)
Abstract: A design model and implementing method of CPU_VLAB (model computer of virtual lab) was proposed based on component techniques. This system was implemented with Java language, which could make the virtual lab system independent of operating system. In the CPU_VLAB, virtual chip instruments were developed with JavaBean component techniques which make the software more reusable. Combined with wait-notify of Java multithreading schemes, and the Lock technique to control multithreading’s synchronization, a trigger-dispatching mechanism based on classification of component was presented to effectively solve the problem of component-dispatch between components with complex relationship. This mechanism makes the microinstruction execute orderly. Compared with the other model computer of virtual lab, the universality, autonomy and reusability of CPU_VLAB increase, and CPU_VLAB is interactive. In addition, the trigger-dispatching mechanism of CPU_VLAB provides references for developing virtual lab of computer hardware courses. The result of practical application shows that CPU_VLAB can help students understand the principles of model computer, and improve their abilities of practice and design through making the model computer experiment.
Key words: model computer; virtual lab; component; multithreading; classification
模型机是一个结构简单而规整的CPU,由于其组成部件多,部件之间连接关系紧密,工作原理极其复杂,概念抽象、难懂,导致学生难以掌握。模型机实验是加深学生对计算机CPU工作原理的理解,巩固理论知识的有效途径。然而,传统的模型机实验教学模式存在很多缺陷:由于招生规模的扩大或资金紧张,导致硬件实验环境十分缺乏;学生在实验中会遇到导线老化、器件损坏等问题,造成实验效果不理想;实验设备的更新比较慢,满足不了现代实验的要求;学生做实验时,不清楚硬件动作的执行流程和单元间的数据流动过程,不易检测和查看单元的选通信号和读写时序,实验的透明度不高,成功率比较低。因此,迫切需要一个易于操作、功能完善、交互性强、高度仿真的模型机虚拟实验平台。
随着Internet的发展,虚拟实验室作为一种远程教育手段,越来越受到教育界的关注[1-7]。模型机虚拟实验室同样受到国内外许多单位的关注和研究,并取得了一定的成果。如Brigham Young大学构建了一个有关计算机结构[8]的网上课程,通过利用电路交互设计软件LogicWorks3提供的图形化接口和现有的CAD包来设计和实现虚拟CPU。国内一些大学应用EDA技术,采用仿真软件对计算机系统提供芯片级的设计和仿真。但是,仿真应用软件所建立的模型主要是以各种文件形式存在,不利于学习者对模型的理解和重用。其他一些机构利用FLASH或VB技术来演示模型机实验的数据流动过程,交互能力差,设计的芯片不具有逻辑功能,学生无法进行自主实验。模型机是一个简单的CPU,国内外一些研究机构还开发了专业模拟CPU的软件产品,包括性能模拟器(如SimpleScalar[9]和SimplePower[10])和功能模拟器(如Bochs[11]和TR for dos[12])。但它们模拟的是真实而又复杂的CPU系统,面向的是计算机专业人员,初学者难以理解,不适合作为学习的实验平台。
鉴于现有模型机硬件产品和软件产品存在的许多不足之处,本文作者提出了基于组件的模型机虚拟实验平台(CPU_VLAB)。用户在CPU_VLAB上可以单独选取组件来搭建模型机中的功能部件(如运算器、微控制器等)实验,验证其功能,并在此基础上进行模型机实验,巩固用户对模型机理论知识的理解,增加软件的可重用性。在实验运行过程中,用户可以实时地查看各个芯片的状态,清楚数据的流动过程,具有较强的可视化效果,大大提高了实验的成功率。
1 CPU_VLAB系统架构
CPU_VLAB系统架构如图1所示,采用B/S方式提供网上虚拟实验服务,使多个用户在同一网络环境下完成各自不同的虚拟实验。
图1 CPU_VLAB系统架构
Fig.1 System architecture of CPU_VLAB
CPU_VLAB的客户端采用支持JVM的浏览器中嵌入Java Applet的方式,使得虚拟实验平台的客户端具有Java语言的平台独立性和安全性等特点。客户端主要提供虚拟实验室组件的实现、实验的运行和结果的生成。用户可以通过客户端提供的菜单栏、工具条、组件注册栏、设计运行面板、组件描述栏等,动态地组装实验,实时地保存实验,随机地运行实验和查看图形化的实验结果,使得平台具有良好的交互性、实时性和灵活性。
CPU_VLAB的服务器端提供已编译好的Java类文件以及资源文件,并根据用户的请求将Java类文件和资源文件传给客户端。在服务器端,平台所需的芯片设备以Java Bean组件的方式封装,存于服务器端的实验组件库中;服务器端还提供了经典实验库(.LAB文件)以及组件注册配置文件库(.XML文件)。
CPU_VLAB按照功能可分为3个模块,如图2所示。CPU_VLAB的平台界面模块主要完成实验流程面板和程序录入窗口的设计,其中,实验流程面板主要用来完成实验的搭建,程序录入窗口主要完成微程序和机器指令的装载;CPU_VLAB的实验组件模块完成模型机所需实验芯片的功能实现和显示过程。组件调度模块是系统的调度管理中心,它将根据用户定制的实验流程,调度控制实验组件的执行次序,保证实验结果的正确性。该模块是CPU_VLAB的核心部分,主要解决组件的连接关系和组件的调度问题。
图2 CPU_VLAB系统功能模块
Fig.2 System function modules of CPU_VLAB
2 实验组件模块的设计和实现
模型机由微程序控制器、时序系统、运算器、存储器等功能部件构成,它们又由类型多样、功能各异、颗粒度更小的芯片构成。采用怎样的芯片模型对这些芯片进行统一描述和管理,同时保证软件的可重用性是该模块设计的难点。
在计算机硬件实验中,芯片从输入引脚接收信号,在其内部完成其逻辑功能,然后,通过输出引脚向与它连接的芯片发送数据。为了在结构、功能、信号传递方式上仿真硬件芯片,CPU_VLAB采用JavaBean组件技术来开发虚拟芯片,从而增加虚拟芯片模型的可理解性和重用性。CPU_VLAB将虚拟芯片共同的属性和行为定义在芯片父类DeviceCarrier中。每个虚拟芯片类都继承于DeviceCarrier类,当开发具体芯片对象时,只需要关注组件的特有属性和功能方法,大大提高了组件的开发效率。微程序控制器和时序系统在模型机实验中处于核心地位,下面将详细介绍这2个部件的具体实现过程。
2.1 微程序控制器
微程序控制器是模型机中最核心的部件,它把操作控制信号编成“微指令”,存放到1个只读存储器里。当机器运行时,逐条地读出这些微指令,从而产生模型机所需要的各种操作控制信号,使相应部件执行所规定的操作[13]。微程序控制器由微控制存储器、微指令寄存器、微地址形成电路等构成。在微程序控制器中,芯片布线密集,结构庞大,数据流动逻辑关系复杂。
为了降低模型机实验的复杂性,让用户更多地关注模型机的工作原理,CPU_VLAB利用面向对象的思想,屏蔽微控制器内部的复杂电路,抽象出输入输出接口,并将其封装成微控制存储器和译码器2个组件,抽象出来的模型如图3所示。微控制存储器组件根据机器指令、状态标志等外部输入数据,并经过自身内部的逻辑处理,从而产生相应的微指令;译码器组件根据接收微控制存储器组件产生的微指令,并将其编译成具体的微命令。
图3 微程序控制器模型
Fig.3 Model of microprocessors
微控制存储器组件将外部数据(如机器指令,节拍脉冲、执行部件反馈的状态标志等)作为组件的输入,把微指令作为输出。其功能方法主要是根据微地址读取相应的微指令,并生成后继微地址。微指令在格式上分为2个字段:操作控制字段记录着各种控制信号,而顺序控制字段记录下一条微指令的地址(即下地址),以控制微指令序列的执行顺序。CPU_VLAB中定义了一个整型的二维数组MicroMemoryValue来存储微程序,一维记录微指令地址,二维记录微指令,并提供了接口对该数组进行修改,即允许用户修改CPU_VLAB中的微指令系统。由于微程序控制器工作时有很强的时序性,CPU_VLAB将时钟电路组件的T2脉冲引脚端和T4脉冲引脚端的输出作为微程序控制器脉冲输入来实现其时序功能。当T2脉冲上升沿到来时,微控制存储器根据当前的微地址读取对应的微指令;在T4脉冲上升沿到来时,将产生微指令的后继地址。后继地址的生成分2种不同的情况:如果微程序不出现分支,那么,下一条微指令的地址就直接从当前微指令的下地址读取;当微程序出现分支(即条件转移)时,微控制存储器组件将根据组件的输入信号、内部状态输出信号、内部控制端的逻辑关系表达式改变后继微地址,保证了模型机实验的微指令能够自动有序执行。微控制存储器组件主要实现代码如下:
class CCP_MicroControl extends DeviceCarrier { //微控制存储器组件
Lead[] leads; //组件的输入输出引脚
int[][] MicroMemoryValue; //存储微程序
……
public ccp_MicroControl( )//构造函数,初始化各个引脚
public void control( ) {// 微控制存储器组件功能方法
if(T2){//将当前地址的微指令赋给相应的输出引脚 }
else if(T4) {// T4脉冲到来时,作地址的判别测试
SE[1..5]= getSEvalue( ); //根据逻辑表达式来求SE;
……//把产生的后继地址赋值给组件的微地址输入引脚端;}
} }
由于微控制存储器组件产生的微指令需要经过译码才能控制执行部件的工作,因此,设计了译码器组件来完成译码工作。译码器组件的输入为微控制存储组件产生的微指令,译码器的功能就是根据微指令系统对微指令进行译码,输出具体的微命令。
2.2 时序系统组件
模型机是由严格的节拍脉冲控制,按时间的先后秩序一步一步地控制各功能部件执行工作,机器启动或停机的标志是有无节拍脉冲输出。CPU_VLAB定义了连续脉冲组件和时钟电路组件来模拟模型机的时序系统,时序系统模型如图4所示。
图4 时序系统模型
Fig.4 Model of timing system
连续脉冲组件模拟硬件中的主震荡器,它产生周期性变化的瞬时输出的脉冲信号。CPU_VLAB采用Java提供的Timer定时器来实现时序脉冲的周期性,当用户用鼠标双击启动它后,它将每隔1 ms就产生1个脉冲信号,直到实验结束为止。在Timer定时器产生的1个等间隔周期脉冲中,首先把组件显示为亮的状态,表明脉冲到来,然后,调用sequencePulseEvent( )方法完成时序脉冲先后产生1和0输出信号的过程,最后,显示组件变暗的状态,表明脉冲消失,从而给用户一个动态逼真的显示效果。
时钟电路组件是将连续脉冲组件的输出经过分频,产生等时间间隔的4个相位时序脉冲信号T1,T2,T3和T4。CPU_VLAB定义时钟电路组件有1个输入引脚和4个输出引脚,并采用脉冲计数器的方式来实现其分频功能。脉冲计数器初始值i=1(0<i<5,i为整数),每当时钟电路组件执行1次,它就使1个输出引脚Ti有效,并将计数器加1,当计数器到达4时将自动恢复为1,开始新一轮计数过程。可见,时钟电路组件将根据连续脉冲信号的不断到来而按顺序依次产生4个输出脉冲信号,从而控制模型机的执行节拍,保证了机器指令的有序执行。
3 CPU_VLAB中组件调度模块的设计与实现
模型机由大量具有独立逻辑功能的芯片组件通过虚拟线路构成。由于模型机的电路复杂,内部芯片组件连接呈现网状布局,芯片之间数据的传递不是单纯的并行或者串行。因此,如何描述组件之间的连接关系,以及采用怎样的调度机制来协调组件间的通信,从而保证模型机运行的正确性和稳定性是该模块设计的关键。CPU_VLAB采用基于多线程技术的组件分类调度机制来调度模型机中所有的芯片组件,提高了并行性和实时性,解决了组件线程的同步问题和环路调度问题,保证了微命令执行的有序性和有效性。
3.1 组件连接关系
组成模型机的绝大多数组件都是多输入多输出接口,导致组件的连接关系复杂。CPU_VLAB采用组件自我记录的方式,每个组件拥有一张连接关系表,定义为ConnectTable类,用于记录其所有输出引脚关联的下级组件信息。由于每个组件的输出引脚个数不等,再加之在实验过程中,每个引脚连接的组件个数不确定,所以,采用二维可动态扩展的数组表示,数组的元素是一个二元组(关联组件、引脚)。其中,连接关系表的一维代表组件的输出引脚,二维代表组件的连接关系信息。ConnectTable类定义了addDevice,removeDevice和nextDevice 3个方法,用于为指定的引脚新增连接信息,删除连接信息和获得其所有关联组件信息,使表易于扩充和维护。连接关系表有效地记录了组件之间的复杂关系,使得CPU_VLAB在调度过程中便于对引脚数据进行实时、动态修改,为组件的调度控制提供依据。
3.2 组件的调度控制
CPU_VLAB中模型机由大量类型多样的虚拟芯片按照一定的数据通路构成,组件在调度过程中会存在以下问题:
a. 模型机在工作过程中,要求多个芯片并发工作。芯片组件一旦运行,必须保持其工作状态的原子性,即其工作过程不能被打断,而且不允许出现多个芯片在同一时刻对同一个芯片引脚值进行修改,否则,会造成数据的不一致性。
b. 在模型机的数据通路中,出现多个芯片组件通过虚拟电子线路所构成的环路,如何对组件环路进行调度是调度控制的难点。
c. 微控制存储器组件发出的微指令经过译码后分解出来的多条微命令的执行需要严格的时序控制,如何调度才能保证微命令执行的时序性和准确性,从而保证模型机功能的正确性,也是调度控制模块需要考虑的问题。
CPU_VLAB根据组件的输入引脚的数据信息及其本身的运行特点来完成调度任务。虽然组件引脚类型比较多,但是,在CPU_VLAB的调度过程中,根据组件输入引脚是否带有脉冲端将所有组件分为2种不同的类型:
a. 脉冲组件。这类组件的输入引脚端带有1个或多个脉冲引脚。
b. 普通组件。这类组件的输入引脚端不存在脉冲引脚端。
针对这2类组件在运行时的不同特点,CPU_VLAB中采用了基于多线程的组件分类调度机制来解决组件的调度问题。这种调度机制是指在调度过程中,将每一个虚拟组件都包装成一个线程,并根据各类组件运行的特点将其触发(触发是指组件线程被激活,它根据组件输入端到来的数据,利用Java的反射技术来动态调用该组件的内部功能方法,产生相应的输出)。
具体调度过程如下:当用户点击运行按钮时,CPU_VLAB将实验过程中的所有组件都构造成为线程并将其置于线程的等待队列中。处于等待队列中的线程要被触发,首先要获得相应的锁。获得相应锁之后的组件,若该组件为脉冲组件,则检测脉冲输入端是否有上升沿到来。当脉冲上升沿到来时,将该组件触发,否则,只是将其他引脚到来的数据简单地赋值给相应的输入引脚端,该组件释放相应的锁,再次处于等待状态;若该组件为普通组件,则需要判定是否满足被触发的条件,该类组件中一些组件只需要输入引脚端有新数据到来,则马上触发该组件,如与门组件等;而另外一些组件,则必须等待该组件特定的控制输入端有新数据到来时,才予以触发,否则,只是将其他输入引脚端到来的新数据简单地赋值给相应的引脚输入端,并释放其所占有的锁,该组件再次处于等待队列中,如74LS245组件。组件在被触发完成后,都将释放自己所占有的锁,再度进入等待状态。当本次实验的指令全部完成后,CPU_VLAB将中断所有的线程并停止运行,具体的调度过程如图5所示。
图5 CPU_VLAB的调度流程
Fig.5 Processes scheduling of CPU_VLAB
基于多线程的组件分类调度机制成功地解决了调度过程中的3个问题。具体描述如下。
a. 首先,利用多线程中的等待/锁机制保证了多个虚拟芯片组件线程并行工作时数据的一致性和有效性。为支持等待/锁机制,Java 中的Object类声明了方法wait( )和notify( ),这些方法必须放到Synchronized同步控制块中,线程在调用这些方法前必须“拥有” 对象的锁,这就能保证当2个线程试图在同一对象上调用这些方法时不会互相冲突[14]。在CPU_VLAB中,当实验运行时,处于等待队列中的组件线程要被触发,首先要获得相应的对象锁,其他线程则必须处于等待状态,一旦此组件线程调用wait方法,它便释放该对象锁,进入等待队列中。这样就保证了在同一时刻该组件只能被一个组件访问。同样,通过类锁机制保证组件原子操作顺利执行,避免在运行过程中被其他组件线程中断,修改引脚的情况。
b. CPU_VLAB根据芯片组件的连接关系,利用多线程技术对芯片组件采取逐级触发的方式进行调度。但是,在模型机的数据通路中,出现了多个芯片组件通过虚拟线路形成了环路。在调度过程中,环路中的组件会相互触发,无限循环下去。当环外的一个组件要触发环中的一个组件时,有可能相互争夺共享资源,而让程序进入“死锁”状态。由于在模型机的数据通路中,构成环路的组件必定存在脉冲组件。CPU_VLAB采用了基于多线程的组件分类调度模式,这些脉冲组件需要等待脉冲上升沿信号到来才予以触发,其他输入数据信号都不能触发该组件,而触发的脉冲信号来自环外的组件,这样,就打断了环路中的循环触发问题,从而避免了因环路调度而出现“死锁”的情况。
c. 组件分类调度机制同样有效地解决了模型机中微指令执行的同步问题。同一条微指令在同一个时钟周期内发出,但可能要在同一个CPU周期内执行多条微命令,而这些微命令执行有严格的时序性。在CPU_VLAB中,时钟电路组件产生4个有时间先后顺序的互斥脉冲信号,微命令信号配合这些脉冲信号来保证微指令执行顺序。例如:取指指令,先要将地址送入到地址寄存器(LDAR),然后,程序计数器才进行自增(LDPC),而这2个命令是在同一时钟周期内发出来的。在实验时,将时钟电路组件发出的T3脉冲信号与LDAR微命令经过与门接到地址寄存器的脉冲端,将时钟电路组件发出的T4脉冲信号与LDPC微命令经过与门接到程序计数器的脉冲端,由于T3上升沿信号到来先于T4上升沿信号,且地址寄存器组件和程序计数器组件需要脉冲上升沿触发,所以,保证了这2个微命令的有序执行。在基于多线程的组件分类调度机制下,时钟电路产生的4个脉冲信号与其他信号协同工作,保证了模型机执行的时序性和正 确性。
基于多线程的组件分类调度机制不仅大大减少了组件调度过程中活动线程的数目,降低了线程之间争夺共享资源的概率,相应地,也就减少了“死锁”的机会,提高了系统的性能,而且在符合硬件工作原理前提下解决了环路的调度问题,保证了微命令执行的 顺序。
4 CPU_VLAB系统运行实例
用户通过浏览器下载嵌有该平台的Applet页面,根据对页面的事件响应,获得该实验平台所需的class文件,运行得到平台界面窗口。用户打开实验窗口界面后,将模型机所需要的芯片组件(如微程序控制存储器,74LS181和Memory 6116等芯片组件)拖拽到仿真实验栏中,连线搭建模型机实验,如图6所示。
图6 模型机实验
Fig.6 Model computer experiment
搭建好实验后,用户通过选择菜单栏的“工具”选项中的“编程”来打开编程窗口。用户利用这个窗口可以将自己设计好的微程序来替换掉CPU_VLAB中原来设计好的微程序,并将本次实验需要运行的汇编程序编译成机器指令后装载到模型机中的内存中(Memory6116 芯片组件)。
用户初始化所有的开关组件后,通过点击工具栏中的“运行”按钮,双击连续脉冲启动模型机工作。此时,用户可以方便地看到各个芯片引脚的当前输入和输出值。特别是微控制存储芯片,不但能够显示微指令的输出,而且在其左侧清楚地显示出当前微指令的地址,大大增强了实验的可视化效果和可理解性。
5 结 论
a. CPU_VLAB采用Java语言实现,具有与平台无关、安全和健壮等特点。
b. CPU_VLAB中的所有实验芯片组件与真实硬件芯片逻辑功能相同,在开发上,采用JavaBean组件技术提高了开发效率,实现了软件的重用。CPU_VLAB提出了基于多线程的组件分类触发调度机制来完成组件间的调度任务,大大提高了CPU_VLAB的并行性和运行效率,保证了实验运行的正确性和稳定性。
c. 在该实验平台上,学生不仅可以完成模型机实验,而且可以利用平台已提供的组件自主设计新实验,有利于学生综合设计能力和创新思维的培养,为计算机硬件教学提供了一个良好的远程教育实验平台。
d. CPU_VLAB具有功能完整、交互性强、功能模块化清晰、易于扩充和调度机制兼容性强等特点,能够为开发计算机硬件核心课程虚拟实验室(如数字电路、电路基础等)提供很好的参考模型。
参考文献:
[1] Fabrega L, Massaguer J, Love T, et al. A virtual net-work laboratory for learning IP network[C]//Sarris G. The 7th Annual Conference on Innovation and Technology in Compute Science Education. New York: ACM Press, 2002: 89-95.
[2] Cao J N, Chan A, Cao W D, et al. Virtual programming lab for online distance learning[C]//Fong J, Cheung R C T, Leong H V. Advances in Web-Based Learning. Berlin: Springer-Verlag, 2002: 216-227.
[3] Benetazzo L, Bertocco M, Ferraris F, et al. A Web-based distributed virtual educational laboratory[J]. IEEE Transaction on Instrumentation and Measurement, 2000, 49(2): 349-356.
[4] Spanias A, Atti V. Interactive online undergraduate laboratories using J-DSP[J]. IEEE Transactions on Education, 2005, 48(4): 735-749.
[5] Guimaraes E, Maffeis A, Pereira J, et al. REAL: A virtual laboratory for mobile robot experiments[J]. IEEE Transaction on Education, 2003, 46(1): 37-42.
[6] 王建新, 陆炜妮, 王伟平. 基于组件的数字图像处理仿真系统的设计与实现[J]. 系统仿真学报, 2004, 16(6): 1213-1216.
WANG Jian-xin, LU Wei-ni, WANG Wei-ping. A component-based simulation system for digital image processing[J]. Journal of System Simulation, 2004, 16(6): 1213-1216.
[7] 王建新, 莫秋菊. 基于Internet 的通信系统虚拟实验环境设计与实现[J]. 中南大学学报: 自然科学版, 2006, 37(2): 330-335.
WANG Jian-xin, MO Qiu-ju. Design and implementation of communication system virtual environment based on Internet[J]. Journal of Central South University: Science and Technology, 2006, 37(2): 330-335.
[8] Penfold J, Flanagan J. A first year computer organization course on the web: Make the magic disappear[C]// David K. IEEE Workshop on Computer Architecture Education (WCAE). New York: ACM Press, 2000: 21-27.
[9] Austin T, Larson E, Ernst D. SimpleScalar: An infrastructure for computer system modeling[J]. Computer, 2002, 35(2): 59-67.
[10] Ye W, Vijaykrishnan N, Kandemir W, et al. The design and use of SimplePower: A cycle-accurate energy estimation tool[C]// Giovanni D. The 37th Design Automation Conference. New York: ACM Press, 2000: 340-345.
[11] Forge S. Bochs: the open source IA-32 emulation project [EB/OL]. [2007-11-24]. http://bochs.sourceforge.net/.
[12] Thelion. Thelion’s Toolshop[EB/OL]. [2005-12-11]. http:// www.esmerel.com/ewan/tools.html.
[13] 俸远祯, 阎慧娟, 罗克露. 计算机组成原理[M]. 北京: 电子工业出版社, 1999.
FENG Yuan-zhen, YAN Hui-juan, LUO Ke-lou. Principles of computer organization[M]. Beijing: Electronics Industry Press, 1999.
[14] Eckel B. Java编程思想[M]. 京京制作室, 译. 北京: 机械工业出版社, 1999.
Eckel B. Thinking in Java[M]. Jingjing Studio, transl. Beijing: Mechanical Industry Press, 1999.
收稿日期:2008-10-20;修回日期:2009-01-20
基金项目:国家自然科学基金资助项目(60673164);湖南省杰出青年基金资助项目(06JJ10009);新世纪优秀人才支持计划项目(NCET-05-0683);长江学者和创新团队发展计划项目(IRT0661)
通信作者:王建新(1969-),男,湖南邵东人,博士,教授,从事计算机网络优化算法和虚拟实验环境研究;电话:0731-88830212;E-mail: jxwang@mail.csu.edu.cn