1. Technical Field
This invention relates generally to the field of computer resource management, and in particular, to a system that manages resources in a processing system.
2. Related Art
Computers, embedded controllers, and other processing systems may include a number of finite resources. Such resources may include communication bandwidth resources, interrupt handling resources, mutexes, semaphores and other resources. The management of such allocatable resources may have an impact on the operation and/or efficiency of the processing system.
Some resource management approaches may implement a rigid partitioning scheme. In a rigid partitioning scheme, a resource may be divided into fixed-size chunks. A finite amount of the resource may be reserved to make that finite amount unavailable to other entities in a processing system. For example, processes may reserve portions of memory that they never use, at the same time causing a lack of free memory that blocks or delays other processes. A process may reserve access to all or a portion of an I/O device and thereby block access of the I/O device to other processes.
Other resource management techniques are clumsy and inefficient, solely reserving resources on a first-come, first-served basis without any regard for the effective operation of the processing system. Therefore, there is a need for an alternative system for managing system resources.
A processing system includes a resource that is accessible by a processor and resource partitioning software executable by the processor. The resource partitioning software may be executed to establish a resource partition for the resource. The resource partition defines a set of rules that are used to control access to the resource when a request for the resource is received from a software application and/or process.
Other systems, methods, features and advantages will be, or will become, apparent to one with skill in the art upon examination of the following figures and detailed description. It is intended that all such additional systems, methods, features and advantages be included within this description, be within the scope of the invention, and be protected by the following claims.
The system may be better understood with reference to the following drawings and description. The components in the figures are not necessarily to scale, emphasis instead being placed upon illustrating the principles of the invention. Moreover, in the figures, like referenced numerals designate corresponding parts throughout the different views.
Read only memory (ROM) 110 may retain operating system code 135 that controls the interaction between high-level application programs executed by the processor 105 and hardware components, including memory devices 110 and 120, the persistent storage unit 115, and the interface devices 125 and 130. The operating system code 135 may include resource management software 140 for organizing and controlling access to the various allocatable computer resources, which may include, for example: internal and external memory, external communication bandwidth, interrupt handling, direct memory access (DMA), mutexes, semaphores, interface cards and hardware subsystems. Alternatively, the resource management software 140 may be stored in a separate medium remote from operating system code 135. In some systems, the resource management software may be stored in read only memory 110, persistent storage unit 115, or in some other storage medium. When the processing system 100 is linked with other computers and/or storage devices through I/O interface 125, the resource management software may be stored remotely and downloaded to processing system 100 as needed.
The persistent storage unit 115 may comprise a hard disc drive, floppy disk drive, etc. It may be a non-rotating media device, such as non-volatile memory implemented in an integrated circuit format (i.e. FLASH memory, etc.). The persistent storage unit 115 need not be limited to a single memory structure. Rather, the persistent storage unit 115 may include a number of separate storage devices of the same type (e.g., all FLASH memory) and/or separate storage devices of different types (e.g., one or more FLASH memory units and one or more hard disk drives).
The block diagram of
The resource allocator 210 may respond to the request by reserving the requested resource. It may also return corresponding confirmations, mappings and/or resource allocation data 215 back to the software application or process 205.
The resource allocator 210 may also perform other tasks. When the requested resource is system memory, the resource allocator 210 may coordinate memory requirements to match available blocks, assign memory that is best suited to a particular application, and similar memory allocation operations.
The partitioning module 300 may define and manage new partitions and classes with respect to requests for resources. For example, the partitioning module 300 may set the minimum and maximum values for relevant resource constraints and/or parameters for those partitions as well as other properties for those partitions.
When a process creates objects, the class of resource that one object requires may be different than that for another object the process creates. The concept of resource classes is supported by the resource partitioning design such that different classes of resources (i.e. resources with different attributes) can be independently partitioned. If a particular process requires a particular class of resource, that process can be associated with a partition of that class, independent of the resource class requirements of any other process.
This system allows customers to establish classes that distinguish between the different levels of importance or costs of different kinds of resources. For example, memory compatible with DMA may be distinguished from memory that is not compatible with DMA. DMA-capable memory may be used for general purposes but it may not be desirable to allocate all the DMA-compatible memory for general use. If not differentiated, DMA-capable memory may not be available to satisfy a request that requires only DMA-capable memory. By partitioning different resource classes separately, and by allowing one process to be associated with more than one partition, software resource requirements for both DMA and non-DMA memory (or whatever resource-classes are being managed) may be protected.
When partitioning resources, each resource class may be partitioned independently. A resource partition may represent a single class of resource. Therefore, if a process creates objects that require different classes of resources, each object may be associated with a different partition.
The partitioning module 300 may provide a mechanism to group partitions to allow a single, arbitrarily named, pseudo-partition to represent other real partitions. This capability may allow association of resource partitions of different types (or classes) using a single specified name. Furthermore, partitions of different resource classes may be associated with one another using that single specified name. This capability may alternatively be provided as a layer on top of the resource partitioning design.
Resource partitions of a given resource class may nest. Newly created resource partitions may subdivide a parent partition and form a hierarchy. Nesting may be used to constrain a newly created partition process with the attributes of one or more currently related partitions.
Resource Partition Attributes and Policies
A partition may be an entity that represents the attributes and rules which govern the use of a resource. Resource partitions may have the following configurable attributes for a given level of accessibility, portion of the resource, or other non-replenishable parameter that processes are competing for:
i. minimum size (guarantee); the minimum size attribute specifies the amount of a particular class of resource that may be reserved for exclusive use by processes which are associated with the partition; and
ii. maximum size (restriction); the maximum size attribute specifies the amount of a particular class of resource that may never be exceeded for use by processes which are associated with the partition.
Some results of these attributes may include:
i. Reserved Resource
A non-zero minimum value may be used to represent a reservation and not an allocation. When a non-zero minimum value is successfully configured for a resource partition, the resource is reserved for exclusive use by that partition in the resource allocator for that resource class. It may not be pre-allocated; and
Allocations made against partitions with reservations are accounted against unused reservations first and against available discretionary resource capacity second;
ii. Discretionary Resource
The difference between the maximum and minimum values for a resource partition may represent the amount of discretionary resource of that class available for the creation of objects associated with the resource partition. The value may be zero; and
Access to discretionary resource capacity may be dependent upon system partition configuration and may not guarantee availability.
Discretionary capacity may be allocated as it is requested, but any other allocating model may also be used.
Resource Partition Types
A variety of attributes and rules may be used to define a resource partition. Partitioning configurations may include:
1. “Open” use case; minimum=0, maximum=no limit; discretionary only;
Resource allocations made for objects associated with this partition type may be subject to the availability of discretionary capacity of the resource. There may be no limit (beyond the limit of physical resources available to the resource allocator 210 for that class) to the amount of the resource that may be requested. Allocations made for objects associated with this resource partition may not succeed. This partition configuration may create an environment similar to the case when there is no resource partitioning. If resource capacity is available, the allocation request may succeed (notwithstanding factors unrelated to availability), otherwise it may fail.
2. “Guarantee” use case; minimum=N, maximum=no limit, reserved+discretionary;
“N” capacity of the respective resource class is reserved and available for allocation to objects associated with the resource partition. There may be no limit (beyond the limit of physical resources available to the resource allocator 210 of that class) to the amount of the resource that may be requested. This partition configuration may be used when objects associated with this resource partition will require a specific amount of the resource. Further resource requirements may be governed by the rules for discretionary resource allocations.
3. “Restricted” use case; minimum=0, maximum=N, discretionary only;
Resource allocations made for objects associated with this resource partition type are subject to the availability of discretionary capacity and, furthermore, may not exceed the limit of “N” capacity. This partition configuration may be used when it is not known what the resource requirements are for the objects associated with this resource partition. The “N” capacity limit may not be exceeded.
4. “Sandbox” use case; minimum=N, maximum=N, reserved only;
“N” capacity, and only “N” capacity of the respective resource class is reserved and available for allocation to objects associated with the resource partition.
This partition configuration may be used when it is known what the resource requirements are for the objects associated with this partition or for situations where a course subdivision of the available resource class is desired. This configuration may allocate resources for further subdivision (using any of the defined partition configurations) by other processes.
Partitions are not limited to a fixed number of types. Another configuration might combine the guarantee and restricted types. This configuration specifies a reserved capacity but allows for a “not to exceed” buffer of discretionary allocations. This configuration may be used to assist in tuning a sandbox or for accommodating transient resource allocations in a guarantee partition.
Partitions may be established either at run time or at the time a bootable image is built using appropriate run-time APIs and build-time tools. Partitions may be dynamic. An “open” partition may be dynamically changed to a “closed” one (or changed to any other partition type) when the minimum and/or maximum values are changed at run time.
Resource Classes
Resource classes may be available to the system through pre-configured system configuration information, defined at build time, and/or available after boot-time. For example, bios information on x86 systems may be used to establish resource classes. In the case of a QNX® Neutrino® operating system, the resource classes may be available at startup through a system page. The classes may be available for partitioning when they are introduced into the partitioning namespace or under whatever root path is used by the system. For example, on QNX's Neutrino operating system, partitionable resources may be exposed in the /partition/<resource> namespace.
The Namespace
Resource partitioning may use a POSIX namespace to represent the naming of partitions and their hierarchical relationships. This provides access to usage statistics, configuration options, and other features offered by the resource partitioning module.
On non-POSIX systems, resource partitions may use a portion of the system's namespace used by that system. On systems which do not have a namespace, a resource partition may create its own namespace.
Namespace access to the resource partitioning module may facilitate the following:
Access control through POSIX permissions (or on non-POSIX systems, whatever permission control is used on members of the path name space);
The ability to view and manipulate partition topology using known and understood utilities (for example, on POSIX systems, ls, mkdir, and rm); and
Use of existing POSIX API's such as open( ), close( ) and ioctl( )—(or on non-POSIX systems whatever existing APIs are used on members of the path namespace).
Before a resource class may be partitioned, the resource class may be added to the system by creating a new entry in namespace using the resource class name as registered in the system page (in the case of a QNX system). In some implementations, a name may be created that is appropriate to the system. Systems that do not have a namespace may use an alternative mechanism for exposing the partitioning interface.
Since partitioning may take place on a per resource class basis, a partition may be created in the namespace under the respective resource class. A partition of the system resource class, the system partition, may be created by default. This partition may be used to account for substantially all resource allocations by the software processes. These allocations may include kernel allocations done on behalf of these processes, which have not otherwise associated with a different partition. If additional partitions are not created, allocations may be accounted to the system partition.
Resource Partition Configurations
Using the various partition types, resource partitions may be organized into various topologies or configurations that allow them to be useful. The resource partitioning module may create a root partition that does not have a parent partition. Resource partition topologies may be flat, in which all resource partitions are root partitions, and/or hierarchical, in which at least one root partition exists with one or more child partitions beneath it. In a flat topology, the attributes specified for a resource partition are not based on the attributes of any other resource partition. Resource partitions of any type may be created so long as the rules for creation are satisfied.
In a hierarchical topology, the attributes of a parent resource partition constrain the attributes of the child. The following rules may be used in a resource partition hierarchy:
The rule of subdivision is that when a partition is created as the child of an existing partition, a non-zero minimum configured in the child will be accounted as an allocation to the parent partition. If the parent partition has any unallocated reserved capacity, it may be used to satisfy some or all of the child reservation. This reservation may be accounted up the entire resource partition hierarchy until is fully accounted for in either a parent partition or some combination of parent partitions and the allocator for the resource class.
When an allocation is made for a resource in a child partition, the allocation is accounted for in the partition hierarchy. Enough “free space” must exist in the hierarchy in order for an allocation to succeed.
Partition rules may govern whether the allocation of resources are allowed to proceed. There are many other reasons unrelated to availability that might prevent the resource allocator 210 for a given class of resource from satisfying an allocation request. For example, if the resource is memory, a request for a contiguous block of physical memory may not exceed the size rules of the partition, but due to internal fragmentation, may not be able to be satisfied by the allocator for the memory class.
The rules governing the use of these attributes may be as follows:
The maximum size attribute may always be >=the minimum size attribute;
The minimum/maximum size attributes may have a range from 0 to unlimited; and
Minimum and maximum values can be modified subject to the aforementioned rules.
Pseudo Partitions or Partition Groups
A real partition is a partition of a resource class. Pseudo partitions and partition group names may be used to group real partitions for convenience. A real partition may be a partition with attributes and policies that refer to an actual resource. A group name may be a reference to a collection of real partitions. A pseudo partition may be an alias for a real partition. Group names and pseudo partitions may be used to simplify process associations by allowing association between a process and a single group name and, by extension, to a collection of real partitions through their respective pseudo partitions. Group names and pseudo partitions may also be used to link differing resource types through a common partition name.
Process Association with Resource Partitions
When a process is created, optional parameters to posix_spawn( ), or whatever process spawning primitive the operating system provides, allow the specification of resource partition(s) with which the spawned process should be associated. If nothing is specified, the default behaviour may include associating the spawned process with the same partition(s) as those of the caller. A forked process may be associated with the same partition(s) as the parent. The decision for inheritance behaviour may be specified on a per resource class basis.
By utilizing API's, processes may be able to associate themselves with partitions, (e.g., self-initiated). Similarly, a system controller application may utilize the same API's to effect associations for other processes without coordinating with those processes or without the processes being aware that such associations have been effected on their behalf.
Resource Partition Metrics
The resource partition metrics account for the available system resources and their usage. Applications may retrieve the following information:
creation configuration (attributes and policies at the time the partition was created);
current partition usage; and
highest partition size.
Resource Partition Events
When an application attempts to allocate more resource capacity than is permitted by the resource partition that the process is associated with, the allocation request may fail and return the appropriate error condition to the requester. A privileged process may register to be notified for various partition events. Notification may be delivered by a message or signal to a designated thread of the registered process or by any other form or inter-process communication or thread synchronization primitive provided by the operating system. These events may include, for example:
size change events (threshold crossing and delta change);
configuration change events (including, for example, failed attempts);
process association and disassociation events (including, for example, failed attempts); and
child partition creation and destruction events (including, for example, failed attempts).
Similar information may be available for the resource class as a whole.
Issues of Security
Security, or deciding what software you “trust”, may be a concern when configuring a resource partition. In some instances, security issues may be the reason for the partitioning of one or more resources. The system may provide support for one or more of the following security configuration settings:
1. Configuration security:
the ability to prevent resource partition topology changes
the ability to prevent illegal resource partition creation
the ability to prevent partition destruction
2. Operational security:
the ability to ensure that guarantees are provided
the ability to ensure that restrictions are enforced
the ability to ensure that only authorized processes can be associated with partitions.
The following mechanisms may affect the security policies:
1. POSIX file permissions (or similar file permissions for non-POSIX based systems)—this mechanism provides a rudimentary level of control based on the well understood user/group/world permissions.
read permission allow metrics to be obtained;
write permission allow configuration changes to be made; and
execute permissions allow associations.
2. Terminal Partition Policy—A terminal partition policy may allow a given partition to be configured (independently of other partitions) to prevent establishment of corresponding child partitions. Once set TRUE, the policy may be established so that it will not change. This policy may prevent the creation of child partitions without preventing the changing of the partition attributes. Modification of the attributes of a partition may be made without a hierarchical explosion of partitions.
3. Configuration Lock Policy—A configuration lock policy may allow the configuration attributes, excluding the Terminal Partition policy, of a partition to be locked. Once set TRUE, the policy may be established so that it will not change. This mechanism may prevent changes to the resource partition, including changes to POSIX file permissions. It may allow the creation of child partitions so that a locked parent partition may be independently sub-partitioned by a separate (appropriately privileged) organization.
4. Permanence Policy—A permanence policy may prevent the destruction of a partition. Once set TRUE, the policy may be established so that it will not change. This policy may prevent partition removal independent of POSIX file permissions. POSIX permissions (or similar permissions for non-POSIX based systems) may be used to control the ability of a process to associate with a partition and to modify or examine its policies and attributes.
An implementation of the partitioning module 300 is presented in the diagrams of
If the requested partition parameters are valid, then it is determined at 415 whether the partition parameters include a resource reservation. If not, then a resource partition is created at 425. If the partition parameters include a reservation, then a reservation is requested from the partition hierarchy, if one exists. The request propagates up the hierarchy until it is satisfied by one or more parent partitions and/or from the resource allocator at 430 for the resource class. If the new partition is a root partition, the request may be sent to the resource allocator 210 for the resource class. In either case, if the reservation is satisfied at 435, then the resource partition may be created at 425 and control may return to the requesting process. If the reservation is not satisfied, then the request fails at 420.
If the parameters do not allow deletion, then the request fails at 525. If the parameters allow deletion, then the process determines whether the partition parameters include a reservation at 520. If they do not, then the partition may be destroyed at 530, and control may return to the running process at 400. If the partition parameters include a reservation, then the reservation may be released to the partition hierarchy at 535 before the partition is destroyed at 530.
The elected or automatic release of a resource may follow the process shown in the diagram of
If it is determined at 805 that the partition does not have a parent, then a new reservation may be requested from the allocator for the class 835. If the reservation is successful at 840, then control may return to 430 of
At 905, the process determines that the partition does not have a parent. As a result, the reservation may be released back to the allocator for the class at 930. Control may return to state 535 of
If the allocation is greater than the unused reserved space for the partition, then the process may determine whether the partition has a parent at 1020. If the partition does not have a parent, then control may return to 660 of
If the deallocation is greater than the discretionary unused resource for the partition then it may be determined whether the partition has a parent at 1120. If the partition does not have a parent, then control may return to 780 of
This system and method may be applied to a broad range of processing system resources. Some of the considerations with respect to specific applications are as follows:
i. interrupt channels;
In some instances, it may be of interest to manage the number of interrupt channels assigned to processes using adaptive resource management;
ii. direct memory access (DMA);
A DMA controller may have several independently programmable DMA channels or engines. The channels may be partitioned as allocatable resources. Since requests for DMA may be driven by a queue of requests, a virtual channel allocator may be used to partition the virtual channels. The channels may be used to enable a DMA request to be queued and partitions of these channels could be used to control admission;
iii. mutexes and semaphores;
These types of objects may be created from memory. Memory partitioning may be used to indirectly control the allocations of these types of objects. It is possible to establish partitions of purposeful memory objects (like mutexes). Other implementations may use per process limits (a private, restricted partition type); and
iv. interface cards and hardware subsystems;
Similar to DMA channels, the entire card need not necessarily be allocated. Rather, the interface card may provide a collection of sub-devices that can perform some service. An allocator may supervise these sub-devices as a partitionable entity similar to the DMA channels described above.
While various embodiments of the invention have been described, it will be apparent to those of ordinary skill in the art that many more embodiments and implementations are possible within the scope of the invention. Accordingly, the invention is not to be restricted except in light of the attached claims and their equivalents.
This application claims the benefit of priority from U.S. Provisional Application No. 60/971,452, filed Sep. 11, 2007, which is incorporated by reference.
| Number | Name | Date | Kind |
|---|---|---|---|
| 4238746 | McCool et al. | Dec 1980 | A |
| 4282405 | Taguchi | Aug 1981 | A |
| 4468804 | Kates et al. | Aug 1984 | A |
| 4486900 | Cox et al. | Dec 1984 | A |
| 4531228 | Noso et al. | Jul 1985 | A |
| 4628156 | Irvin | Dec 1986 | A |
| 4630305 | Borth et al. | Dec 1986 | A |
| 4731846 | Secrest et al. | Mar 1988 | A |
| 4791390 | Harris et al. | Dec 1988 | A |
| 4811404 | Vilmur et al. | Mar 1989 | A |
| 4843562 | Kenyon et al. | Jun 1989 | A |
| 4939685 | Feintuch | Jul 1990 | A |
| 4969192 | Chen et al. | Nov 1990 | A |
| 5027410 | Williamson et al. | Jun 1991 | A |
| 5056150 | Yu et al. | Oct 1991 | A |
| 5146539 | Doddington et al. | Sep 1992 | A |
| 5278780 | Eguchi et al. | Jan 1994 | A |
| 5313555 | Kamiya | May 1994 | A |
| 5377276 | Terai et al. | Dec 1994 | A |
| 5400409 | Linhard | Mar 1995 | A |
| 5406622 | Silverberg et al. | Apr 1995 | A |
| 5408581 | Suzuki et al. | Apr 1995 | A |
| 5412735 | Engebretson et al. | May 1995 | A |
| 5432859 | Yang et al. | Jul 1995 | A |
| 5459813 | Klayman | Oct 1995 | A |
| 5473702 | Yoshida et al. | Dec 1995 | A |
| 5479517 | Linhard | Dec 1995 | A |
| 5494886 | Kehne et al. | Feb 1996 | A |
| 5495415 | Ribbens et al. | Feb 1996 | A |
| 5502688 | Recchione et al. | Mar 1996 | A |
| 5526466 | Takizawa | Jun 1996 | A |
| 5530768 | Yoshizumi | Jun 1996 | A |
| 5568559 | Makino | Oct 1996 | A |
| 5572262 | Ghosh | Nov 1996 | A |
| 5584295 | Muller et al. | Dec 1996 | A |
| 5590241 | Park et al. | Dec 1996 | A |
| 5615298 | Chen | Mar 1997 | A |
| 5617508 | Reaves | Apr 1997 | A |
| 5641931 | Ogai et al. | Jun 1997 | A |
| 5652832 | Kane et al. | Jul 1997 | A |
| 5677987 | Seki et al. | Oct 1997 | A |
| 5680508 | Liu | Oct 1997 | A |
| 5692104 | Chow et al. | Nov 1997 | A |
| 5701344 | Wakui | Dec 1997 | A |
| 5714997 | Anderson | Feb 1998 | A |
| 5737719 | Terry | Apr 1998 | A |
| 5742694 | Eatwell | Apr 1998 | A |
| 5812844 | Jones et al. | Sep 1998 | A |
| 5819215 | Dobson et al. | Oct 1998 | A |
| 5845243 | Smart et al. | Dec 1998 | A |
| 5920840 | Satyamurti et al. | Jul 1999 | A |
| 5920848 | Schutzer et al. | Jul 1999 | A |
| 5933801 | Fink et al. | Aug 1999 | A |
| 5949886 | Nevins et al. | Sep 1999 | A |
| 5949888 | Gupta et al. | Sep 1999 | A |
| 5953694 | Pillekamp | Sep 1999 | A |
| 5974567 | Dickson, Jr. et al. | Oct 1999 | A |
| 6011853 | Koski et al. | Jan 2000 | A |
| 6084907 | Nagano et al. | Jul 2000 | A |
| 6111957 | Thomasson | Aug 2000 | A |
| 6144336 | Preston et al. | Nov 2000 | A |
| 6163608 | Romesburg et al. | Dec 2000 | A |
| 6167375 | Miseki et al. | Dec 2000 | A |
| 6173074 | Russo | Jan 2001 | B1 |
| 6175602 | Gustafson et al. | Jan 2001 | B1 |
| 6192134 | White et al. | Feb 2001 | B1 |
| 6199035 | Lakaniemi et al. | Mar 2001 | B1 |
| 6219418 | Eriksson et al. | Apr 2001 | B1 |
| 6249275 | Kodama | Jun 2001 | B1 |
| 6282430 | Young | Aug 2001 | B1 |
| 6285979 | Ginzburg et al. | Sep 2001 | B1 |
| 6405168 | Bayya et al. | Jun 2002 | B1 |
| 6408273 | Quagliaro et al. | Jun 2002 | B1 |
| 6434246 | Kates et al. | Aug 2002 | B1 |
| 6473409 | Malvar | Oct 2002 | B1 |
| 6493338 | Preston et al. | Dec 2002 | B1 |
| 6507814 | Gao | Jan 2003 | B1 |
| 6587816 | Chazen et al. | Jul 2003 | B1 |
| 6628781 | Grundström et al. | Sep 2003 | B1 |
| 6633894 | Cole | Oct 2003 | B1 |
| 6643619 | Linhard et al. | Nov 2003 | B1 |
| 6687669 | Schrögmeier et al. | Feb 2004 | B1 |
| 6690681 | Preston et al. | Feb 2004 | B1 |
| 6694419 | Schnee et al. | Feb 2004 | B1 |
| 6725190 | Chazan et al. | Apr 2004 | B1 |
| 6732073 | Kluender et al. | May 2004 | B1 |
| 6771629 | Preston et al. | Aug 2004 | B1 |
| 6782363 | Lee et al. | Aug 2004 | B2 |
| 6804640 | Weintraub et al. | Oct 2004 | B1 |
| 6822507 | Buchele | Nov 2004 | B2 |
| 6836761 | Kawashima et al. | Dec 2004 | B1 |
| 6859420 | Coney et al. | Feb 2005 | B1 |
| 6871176 | Choi et al. | Mar 2005 | B2 |
| 6885752 | Chabries et al. | Apr 2005 | B1 |
| 6891809 | Ciccone et al. | May 2005 | B1 |
| 6898293 | Kaulberg | May 2005 | B2 |
| 6910011 | Zakarauskas | Jun 2005 | B1 |
| 6937978 | Liu | Aug 2005 | B2 |
| 7020291 | Buck et al. | Mar 2006 | B2 |
| 7117149 | Zakarauskas | Oct 2006 | B1 |
| 7146012 | Belt et al. | Dec 2006 | B1 |
| 7146316 | Alves | Dec 2006 | B2 |
| 7167516 | He | Jan 2007 | B1 |
| 7167568 | Malvar et al. | Jan 2007 | B2 |
| 7206418 | Yang et al. | Apr 2007 | B2 |
| 7222345 | Gray et al. | May 2007 | B2 |
| 7231347 | Zakarauskas | Jun 2007 | B2 |
| 7269188 | Smith | Sep 2007 | B2 |
| 7272566 | Vinton | Sep 2007 | B2 |
| 7346569 | Oberuc | Mar 2008 | B2 |
| 7406522 | Riddle | Jul 2008 | B2 |
| 7647346 | Silverman et al. | Jan 2010 | B2 |
| 7721292 | Frasier et al. | May 2010 | B2 |
| 7783686 | Gates et al. | Aug 2010 | B2 |
| 20010005822 | Fujii et al. | Jun 2001 | A1 |
| 20010028713 | Walker | Oct 2001 | A1 |
| 20020007381 | Bruckner | Jan 2002 | A1 |
| 20020052736 | Kim et al. | May 2002 | A1 |
| 20020071573 | Finn | Jun 2002 | A1 |
| 20020176589 | Buck et al. | Nov 2002 | A1 |
| 20020194251 | Richter et al. | Dec 2002 | A1 |
| 20030040908 | Yang et al. | Feb 2003 | A1 |
| 20030093265 | Xu et al. | May 2003 | A1 |
| 20030093270 | Domer | May 2003 | A1 |
| 20030097257 | Amada et al. | May 2003 | A1 |
| 20030101048 | Liu | May 2003 | A1 |
| 20030206640 | Malvar et al. | Nov 2003 | A1 |
| 20030216907 | Thomas | Nov 2003 | A1 |
| 20040002856 | Bhaskar et al. | Jan 2004 | A1 |
| 20040024600 | Hamza et al. | Feb 2004 | A1 |
| 20040071284 | Abutalebi et al. | Apr 2004 | A1 |
| 20040078200 | Alves | Apr 2004 | A1 |
| 20040138882 | Miyazawa | Jul 2004 | A1 |
| 20040165736 | Hetherington et al. | Aug 2004 | A1 |
| 20040167777 | Hetherington et al. | Aug 2004 | A1 |
| 20040179610 | Lu et al. | Sep 2004 | A1 |
| 20050075866 | Widrow | Apr 2005 | A1 |
| 20050097296 | Chamberlain et al. | May 2005 | A1 |
| 20050111683 | Chabries et al. | May 2005 | A1 |
| 20050114128 | Hetherington et al. | May 2005 | A1 |
| 20050240401 | Ebenezer | Oct 2005 | A1 |
| 20060026598 | Handlogten et al. | Feb 2006 | A1 |
| 20060031672 | Soltis et al. | Feb 2006 | A1 |
| 20060034447 | Alves et al. | Feb 2006 | A1 |
| 20060056502 | Callicotte | Mar 2006 | A1 |
| 20060074646 | Alves et al. | Apr 2006 | A1 |
| 20060089958 | Giesbrecht et al. | Apr 2006 | A1 |
| 20060089959 | Nongpiur et al. | Apr 2006 | A1 |
| 20060100868 | Hetherington et al. | May 2006 | A1 |
| 20060115095 | Giesbrecht et al. | Jun 2006 | A1 |
| 20060116873 | Hetherington et al. | Jun 2006 | A1 |
| 20060178972 | Jung et al. | Aug 2006 | A1 |
| 20060251268 | Hetherington et al. | Nov 2006 | A1 |
| 20060287859 | Hetherington et al. | Dec 2006 | A1 |
| 20070033031 | Zakarauskas | Feb 2007 | A1 |
| 20070136055 | Hetherington | Jun 2007 | A1 |
| 20070162909 | Bahl et al. | Jul 2007 | A1 |
| 20070245116 | Yamamoto et al. | Oct 2007 | A1 |
| 20080059971 | Abbey et al. | Mar 2008 | A1 |
| Number | Date | Country |
|---|---|---|
| 2158847 | Sep 1994 | CA |
| 2157496 | Oct 1994 | CA |
| 2158064 | Oct 1994 | CA |
| 0 076 687 | Apr 1983 | EP |
| 0 275 416 | Jul 1988 | EP |
| 0 558 312 | Sep 1993 | EP |
| 0 629 996 | Dec 1994 | EP |
| 0 629 996 | Dec 1994 | EP |
| 0 750 291 | Dec 1996 | EP |
| 0 948 237 | Oct 1999 | EP |
| 1 450 353 | Aug 2004 | EP |
| 1 450 354 | Aug 2004 | EP |
| 1 669 983 | Jun 2006 | EP |
| 06269084 | Sep 1994 | JP |
| 06319193 | Nov 1994 | JP |
| WO 0041169 | Jul 2000 | WO |
| WO 0156255 | Aug 2001 | WO |
| WO 0173761 | Oct 2001 | WO |
| WO 2006130668 | Dec 2006 | WO |
| Entry |
|---|
| Anderson C.M., et al: “Adaptive Enhancement of Finite Bandwidth Signals in White Gaussian Noise,” IEEE Trans. on Acoustics, Speech and Signal Processing, vol. ASSP-31, No. 1, Feb. 1983, pp. 17-28. |
| Avendano, C. et al., “Study on the Dereverberation of Speech Based on Temporal Envelope Filtering,” Proc. ICSLP '96, Oct. 1996, pp. 889-892. |
| Berk et al., “Data Analysis with Microsoft Excel,” Duxbury Press, 1998, pp. 236-239 and 256-259. |
| Bilcu, R.C. et al., “A New Variable Length LMS Algorithm: Theoretical Analysis and Implementations,” 2002, IEEE, pp. 1031-1034. |
| Byun K.J., et al: “Noise Whitening-Based Pitch Detection for Speech Highly Corrupted by Colored Noise,” ETRI Journal, vol. 25, No. 1, Feb. 2003, pp. 49-51. |
| Campbell D.A., et al: “Dynamic Weight Leakage for LMS Adaptive Linear Predictors,” Tencon '96 Proceedings, 1996 IEEE Tencon Digital Signal Processing Applications Perth, WA, Australia Nov. 26-29, 1996, NY, NY, USA, IEEE, US, vol. 2, Nov. 26, 1996, pp. 574-579. |
| Chang J.H., et al: “Pitch Estimation of Speech Signal Based on Adaptive Lattice Notch Filter,” Signal Processing, Elsevier Science Publishers B.V. Amsterdam, NL, vol. 85, No. 3, Mar. 2005, pp. 637-641. |
| Fiori, S. et al., “Blind Deconvolution by Modified Bussgang Algorithm,” Dept. of Electronics and Automatics—University of Ancona (Italy), ISCAS 1999, 4 pages. |
| Kang, Hae-Dong; “Voice Enhancement Using a Single Input Adaptive Noise Elimination Technique Having a Recursive Time-Delay Estimator,” Kyungbook National University (Korea), Doctoral Thesis, Dec. 31, 1993, pp. 11-26. |
| Kauppinen, I., “Methods for Detecting Impulsive Noise in Speech and Audio Signals,” 2002, IEEE, pp. 967-970. |
| Koike, S., “Adaptive Threshold Nonlinear Algorithm for Adaptive Filters with Robustness Against Impulse Noise,” 1996, IEEE, NEC Corporation, Tokyo 108-01, pp. 1644-1647. |
| Learned, R.E. et al., A Wavelet Packet Approach to Transient Signal Classification, Applied and Computational Harmonic Analysis, 1995, pp, 265-278. |
| Nakatani, T., Miyoshi, M., and Kinoshita, K., “Implementation and Effects of Single Channel Dereverberation Based on the Harmonic Structure of Speech,” Proc. of IWAENC-2003, Sep. 2003, pp. 91-94. |
| Nascimento, V.H., “Improving the Initial Convergence of Adaptive Filters: Variable-Length LMS Algorithms,” 2002 IEEE, pp. 667-670. |
| Pornimitkul, P. et al., 2102797 Statistic Digital Signal Processing, Comparison of NLMS and RLS for Acoustic Echo Cancellation (AEC) and White Gaussian Noise (WGN), Department of Electrical Engineering Faculty of Engineering, Chulalongkorn University, 2002, pp. 1-19. |
| Puder, H. et al., “Improved Noise Reduction for Hands-Free Car Phones Utilizing Information on a Vehicle and Engine Speeds,” Signal Theory, Darmstadt University of Technology, 2000, pp. 1851-1854. |
| Quatieri, T.F. et al., “Noise Reduction Using a Soft-Decision Sine-Wave Vector Quantizer,” International Conference on Acoustics, Speech & Signal Processing, 1990, pp. 821-824. |
| Quelavoine, R. et al., “Transients Recognition in Underwater Acoustic with Multilayer Neural Networks,” Engineering Benefits from Neural Networks, Proceedings of the International Conference EANN 1998, Gibraltar, Jun. 10-12, 1998 pp. 330-333. |
| Rabiner L.R., et al: “A Comparative Performance Study of Several Pitch Detection Algorithms,” IEEE Trans. on Acoustics, Speech and Signal Processing, vol. ASSP-24, No. 5, Oct. 1976, pp. 399-418. |
| Sasaoka N, et al: “A New Noise Reduction System Based on ALE and Noise Reconstruction Filter,” Circuits and Systems, 2005. ISCAS 2005. IEEE International Symposium on Kobe, Japan May 23-26, 2005, Piscataway, NJ USA, IEEE May 23, 2005, pp. 272-275. |
| Seely, S., “An Introduction to Engineering Systems,” Pergamon Press Inc., 1972, pp. 7-10. |
| Shust, M.R. et al., “Electronic Removal of Outdoor Microphone Wind Noise,” obtained from the Internet on Oct. 5, 2006 at: <http://www.acoustics.org/press/136th/mshust.htm>, 6 pages. |
| Shust, M.R., Abstract of “Active Removal of Wind Noise From Outdoor Microphones Using Local Velocity Measurements,” J. Acoust. Soc. Am., vol. 104, No. 3, Pt 2, 1998, 1 page. |
| Simon, G., “Detection of Harmonic Burst Signals,” International Journal Circuit Theory and Applications, Jul. 1985, vol. 13, No. 3, pp. 195-201. |
| Tam, K. et al., “Highly Oversampled Subband Adaptive Filters for Noise Cancellation on a Low-resource DSP System,” Proc. of Int. Conf. on Spoken Language Processing (ICSLP), Sep. 2002, pp. 1-4. |
| Vaseghi, S. et al., “The Effects of Non-Stationary Signal Characteristics on the Performance of Adaptive Audio Restoration System,” 1989, IEEE, pp. 377-380. |
| Vieira, J., “Automatic Estimation of Reverberation Time,” Audio Engineering Society, Convention Paper 6107, 116th Convention, May 8-11, 2004, Berlin, Germany, pp. 1-7. |
| Wahab A. et al., “Intelligent Dashboard With Speech Enhancement,” Information, Communications, and Signal Processing, 1997. ICICS, Proceedings of 1997 International Conference on Singapore, Sep. 9-12, 1997, New York, NY, USA, IEEE, pp. 993-997. |
| Widrow, B. et al., “Adaptive Noise Cancelling: Principles and Applications,” 1975, IEEE, vol. 63, No. 13, New York, pp. 1692-1716. |
| Zakarauskas, P., “Detection and Localization of Nondeterministic Transients in Time series and Application to Ice-Cracking Sound,” Digital Signal Processing, 1993, vol. 3, No. 1, pp. 36-45. |
| Number | Date | Country | |
|---|---|---|---|
| 20090070769 A1 | Mar 2009 | US |
| Number | Date | Country | |
|---|---|---|---|
| 60971452 | Sep 2007 | US |