计算机工程
Computer Engineering
1999年　第25卷　第4期　Vol.25　No.4　1999



基于多线程的远程数据库电话访问系统的设计与实现
余华云　蔡莲红　张维
摘　要　介绍了基于多线程的远程数据库电话访问系统的设计与实现过程。并对影响系统生命力的各种因素（如：系统的可靠性、系统的可扩充性和系统的通用性等）进行了探讨。尤其着重对系统的通用性进行了阐述，使系统能力为不同的应用领域服务。
关键词　线程　电话语音卡　公用电话网　文语转换技术
Design and Realization of Telephone Remote Database Access System Based on Multi-threads
Yu Huayun
（Computer Control Centre of Education Academy Jingzhou 434001）
Ca Lianhong Zhang Wei
（Department of Computer Science and Technology，Tsinghua University BeiJing 100084）
Abstract：The paper introduces design and realization process of telephone remote database access system based on threads and discuss various factor affecting system life-time，such as system reliability，extensity and universality etc.Particularly the paper discusses universality of the system,so that the system can serve in many application fields.
Key words:Thread;Telephone sound card;Public telepone not;Convertion technology of text to speech
　　电话语音卡自1992年进入我国市场以来，其应用日益广泛，如168信息台、200长途接线、114电话号码查询等各种应用系统。
　　本文所介绍的基于多线程的远程数据库电话访问系统是以美国 Dialogic 公司的电话语音卡为基础、以Windows NT为开发平台并利用Windows NT线程的特性所开发的一种能多线并行通信且适用性很广的电脑电话语音服务系统。
1　系统组成及原理
1.1系统组成结构
　　远程数据库电话访问系统是通过电话语音卡将计算机和公用电话网连接在一起而形成的系统。它将计算机与电话的优势有机地结合在一起，用人们最熟悉的媒介--声音，通过电话机自动储存和传递信息，以达到从远程数据库获取信息的目的。它由计算机、电话语音卡、公用电话网、电脑及相应的电话语音服务软件等组成，其系统结构见图1。

图1　远程数据库电话访问系统的单机型结构示意图
　　其中，电话语音卡是该系统的重要组成部分，能够实现语音处理功能。常用的电话语音卡有2线、4线、8线、16线、24线、32线及T1、E1-PCM数字中接口语音卡以及座席转接卡等。它与电话线的接口主要有以下3种：
　　(1)模拟接口　主要是RJ-11接口，它允许1条或2条模拟电话线通过RJ-11接口直接与语音卡相连。对于允许有较多线路的语音卡，可以使用扩展接口板(或称电话配线架)再与语音卡相连。
　　(2)数字接口　如数字中继E-1和T-1。
　　(3)总线接口　语音卡本身没有电话的接口，需额外一块卡才能与电话线相连。
　　在与计算机的接口方面，语音卡可以十分方便地直接插在PC机的8位、16位和32位的扩展槽里。如果实际使用的线路很多，还可以在一台PC机中插多块语音卡(如图1所示)。同时，为了使系统扩展更方便、应用更广泛，本系统采用了网络系统结构，见图2。

