1. Technical Field
This invention relates generally to the field of memory resource management, and in particular, to a system that manages and manages memory 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, mutual exclusion algorithms, 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 memory management approaches may implement a rigid partitioning scheme. In a rigid memory partitioning scheme, a memory resource may be divided into fixed-size chunks. A finite amount of the memory resource may be reserved to make that finite amount unavailable to other entities in a processing system. Processes may reserve portions of memory that the process never uses. This may cause a lack of free memory that blocks or delays other processes. Other memory resource management techniques may be inefficient and may reserve resources on a first-come, first-served basis without regard for the operation of the processing system.
Memory resource partitioning code allocates a memory partition in response to a process requesting access to memory storage. Memory partition rules may define attributes of the memory partition. The attributes may include a minimum memory allocation and a maximum memory allocation for the memory partition.
Other systems, methods, features, and advantages of the inventions 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 invention can 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.
The system of
The memory allocator 210 may provide virtual to physical memory mappings 230 to software applications, processes, or kernel, e.g. the process 205. Alternatively, or in addition, the memory allocator 210 may program a memory management unit or similar memory manager with the virtual-to-physical mappings so that memory operations are performed on the correct physical memory storage locations.
The partitioning module 300 may define and manage memory classes and partitions of these memory classes with respect to requested memory operations. The partitioning module 300 may also set the minimum and maximum sizes for those partitions as well as other parameters and properties for those partitions.
Processes or other entities may create objects. The class of memory that one object uses may be different than the class of memory for another object. Two different processes may also have identical objects created from different memory classes. Different classes of memory (e.g., memory with different attributes) may be independently partitioned. If a particular process/entity uses a particular class of memory, that process/entity may be associated with a partition of that class, independent of the memory class requirements of other processes/entities. When partitioning memory, each memory class may be partitioned independently. A memory partition may represent a single class of memory. If a process/entity creates objects that require different classes of memory, the process/entity may be associated with multiple partitions.
Memory partitions of a given memory class may nest. Newly created memory partitions may subdivide a parent memory partition and form a hierarchy. In this architecture child partitions may be constrained by the attributes of their parent partition. Alternatively, or in addition, a system may partition a particular memory class so that it is not completely bound by the parent attributes.
Accounting operations may be executed independently for each partition of an associated memory class. The memory partitioning system may support the enforcement of partitioning rules based on the attributes established on a per memory class basis, even if only one memory class, system memory, is utilized.
The memory partitioning system facilitates establishment of memory classes that may distinguish between different levels of importance or costs of different kinds of memory resources. Memory compatible with DMA may be distinguished from memory that is not compatible with DMA. Although DMA compatible memory may be allocated for general use by all processes, it may be undesirable to allocate all of the DMA-capable memory for general use. By partitioning different memory resource classes separately, and by allowing one process/entity to be associated with more than one memory resource partition, memory resource requirements for DMA compatible memory, DMA incompatible memory, and/or other memory resource classes may be met.
Memory Partition Attributes and Policies
A partition may be an entity that represents the attributes and rules which govern the use of a resource. Memory partitions may have the following configurable attributes:
i. minimum size (guarantee); the minimum size attribute specifies the amount of a particular class of memory that has been reserved for exclusive use for objects which are associated with the partition; and
ii. maximum size (restriction); the maximum size attribute specifies the amount of a particular class of memory that may never be exceeded for use by objects that are associated with the partition.
Some characteristics that may emerge as a result of these attributes may include:
i. Reserved Memory
ii. Discretionary Memory
The memory partitioning system may enforce a rule in which the sum of the minimum values of the partitions is less than or equal to the total memory of the system. This constraint may be used so that a minimum amount of memory will be available to all processes/entities. Allocation in a child partition may be counted as an allocation in the parent. When a child partition is created with a reservation, that reservation may be treated as an allocation request to the parent. The reservation request may propagate up the hierarchy as far as required until the request is either wholly satisfied by the existing reservation of a parent, and/or by the allocator of the memory class.
Memory Partition Types
The attributes and rules that may be associated with the creation a memory partition are generally unlimited. Memory partition configurations or use cases may include:
1. Open; minimum=0, maximum=no limit; discretionary only memory allocations made for objects associated with this partition type are subject to the availability of discretionary memory. There is no limit (beyond the limit of physical memory available to the memory allocator 210 for that class) to the amount of memory that may be requested. Allocations made for objects associated with this partition may not succeed. This configuration type may create an environment similar to the case when there is no memory partitioning. If memory is available, the allocation request will succeed (notwithstanding factors unrelated to availability), otherwise it will fail.
2. Guarantee; minimum=N, maximum=no limit, reserved+discretionary;
N bytes of the respective memory class are reserved and available for allocation to objects associated with the partition. There is no limit (beyond the limit of physical memory available to the memory allocator 210 of that class) to the amount of memory that may be requested. This configuration type may be used when objects associated with this partition require a specific amount of memory. Further memory requirements may be governed by the rules for discretionary memory allocations.
3. Restricted; minimum=0, maximum=N, discretionary only;
memory allocations made for objects associated with this partition type are subject to the availability of discretionary memory and may not exceed the limit of N bytes. This configuration type may be used when the memory requirements for the objects associated with the partition are not known and the N bytes limit may not be exceeded.
4. Sandbox; minimum=N, maximum=N, reserved only;
N bytes, and only N bytes of the respective memory class is reserved and available for allocation to objects associated with the partition. This configuration type may be used when the memory requirements for the objects associated with the partition are known, or for situations where a course subdivision of the available memory class is desired. The configuration may allocate memory blocks for further subdivision by others (using any partition configuration including the defined partition configurations described above).
Additional configurations may also be used that are unique or combine one or more of these configurations. For example, a configuration may combine the guarantee and restricted partition types. This configuration may specify a reserved amount, while allowing for a “not to exceed” buffer of discretionary allocation. This configuration may also be used to assist in optimizing a sandbox partition and/or for accommodating transient memory allocations in a guarantee partition.
Memory partitions may be established at run time or at the time a bootable image is built using run-time APIs and/or build-time tools. Memory partitions may also be changed at runtime. An “open” partition may be dynamically changed to a “closed” partition when a user changes the minimum and/or maximum values at run time.
Memory Classes
Memory partitioning may be performed on a per memory class basis. Memory classes may be system specific. A memory class that may be present and automatically configured may be the system RAM class.
A memory class need not refer to a physical block of memory. Different classes of memory may reside in separate physical blocks. Memory partitioning need not impose any particular attributes to the use of individual memory classes. The suitability of a particular class of memory to a particular use is not necessarily within the domain of the memory partitioning system. Rather, predetermined memory class configurations may be used while the memory partitioning system manages memory in accordance with the attributes of memory classes.
Memory classes may be provided to the memory partitioning system through pre-configured system configuration information. This information may be established at build time and may be available after boot-time. It may be provided as BIOS information on x86 systems. In the case of QNX® Neutrno® operating system, the memory classes may be made available to the memory partitioning system at startup using a system page. The memory classes may be available for partitioning when they are introduced into a partitioning name space or under whatever path root is used in the system. On a QNX Neutrino operating system, partitionable memory resources may be exposed under the /partition/<resource> name space. Memory partitioning may use a POSIX namespace to represent the naming of partitions and their hierarchical relationships. This may provide access to usage statistics, configuration options, and other features offered by the memory partitioning system.
On non-POSIX systems, memory partitions may use a portion of the system's name space that is used in that system. On systems which do not have a name space, a memory resource partition may create its own name space.
Using a name space for access to the memory partitioning module may provide the following:
Before a memory class is partitioned, the memory class may be added to the memory partitioning system by creating a new entry in the system name space using the memory class name as registered in the system page (in the case of a QNX system). In other implementations, a name may be created that corresponds to the particular operating system that is used to implement the memory partitioning system. Systems that do not have a name space may use an alternative mechanism for exposing the memory partitioning module.
Since partitioning may take place on a per memory class basis, a partition may be created in the name space under the respective memory class. A partition of the system memory class, such as a system partition, may be created by default. The system partition may be used to account for all memory allocations that are allocated to user processes, including kernel allocations done on behalf of user processes, which are not otherwise associated with a different partition. If additional partitions are not created, all allocations may be accounted to the system partition.
Memory Partition Configurations
A certain amount of system RAM may be used during startup and/or for use by the kernel. The size of the system partition after startup may determine what memory is available for partitioning. The system partition may be created as an Open partition type by default, but may be configured as a Guarantee partition at the time the bootable image for the system is built. The system partition may be used as the root of a memory partition hierarchy. If the system partition is used as the root partition of a hierarchy, however, it may not necessarily protect software such as the operating system kernel that should receive guaranteed memory from the system partition.
Partition topologies may be flat, in which all partitions are root partitions, 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 memory partition may be independent of the attributes of any other memory partition. Memory partitions of any configuration may be created so long as general rules for creation are satisfied. For example, an application may not create five 32 MB sandbox partitions of the same memory class when only 128 MB of physical memory is available in that class.
In a hierarchical topology, some of the attributes specified for a child partition may be dependent on the attributes of its parent. The memory partition hierarchy may include a rule of subdivision where:
Partition rules may govern whether the allocation of memory will be allowed to proceed. There are reasons unrelated to availability of memory which may prevent the memory allocator for a given class of memory from satisfying an allocation request. Assuming a request for a contiguous block of physical memory does not exceed the size rules for the memory partition class, internal fragmentation of the physical memory may prevent the memory allocator for the memory class from creating the memory partition.
The rules governing the use of memory class attributes may include:
Pseudo Partitions/Partition Groups
A real partition represents a real partition of a memory class. Pseudo partitions and partition group names provide a means of grouping real partitions. A real memory partition may be a memory partition with attributes and policies that reference an actual memory resource. A group name may be used as a pseudo partition that references a collection of real memory partitions. A group name may be an alias for a real memory partition. A process need not be directly associated with all of the memory partitions for each memory class it uses. Group names may simplify process associations by allowing a process to be associated with a single group name and, by extension, to a collection of real partitions through their respective pseudo partitions. Pseudo partitions may also link differing memory resource types through a common group name.
Process Association with Memory Partitions
When a process is created, optional parameters to posix_spawn( ) or whatever process spawning primitive the operating system provides, may allow the spawned process to be associated with a corresponding memory partition(s). If nothing is specified, the spawned process may be associated with the same partition(s) as those of the requesting process. A forked process may be associated with the same partition(s) as the parent.
A process may call an API to associate itself with one or more memory partitions, (e.g. self-initiated). Additionally, or in the alternative, a system application may utilize an API to effect associations for other processes without coordinating with those processes and/or without awareness by those processes that such associations have been effected on their behalf. Restrictions may be used to inhibit incorrect configurations when using pseudo and real partition associations to allocate memory to the same process. These restrictions may prevent an undesirable association between the process and memory partitions.
Memory Partition Metrics
In operating systems which support a name space, such as the QNX Neutrino operating system and other POSIX supported operating systems, use of the path name space may be used to obtain memory partition metrics. This may facilitate the use of POSIX commands, like “ls” and “cat”, as well as the creation of custom applications, to obtain and display memory partition and memory class data. Such information may include current memory usages and configurations. Memory partition metrics may facilitate user specified partitioning of the available system memory. The metrics may account for a memory partition usage. Applications may retrieve information that includes:
Similar information may be made available for a memory class as a whole.
Memory Partition Events
A process may be identical to another process in which no memory partitioning is used. A privileged process may register so that it is notified for various memory class and partition events. Notification may occur by a message or signal that may be provided to a designated thread of the registered process. This notification may be facilitated by inter-process communication and/or thread synchronization primitives supported by the system. When a process attempts to execute memory operations, corresponding events may be generated. These events may include:
Security Issues
Security issues may include deciding what software you trust and may be a concern when configuring memory partitions. In some instances, security issues may be an exclusive or non-exclusive reason for use of the memory partitioning system. The memory partitioning system may support security policies that may include:
Configuration security:
Operational security:
The following mechanisms may affect the security policies:
1. Terminal Partition Policy—a terminal partition policy may allow a given partition to be configured (independently of other partitions) to inhibit creation of child partitions. The memory partitioning system may prevent this policy from changing once set to TRUE. Although this policy may prevent the creation of child partitions it need not prevent the changing of partition attributes. This policy may be used to inhibit a hierarchical explosion of partitions while allowing attribute modification (if appropriately privileged).
2. Configuration Lock Policy—the configuration lock policy may allow all configuration attributes of a partition to be locked. The memory partitioning system may prevent this policy from changing once set to TRUE. This mechanism may prevent changes to the memory partition attributes, including POSIX file permissions. It may allow, however, the creation of child partitions so that a locked down parent partition may be independently sub-partitioned by a separate (appropriately privileged) organization.
3. Permanence Policy—the permanence policy may prevent the destruction of a partition. The memory partitioning system may prevent this policy from changing once set to TRUE. This mechanism may prevent the removal of a memory partition independent of POSIX file permissions.
4. POSIX permissions may be used to control whether a process may associate with a memory partition and whether it may modify or examine the policies and/or attributes of the memory partition.
If the requested partition parameters are valid, then the process determines whether the partition parameters include a memory reservation at 415. If not, then a memory partition may be created at 425. If the partition parameters include a reservation, then a reservation may be requested from the partition hierarchy, if one exists. The request may propagate through the hierarchy until it is satisfied by one or more parent partitions and/or from the memory allocator for the memory class at 430. If the new partition is a root partition (no hierarchy) the request may be sent to the memory partition allocator for the memory class. In either case, if the reservation is satisfied at 435, then the memory partition may be created at 425 and control may return to the requesting process. If the reservation is not satisfied, then the request may fail 420.
If the parameters of the memory partition do not allow removal, then the request may fail 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 removed at 530, and control may return to the “run process” state 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.
If process determines that the partition does not have a parent at 805, then the new reservation may be requested from the allocator for the class at 835. If the reservation is successful at 840, then control may return to 430 of
At 905, the process may determine that the partition does not have a parent. If the memory partition does not have a parent, then the reservation may be released to the memory allocator for the class at 930. Control may then return to 535 of
If the allocation is greater than the unused reserved space for the partition, then the process determines 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 requested deallocation is greater than the discretionary unused space for the memory partition, then the process determines whether the partition has a parent at 1120. If the partition does not have a parent, then control may return to 780 of
The methods and descriptions above may be encoded in a signal bearing medium, a computer readable medium or a computer readable storage medium such as a memory that may comprise unitary or separate logic, programmed within a device such as one or more integrated circuits, or processed by a controller or a computer. If the methods are performed by software, the software or logic may reside in a memory resident to or interfaced to one or more processors or controllers, a wireless communication interface, a wireless system, a powertrain controller, an entertainment and/or comfort controller of a vehicle or non-volatile or volatile memory remote from or resident to a device. The memory may retain an ordered listing of executable instructions for implementing logical functions. A logical function may be implemented through digital circuitry, through source code, through analog circuitry, or through an analog source such as through an analog electrical, or audio signals. The software may be embodied in any computer-readable medium or signal-bearing medium, for use by, or in connection with an instruction executable system or apparatus resident to a vehicle or a hands-free or wireless communication system. Alternatively, the software may be embodied in media players (including portable media players) and/or recorders. Such a system may include a computer-based system, a processor-containing system that includes an input and output interface that may communicate with an automotive or wireless communication bus through any hardwired or wireless automotive communication protocol, combinations, or other hardwired or wireless communication protocols to a local or remote destination, server, or cluster.
A computer-readable medium, machine-readable medium, propagated-signal medium, and/or signal-bearing medium may comprise any medium that contains, stores, communicates, propagates, or transports software for use by or in connection with an instruction executable system, apparatus, or device. The machine-readable medium may selectively be, but not limited to, an electronic, magnetic, optical, electromagnetic, infrared, or semiconductor system, apparatus, device, or propagation medium. A non-exhaustive list of examples of a machine-readable medium would include: an electrical or tangible connection having one or more links, a portable magnetic or optical disk, a volatile memory such as a Random Access Memory “RAM” (electronic), a Read-Only Memory “ROM,” an Erasable Programmable Read-Only Memory (EPROM or Flash memory), or an optical fiber. A machine-readable medium may also include a tangible medium upon which software is printed, as the software may be electronically stored as an image or in another format (e.g., through an optical scan), then compiled by a controller, and/or interpreted or otherwise processed. The processed medium may then be stored in a local or remote computer and/or a machine memory.
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 is a divisional application that claims priority from U.S. application Ser. No. 12/207,189, filed on Sep. 9, 2008, which claims priority to U.S. Provisional Application No. 60/971,467, filed Sep. 11, 2007, both of which are incorporated by reference in their entireties.
| 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 |
| 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 | Gustafsson 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 | Chazan 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 |
| 6725190 | Cohen 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 |
| 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 |
| 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, Jr. 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 | |
|---|---|---|---|
| 20140344547 A1 | Nov 2014 | US |
| Number | Date | Country | |
|---|---|---|---|
| 60971467 | Sep 2007 | US |
| Number | Date | Country | |
|---|---|---|---|
| Parent | 12207189 | Sep 2008 | US |
| Child | 14449955 | US |