背景技术
网格计算已经成为当前计算技术发展的一个重要方向,当前一些研究项目根据网格计算的思想提出一些基于散耦合思想的网格计算机体系结构,如Dagger[1],DSAG[2]等。Dagger,DSAG针对传统体系结构中硬件资源利用率低、资源静态部署、被动安全等问题,提出了对计算机的原有资源进行拆分,从资源、功能、服务的角度来定义网格计算机的部件。设备成为一个个单独的单元,这些设备单元根据需要,在网络中能够自动组织起来,提供给具体的网络中的计算机应用。
网格计算机体系结构中的散耦合就是说将目前计算机系统中紧密耦合的各种部件转化成松散耦合的独立部件,然后依靠这些部件在系统运行时绑定、动态部署、智能共享来构建计算机系统。外设部件是计算机部件的一类,网络化的外设是网络计算机体系结果中的一个重要组成部分。网络化的外设部件可以用于网络计算机监控,用户终端等多种应用场景。
当前也存在各种的网络外设调用的解决方案,具体到远程控制的网络外设的实现方案中,如图1所示,主要有以下两种:
1.基于硬件实现:主要通过对鼠标、键盘、显示器的电信号截取、线缆或网络的传送和还原的过程,实现系统对外设的控制。例如KVM,这类的实现并不依赖于网络,并有距离的限制,需要配置专门的线缆环境。虽然目前存在KVM Over IP以VNC[3]作为核心技术利用了网络实现,但是其对硬件的需求相对比较高,在客户端和服务器端都需要专门的KVM硬件设备。
2.基于应用软件实现:通过在操作系统上编写服务器和客户端软件实现。在字符界面的有telnet。图形界面有X Windows,windowsremote desktop,pc anywhere等软件。这类软件优点是灵活,但是最大的缺点是基于操作系统之上,控制力度有限。这类对网络的利用是在应用层次,实现过程如图1中应用软件实现部分所示,每次执行外设操作需要繁琐的执行过程,执行效率不高,而且需要控制方配备一个完整的计算机。
外设部件的网络化,可以很好的解决一些原有的问题。通过网格使能的实现,可以根据需要使用网络中的外设,更为广泛的利用网络中的设备;通过智能共享,可以让多个主机同时动态的使用单个外设,提高外设的利用率;通过无缝互连,可以使得主机对网络中外设的控制更为直接、全面。通过网格外设机制实现的网格控制台,不需要专门的CPU、内存等设备,提供了一个瘦的客户端,同时可以控制多台计算机主机,提高了控制台的利用率。而且控制台自身拥有网络接口,可以随时通过网络接入网络,对网络主机进行控制。
下面提供了本发明的参考文献:
[1]孙凝晖,樊建平.Dagger:一种散耦合的网格计算机体系结构.[J].计算机研究与发展,2003年12月,第40卷,第12期.1731-1736
[2]樊建平,陈明宇.网格化的动态自组织体系结构DSAG.[J].计算机研究与发展,2003年12月,第40卷,第12期.1737-1742
[3]T.Richardson,Q.Stafford-Fraser,K.R.Wood,and A.Hop-per.Virtual network computing.[J].IEEE Internet Computing,1998,2(1).33-38
发明内容
1.本发明解决的技术问题
在网格计算机中,网络接口设备成为一个非常基本的设备,网格计算机外设的使用应该依赖于其自身网络接口设备而存在。而传统的体系结构中网络设备是作为外设的一种,和其他外设属于同等地位。传统的外设调用有以下的缺点:设备利用率不高,支持网络调用的外设有限,目前通过网络调用的外设只是局限于某些具体的设备,扩展起来比较困难;网络外设控制力度有限,计算机通过互联网可以进行数据交互,达到资源的互相利用,然而基于传统的调用方式,操作系统对于网络外设的操作是相对高级的,无法进行一些原始的操作。执行效率不高,传统的网络外设操作过程复杂,操作一个网络上的设备,一般需要通过网络主机操作系统、网络调用、外设所在主机操作系统、驱动程序、设备一系列的操作,而操作一个传统本机设备只需要操作系统、驱动程序、设备三个步骤,我们如果能够对这些步骤进行精简,那么不但可以大大提高速度,而且能减少主机CPU、内存等资源占用率。
本发明所提出的设计方案就是解决了实现外设网络调用的技术问题。利用网格化外设的思路,基于具体的网格控制台的实现,能实现对计算机的远程控制、管理,特别是对于高性能计算机中计算节点的管理中有非常重要的作用。通过网格控制台的实现,验证了网格外设的设计实现。网格外设在下一代的高性能计算机发展中有重要的意义。高性能计算机可以提供高速、海量的应用服务,广泛的应用在科学计算、工业工程、商业计算各个方面。高性能计算机经过对不同部件进行拆分,按照功能、服务、资源重组[1]。这种散耦合的体系结构,能够提高设备利用率、设备复用率。而外设部件的网格化作为其中的一个组成部分,可以很好的提供外设利用率和复用率、减少核心部件用在外设上的资源。
2.本发明的软件实现模型
本发明的软件实现模型如图2所示。
3.发明技术方案
该方案主要有驱动模块、网络模块和外设相关设备原语几个模块。其中网格主机逻辑设备驱动负责和网格主机操作系统交互,提供操作系统对外设操作的需要,并通过网络模块传送到网格控制台。网格控制台驱动是真正操作外设硬件的驱动,它根据网格主要通过网络发送的请求对硬件操作,完成网格主机对网格外设的调用。网格主机和网格控制台之间通过基于TCP/IP协议的网格使能协议进行交互。
3.1网格主机逻辑设备驱动
网格主机逻辑设备驱动提供给网格主机操作系统外设驱动,操作系统认为这个驱动是真正的外设驱动。和传统外设驱动一样进行操作,但是逻辑设备驱动接受到操作系统的调用后,实际上是通过网络模块调用网格控制台的外设进行外设操作。
3.2外设设备驱动
网格控制台驱动提供真正的对具体硬件外设进行操作,这些操作包括I/O读写、显存读写、中断响应,网格控制台驱动一方面对硬件外设操作,另一方面通过设备原语和网格主机交互,最终和网格主机的操作系统达到交互。
3.3设备相关的设备原语
设备原语是和直接外设相关的部分,是操作系统对硬件操作的集合。
该设备原语分为三种:
1.命令:服务器操作系统向设备发出的操作指令,比如显示器显示命令、键盘灯命令、存储数据读写命令等;
2.结果:设备返回给服务器操作系统的命令执行结果。并不是每一个命令都要返回结果,有的命令不需要返回结果;
3.数据输入:由设备主动发起的,向其服务器操作系统发送数据的情况,比如键盘输入,鼠标移动等。
同时具体定义了键盘、鼠标、显卡的设备原语,能够满足上述三个外设网络调用的需要。下面具体给出三种外设的设备原语定义:
1.鼠标设备原语
原语名称 |
原语代码 |
原语类型 |
数据长度 |
数据内容 |
功能 |
MOUSE_CMD_OPEN_AUX |
0x1001 |
命令 |
0 |
|
开启一个鼠标设备 |
MOUSE_CMD_RELESE_AUX |
0x1002 |
命令 |
0 |
|
关闭一个鼠标设备 |
MOUSE_DATAIN_SCANCODE |
0x1101 |
数据 |
1 |
scancode |
鼠标数据输入 |
2.键盘设备原语
原语名称 |
原语代码 |
原语类型 |
数据长度 |
数据内容 |
功能 |
KBD_CMD_INIT |
0x0001 |
命令 |
0 |
|
键盘初始化命令。 |
KBD_CMD_SYNC |
0x0002 |
命令 |
4 |
reply_expected,acknowledge,resend,kbd_exists, |
键盘上下文同步命令。 |
KBD_DATAIN_SCANCODE |
0x0101 |
数据 |
1 |
scancode, |
键盘数据输入 |
KBD_CMD_SET_LEDS |
0x0003 |
命令 |
1 |
leds, |
控制键盘Led灯 |
KBD_CMD_SET_KEYCODE |
0x0004 |
命令 |
2 |
scancode,keycode |
键盘码设置命令 |
KBD_CMD_GET_KEYCODE |
0x0205 |
命令,需要返回结果。 |
1 |
scancode |
读取键盘码命令 |
KBD_RLT_GET_KEYCODE |
0x0305 |
结果 |
2 |
scancodekeycode |
读取键盘码命令返回 |
KBD_CMD_TRANSLATE |
0x0206 |
命令,需要返回结果。 |
1 |
scancode |
键盘码翻译命令,将扫描码翻译成键盘码。 |
KBD_RLT_TRANSLATE |
0x0306 |
结果 |
2 |
scancode,keycode |
键盘码翻译命令返回。 |
KBD_CMD_UNEXPECTEC |
0x0007 |
命令 |
1 |
charkeycode |
键盘码意外处理命令。 |
3.显卡设备原语
原语名称 |
原语代码 |
原语类型 |
数据长度 |
数据内容 |
功能 |
VGA_CMD_STARTUP |
0x2201 |
命令,需要返回结果 |
0 |
|
启动显卡,获得显卡描述 |
VGA_RLT_STARTUP |
0x2301 |
返回 |
16 |
显卡描述 |
返回显卡描述 |
VGA_DATAIN_INIT |
0x2101 |
数据 |
0 |
|
请求初始化显存 |
VGA_CMD_INIT |
0x2002 |
命令 |
32K+40 |
显存初始化数据 |
宿主向显卡发送显卡初始化数据 |
VGA_CMD_DEINIT |
0x2102 |
数据 |
40 |
显示器状态数据 |
显示器状态发生变化 |
VGA_CMD_WRITE_VGA |
0x2003 |
命令 |
8 |
寄存器数据 |
写寄存器 |
VGA_CMD_SET_CURSOR_SIZE |
0x2004 |
命令 |
12 |
光标数据 |
设置光标 |
VGA_CMD_PAL_BLANK |
0x2005 |
命令 |
0 |
|
控制黑屏 |
VGA_CMD_FONT_OP |
0x2206 |
命令,需要返回结果 |
不定 |
|
设置字体。 |
VGA_RLT_FONT_OP |
0x2306 |
返回 |
8 |
命令执行结果 |
字体设置命令执行结果返回。 |
VGA_CMD_SET_PALETTE |
0x2007 |
命令 |
64 |
调色板数据 |
设置调色板 |
VGA_CMD_INVERT_REGION |
0x2008 |
命令 |
0 |
|
反转屏幕 |
VGA_CMD_SCR_WRITEW |
0x2009 |
命令 |
8 |
显存地址及数据 |
写单个显存 |
VGA_CMD_SCR_READW |
0x220A |
命令,需要结果返回 |
4 |
显存地址 |
读单个显存 |
VGA_RLT_SCT_READW |
0x230A |
返回 |
2 |
显存数据 |
读单个显存的结果 |
VGA_CMD_SCR_MEMSETW |
0x200B |
命令 |
12 |
显存地址及数据 |
设置一段显存值 |
VGA_CMD_MEMMOVEW |
0x200C |
命令 |
不定 |
显存地址及数据 |
拷贝一段显存(源和目标有交叉) |
VGA_CMD_MEMCOPYW |
0x200D |
命令 |
不定 |
显存地址及数据 |
拷贝一段显存(源和目标不交叉) |
VGA_CMD_VESA_UNBLANK |
0x200E |
命令 |
0 |
|
恢复寄存器值(黑屏恢复时) |
VGA_CMD_VESA_BLANK |
0x200F |
命令 |
4 |
寄存器数据 |
设置寄存器值(黑屏时) |
3.4设计方案的总体架构
总体设计框图如图2所示。图2显示了多个网格主机和一个网格控制台之间交互的过程。图4,图5分别具体显示了网格控制台和网格主机的详细设计图。网格控制台的硬件操作通过其驱动程序完成,驱动程序使用设备接口层通过设备原语到达网络模块。网格主机则利用逻辑设备驱动完成和操作系统交互,并把驱动操作的设备原语通过设备接口层发送到网络模块。同样,网格主机和网格控制台通过网络模块进行通信,传递设备原语进行硬件网络调用和控制。
有鉴于此,本发明提供了一种基于原语机制通过网络远程调用外设部件的方法,该方法基于消息机制的计算机主机与外设部件之间采用松散耦合方式,该消息机制中的消息具体表现为一系列标准的设备原语,该设备原语具体包括命令、结果和数据输入三种类型,计算机主机通过利用该设备原语来调用位于网络中的远程外设部件,实现对外设部件的远程调用。
所述基于消息机制的计算机主机与外设部件之间采用的松散耦合方式,外设部件并不直接连接到一台计算机,而是连接到网络,通过网络以消息传递的方式与计算机主机进行交互。
所述计算机主机通过利用该设备原语来调用位于网络中的远程外设部件时,网络中的计算机本地直接连接的不再是一个实设备,而是远程设备的一个映像,也就是一个虚拟设备,本地设备映像与远程设备之间通过设备原语进行交互。
所要求的一种在网络环境下实现部件共享和复用的新方式,这种基于原语模式的外设调用方式使得一个设备可以被多个计算机主机访问,对于某些类型的外设(例如存储外设)甚至支持一个设备被多个计算机主机并发访问,这是一种新的计算机部件共享方式。
所述一系列标准的设备原语,是针对键盘、鼠标、显卡三种基本计算机外设部件制定的主要设备原语:
a)鼠标:
MOUSE_DATAIN_SCANCODE:鼠标数据输入
b)键盘:
KBD_CMD_SET_LEDS:控制键盘Led灯
KBD_DATAIN_SCANCODE:键盘数据输入
c)显卡:
VGA_CMD_SET_CURSOR_SIZE:设置光标
VGA_CMD_INVERT_REGION:反转屏幕
VGA_CMD_SCR_WRITEW:写单个显存
VGA_RLT_SCT_READW:读单个显存的结果。
本发明提出的设计方案用在中科院计算所高性能服务器的节点控制台的设计中。
具体实施方式
图2的基于网络外设的控制台实现框架,其中网格主机是一台安装了逻辑设备驱动程序、网格使能程序的主机,通过TCP/IP协议连接到网络中。网络外设键盘、鼠标、显卡都通过传统接口连接到一台计算机上面,我们称这台计算机为网格控制台,这台网格控制台也拥有独立的CPU、内存等设备,但是在硬件实现中可以是一个独立拥有网络接口的嵌入式的设备。网格控制台安装有设备驱动和网络模块。网格控制台与网格主机的网格使能模块进行通信,用户可以使用网格控制台的鼠标、键盘、显示器对网格主机进行控制。网格控制台可以同时对多个网格主机进行控制。
如图3所示,网格控制台驱动将网格主机发送过来的设备原语分解为具体的硬件操作指令,对硬件进行操作。同时还响应硬件的动作,总结为设备原语发送到网格主机至网格主机操作系统。
如图4所示,网格主机逻辑设备驱动把操作系统对它的调用总结为设备原语的调用,并通过网络模块发送到网格控制台的具体外设。同时还把因为网格控制台端硬件的响应发送过来的设备原语分解并提交给操作系统。
图5是基于原语机制通过网络远程调用外设部件的方法流程,其具体步骤如下:
步骤1,计算机主机加载远程外设;
步骤2,计算机主机等待事件发生;
步骤3,计算机主机判断事件类别,如果是命令,执行步骤4;如果是命令返回,执行步骤6;如果是数据输入,执行步骤8;
步骤4,将设备命令封装成设备原语;
步骤5,将设备原语发送给远端设备后返回步骤2;
步骤6,将返回的命令执行结果解码;
步骤7,将返回结果发送给系统后返回步骤2;
步骤8,将输入的数据解码;
步骤9,向系统发送伪中断;
步骤10,由伪中断处理程序处理数据后返回步骤2。