图2　远程数据库电话访问系统的网络结构示意图
　　由于系统采用网络结构，用户可以通过网络访问远程服务器中的数据。而服务器中的数据也可以方便地通过各个业务处理机得到更新。
1.2　系统工作原理
　　此时，图1或图2所示系统中的计算机就相当于一部分无人值守的电话。用户拨通这部电话时，电脑语音处理系统就会自动地向用户提供声讯服务。用户可以根据语音提示，通过电话按键来选择所需要的服务。计算机则根据用户的选择，相应处理并完成指定的功能，并将结构回送给用户。具体来说，系统工作主要包含以下几个步骤。
　　(1)用户来话呼叫(即用户拨打接入多路电话语音系统的电话号码)进入电话局的交换机。
　　(2)交换机应答该呼叫，接收呼叫到达的端口号并进行主叫和被叫号码证实。
　　(3)当呼叫成功应答，并且捕获到数字后，通过交换机的 RS-232 串行口向被叫方(主机)发送消息。
　　(4)主机检查当时各语音卡通道的状态，选择一个空闲的信道并使该信道处于摘机状态。此时，主叫方(用户)和被叫方(计算机)就建立了直接的通信连接。
　　(5)主叫用户可以根据计算机的语音提示，通过电话按键来选择所需的服务。
　　(6)计算机则根据用户的选择，进行相应处理并将结果回送给用户。
　　(7)当主叫用户一方挂机时，交换机检测拆线信号，并向主机发送端口号等信息。
　　(8)主机程序在接收到该消息，将语音卡的该信道置为挂机状态，并等待下一个用户的访问。
2　系统软件设计与实现
2.1系统软件设计
　　系统软件在设计时考虑以下几点：(1)软件与设备的无关性；(2)能够满足多个用户同时访问(即多路并行)；(3)应具有很高的可靠性和可维护性；(4)应具有较好的通用性且易于扩充；(5)适用范围广。
　　为此，系统采用模块化的程序设计方法，将系统功能细分成不可分割的原子动作。模块之间的数据传递使用函数中的参数进行，因此模块之间的耦合度较低，模块之间有很好的独立性。为了满足多个用户对系统的同时访问，系统在一个进程中使用了多个线程，即给每一个通信线路都建立一个相应的线程。由于在Windows NT中，线程是系统调度和运行的基本单位，拥有自己的核心栈和处理机现场。当主机只有一个CPU情况下，CPU对线程的运行是按时间片进行轮询的，且时间片的长度在Windows NT设定后是基本不变的(一般为1-20ms，缺省值为10ms)。但这并不是说CPU执行每一个线程的时间都是相同的。当执行某一线程的时间小于时间片的长度时，其剩余的时间自动为下一个线程所使用。这样就保证CPU能高效地运作，而不至于为每一个线程(即使某些线程并不满足启动条件)都平均分配一个相同的执行时间段。例：本系统在一个进程中使用了64个线程，实际使用时，在某一时刻可能只有几个线程在工作，而其它大多数线程并没有被访问。如果强行要CPU给每个线程分配相同的执行时间，很显然是一种浪费。只有当执行每一个线程所需的时间大于或等于Windows NT系统给定的时间片时，执行每一个线程的时间才是相等的 ( 即等于系统给定的时间片 ) 。因此，时间片的作用实际上是为了保证让CPU能够轮询到每一个线程。由于轮询的时间片很短，一般为毫秒级，每一个线程切换的延时很短，只要总的延时不超过0.1秒(总的延时与CPU的速度、硬盘存取速度、所接的线数等有关)，用户是觉察不出来的，因此系统完全能够满足多个用户的同时访问。当主机中有多个CPU时，线程还可自动分布到各个CPU上运行，这无疑有利于提高系统运行速度及系统的扩充。同时，由于同一任务中的线程共享统一的地址空间，在同一任务中不同线程间的切换相当容易且线程间的调度开销极小，因此系统具有响应速度快，资源开销小的特点。
　　当然，系统中所拥有的线程不能太多。因为可运行的线程越多，对所有线程轮询一次所需的时间越长，系统延时越大。而且线程越多，整个系统的吞吐量将相对减少，当系统总的延时超过一定的限制时，系统将变得不可使用。那么，系统到底支持多少线数呢?这一问题是很难准确确定的。因为它与 CPU 的速度、硬盘存取速度、平均延时、数据传输速度、PC总线速度、设备驱动器负载等多种因素有关。尽管如此，这里还是给出通过程序测试系统所能支持的并行呼叫线数的上限估计值(仅供读者参考)。例：对于PC486/66、硬盘寻道时间为9ms、传输速率为819200B/s，对语音进行8比特编码、8kHz采样的计算机来说，系统最大支持线数为102线。因此，对于一般的中小系统而言，目前PC机CPU的速度是完全能够胜任的。
　　由于系统要求能在一天24小时内无间断地工作，因此系统的可靠性和可维护性显得特别重要。为了保证系统的可靠性，除了提高系统硬件适应能力，系统在设计实现时，还可以动态监视每一个信道的状态，以便在系统出现故障时能及时进行人工维护。同时，对系统内存的管理也是十分重要的。因为如果用户对某一信道访问后，程序没有将占用的内存全部及时释放，随着时间的推移，系统内存将会被占满而使整个系统无法使用。
　　为了使系统具有较好的通用性易于扩充，将系统设置、通信信道信号检测、语音处理及通信等功能编制成子程序和库函数，供系统调用。同时，为了使系统具有更广泛的适用性，避免类似程序重复开发，系统全部语音输出采用清华大学计算机系研制的文语转换技术。清华大学计算机系研制的文语转换系统是一个无限词汇的合成系统，即按规则可生成任何语句而不必句句录音。它能将提供的文本文件转换为语音输出且系统音质清晰，语句自然度高。它不仅解决了系统对数据库中记录的语音输出问题，而且使系统具有广泛的适用性。例：从一个客运信息电话语音服务系统转变到一个气象电话语音服务系统，只需修改本系统中的文本提示信息、更改数据库的内容以及对各模块按要求进行组织即可。
2.2　系统软件组成
　　系统软件主要由6部分组成：(1)主控程序；(2)语音卡驱动程序；(3)多路电话语音管理子程序；(4)多路数据管理与通信子程序；(5) 数据库信息查询程序；(6)汉语文语转换程序。
　　主控程序主要完成对系统进行初始化，监控并显示系统的工作状态以及对异常情况的处理等功能。其软件流程如图3所示。

