专利名称:数据处理装置及其方法
技术领域:
本发明涉及不依存于特定的操作系统(OS)处理数据的方法。
背景技术:
近年来,作为在计算机中处理的多媒体数据,在各种各样的用途中利用了动画以及声音等。例如,广泛普及了利用动画解码器实时地对电视播放等的动画进行转换,并录像到硬盘中的被称为硬盘录像机的设备、将作为数字数据记录在DVD等光盘中的动画内容数据显示在视频显示器装置上的播放器等。一般在这些内容处理中,必须以指定的比特率在一定时间内对内容数据进行处理。另外,为了在各种各样的装置中能够利用这些多媒体内容,重要的是能够容易地开发出执行这些复杂的流处理的程序模块。因此,存在在容易实现高性能的OS核心中执行进行内容处理的程序的方式。流是指必须以预先决定的顺序在一个方向上进行处理的数据序列。例如,有声音数据的数据序列、动画数据的数据序列等。流处理是指对包含在这些流中数据进行处理。
在一般的OS中,存在作为用来执行应用程序的空间的用户空间、作为用来执行OS的功能的空间的核心空间的2个空间。在核心空间中进行处理的情况下,能够实现高速的执行,但在核心空间中执行的程序基本都很大程度地依存于安装该核心的OS的规格。例如,对于每个OS来说在利用功能时使用的接口都不同、根据OS的不同利用功能的步骤也不同。还可知对于各个平台来说用来利用设备的设备驱动程序是特有的,不能通用。另外,作为执行核心空间中的处理的方法,有通过将多个被称为过滤器的处理数据的设备驱动程序结合起来,来进行内容处理的方法(例如,参照特开平10-283195号公报)。
这是以下的方法根据在用户空间中执行的应用程序在核心空间内生成被称为过滤器的软件模块,在连接多个过滤器的输入输出而构筑内容数据的流路径后,通过从应用程序请求处理的开始、停止等,来执行内容处理。在此,过滤器和设备驱动程序是被特定为设备和数据形式的模块,它们分别具有用于输入输出和控制的接口,通过将各个过滤器所处理过的数据传送到其他过滤器,来对数据进行处理。由于所有的过滤器都能够在OS的核心部分执行,所以该方式能够实现高性能。但是,在该方式中,并没有考虑到进行多个内容处理时的优先处理。例如,考虑在处理多个内容时,在同时进行录像和重放的情况下,产生了希望提高录像的优先度的要求,但难以与之对应。
如前面所述,在现有的方法中,作为能够容易地保证性能的驱动程序,在OS的核心空间中安装了处理流的模块。它对OS和硬件结构(以下将该组合称为平台)的依存性高,程序无法对应不同的平台,由于各平台具有各自固有的内容数据处理方法,所以有以下的第1个问题必须针对每个平台开发进行内容处理的程序,使开发工程增大。
另外,在特开平10-283195号公报中,由于在内容处理中不存在管理功能,所以例如在同时处理多个内容时,无法指定各个处理的优先度。例如,在同时进行从某设备取得数据并记录到存储设备中的处理、从某设备取得数据并显示在显示器上的处理这2个处理的情况下,例如,即使在希望优先进行前者的处理的情况下,由于不存在统一管理这些处理的功能,所以具有难以适当地变更双方处理的优先顺序的第2个问题。
进而,在上述情况下,在基于独自安装的多个内容处理进行处理的情况下,由于不对硬件资源进行适当的管理和分配,所以具有会产生处理所必须的CPU资源不足的第3个问题。
发明内容
本发明就是要解决上述问题中的至少一个问题。
为了解决上述第1个问题,在本发明中,提供能够对应于各种平台的多媒体内容处理装置。
在本发明中,通过具备向上位提供吸收每个平台的差异而使多媒体内容的处理通用化的接口的层,来实现使上位的软件模块不依存于平台的结构。
为了解决上述第2和第3个问题,在本发明中,通过利用一个执行过程例如进程或线程来执行多个流处理,统一地管理向内容处理的各个处理分配哪一个资源,从而实现处理的优先处理和资源的管理。
根据本发明,能够在不同的平台上利用使用内容数据的程序。另外,还能够管理多个内容处理的执行,能够降低使用资源量。
图1是展示作为处理点间的数据流而构成的数据处理的处理流的结构图。
图2是展示本实施例的要素的整体结构的结构图。
图3是展示硬件结构的结构图。
图4是展示本实施例的处理点的定义的结构图。
图5是展示本实施例的控制接口的图。
图6是展示本实施例的处理点的调度功能的处理步骤的流程图。
图7是展示用来提示存储在存储装置中的使用硬件解码器被解码的图像过滤器的数据处理的流的例子的结构概要图。
图8是展示在操作系统的应用程序级上执行的本实施例的实际安装形式例子的结构图。
图9是展示在操作系统的核心级上执行的本实施例的实际安装形式例子的结构图。
图10是展示用来提示存储在存储装置中的使用硬件解码器被解码的图像过滤器的数据处理的流的例子的结构图,图11是展示管理调度时间的表的结构的图。
图12是展示数据对象的结构的图。
图13是展示管理数据存取模块ID和数据存取模块管理信息的地址的对应关系的表的结构的图。
图14是展示管理数据处理模块ID和数据处理模块管理信息的地址的对应关系的表的结构的图。
图15是展示构筑流处理的步骤的流程图。
图16是展示主模块的结构的图。
图17是展示连接模块的结构的图。
图18是展示流处理的结构的图。
具体实施例方式
以下,说明本发明的实施例。
使用图1,说明本发明的处理流程的概要。该图展示了作为动画内容从盘101取得动画数据,通过显示器171和扬声器181进行重放的处理。这些处理由以下部分组成从设备101取得数据的处理点100;分离声音数据和图像数据的处理点120;将图像输出到图像解码器170的处理点150;将声音输出到声音解码器180的处理点160。处理点是指在实现处理流程的程序中为了执行规定的处理而必需的部分。将在该处理点执行处理的软件模块称为主模块。将在后面使用图16说明主模块的详细结构。进而,连接模块将这些主模块相互连接起来,例如连接模块110将主模块100和主模块120连接起来。连接模块具有从连接的主模块的一个向另一个发送数据的功能。由此,主模块100取得的数据通过连接模块或其他主模块被发送到图像解码器170、声音解码器180,从而将图像显示在显示器171上,从扬声器180重放声音。
图2是展示本实施例的软件结构的图。在本结构210中,具备控制相互连接主模块的流处理的流管理器230、管理进行数据转换等的数据处理模块241的数据处理模块管理器230。流管理器由以下部分构成管理、操作主模块的主模块管理器231;用于依照执行计划执行主模块的处理的主模块调度器233;记录管理相互连接主模块的连接模块的连接模块管理器232。
还具备为了利用OS所具有的功能,而经由OS所提供的系统接口280来利用存储器管理、线程管理以及时间操作等资源管理功能的通用系统接口260;对设备进行存取,管理进行数据的取得和设备的控制的数据存取模块271的数据存取模块管理器270。
应用程序200利用控制接口240控制流管理器和数据处理模块管理器,能够发出希望的流处理的指令。将在后面使用图5说明能够指示的控制。
通过包含上述通用系统接口260和数据存取模块管理器270的层,形成接口层250。该接口层通过通用化了的接口向上位的层提供由OS所提供的系统接口280提供的功能。该通用化了的接口使由于平台的差异而产生的协议或指令方式的差异共通化,并提供给上位层,例如存在在进行网络通信时利用的界面接口。即使平台不同,通过该接口执行的功能也是相同的,但在每个平台中利用它的步骤则不同的。例如,在包含Linux的一般的Unix(注册商标)中,在作成通过TCP进行通信的界面时,可以顺序地执行socket函数、bind函数、listen函数以及accept函数。另一方面,在Windows(注册商标)中,基于不同的规格,必须进行与Linux不同的步骤。如果如现有技术那样在应用程序侧的处理中对应这些不同,则必须针对所使用的每个平台完全变更在平台中步骤不同的处理。所以,在通用接口中,例如作为用指定的端口作成服务器界面的处理的通用函数,提供makeServerTCPSock那样的通用化了的接口。例如,在Linux用的通用系统接口中,在该makeServerTCPSock函数中以上述的Linux中的步骤执行处理。而在Windows版的通用系统接口中,以Windows中的步骤执行处理。接着,在Linux中利用本申请的软件模块的情况下,使用Linux用通用系统接口,在Windows中利用的情况下,使用Windows用通用系统接口。接着,在应用程序中,在作成界面时,如果调用makeServerTCPSock,则该通用系统接口执行与该平台对应的步骤,因此,不需要针对每个平台变更应用程序。通过这样的方法,能够使平台所提供的功能和对设备的存取方法通用化。这样,在将图2的软件模块转移到不同的平台的情况下,如上所述需要针对包含在层250中的软件模块中的利用了根据平台的不同而不同的功能或使用步骤等的部分,对其处理方法进行变更,但通过该方法,上位的层,即控制接口220、数据处理模块管理器240、流管理器230和应用程序200不需要变更程序的处理,就能够转移到其他OS上。
使用图16、图17和图18,说明通过图2的结构如何实现在图1中说明了的处理。
图18展示了记录流处理的结构的表2000,由流管理器进行管理。该表的1行相当于一个流处理。流处理由以下部分组成流处理ID2001;构成它的主模块的主模块ID2002;构成它的连接模块的连接模块ID2003;流处理的状态2004。
图16展示了记录主模块的结构的表1800,由主模块管理器进行管理。该表的1行相当于一个主模块。一个主模块由以下部分组成主模块ID1801;流处理ID1802;数据处理模块ID1803;数据存取模块ID1804;输入连接模块ID1805;输出连接模块ID1806;执行等待数据对象矩阵1807;以及后处理等待数据对象矩阵1808。执行等待数据对象矩阵1807和后处理等待数据对象矩阵1808是能够输入输出数据的矩阵,用数组、队列、散列表或列表等实现。在图中,记载了表示在该表内是否存在矩阵的例子,但在主模块管理器内存在矩阵的情况下,也可以将其存在的地址记录到列1807、1808中。连接模块ID的-1的值表示连接模块没有与主模块100连接。
图17展示了记录连接模块的结构的表1900,由连接模块管理器管理。该表的1行相当于一个连接模块。一个连接模块由以下部分组成连接模块ID1901;流处理ID1902;开始点主模块ID1903;终点主模块ID1904;以及缓冲矩阵1905。缓冲矩阵1905是能够输入输出数据的矩阵,用数组、队列、散列表或列表等实现。在图中,记载了表示在该表内是否存在矩阵的例子,但在连接模块管理器内存在矩阵的情况下,也可以将其存在的地址记录到列1905中。
在图3中,展示了为了实施本实施例而使用的硬件结构。通过系统总线340连接了CPU300、RAM310或ROM320等存储器、时钟330、HDD等盘装置350、用来接收内容数据的播放的调谐器360、用来对多媒体数据进行编码/解码的多媒体解码处理器370以及内置扬声器的电视信号接收机等的显示器380。另外,将图2中的软件模块装载到存储器中由CPU执行。另外,例如在HDD录像机、DVD录像机、PC或监视照相机等中使用本硬件结构。
在图5中,展示了本实施例的应用程序为了向流管理器230发出指令,而向控制接口发出的指令的例子。在图5中,定义了向流管理器230发出的指令种类501、其参数502、返回值503。例如在用C或C++等程序语言开发本实施例的情况下,作为函数或模块实现这些控制接口。
另外,可以使用上述数据存取模块ID、数据处理模块ID、在图5中规定的指令,生成数据处理流并开始处理。将在后面使用图7详细说明。
使用图5说明作成、控制数据的处理流的指令。例如,如果执行流处理生成指令500,则生成流处理。具体地说,分配唯一的流处理ID,将流处理ID记录到图18的2000的未使用的1行中,生成流处理。作为返回值返回其值。在此,将“1”返回应用程序。
接着,应用程序使用该流处理ID,执行主模块生成指令520,生成主模块。具体地说,生成新的唯一的主模块ID,将主模块ID记录到图16的1800的未使用的1行中,并记录作为参数传送的流处理ID,通过在表2000中向与作为参数指定的流处理ID对应的流处理的主模块ID2002的栏中记录主模块ID,从而生成主模块。将分配的主模块ID作为返回值返回到应用程序。在此,返回“100”。
接着,同样地(如图16的1820所示)生成其他的主模块120。假设该主模块的模块ID为120。接着,通过使用连接模块生成指令540,用连接模块连接这些主模块。具体地说,分配新的唯一的连接模块ID,向图17的1900的未使用的1行记录连接模块ID,作为开始点主模块ID和终点主模块ID分别记录作为参数传送来的值。在该例子中,分别为100和120。接着,向表1800的主模块ID为100的行1810的输出连接模块ID记录110,向模块ID为120的行1820的输入连接模块ID记录110。接着,向表2000的流处理ID为1的行2010的连接模块ID2003记录连接模块ID。通过这些处理,完成了用来连接主模块间的连接模块的生成和设置。
接着,使用数据处理模块控制指令560、数据存取控制指令570,设置在主模块中进行怎样的处理。将在后面使用图14说明数据处理模块控制指令560的参数中的数据处理模块ID的详细,使用图13说明数据存取模块控制指令的参数中的数据存取模块ID。例如,在向主模块ID为100的主模块分配数据存取模块ID为1的处理的情况下,使用数据存取模块控制指令570。由此,向表1800的主模块ID为100的行的数据存取模块ID1804记录数据存取模块ID“1”。对于数据处理模块,也同样地利用数据处理模块控制指令560进行设置。将在后面使用图4详细说明数据处理模块、数据存取模块。
进而,在使用了580的数据处理控制指令的情况下,可以使用参数中的“指令”进行数据处理模块的控制和设置。例如,在进行网络处理的数据处理模块的情况下,可以使用“分组大小设置指令”,设置变更数据处理模块中的分组大小的处理。另外,还可以在例如从文件中读出数据的情况下指定其文件名、在从网络输入输出数据的情况下指定端口编号时使用数据存取模块控制指令570。
可以使用发出开始指令或停止指令的数据处理指令580控制数据处理的执行,并控制与流处理关联的各主模块的调度。由于流处理向表2000中登记了与流处理有关的连接模块和主模块,所以如果指定了流处理ID,则能够变更相关的连接模块和主模块的所有设置和动作。
应用程序能够经由事件管理指令590与数据处理模块401进行通信,可以传送错误等事件或结束数据处理。通过流处理废弃指令510废弃、结束数据处理,可以分别使用主模块废弃指令或连接模块废弃指令530、550有选择地进行废弃。该情况下的废弃相当于删除表的内容。
图13展示了管理数据存取模块ID及其数据存取模块的对应关系的表1300。该表存在于数据存取模块管理器270内。在该表1300中记录了数据存取模块ID1301、与之对应的输入输出执行处理部分的地址1302、输入输出完成处理部分的地址1303以及其功能概要的记述1304、1305。在图示的例子中,在数据存取模块ID为1的情况下记录“1310”、存在于第0xF98000000号位置的具有进行“向硬盘发出数据读入请求”功能的输入输出执行处理部分、存在于第0xF9808000号位置的具有进行“从硬盘取得数据”功能的输入输出完成处理部分。
例如在说明书等中记载数据存取模块ID和实际执行该模块的处理的对应关系,从而使用者得到实现必要功能的数据存取模块ID。或者根据功能栏1304、1305所记述的内容选择必要的模块。
在图14中展示了管理数据处理模块ID与该数据处理模块的对应关系的表。该表存在于数据处理模块管理器240内。在该表1500中记录了数据处理模块ID1501、与之对应的前处理部分的地址1502、后处理部分的地址1503以及这些功能的记述。在图示的例子中,在数据处理模块ID为100的情况下,记录“1510”、存在于0xFA8000000号位置的具有“指示读入指定了的文件。指定下一个调度时间”功能的前处理部分、存在于第0xFA808000号位置的具有“将取得的数据输出到输出连接”功能的后处理部分。例如在说明书中记载数据处理模块ID和实际执行该模块的处理的对应关系,从而使用者得到实现必要功能的数据处理模块ID。或者根据功能栏1504、1505所记述的内容选择必要的模块。
在图15中,展示为了进行图1所示的数据处理,应用程序使用图5所示的指令,连接主模块和连接模块,构筑数据处理程序的步骤。
最初,应用程序使用流处理生成指令500生成数据处理流(步骤1500),得到流处理ID。
接着,使用该流处理ID,并利用主模块生成指令520生成文件读出主模块,得到主模块ID。接着,在文件读出主模块中使用数据处理模块ID向数据处理模块控制指令560分配数据处理模块(步骤1511),使用数据存取模块ID向数据存取模块控制指令570分配数据存取模块(步骤1512)。同样,作成多路复用主模块(步骤1520),分配数据处理模块(步骤1521)。以下,同样地作成图像主模块(步骤1530),进行数据处理模块、数据存取模块的分配(步骤1531、1532),并作成声音主模块(步骤1540),分配数据处理模块、数据存取模块(步骤1541、1542)。接着,使用连接模块生成指令540作成从文件读出主模块连接到多路复用主模块的连接模块(步骤1550),得到连接模块ID,同样地作成从多路复用主模块连接到图像主模块的连接模块、连接声音主模块的连接模块(步骤1560、1570)。通过这样从应用程序进行处理,使所使用的主模块相互关联,并向处理分配所使用的数据处理模块和数据存取模块。
这样,应用程序通过控制指令进行主模块、连接模块等的生成、设置。基于从应用程序执行的指令,生成必要的主模块,使用连接模块连接这些主模块,作成数据处理流,在此基础上向主模块设置比特率等处理所必需的信息、处理所必需的数据存取模块和数据处理模块,通过指示数据处理的开始,能够执行规定的处理。
通过提供这样的功能,大幅度地减少了进行流处理的应用程序的代码。这是因为由于流处理以规定的比特率处理数据是重要的实时性高的处理,所以开发实现这样的处理的程序需要使用平台所提供的功能例如时间管理等,并使一部分处理占有CPU时间而使处理不停滞的高级的调度技术,但如果使用本实施例的方法,则由于由流管理器进行调度,所以利用流管理器的应用程序使主模块的生成和连接模块相关联,作成必要的数据存取模块和数据处理模块,可以将其与主模块相关联,而没有必要安装上述的调度功能。
另外,由于这些模块可以只利用流管理器所提供的不依存于平台的接口,所以应用程序在怎样的平台上都不用变更就能够使用。
图4是展示使用图16说明了的主模块的逻辑结构的图。主模块400具备执行依存于数据格式的数据处理的数据处理模块401、经由OS的系统接口280使用特定的硬件装置执行数据处理的数据存取模块405。在流管理器中通过模块固有的标识符(主模块ID)识别主模块。
通过固有的标识符(数据处理模块ID)识别数据处理模块401,还具备前处理部分402、后处理部分403。在表1800的列1803中记录使哪个数据处理模块与哪个主模块关联。也通过固有的标识符(数据存取模块ID)识别数据存取模块405,具备输入输出处理部分406和输入输出完成处理部分407。在表1800的列1804中记录使哪个数据存取模块与哪个主模块关联。
主模块通过连接模块410、420与其他主模块连接。连接模块具备缓冲矩阵411。在连接模块410与数据处理模块的输入侧连接的情况下,能够将存储在该连接模块内的缓冲区中的数据输出到数据处理模块的前处理部分。在与数据处理模块的输出侧连接的输出连接模块420的情况下,能够从数据处理模块的后处理部分输入存储在该连接模块内的缓冲区中的数据。
例如,将在其他主模块中处理的数据写入缓冲区,并输入到输入连接模块410。前处理部分402接收该数据,通过该前处理部分将该数据转换为数据对象408,输入到执行等待数据对象矩阵412中。数据存取模块405取得并处理它。将在后面使用图12详细说明数据对象408。
数据存取模块经由OS内的系统接口280对设备驱动程序430进行存取,进行硬件设备440和数据的输入输出。数据存取模块的输入输出执行处理部分406进行数据的输入输出请求或者对从前处理部分传送来的数据进行处理。作为处理可以考虑例如存储在硬件设备440中的文件的读入等的指示、数据对象中的数据408的加密处理用硬件中的加密处理的指示等数据转换处理等。输入输出完成处理部分407取得处理结果,作为数据对象409输入到后处理等待处理对象矩阵413中。后处理部分将从后处理等待处理对象矩阵413中取出的数据对象中的数据输出到输出连接模块402,结束主模块的数据处理。
主模块调度器233一边参照表1800、表1900一边执行这些动作。执行的定时是依照图11的调度表1100中记述的信息来执行。将在后面详细说明图11。
另外,主模块与一个或一个以上的输入连接模块以及一个或一个以上的输出连接模块连接,通过经由该连接模块连接2个或2个以上的主模块,能够实现一连串的数据处理流程。由此,能够将来自多个主模块的数据收集到单一的主模块中来对多个数据进行多路复用,或者将单一的数据流发送到多个不同的主模块。可以在图1所示的多路复用了的数据的分离、或者多个数据的多路复用等中利用它。
如果平台所具备的硬件设备不同,则数据存取模块的输入输出处理执行部分406、输入输出完成处理部分407可以改变其实现方式。通过修改该数据存取模块,比数据存取模块更上位的层的模块能够不依存于系统接口地执行处理。
图12展示了数据对象的结构。数据对象1200由数据列表1210、指令代码1212和指令参数1213构成。数据列表作为列表存储数据的地址1221、数据的大小1222。数据对象通过数据列表1210保存应该处理的数据,进而记录与该数据对应的指令1211和参数1213。并不必须将指令和数据对应地进行记录,也可以是数据为空只存储指令,相反也可以只存储数据。
图11展示了主模块调度器内的调度表的结构。调度表1100对主模块调度器什么时候执行哪个主模块进行管理。作为项目在该表中具有调度时刻1101、主模块ID1102。在此,表1100中的调度时刻是指下一次执行与某主模块关联的数据存取模块和数据处理模块的处理的预约时刻。另外,调度是指在必须执行多个处理的情况下,决定并记录以什么样的顺序什么时候执行哪个处理。另外,调度执行或者进行调度是指依照预先决定了的计划执行处理。
在图11的例子中,例如在行1110、1120中表示在时刻250毫秒执行主模块ID为10和13的主模块。即,可以存在多个应该在同一时刻执行的主模块。但是,即使调度时间是同一时间,但实际的处理也可以是一个处理完成以后再进行另一个的处理。
在本实施例中,以记录在该调度表中的内容为准执行处理的就是主模块调度器。即,上述的处理是主模块调度器在上述的定时下一边参照表1800、表1900和表2000一边依次进行必要的处理。即,由主模块调度器执行各主模块的数据处理模块和数据存取模块的处理。换一种说法,就是通过线程那样的一个执行过程进行主模块调度器的处理、前处理部分、后处理部分、输入输出执行处理部分以及输入输出完成处理部分的处理。
例如,定期地启动主模块调度器,参照该表并与现在时刻比较,如果是设置了在此之前的调度时刻的主模块,则进行该主模块的处理,根据需要更新表1100,等待下一次的启动。
使用图6说明主模块的执行步骤。
首先,主模块调度器参照流表2000的列2004,确认是否存在已经开始处理的流处理(步骤600)。在不存在开始了的流处理的情况下,到执行新的流处理为止等待(步骤601)。在存在开始了的流处理的情况下,参照调度表1110,以现在时刻为起点直到最早执行的调度时刻为止等待(步骤603)。时刻等待的方式可以是周期地检查时钟进行判断,也可以使用只在指定的时间停止执行的功能,如果是能够利用时间中断的平台则还可以利用时间中断。流处理开始后,由于还没有通过主模块向调度管理器预约处理开始时刻,所以通过由流管理器作为构成该流处理的主模块的调度时刻登记现在时刻来进行最初的执行。如果待机动作结束,则由主模块调度器执行记载在调度表1100的主模块ID1102中的主模块的数据处理模块的前处理部分(步骤604)。在该执行处理中,前处理部分确认在输入连接模块中是否存在数据,如果存在则将其转换为数据对象,并输入到执行等待数据对象矩阵412中。或者在从硬盘读出图1的数据的主模块那样的作为流处理的开始点的主模块中,作为数据对象将数据的读出请求输入到该矩阵中。
接着,计算下一次应该调度本模块的时刻,并将该时刻登记到主模块调度器(步骤605)。由前处理部分决定下一次调度时间的理由是前处理部分能够计算出从连接模块410得到的数据411的大小等、处理所需要的时间。例如,假设将以例如比特率为每秒1024k字节,向读出图1的主模块100那样的文件的主模块中一次读入的数据块的大小设置为256k字节。从应用程序使用数据处理指令580进行该指定。在这样的情况下,如果有读入文件的主模块,则能够以通过(一次读入的数据块大小)/(比特率)而确定的值决定读入的时间间隔。例如,如果在每秒1024k字节下块大小为256k字节,则如果每0.25秒执行读入,则判断出能够实现指定的比特率。即,在由前处理部分在输入输出处理部分中进行了256k字节的数据请求后,由于可以在0.25秒后进行下一个处理,所以将下一次的调度时间确定为250毫秒后。
在其后面的主模块,例如图10中的复用分离主模块或图像主模块中,可以根据以同样方法设置的比特率和经由连接模块得到的数据的大小确定这些调度时间,但也可以是将调度时间设置为比较短的时间,频繁地执行。这是因为由于最前面的文件读出主模块通过上述方法控制数据的比特率,所以如果在其后面的主模块中,不进行特别的比特率控制而将数据输入到输入连接模块中,则会马上取出它进行处理,如果再输出到输出连接模块,则能够实现预定的比特率。在该情况下,由于在后面的主模块中,不产生处理的延迟而比特率不降低,所以理想的是频繁地确认数据是否输入到连接模块中。因此,应该将调度时间预约为小的值。
在从前处理部分向数据存取模块输出了数据对象的情况下(步骤606),主模块调度器为了开始对该数据对象进行指示的处理,而执行数据存取模块的输入输出执行处理部分(步骤607)。这相当于例如向硬件设备请求数据的加工或取得的操作。
在执行等待数据对象矩阵中没有数据存取模块,并且并没有从数据存取模块向后处理等待数据处理矩阵输出新的数据对象的情况下,主模块调度器前进到步骤611(步骤608)。
在以前执行的输入输出执行处理部分的处理结束,存在作为处理结果的数据的情况下,或者在例如向硬件设备请求的数据加工或取得处理结束,并存在作为其结果的数据的情况下,由主模块调度器执行数据存取模块的输入输出完成处理部分(步骤609),将该数据作为数据对象输入到后处理等待数据对象矩阵413中(步骤610)。在后处理等待数据对象矩阵413中具有数据对象的情况下,主模块调度器执行后处理部分,并只向输出连接模块传送数据对象中的数据列表。在后处理部分的处理结束了的情况下,主模块调度器为了进行下一个主模块的调度,而返回开始状态。
在本执行方式中,例如即使在执行多个流处理的情况下,也能够通过主模块调度器的一个执行过程进行存在于各流处理中的主模块的处理。在此,执行过程是指具有在执行程序的情况下所必需的信息的执行单位,这相当于线程等。这是因为通过使用上述方法,例如即使在多个流处理的情况下,也从各个主模块指定对各主模块的处理进行调度的时刻,因此可以在该时间由主模块调度器执行。如果这样通过一个执行过程进行处理,则没有必要进行在通过多个执行过程对多个流处理进行处理时所产生的同步化处理。由于排他地对其设备进行存取的同步化处理负荷很高,所以通过省略该处理,能够防止流处理的性能降低。
另外,在本方式中,例如如果提高执行优先度,进一步缩短由主模块的前处理部分决定的主模块的预约时间,则提早调度该主模块的处理,在该主模块的处理中就会使用更多的CPU时间。另外,在执行多个处理的情况下,通过调整上述预约时间,能够指定各个处理的优先度。例如,在同时执行从某设备取得数据并记录到存储装置中的处理、从某设备取得数据并显示在显示器上的处理的2个处理的情况下,如果缩短设置前者处理的预约时间,则能够将记录处理的优先顺序设置得高。
另外,通过在一个执行过程中执行多个数据处理,则不必向多个执行过程分配多个缓冲区,另外,在多个执行过程中利用被用于并行执行多个过程时的信号那样的一个资源时,不必使用作为保证排他存取的组合的同步功能,能够降低使用资源。
另外,通过在一个过程中执行处理,主模块调度器233能够设置更高效率的调度。这是因为由于在现有的调度方式,例如朗德罗宾方式等中,在每个一定时间内无条件地切换处理,所以有即使在没有必要进行处理的情况下也进行调度,或者在必须进行处理的情况下没有进行调度的情况,实时性下降,浪费了CPU时间。而在本方式中,计算出下一个处理所需要的时间,将该必要时间登记到调度表中进行调度,因此不进行多余的调度,能够将现有的朗德罗宾方式等中的分配给冗余时间的CPU处理分配给别的处理,所以作为整体提高了作为平台资源之一的CPU时间的使用效率,进而在处理所需的时刻正确地进行调度,能够提高实时性。
作为使用了本实施例的主模块、连接模块以及主模块调度器的数据处理的一个例子,图7说明了从硬盘读入多路复用并记录了声音和图像的文件再将其分离,作为动画从显示器以及扬声器进行重放的情况下的数据流程。作为对声音和图像进行多路复用并记录的方式,有MPEG(动画专业组)等。在该处理中,通过复用分离主模块730和连接模块720连接文件读出主模块700,通过连接模块740连接复用分离主模块730和图像主模块760,进而,通过连接模块750连接声音主模块780。
首先,文件读出主模块通过系统接口709和设备驱动程序710存取硬盘,取得数据。复用分离主模块730解除取得的数据的多路复用。将通过该处理得到的图像数据发送到图像主模块760,并通过设备驱动程序769发送到硬件图像解码器770,将声音数据发送声音主模块780,并通过设备驱动程序789发送到硬件声音解码器790进行重放。
图10说明了图7所示的处理例子中的详细结构。使用它说明处理步骤。
首先,主模块调度器开始文件读出主模块的数据处理模块的执行。作为数据处理模块701的文件读出主模块的前处理部分702请求向输入输出等待数据对象矩阵输入向作为数据存取模块704的文件存取模块的输入输出执行处理部分705读入文件的作为输入输出处理的数据对象707。由输入输出处理部分705经由系统接口709和存储装置用转换器设备驱动程序710,进行该读出处理。进而,由主模块调度器检查在该处理执行之前执行的读入处理是否结束了,如果处理结束了则执行输入输出完成处理部分706,将该数据作为数据对象708加入到后处理等待数据对象矩阵中。
接着,如果执行后处理部分703,则取得存储在后处理等待数据对象矩阵中的数据对象708,将该数据对象内的数据列表加入到连接模块702的缓冲区内的等待矩阵中。
另外,在这些处理中,如下这样检索各处理。由于文件读出主模块的主模块ID是100,所以主模块调度器根据该值参照表1800,得到作为数据处理模块分配的数据处理模块ID。在图16的例子中,其编号为100。接着,参照表1500,检索数据处理模块ID为100的行。由此,知道了应该执行的前处理部分位于0xFA800000,应该执行的后处理部分位于0xFA808000,因此执行它们。在该情况下,存储在本地址中的前处理部分的处理内容是指示了指定文件的读入后,指定下一次的调度时间的处理,后处理部分的处理内容是将取得的数据输出到输出连接模块的处理。同样对于数据存取模块,参照表1800得到作为数据存取模块分配的数据存取模块ID。在图16的例子中该编号为1。接着,参照表1300检索数据存取模块ID为1的行。由此,得到应该执行的输入输出执行处理部分的地址和输入输出完成处理部分的地址,并执行它们。在该情况下,存储在该地址中的输入输出执行处理部分的处理内容是向硬盘发出数据读入请求,输入输出完成处理部分的处理内容是从硬盘取得数据。
如果由主模块调度器执行了复用分离主模块730的复用分离处理模块731,则执行前处理部分732,从连接模块720的等待矩阵721中取出数据列表。在等待矩阵中没有数据的情况下,前处理部分结束处理,转移到后处理部分的处理。
另外,上述前处理部分中的处理与数据处理流程中的从开始点连接到第2个以后的主模块的处理相同。另外,所有的主模块的前处理部分在结束处理前,都预约下一次应该执行自身的时间。该预约时间依存于该流处理的比特率、所要求的实时性。例如在高比特率的数据处理、或者要求高实时性的处理的情况下,由于必须迅速地处理数据并传送到下一个主模块,所以必须频繁地确认在输入连接模块的缓冲区中是否存储了数据。相反,如果比特率低,则可以隔开较长的间隔进行检查。
该复用分离主模块的处理是数据格式的转换,可以通过程序执行处理,由于不需要对HDD等I/O类的硬件进行存取,所以不需要定义数据存取模块,将在前处理部分中处理了的数据传送到后处理部分733。该情况下的数据格式的转换处理是预先由多路复用主模块的前处理部分732解析该数据,并将其结果写入2个声音缓冲区和图像缓冲区。后处理部分从图像缓冲区取出图像数据,并输入到连接模块740的等待矩阵741中,同样从声音缓冲区取出声音数据,并输入到连接模块750的等待矩阵751中。
接着,执行作为图像主模块760的数据处理模块的图像写入模块761的前处理部分762,从等待矩阵741中取出待机的数据列表。应用程序与使用数据处理模块控制指令560决定的比特率对应地,将数据发送到图像解码器存取模块764,由输入输出执行处理部分765将该数据输出到硬件图像解码器770的设备驱动程序769,输出到硬件图像解码器770,并作为其结果输出图像。由作为数据存取模块的图像解码器存取模块的输入输出完成处理部分766检测出输出结束的数据,作为数据对象768加入到结束处理等待数据对象矩阵中。图像主模块是数据处理的末端,由于没有输出连接模块,所以由后处理部分763废弃被写入到设备的图像数据。
声音主模块780中的处理也与前面说明了的图像主模块中的处理一样。执行作为声音主模块的数据处理模块的声音写入模块781的前处理部分782,取出在等待矩阵751内待机的声音数据列表。根据取出的数据的比特率发送到作为数据存取模块的声音解码器存取模块784,通过输入输出执行处理部分785开始进行处理。通过设备驱动程序789将声音数据发送到硬件声音解码器790并进行重放。由数据存取模块的输入输出完成处理部分786检测出输出结束了的数据,将结束了的数据作为数据对象788加入到后处理等待数据对象矩阵中,然后,由后处理部分783废弃。
图8展示了将图2的结构安装在用户空间中的例子。在安装在用户空间中的情况下,由于所有的模块都安装在用户空间中,所以具有容易开发的效果。这是因为在能够使用在开发应用程序时使用的开发工具、例如调试器等的基础上,还能够使用OS提供的存储器管理功能,因此能够防止来自其他应用程序的干扰,能够提高可靠性、实用性。
图9展示了在OS中构成图2的结构的大部分的例子。例如,在核心空间中安装的结构的情况下,在OS内的模块比应用程序优先执行的OS中,比在用户空间中进行安装的情况对性能有利。特别地可以认为在进行需要实时性的高比特率下的内容处理的情况下特别有效。
在这2个结构中,依存于平台的是通用系统接口920、931和数据存取模块管理器932,除此以外的属于本实施例的程序模块都不依存于平台。这是因为由该模块吸收了因硬件和OS的不同而不同的OS功能利用步骤、设备的存取方法的差异,通过使用该模块提供的通用化了的接口,能够利用平台所提供的功能。
另外,应该考虑用途、硬件结构以及开发难度等来决定采用哪一种结构。例如,在CPU的性能低的平台上进行安装、或者要求高性能的情况下,调试就会比较困难,但可以考虑比较容易的图9的在核心空间中进行安装来实现高性能。相反,在CPU充分快并且能够充分利用存储器等执行资源的情况下,或不要求高性能的情况等下,可以考虑安装容易的图8的用户空间的结构。
可以在例如动画、声音处理等流处理中利用本技术。可以适用于例如播放设备、信号接收机、录像录音设备以及监视照相机等中。
权利要求
1.一种数据处理方法,是数据处理装置的数据处理方法,该数据处理装置具有数据的输入装置;数据的输出装置;存储各处理模块的存储部件;发出指令的指令发出部件;使用上述处理模块执行处理的运算处理部件,该数据处理方法包括以下步骤根据从上述指令发出部件发出的第1指令,确定处理上述数据所必需的至少一个或一个以上的处理,在上述存储部件中生成上述确定的处理所必需的处理模块,在上述存储部件中使用连接模块连接上述处理模块,生成执行上述处理的处理流程,根据从上述指令发出部件发出的第2指令,将从上述输入装置输入的数据输入到上述处理流程的开始部分,通过上述运算处理部件执行上述处理流程,从上述输出装置输出执行上述处理流程的处理结果。
2.根据权利要求1记载的数据处理方法,其特征在于上述处理模块具有从上述输入装置输入数据或向上述输出装置输出数据的数据存取模块;在对经由上述数据存取模块输入的数据执行了规定的处理后,将该处理后的数据输出到其他处理模块的数据处理模块。
3.根据权利要求2记载的数据处理方法,其特征在于上述数据处理模块具有从上述连接模块输入数据,在执行了规定的处理后,将该执行后的数据输出到上述数据存取模块的第1处理部分;将从上述数据存取模块输入的数据输出到其他处理模块的第2处理部分。
4.根据权利要求3记载的数据处理方法,其特征在于上述数据存取模块具有将从上述第1处理部分发送的数据的输入输出请求发送到上述输入装置或输出装置的输入输出执行处理部分;将通过上述输入输出请求得到的数据输出到上述第2处理部分的输入输出完成处理部分。
5.根据权利要求3记载的数据处理方法,其特征在于还具有数据处理管理模块和规定了处理的顺序的流表,上述第1处理部分根据从上述指令发出部件通知的比特率和作为该第1处理部分中的进行处理的单位的块大小,计算出下一次启动该处理模块的时刻,并登记到上述流表中。
6.根据权利要求5记载的数据处理方法,其特征在于上述数据处理管理模块参照上述流表,通过一个执行过程执行登记在上述流表中的处理。
7.一种数据处理装置,其特征在于包括数据的输入装置;数据的输出装置;存储处理模块、连接该处理模块的连接模块以及数据处理管理模块的存储部件;发出指令的指令发出部件;使用上述处理模块执行处理的运算处理部件,其中上述数据处理管理模块根据从上述指令发出部件发出的第1指令,确定处理上述数据所必需的至少一个或一个以上的处理,并在上述存储部件中生成该确定的处理所必需的处理模块,在上述存储部件中使用上述连接模块连接上述处理模块,生成执行上述处理的处理流程,根据从上述指令发出部件发出的第2指令,从上述输入装置输入数据,通过上述运算处理部件执行上述处理流程,并将执行上述处理流程的处理结果输出到上述输出装置。
8.根据权利要求7记载的数据处理装置,其特征在于上述处理模块具有从上述输入装置输入数据或向上述输出装置输出数据的数据存取模块;在对经由上述数据存取模块输入的数据执行了规定的处理后,将该处理后的数据输出到其他处理模块的数据处理模块。
9.根据权利要求8记载的数据处理装置,其特征在于上述数据处理模块具有从上述连接模块输入数据,在执行了规定的处理后,将该执行后的数据输出到上述数据存取模块的第1处理部分;将从上述数据存取模块输入的数据输出到其他处理模块的第2处理部分。
10.根据权利要求9记载的数据处理装置,其特征在于上述数据存取模块具有将从上述第1处理部分发送的数据的输入输出请求发送到上述输入装置或输出装置的输入输出执行处理部分;将通过上述输入输出请求得到的数据输出到上述第2处理部分的输入输出完成处理部分。
11.根据权利要求9记载的数据处理装置,其特征在于还具有数据处理管理模块和规定了处理的顺序的流表,上述第1处理部分根据从上述指令发出部件通知的比特率和作为该第1处理部分中的进行处理的单位的块大小,计算出下一次启动该处理模块的时刻,并登记到上述流表中。
12.根据权利要求11记载的数据处理装置,其特征在于上述数据处理管理模块参照上述流表,通过一个执行过程执行登记在上述流表中的处理。
13.一种计算机程序产品,是具有发出指令的指令发出部件、数据的输入装置和输出装置的计算机中的计算机程序产品,其特征在于使计算机执行以下步骤根据从上述指令发出部件发出的第1指令,确定处理上述数据所必需的至少一个或一个以上的处理的步骤;在上述存储部件中生成上述确定的处理所必需的处理模块的步骤;在上述存储部件中使用连接模块连接上述处理模块,生成执行上述处理的处理流程的步骤;根据从上述指令发出部件发出的第2指令,将从上述输入装置输入的数据输入到上述处理流程的开始部分,通过上述运算处理部件执行上述处理流程的步骤;从上述输出装置输出执行上述处理流程的处理结果的步骤。
14.根据权利要求13记载的计算机程序产品,其特征在于上述处理模块具有从上述输入装置输入数据或向上述输出装置输出数据的数据存取模块;在对经由上述数据存取模块输入的数据执行了规定的处理后,将该处理后的数据输出到其他处理模块的数据处理模块。
15.根据权利要求14记载的计算机程序产品,其特征在于上述数据处理模块具有从上述连接模块输入数据,在执行了规定的处理后,将该执行后的数据输出到上述数据存取模块的第1处理部分;将从上述数据存取模块输入的数据输出到其他处理模块的第2处理部分。
16.根据权利要求15记载的计算机程序产品,其特征在于上述数据存取模块具有将从上述第1处理部分发送的数据的输入输出请求发送到上述输入装置或输出装置的输入输出执行处理部分;将通过上述输入输出请求得到的数据输出到上述第2处理部分的输入输出完成处理部分。
17.根据权利要求15记载的计算机程序产品,其特征在于还具有数据处理管理模块和规定了处理的顺序的流表,上述第1处理部分根据从上述指令发出部分通知的比特率和作为该第1处理部分中的进行处理的单位的块大小,计算出下一次启动该处理模块的时刻,并登记到上述流表中。
18.根据权利要求17记载的计算机程序产品,其特征在于上述数据处理管理模块参照上述流表,通过一个执行过程执行登记在上述流表中的处理。
全文摘要
本发明提供一种为了提高移植性而构成并执行对一连串处理点的流数据处理的数据处理装置及其方法。该方法在数据处理中,通过连接模块将被称为主模块的处理点连接起来并设置流数据路径,通过在单一的执行过程中进行调度,使得能够进行高性能的处理,并通过层结构来实现它们,从而实现高移植性和开发的容易性。
文档编号H04N7/173GK1677351SQ20041006008
公开日2005年10月5日 申请日期2004年6月25日 优先权日2004年4月2日
发明者雷蒙尔·达米恩, 水谷美加, 森本义章 申请人:株式会社日立制作所