设备控制方法 【技术领域】
本发明涉及一种控制个人计算机外接外围设备的设备控制器,特别涉及使数据传输高速化的设备控制器。
背景技术
为了使个人计算机(以下称为PC)的操作系统(以下称为OS)对外围设备进行正常识别和控制,需要叫做设备驱动程序的软件。
近年来装载于PC的OS中,编入有多个标准的设备驱动程序。因此,在连接有标准的外围设备时,OS自动分配标准的设备驱动程序,对连接的外围设备进行识别和控制。
但是,对于各外围设备来说标准设备驱动程序并不最合适时,即使存在比设备驱动程序控制的传输速度更高速运作的外围设备(如高速读取、或写入的外接HDD等),标准设备驱动程序也会对其速度进行限制。另外,也存在应用程序限制速度的情况。
特别是,作为一般OS的Windows(注册商标)的情况下,当与USB大容量存储设备(外接HDD等)连接并传输数据时,Windows(注册商标)标准装载的应用程序或设备驱动程序对数据以每64kB进行分割,USB大容量存储驱动程序对每个分割后的数据附加指令、状态等信息。对该指令、状态等信息的处理时间长(数百μsec),成为数据传输速度低下的主要原因。
图1中,所示为OS上装载的各种驱动程序的功能框图。该图中,应用程序51、通用盘驱动程序52、USB大容量存储驱动程序53以及USB主控制器驱动程序54是OS上装载的功能部。
应用程序51通过各种驱动程序对USB大容量存储设备55(例如外接HDD)发出读取或写入的要求。该图中,示出了应用程序51发出写入请求,并传输数据的例子。应用程序51对通用盘驱动程序52发出读取要求,并传输数据。通用盘驱动程序52将此数据传输到下级的USB大容量存储驱动程序53。此时,由于USB大容量存储驱动程序53的数据传输量的上限为64kB,所以通用盘驱动程序52对数据以每64kB进行分割。USB大容量存储驱动程序53将对以每64kB分割了的数据附加指令、状态,并顺次传输至USB主控制器驱动程序54。USB主控制器驱动程序54通过USB批量传输方式将该指令、数据、状态顺次传输至USB大容量存储装置55。
图2是表示通用盘驱动程序52及USB大容量存储驱动程序53所传输的数据(单批量传输协议)结构的概念图。如该图所示,通用盘驱动程序52将数据分割成64kB,USB大容量存储驱动程序53对各数据部赋予指令、状态并顺次传输至USB主控制器驱动程序54。进而,USB主控制器驱动程序54还将此指令、分割成64kB的数据以及状态顺次传输至USB大容量存储设备55。从而,进行应用程序51对USB大容量存储设备55的写入。
在USB2.0规格环境下,USB大容量存储驱动程序53、USB主控制器驱动程序54以及USB大容量存储设备55处理指令和状态的时间为500μsec左右。于是,每传输64KB的数据就会产生因处理指令、状态导致的总共500μsec左右的延迟,从而传输总数据量在64kB以上时,数据传输速度降低。
另外,如图1所示,即使在应用程序51直接向USB大容量存储驱动程序53传输数据的情况下,由于USB大容量驱动程序53的数据传输量的上限为64kB,因此应用程序51将数据以每64kB分割,随后USB大容量驱动程序53附加各数据部指令、状态并顺次传输至USB主控制器驱动程序54。此外,即使驱动程序侧的数据传输量不存在上限,并且应用程序51能够执行比64kB大的数据传输的情况下,也有在应用程序侧以每64kB对数据进行分割的情况(例如Windows(注册商标)标准装载的explorer等)。
因此,不论何种情况下,只要传输总数据量在规定量以上,就会产生传输速度降低等问题。
另一方面,长久以来作为提高PC和设备之间传输速度的手段,在设备控制器中设置缓冲存储器,在此缓冲存储器中缓存数据,一起进行传输(例如参照专利文献1)。就专利文献1的装置而言,当传输数据总量超过缓冲存储器容量时,因为发生随时写入处理,因此对于超过缓冲存储器容量的数据,不经由缓冲存储器直接传输。
另外,已经提出如下装置:具有多个缓冲存储器,进行传输其中一个缓冲存储器数据的处理的同时,在其他缓冲存储器中对上级的数据进行缓存来提高传输速度(例如参照专利文献2)的装置;以及对指令、数据、状态分别进行缓存,一起进行处理的装置(例如参照专利文献3)。
另外,已经提出如下装置:在PC侧及设备侧上有必要进行如上述的对数据分割处理的情况下,PC侧的设备控制器将一定程度的数据一起传输,然后在设备侧的控制部再次将其进行分割处理(例如参照专利文献4)。
专利文献1:特开平4‑130523号公报
专利文献2:特开2002‑344537号公报
专利文献3:特开2006‑215891号公报
专利文献4:特开2001‑154811号公报
【发明内容】
发明要解决的课题
但是,专利文献1记载的装置在应用程序和驱动程序将数据进行分割时并不能实现高速化。而且,专利文献2及专利文献3记载的装置虽然能够使传输部的处理速度提高,但在应用程序或驱动程序将数据进行分割时,亦不能实现高速化。
并且,专利文献4记载的计算机系统中,有必要在设备侧的控制部中再次将数据分割并处理。而且,读取时,设备侧控制部需要先合并被分割的各请求后再进行数据传输的结构。
因此,本发明的目的是提供一种当传输的总数据量为规定量时,在其设备侧不需要特别的结构而能够提高传输速度的设备控制器。
解决课题的方法
本发明的设备控制器是连接于应用程序或设备驱动程序和对象设备之间的设备控制器,其特征在于,包括:高速缓冲存储器,缓存从上述应用程序或设备驱动程序接收的数据以及从上述对象设备接收的数据;控制部,将上述高速缓冲存储器中缓存的数据传输至上述对象设备以及上述应用程序或设备驱动程序;
上述控制部从上述应用程序或设备驱动程序接收一个或多个读取或写入请求,将此一个或多个读取或写入请求作为多份请求合并后的读取或写入请求,通过将其传输至上述对象设备来将数据缓存于上述高速缓冲存储器中。
也就是,对从应用程序和设备驱动程序接收的读取或写入请求进行合并后传输至设备。由此,缓存从应用程序或设备驱动程序接收的数据并作为一定程度容量的数据,一起传输至对象设备。并且,与其相反,从对象设备将一定程度容量的数据作为一起接受、缓存的数据,顺次传输至应用程序和设备驱动程序。即使是应用程序和设备驱动程序对传输数据容量进行限制,分割后传输数据的情况,通过将一定程度容量的数据合并后作为一个(或者减少数量)指令、状态而发出、传输,由此实现高速化。并且,当收到读取请求时,若与此请求对应的数据被缓存于高速缓冲存储器,就能够对其进行传输。若将传输过一次的数据进行缓存,则下次收到同样的数据读取请求时能够高速传输。并且,一般来说,因为存储设备的随机存取伴随读写头的寻道动作,因此这会引起传输速度的降低,但是如上述那样通过从高速缓冲存储器传输数据,就能够减少对对象设备的读取请求的发出频率,并也与对象设备随机存取产生的频率的减少相关,从而能够实现进一步的高速化。此外,对象设备为USB大容量存储器时,可以将此种结构的设备控制器更换为标准USB大容量存储驱动程序,也可以在标准USB大容量存储驱动程序的下级处连接此种结构的设备控制器。
并且,本发明的优选方案,其特征在于,上述控制部从上述应用程序或设备驱动程序接收到读取或写入请求时,对其后将发生的读取或写入请求进行预测,并将该预测的读取或写入请求作为上述多份合并的读取或写入请求,基于预测内容来决定缓存于高速缓冲存储器中数据。
接收读取或写入请求时,通过预测其后将发生的读取或写入请求来决定高速缓冲存储器中所要保存的内容。通过预先保存数据于高速缓冲存储器中,能期待提高特别是读取时的高速化。
另外,本发明进一步优选方案,其特征在于,具有历史记录部,该历史记录部记录从上述应用程序或设备驱动程序接收到的读取或写入请求的历史,上述控制部基于上述历史记录部中记录的读取或写入请求的历史来预测其后发生的读取或写入请求。
该构成中,记录读取或写入请求的历史。该历史既可以记录在RAM上,也可以记录在外围设备和PC上。如果记录在外围设备或PC上则与外围设备再连接或PC重新启动时也能够参照历史。通过参照该历史来预测其后发生的读取或写入请求。例如,如果存在与此次读取或写入请求一致的历史时,合并与此关联的历史(例如区域号和传输程序断数量连续的),并作为一个连续的读取或写入请求来对待,预测其后发生的读取或写入请求。
另外,本发明的进一步优选方案,其特征在于,上述控制部包括连接在上述应用程序或设备驱动程序侧的上级控制部以及连接在对象设备侧的下级控制部,上述上级控制部从应用程序或设备驱动程序接收到读取或写入请求时,将表示该请求内容的信息发送至上述下级控制部;上述下级控制部基于表示上述请求内容的信息预测对其后发生的读取或写入请求。
该结构具有上级控制部和下级控制部。上级控制部从应用程序或设备驱动程序接收读取或写入请求时,将此内容发送至下级控制部。下级控制部根据所接收的内容预测其后发生的读取或写入请求。即使是上级控制部和下级控制部之间存在标准设备驱动程序(例如USB大容量存储驱动程序),此标准设备驱动程序限制传输数据容量,进行分割后再传输数据的情况下,也因为应用程序或设备驱动程序的读取或写入请求由从上级发送过来,从而能够对应传输的数据内容进行高精度预测。
并且,本发明的设备控制器为一种连接于应用程序或设备驱动程序和对象设备之间的设备控制器,其特征在于,具有控制部,该控制部包括连接在上述应用程序或设备驱动程序侧的上级控制部以及连接在对象设备侧的下级控制部,
上述上级控制部从应用程序或设备驱动程序接收到读取或写入请求时,将此请求直接传输至上述下级控制部,上述下级控制部直接从上级控制部接收到读取或写入请求时,基于该读取或写入请求,从上述对象设备及上述应用程序或设备驱动程序传输数据。
所述结构中,上级控制部直接将读取或写入请求传输至下级控制部。下级控制部根据请求,直接传输数据至下级、上级。因为应用程序或驱动程序和对象设备之间没有数据的分割传输,因此能期待高速化。此外,作为为了直接传输读取或写入请求的触发器可以考虑各种形态,例如只需判断是否为规定量以上的传输数据容量。
并且,本发明优选的方案,其特征在于,上述控制部具有高速缓冲存储器,该高速缓冲存储器缓存从上述对象设备及上述应用程序或设备驱动程序传输来的数据,上述控制部当接收到上述写入请求时,将与此请求对应的数据缓存于上述高速缓冲存储器中,当接收到上述读取请求时,如与此请求对应的数据被缓存于上述高速缓冲存储器中,则将该数据传输至上述应用程序或设备驱动程序。
该构成中,具有缓存传输数据的高速缓冲存储器。控制部接收到读取请求时,在高速缓冲存储器中有与此请求对应的数据,则直接将其传输。通过将传输过一次的数据缓存起来,下次接收到相同数据读取请求时就能够进行高速传输。
并且,本发明进一步优选方案,其特征在于,具有设定部,该设定部设定上述高速缓冲存储器的容量及数量,上述设定部在上述控制部从上述应用程序或设备驱动程序接收到读取或写入请求时,基于读取或写入数据的内容、读取或写入数据的总容量、对象设备的类别或与对象设备的传输速度,或者由这些任意组合的条件来设定上述高速缓冲存储器的容量及数量。
该结构中,对高速缓冲存储器的容量、数量进行设定。若增大高速缓冲存储器容量,则能够增加可以一次传输的数据量,若增加数量也能够进行并列处理。高速缓冲存储器的数量及容量的设定方式基于读取或写入数据的内容、读取或写入数据的总容量以及对象设备的类别或与对象设备的传输速度等。
发明效果
根据本发明,由于能够传输比应用程序或设备驱动程序限制的数据量以上的数据,因此能够提高传输速度。
【附图说明】
图1是表示使用USB接口连接的PC及外接HDD的框图。
图2是表示单批量(bulk‑only)协议构成的概念图。
图3是本实施方案的PC和外接HDD的框图。
图4是OS11上装载的各种驱动程序的功能框图。
图5是表示上级驱动程序151以及下级驱动程序152的详细结构的功能框图。
图6是OS11上装载的各种驱动程序的功能框图。
图7是表示上级驱动程序151的工作的流程图。
图8是表示下级驱动程序152的工作的流程图。
图9是表示下级驱动程序152的工作的流程图。
图10是表示指令结束中断时的工作的流程图。
图11是表示计时器中断、初始化时、驱动程序结束时的工作的流程图。
图12是表示实现本发明设备控制器的其他实施例的框图。
图13是表示上级驱动程序151及下级驱动程序152执行其他工作时的结构的功能框图。
附图标记说明
1‑PC
2‑外接HDD
【具体实施方式】
作为装载于PC的OS通常普及的有Windows(注册商标)。本实施方案中,使用附图对在装载Windows(注册商标)XP的PC上连接USB接口的外接HDD的情况进行说明。此外,本发明不对OS的类别、连接设备的类别以及接口进行限定。
图3为本实施方案中PC和外接HDD的框图。PC1和外接HDD2通过USB接口(I/F)连接。PC1在管理整体的OS11上装载有执行各种处理的应用程序101以及包括用于使外围设备工作的各种驱动程序的驱动程序102。应用程序101通过驱动程序102、USB控制器12、以及USBI/F13读出(读取)存储在外接HDD2中的数据,或将数据写进(写入)外接HDD2中。
外接HDD2中控制器22通过USBI/F21接收读取或写入的请求,与此相对应读取存储于HDD23中的数据,或将数据写入HDD23中。
图4为装载于OS11上的各种驱动程序的功能框图。在该图中,应用程序101、通用盘驱动程序502、USB大容量存储驱动程序503、USB主控制器驱动程序504、上级驱动程序151以及下级驱动程序152是装载于OS11上的功能部。实际上,这些功能部以安装于OS11上的软件来实现。
应用程序101通过驱动程序102中包含的各种驱动程序来执行对外接HDD2的读取或写入请求。该图表示应用程序101发出写入请求,传输数据的例子。
应用程序101对上级驱动程序151发出写入请求,传输应写入外接HDD2的HDD23中的数据。上级驱动程序151将此写入请求及数据传输至下级通用盘驱动程序502,并将从应用程序101有过写入请求的信息及显示其数据量的信息作为存取信息发送至下级驱动程序152。关于上级驱动程序151传输到下级驱动程序152的存取信息将在后面详细陈述。
通用盘驱动程序502将从上级驱动程序151接收的数据传输至USB大容量存驱动程序503。此时,因为USB大容量存储驱动程序503的数据传输量上限为64kB,因此通用盘驱动程序502将数据以每64kB分割并传输至USB大容量存储驱动程序503。
因为USB大容量存储驱动程序503根据单批量传输协议(参照图2)执行数据传输,因此对该分割成64KB的数据附加指令、状态,依次传输至下级驱动程序152。
下级驱动程序152缓存从USB大容量存储驱动程序503传输来的数据,在指定的时间传输至USB主控制器驱动程序504。USB主控制器驱动程序504将此数据传输至外接HDD2。因为下级驱动程序152将从USB大容量存储驱动程序503传输来的数据进行缓存,并作为一定程度容量(64kB以上)的数据,一起传输至USB主控制器驱动程序504,因此指令、状态的发出一次(或者比按每64kB赋予的要少)完成。从而,由指令、状态的处理时间导致的延迟最小化。此外,对从通用盘驱动程序502传输至下级驱动程序152的数据,虽然按每64kB附加指令、状态,但因为此传输为OS上的存储器(RAM)传输,因此与向外接HDD2的数据传输速度相比十分高速(依靠RAM的传输速度)。
另外,该实施方案中,虽然有时应用程序101直接传输数据至USB大容量存储驱动程序503,与上述相同,因为USB大容量存储驱动程序503的数据传输量上限为64kB,应用程序101将数据以每64kB分割后传输,USB大容量存储驱动程序503传输赋予了指令、状态的数据。此时,因为下级驱动程序152将数据缓存后再传输至下级,因此能够最小化由指令、状态信息处理时间导致的延迟。
接下来,对上级驱动程序151和下级驱动程序152的详细的工作进行说明。图5为表示上级驱动程序151及下级驱动程序152详细结构的功能框图。此外,与图4相同的结构使用相同附图标记,并省略其说明。上级驱动程序151具有读取、写入请求接收部155。另外,下级驱动程序152具有控制器156、数据库157、高速缓冲存储器158A~158C、计时器159以及指令列160。
读取、写入请求接收部155接收从应用程序101发出的读取或写入请求。读取、写入请求接收部155将该请求传输至下级通用盘驱动程序502,并将请求内容作为存取信息发送至下级驱动程序152。读取或写入请求通过通用盘驱动程序502及USB大容量存储驱动程序503传输至下级驱动程序152。
在存取信息中,存储有LBA(Logical Block Addressing:HDD的区段指定号)、传输程序段数量、传输方向等信息。传输程序段数量指传输数据的容量。传输方向是表示是从下级至上级的传输(读取)还是从上级至下级的数据传输(写入)的信息。
该存取信息作为预测数据库存储在下级驱动程序152的数据库157中。下级驱动程序152的控制器156接收从USB大容量存储器驱动程序503的读取或写入请求时,参照数据库157。通过参照预测数据库,能够对传输数据容量进行预测。
另外,控制器156将从USB大容量存储器驱动程序503接收到的读取或写入请求作为历史数据库存储于数据库157中。历史数据库用于控制器156生成、修正预测数据库。即,接收到大容量存储器驱动程序503的读取或写入请求时,参照以往的历史数据库,将LBA、传输程序段、传输方向相同或一部分相同(类似)的数据作为预测数据进行传输。另外,当存在相同历史时,能够将与此关联的历史(例如基于LBA和传输程序段数量,能够判断有过连续请求)进行合并、并作为一个指令存储于预测数据库中。此外,虽然历史数据库存储在该图中的数据库157内,并被暂时存储于RAM上,但是也可以将其存储于PC1的OS11上,或外接HDD2的HDD23上。由此,与外接HDD2再连接或PC1重新启动时也能够参照以往的历史。
如果从USB大容量存储驱动程序503传输来的请求为读取请求,则控制器156能够通过参照预测数据库的传输程序段数量来预测传输数据容量。此时,如果上级驱动程序151将存取信息发送至下级驱动程序152并已经存储于预测数据库之中,则能够预测传输数据容量(应写入的全部数据)。当控制器156预测为64kB以上的数据被传输时,将从上级传输来的数据存储于高速缓冲存储器158A~158C中的任意一个中。
高速缓冲存储器158A~158C为在RAM上虚拟形成的区域,其数量及容量由控制器156设定。高速缓冲存储器的数量及容量可以进行适宜的设定,在该图的例子中准备使用3个高速缓冲存储器,其容量分别设定为1MB。此外,能够改变工作中高速缓冲存储器的数量及容量。对高速缓冲存储器的数量及容量用户可以进行手动设定,也可以如后述那样根据工作状态适当改变。
如上所述,控制器156将从上级传输来的数据依次存储于高速缓冲存储器158A~158C中的任一个中。存储此写入用数据的高速缓冲存储器成为写入用高速缓冲存储器。但是,因为USB大容量存储驱动程序503对每64kB附加指令、状态后再传输数据,控制器156每接收64kB数据时,向USB大容量存储驱动程序503反馈指令结束虚拟信号。
控制器156在指定时间对下级USB主控制器驱动程序504发出写入请求,并传输写入用高速缓冲存储器的数据。该指定时间为,写入用高速缓冲存储器容量装满的时间,或者由计时器159的中断处理所决定的时间。从USB大容量存储驱动程序503接收到写入请求时,控制器156使计时器159开始工作。另外,写入用高速缓冲存储器容量装满的情况下,也对USB主控制器驱动程序504发出写入请求,传输写入用高速缓冲存储器的数据。
此外,USB主控制器驱动程序504以下的下级执行其他处理的时候,控制器156暂时将写入请求登记于指令列160中,随后当下级处理有空闲时执行写入请求。此外,无计时器的时候,因为写入用高速缓冲存储器的内容保持原样并且不被写入HDD23中,因此此状态下如发生异常(USB数据线被切断、PC1死机等情况),则可能产生本来应写入HDD23中的数据被破坏、文件破损等损失。因此,使用计时器,例如经过一定时间的无指令发出状态时,通过写入写入用高速缓冲存储器中的内容,防止异常情况时的文件破坏等。
如上所述,从应用程序101开始执行数据的写入。接下来,在图6中,示出了应用程序101发出读取请求、传输数据的例子。
图6为OS11上装载的各种驱动程序的功能框图。此外,对于和图4共同的结构给予相同的附图标记,并省略其说明。
首先,应用程序101对上级驱动程序151发出读取请求。上级驱动程序151将此请求传输至下级通用盘驱动程序502,并将从应用程序101接收了读取请求的意思(存取信息)传输至下级驱动程序152。
通用盘驱动程序502将从上级驱动程序151接收到的读取请求传输至USB大容量存储驱动程序503。此时,因为USB大容量存储驱动程序503的数据传输量上限为64kB,因此通用盘驱动程序502以每64kB分割读取请求。USB大容量存储驱动程序503将分割成每64kB的读取请求传输至下级驱动程序152。
下级驱动程序152从USB大容量存储驱动程序503接收到分割成每64kB的读取请求时,预测此后将连续接收读取请求,对USB主控制器驱动程序504发出预测读取请求,以传输一定程度容量的数据。USB主控制器驱动程序504基于此预测读取请求,从HDD2的HDD23中读出一定程度容量的数据。该读取数据缓存于下级驱动程序152中。下级驱动程序152根据从USB大容量存储驱动程序503接收到的读取请求,将缓存的数据顺次传输至上级。所谓一定程度的容量,虽燃可以进行适当的设定,但传输容量过大则传输速度变慢。即,由于等待传输结束,并确认其传输正常结束的状态之前不能开始向上级传输缓存的数据,因此这也是成为传输速度变慢的原因。并且,有必要使读取用高速缓冲存储器的容量变大。
因此,控制器156最初接收到64kB(或其以下,32kB等亦可)的读取请求时,读出其指定倍数(例如32kB的4倍128kB)容量的数据并缓存。此缓存的数据如果后来全部传输至上级,则读出更高指定倍数(例如128kB的4倍512kB)容量的数据。这样,通过逐渐增大缓存的数据的容量,抑制传输时间的同时,能够对读取用高速缓冲存储器的容量进行适当设定。
这样,下级驱动程序152通过从外接HDD2一次性读取一定程度容量的数据并缓存,使得对于外接HDD2的命令、状态的发出能够一次(或者比按每64kB赋予的要少)完成。从而,使由指令、状态的处理时间导致的延迟最小化。此外,虽然从下级驱动程序152传输到通用盘驱动程序502的数据分割成64kB,但因为该传输为OS上的存储器(RAM)传输,因此与从外接HDD2的数据传输速度相比十分高速(依靠RAM传输速度)。
参照图5,对上述读取请求发生时的上级驱动程序151及下级驱动程序152的详细的工作进行说明。读取、写入请求接收部155从应用程序101接收读取请求。读取、写入请求接收部155将此请求传输至下级通用盘驱动程序502,并将请求内容作为存取信息发送至下级驱动程序152。读取请求通过通用盘驱动程序502及USB大容量存储驱动程序503被传输至下级驱动程序152。此外,从通用盘驱动程序502及USB大容量存储驱动程序503传输来的读取请求被分割成每64kB的读取请求。
上级驱动程序151发送的存取信息作为预测数据库存储于下级驱动程序152的数据库157中。下级驱动程序152的控制器156当接受到由USB大容量存储驱动程序503的读取请求时,参照数据库157。通过参照预测数据库,能够预测传输数据的容量(应读取的全部数据)。
另外,将从USB大容量存储驱动程序503接收的读取请求作为历史数据库存储于数据库157中。当控制器156对预测数据库进行生成、修正操作时使用历史数据库。即,接收从USB大容量存储驱动程序503的读取请求时,参照以往的历史数据库将LBA、传输程序段数量、传输方向相同或类似的数据作为预测数据库转储起来。当存在一致的历史时,也能够将与此相关联的历史(例如基于LBA和传输程序段数量,判断有过连续要求)合并,作为一个指令存储于预测数据库中。
当控制器156从USB大容量存储驱动程序503接收读取请求时,通过参照预测数据库的传输程序段数量,能够预测传输数据量(应读取的全部数据)。当预测到进行64kB以上数据传输时,控制器156向USB主控制器驱动程序504发出读取请求,以传输存储在预测数据库中的64kB以上数据,将被传输的数据存储于高速缓冲存储器158A~158C的任意一个中。
存储所述数据的高速缓冲存储器成为读取用缓冲存储器。与从USB大容量存储驱动程序503传输来的读取请求相对应,控制器156顺次传输读取用高速缓冲存储器的数据。此外,当上级驱动程序151发出应读取的全部数据的存取信息时,虽然能够将全部数据正确地存储于读取用高速缓冲存储器中,但当应用程序101直接对USB大容量存储驱动程序503发出读取请求或上级驱动程序151不发出应读取的全部数据的存取信息时,就有必要在控制器156从上级接收到读取请求时生成预测数据库。此时,参照如上述的历史数据库即可。例如,最初接收64kB(或其以下)读取请求时,预测为指定倍数容量的数据从与该读取请求相连续的初始LBA被读取。从上级驱动程序接收到与预测的初始LBA对应的读取请求时,执行其预测容量的读取,当所预测的数据全部通过上级驱动程序读取时,还预测为更高的指定倍数容量的数据从与该预测读取相连续的初始LBA被读取。
如上所述,由应用程序101执行数据的读取。
接下来,使用流程图对上级驱动程序151以及下级驱动程序152的工作进行说明。图7(A)为表示上级驱动程序151工作的流程图。上级驱动程序151从应用程序接收到读取、写入请求时,将此请求内容作为存取信息发送至下级驱动程序152(s1)。另外,上级驱动程序151向下级(通用盘驱动程序502)传输读取、写入请求(s2)。存取信息作为预测数据库存储于下级驱动程序152的数据库157中。
此外,上级驱动程序151也能够执行如图7(B)及图13所示的工作。图7(B)为表示上级驱动程序151的其他工作的流程图,图13为表示执行所述工作时的上级驱动程序151及下级驱动程序152的详细结构的功能框图。另外,对于与图5相同的结构,给予相同的附图标记并省略其说明。
图7(B)中,上级驱动程序151从应用程序收到读取、写入请求时,对传输数据容量是否在规定量以上(例如64kB以上)进行判断(s5)。如不在规定量以上则将请求内容作为存取信息传输至下级驱动程序152(s6),传输读取、写入请求至通用盘驱动程序502(s7)。如果在规定量以上,则如图13所示,将读取、写入请求直接传输至下级驱动程序152的控制器156(s8)。此种情况下,不向通用盘驱动程序502传输读取、写入请求。通过将读取、写入请求直接传输至控制器156,不必将数据分割成64kB而能进行传输。并且,因为不通过通用盘驱动程序502以及USB大容量存储驱动程序503,因此能够缩短处理时间,且可以使传输更加高速化。若传输数据容量不在规定量以上,则因为USB大容量存储驱动程序能够一次处理数据,所以将其传输至下级(通用盘驱动程序502)。
此外,可以将s5处理替换成是否为读取请求的判断。若是读取请求则直接转送至下级驱动程序152的控制器156。因为控制器156在从上级(USB大容量存储驱动程序)接收到读取、写入请求时进行预测处理,特别是,在读取时基于预测结果从设备中读出一定程度的数据容量,并缓存后向上级反馈,因此有可能发生与此相应的延迟。因此,请求读取时从上级驱动程序151直接将此请求传输至控制器156,不执行预测处理和缓存处理,因此能够缩短传输时间(至传输开始的时间)。
此外,在判断是否为读取请求和判断s5中可以执行其中之一,亦可以两种都执行。此外,也可以采用其他判断方法。例如,重视从设备侧预先读出数据并缓存时(应用程序重复存取相同数据内容的情况),请求读取时也不直接将请求传输至控制器156,而是传输至下级。上级驱动程序151直接将读取、写入请求传输至下级驱动程序152的控制器156时,在高速缓冲存储器中不积存数据。因此,如果是应用程序于同一文件中存取的情况,则传输至下级以将数据积存于高速缓冲存储器中即可。但是,由于下级驱动程序152在传输数据的同时将此数据复制到高速缓冲存储器中,所以即使是直接收到读取、写入请求的情况,也能够积存数据。此种情况下,因为是RAM上的复制,所以复制速度快,而且并不显著降低处理速度。
图8及图9是表示下级驱动程序152的工作的流程图。当接收到从上级驱动程序(USB大容量存储驱动程序503或应用程序101)的读取请求、写入请求或其他请求时,才开始该工作。
首先,下级驱动程序152执行存取预测(s11)。存取预测通过参照从上级驱动程序151传输来的存取信息或历史数据库进行。或者,亦可以如下述方式进行精密存取预测。
(1)基于文件系统的预测
该预测方法是通过对外接HDD2的文件系统进行解析来执行存取预测的方法。HDD的文件例如为FAT文件系统格式的情况下,则通过参照文件管理区域,能够对每个文件的记录位置(区段)和大小进行判断。从而,当收到从上级应用程序或驱动程序的读取请求时,预测为在与该请求指示记录位置相对应的文件的数据中有存取。并且通过预测为不执行文件大小以上的读取,不执行非必要的读取,从而减少无用的处理时间。
此外,该文件管理区域因为是频繁执行存取的区域,所以可以在读取用高速缓冲存储器中进行读取、保存。不用每次在HDD2中存取,通过存取保存在读取用高速缓冲存储器中的文件管理区域,就能够减少存取预测的处理时间。
(2)基于设备类别、存储信息类别的预测
该预测方法是基于被连接对象设备的种类(上述实施方案中的HDD)或应传输数据的文件结构(存储信息类别)来执行存取预测的方法。例如,被连接设备为DVD‑ROM,且在此设备中插有DVD‑Video介质时,顺次读取、无写入请求。因此,生成数据库使缓存数据直到装满读取用高速缓冲存储器为止。此外,当读取用高速缓冲存储器中缓存的数据被全部读取时,立刻删除该缓存数据并缓存新数据,则能够有效率地使用读取用高速缓冲存储器。
另外,使高速缓冲存储器的数量及容量变化时,能够根据设备类别使其变化。例如,如上所述插有DVD‑Video介质时,因为没有写入请求,因此增加读取用高速缓冲存储器的数量,并将其容量设定成大容量。相反,插有未写入DVD‑R介质时,因为主要是写入请求,所以增加写入用高速缓冲存储器数量,并将其容量设定成大容量。
(3)基于传输速度解析的预测
此预测方法是基于上述设备类别、存储信息类别进行预测的应用例,根据设备类别判断数据传输速度趋势,并以此来进行存取预测的方法。例如,连接多层型DVD介质的情况下,越过各层边界线的随机存取的传输速度十分缓慢。因此,以降低跨过各层边界线的存取频率的方式缓存信息,由此生成预测数据库。
另外,当使高速缓冲存储器数量及容量变化时,也能够根据设备类别和数据传输速度趋势来变化。例如,当与对象设备的数据传输速度缓慢时(例如USB MO(光磁盘)大致4MB/s左右时),即使增大高速缓冲存储器容量并在其中缓存大量数据,但因为原本数据传输速度就缓慢,所以不能期望其传输速度提高。因此,当与对象设备的数据传输速度迟缓时,将高速缓冲存储器容量设定成小,并抑制RAM消耗。
(4)读取请求时渐渐增加一次传输的数据量的方法
此预测方法是当读取请求时,基于用上述(1)~(3)的方法来预测的读取请求,对预测数据库进行修正(分割)的方法,以免从对象设备一次性地进行数据传输。例如将预测数据库修正为首先缓存读取请求的指定倍数(例如4倍)容量的数据。当该缓存数据全部被传输至上级时,则将预测数据库修正为缓存更高指定倍数容量的数据。通过顺次增大缓存数据容量,能够抑制传输时间。另外,还能够减少由于实际请求和预测数据库的不同而其后无读取请求时浪费的数据量。而且,能够通过随时改变高速缓冲存储器容量来控制RAM的消耗。此外,也可以在实际执行读取请求时(后述s29处理时)对预测数据库进行修正处理。
如上所述那样进行存取预测。此外,高速缓冲存储器数量和容量可由用户来手动设定。而且,写入用高速缓冲存储器和读取用高速缓冲存储器的确保数量能由用户来设定。当用户想使读取为优先时增加读取用高速缓冲存储器的数量,当使写入为优先时增加写入用高速缓冲存储器的数量。
接下来,在图8及图9中,下级驱动程序152对从上级传输来的请求内容进行判断(s12)。如不是读取、写入请求,则判断对象设备是否正在执行其他读取、写入请求(s13),若处理为空闲则将此请求传输至下位侧(s14)。如果正在执行其他处理,则将此请求登记于指令列(s15)。若登记到指令列,则以后处理为空闲时就能够执行。并且,收到如FLUSHCACHE指令这样的、如指示写入写入用高速缓冲存储器数据这样的指示的情况,此时将写入用高速缓冲存储器中缓存的数据传输至下级。
s12中,下级驱动程序152当判断为读取、写入请求时,参照高速缓冲存储器(s16)。在此,如果从上级收到的请求为读取请求,且在读取用高速缓冲存储器或写入用高速缓冲存储器中缓存有相符合的数据,则将其传输至上级,并反馈指令的结束(s17)。
s12中,下级驱动程序152判断为来自上级的请求为连续的写入请求时,将数据连续写进写入用高速缓冲存储器中,并反馈指令的结束(s16→s18)。随后,判断写入用高速缓冲存储器容量是否已满(s19),若容量未满则启动计时器(s20),结束工作。
s19中,写入用高速缓冲存储器容量已满时,判断对象设备是否正执行其他读取、写入等处理(s21),若处理为空闲则将写入请求发送到下级,并传输缓存的数据(s22)。如果正执行其他处理则将写入请求登记在指令列中(s23)。若登记于指令列,则其后处理为空闲时就能够执行。
s16中,下级驱动程序152判断为没有符合来自上级的请求的缓存数据时,通过参照预测数据库来比较来自上级的请求和预测数据库的内容(s24)。若预测数据库内容与来自上级的请求不一致(LBA和传输程序段数量不一致),则将此请求按原样传输至下级(s25)。此外,此时如果下级正执行其他处理,则可以先登记于指令列,随后再执行。
来自上级的请求为写入请求,并且与预测数据库内容一致(LBA和传输程序段数量一致)时,确保写入用高速缓冲存储器(s26)。在此,如有空置的高速缓冲存储器,则将此高速缓冲存储器作为写入用高速缓冲存储器而确保,如果高速缓冲存储器都作为写入用或读取用而被使用时,将最早更新的高速缓冲存储器内容消去,确保写入用高速缓冲存储器。此外,写入用高速缓冲存储器数据也可作为读取用高速缓冲存储器数据而使用。
随后,在确保的写入用高速缓冲存储器上保存从上级传输来的数据,并反馈指令的结束(s27)。
在s 24中,下级驱动程序152判断为来自上级的请求为读取请求,并与预测数据库内容一致(LBA和传输程序段数量一致)时,确保读取用高速缓冲存储器(s28)。与上述相同,若有空置的高速缓冲存储器则将其作为读取用高速缓冲存储器,若没有空置的则将最早更新的高速缓冲存储器的内容消去并确保为读取用高速缓冲存储器。
随后,基于预测数据库,将预测部分的请求发送至下级,于读取用高速缓冲存储器中缓存数据(s29)。此时,不用一次性缓存大量数据,可以分多次对数据进行存储。此情况下,将余下的读取请求登记在指令列中。通过将读取请求分割成多个,能够将缓存完毕的数据传输至上级驱动程序的同时,与其并列地将接下来的连续的读取数据缓存,并能够提高USB总线的使用率。
接下来,图10是表示来自下级的指令结束中断时的工作的流程图。
首先,下级驱动程序152对从下级接收的指令结束是否为表示写完缓存在写入用高速缓冲存储器中数据的意思的指令进行判断(s31)。当完成了写入用高速缓冲存储器的数据的写入时,将该写入用高速缓冲存储器变更为读取用高速缓冲存储器(s32)。此外,将写入用高速缓冲存储器变更为读取用高速缓冲存储器的时机并不局限于所述时机。而且,如上所述,将写入用高速缓冲存储器数据作为读取用高速缓冲存储器数据来使用显然也是可能的。
随后,下级驱动程序152判断是否为有必要向上级进行结束报告(传输)的指令(s33)。若必要则向上级反馈指令结束(s34)。
进而,下级驱动程序152参照指令列160,判断是否有排队指令存在(s35)。存在排队指令则将其传输至下级(s36)。
接下来,图11是表示计时器中断、驱动程序初始化、驱动程序结束时的工作的流程图。
首先,该图中(A)是表示计时器中断工作的流程图。若计时器的计时结束,下级驱动程序152则执行此工作。下级驱动程序152确认写入用高速缓冲存储器中是否缓存有数据(s41)。如果缓存有数据,则向下级发送写入请求,将在写入用高速缓冲存储器中缓存的信息传输至下级(s42),然后结束工作。若写入用高速缓冲存储器中没缓存数据则结束工作。
该图中(B)是表示驱动程序结束时的工作的流程图。在关闭PC时,解除外接HDD2连接时开始此工作。下级驱动程序152将历史数据库转记保存于外接HDD2或OS11上。
该图中(C)是表示驱动程序初始化工作的流程图。重新启动PC1或再次连接外接HDD2时开始此工作。下级驱动程序152将历史数据库从外接HDD2或OS11中读出,在RAM中展开以构建数据库157(s61)。
此外,虽然上述实施方案示出了实现上级驱动程序151、下级驱动程序152,并将其连接到通用盘驱动程序502或USB大容量存储驱动程序503的例子,但是将USB大容量存储驱动程序503更换为专用驱动程序亦能够实现本发明的设备控制器。图12是表示将USB大容量存储驱动程序更换为专用驱动程序时的例子的功能框图。此外,与图4相同的结构使用相同附图标记,并省略其说明。
该例子中,具有连接于USB主控制器驱动程序504、通用盘驱动程序502以及应用程序101的专用USB大容量存储类驱动程序171。专用USB大容量存储类驱动程序171是用来替换以往的标准USB大容量存储驱动程序的(参照图1)。
该专用USB大容量存储类驱动程序171,与上述实施方案相同,内置有高速缓冲存储器,与从上级接收的读取、写入请求相对应地缓存数据。专用USB大容量存储类驱动程序171的工作和图8至图10中示出的下级驱动程序的工作相同。
在该例子中,应用程序101将数据以每64kB分割,在发出读取或写入请求时,专用USB大容量存储类驱动程序171将数据缓存在高速缓冲存储器中,并传输数据。
此外,该专用USB大容量存储类驱动程序171不存在64kB的数据传输量的上限,因此能够处理比64kB大的读取或写入请求。因此,由于应用程序101或通用盘驱动程序501不必将读取或写入请求以64kB为单位分割就能够发出,所以指令、状态的处理的延迟缩短,从而能够使数据传输高速化。