图3　系统主控程序
语音卡驱动程序完成对电话语音卡的驱动和控制，是硬件与软件系统的标准接口；它提供的驱动函数可实现摘挂机信号检测、铃流及忙音信号检测、操作者中断、DTMF和MF信号音检测、录音、放音及录放音出错处理、录制传真数据以及向外发传真等控制管理功能。
　　多路电话语音管理子程序采用多线程程序设计，主要负责控制管理电话语音卡的通信信道，以并行方式执行相应的电话语音通信信道管理模块。它可以完成振玲摘机；向电话使用者发送提示语音；接收电话使用者拨入的请求信息(数字)；与数据库查询系统程序进行通信；向电话使用者回报查询的语音结果以及挂机释放信道等功能。它是远程数据库电话访问系统的核心部分，其程序流程如图4所示。

图4　信道处理子程序
　　多路数据管理与通信子程序主要完成多路电话语音管理系统与数据库信息查询系统之间的数据信息的交换、管理与协调，完成数据通信报文的发送与接收等功能。
　　数据库信息查询程序主要完成用户通过电话语音管理系统传来的请求并根据用户的请求查找出相应的结果，再将结果转换为文本信息供多路数据管理与通信子程序调用等功能。同时，为了进一步提高系统的通用性，数据库信息查询程序采用了微软公司的SQL Server6.5作开发平台。因为SQL Server6.5不仅提供了完整的客户/服务器的开发环境，而且提供了对多种数据库的访问工具--ODBC。通过ODBC，我们可以实现对多种数据库的访问。如：Foxbase、Foxpro、Access、Sybase、Oracle、Informix等。由于系统提供了对多种数据库的访问接口，因此系统在使用时即使数据库的类型有所改变，也无需另外编程。
　　汉语文语转换程序是在多路数据管理与通信子程序中负责将数据库信息查询系统所传来的文本信息转变成语音，再通过电话语音系统将语音播放给用户。
3　 结束语
　　几年来，以电话语音卡为基础开发的各种电脑电话语音服务系统虽然层出不穷，但这些系统普遍存在应用领域单一(即一个系统不能为多个领域所使用，在用于其它领域时一般需要重新开发)、扩充性较差的缺点。本文介绍的基于多线程的远程数据库电话访问系统具有扩充性好，适用性广的特点。系统在扩充时无需作任何改动，它会根据所插的电话语音卡数量及语音卡所允许的最大通信信道自动改变。由于系统将系统功能进行了细分且将这些功能编制成一个个函数供系统调用，同时系统语音输出全部使用合成语音输出，使系统在无需很大改动的情况下就可适应不同的应用领域(如：语音信箱、人才交流、气象服务、客运信息、高考放榜等)，因此该系统是一种以电话语音卡为基础，为用户提供对远程数据库电话访问的综合的电脑电话语音服务系统。
作者简介：男，30岁，讲师，主要研究方向为语音信息处理及多媒体信息处理
作者单位:余华云　湖北省荆州教育学院计算机管理中心　荆州434001，蔡莲红　张维　清华大学计算机科学与技术系　北京100084
参考文献
　1　Dialogic.System Release Software Installation Reference for Windows NT.1995-04
　2　Dialogic.Voice Software Reference for Windows NT.1995-12
　3　Dialogic.Products and Services Guide 1996.1996-05
　4　张延平，林博文.计算机语音集成技术和应用.北京邮电大学，1997-07：33-36，292
收稿日期:1998-06-05
