This disclosure relates generally to memory objects and, more particularly, to methods, system, and apparatus for safe memory object access in memory management mechanisms.
Real-time computing systems include memory objects to store data. As the data changes, the data in the memory objects change. In some examples, data in a memory object may be deleted and/or a new memory object may be initiated for new data to keep the memory objects up-to-date. As the memory objects change, a user may run a query corresponding to some filter criteria. When the user runs the query, real-time computing systems search the memory objects to find data that matches the filter criteria.
Certain examples provide an apparatus for safe memory object access in memory management mechanisms. The example apparatus includes a memory object container to store data into a memory object and tag the memory object. The example apparatus further includes an object list manager to store a reference to the memory object in storage. The example apparatus further includes a query results determiner to, in response to receiving a query, transmit the query to the object list manager, the object list manager to identify the reference in the storage based on the query and return a query response to the query results determiner.
Certain examples provide a method for safe memory object access in memory management mechanisms. The example method includes tagging active memory objects with a first tag type and tag inactive memory objects with a second tag type. The example method further includes storing data into a memory object corresponding to the second tag type and tag the memory object with a tag corresponding to the first tag type. The example method further includes storing references to active memory objects in storage, the stored references including a reference to the tagged memory object. The example method further includes, in response to receiving a query, identifying the reference in the storage based on the query and return a query response to the query results determiner.
Certain examples provide a computer readable storage medium comprising instructions which, when executed, cause a machine to provide safe memory object access in memory management mechanisms. The example computer readable medium includes instructions to cause a machine to tag active memory objects with a first tag type and tag inactive memory objects with a second tag type. The example computer readable medium includes instructions to cause a machine to store data into a memory object corresponding to the second tag type and tag the memory object with a tag corresponding to the first tag type. The example computer readable medium includes instructions to cause a machine to store references to active memory objects in storage, the stored references including a reference to the tagged memory object. The example computer readable medium includes instructions to cause a machine to in response to receiving a query, identify the reference in the storage based on the query and return a query response to the query results determiner.
The figures are not to scale. Wherever possible, the same reference numbers will be used throughout the drawing(s) and accompanying written description to refer to the same or like parts.
Computing systems (e.g., real-time computing systems) include memory objects that store real-time data. In some examples, as the real-time data changes, the stored data in the memory objects changes and/or is removed. Additionally, new data can be implemented in new memory objects. For example, flight management systems include memory objects dedicated to data from sensors located on an aircraft. In such an example, the sensors detect other aircraft or objects in a particular altitude range. In such an example, the sensor determines (A) objects within the particular altitude range, (B) new objects that have entered the altitude range, (B) old objects that have left the altitude range, and/or data (e.g., relative location, speed, direction, etc.) related to current objects in the altitude range. When sensor data change, the dedicated memory objects must also change to adapt to remain up-to-date. Accordingly, memory objects are added, deleted, and/or modified in real-time.
The memory objects of computing systems can be queried by a user and/or processor for a sub-set of objects matching at least one filter criteria. Traditional techniques of querying memory objects to find a sub-set of objects that matches the filter criteria include copying the data in the memory objects and placing the data into a stack (e.g., a buffer). Because the data in the memory objects can be varying sizes, the memory needed for the stack will shrink and/or grow depending on the query. Initially, traditional techniques generate the size of the stack to make sure that the stack is appropriately sized to be able to handle the largest possible query. However, as other systems are adjusted, the size of the stack can no longer be appropriate to handle the possible queries associated with the adjusted system, thereby increasing the risk of running out of memory and/or a system crash. For example, a stack associated with memory objects dedicated to a sensor can be sized to 5 Megabytes (MB). However, if the sensor is updated to a stronger sensor that can gather more granular data, the 5 MB stack can now be inadequate to store memory object data corresponding to the stronger sensor. In such an example, a query resulting in data larger than 5 MB will cause the flight management system to crash. Examples disclosed herein alleviate the problems of such traditional techniques using an example memory management system that provides a query mechanism that uses static-sized references to memory objects that serve as a map to locate the sub-set of objects corresponding to a query.
Examples disclosed herein include a memory management system providing safe memory object access. Examples disclosed herein include a memory object container to store memory objects corresponding to real-time and/or substantially real-time data. Substantially real-time data being based on based on data processing, transmission and/or storage delay. Examples disclosed herein further include tagging the memory objects to later identify the memory objects and to determine whether a memory object is active or inactive. Active memory objects correspond to data that is relevant and/or currently up-to-date. Examples disclosed herein can tag memory objects using two or more tag types. For example, a first tag type may correspond to active memory objects and a second tag type may correspond to inactive memory objects. For example, if the data corresponds to an object received by a sensor, the memory object container may generate (e.g., activate) a memory object to include data related to the object. If the object is no longer being tracked by the sensor (e.g., because the object is out of the range of the sensor), the memory object container may determine that the data stored in the memory object corresponding to the sensed object is no longer relevant. Accordingly, examples disclosed herein change the tag type of the memory object from an active tag (e.g., with an identifier) to an inactive tag (e.g., an invalided tag).
Examples disclosed herein further include an object list manager to store references and/or snapshots of the active memory objects in the memory object container. A reference includes the tag (e.g., identifier, number, etc.) corresponding to an active memory object. The snapshot includes characteristics of the data stored in a memory object that may be used in a query. For example, when the memory objects include objects sensed by a sensor, the characteristics may include the type of object (e.g., ship, plane, mountain, etc.), the speed of the object, the size of the object, a duration the object has been tracked, a location of the object, etc. Accordingly, the system may be set up to allow a user to submit a query related to the sensed objects. For example, the query may correspond to object type. In such an example, the snapshot includes the object type corresponding to each memory object. The number and/or type of characteristics to be included in the snapshot may be based on manufacture preferences and/or system demands.
By storing the references and/or snapshots, as opposed to all the data in stored in the memory object, the object list manager requires substantially less memory than conventional stacks. Additionally, because the reference and/or snapshots do not substantially change in size, the size of the data in the memory objects become less relevant, thereby reducing the probability of overloading the storage during a query. The example memory object container disclosed herein updates the object list manager with any changes in memory object status (e.g., data change, new memory objects, deleted memory objects, changes in tags, etc.), allowing the object list manager to keep an up-to-date list of references and/or snapshots of active memory objects.
Examples disclosed herein further include a query result determiner to gather query data based on search criteria corresponding to a query of the memory objects. The query result determiner transmits the query to the object list manager to search the stored references and/or snapshots of the object list manager based on the search criteria. In some examples, the query result determiner may gather additional data from the identified memory objects based on the returned references (e.g., tags) that match the search query. For example, if the query corresponds to how many planes are currently being sensed by a sensor, the snapshot may only include the object types and return a number of planes currently being sensed by the sensor. In such an example, if the user wants more detailed information (e.g., speed, location, etc.) regarding the number of planes, the query result determines interfaces directly with the corresponding memory objects (e.g., based on the identifier returned in the query) to gather such data. Using examples disclosed herein, the risk of overloading a storage (e.g., such as a stack) based on large memory object data is substantially reduced and the size of the storage required to handle memory object queries is substantially reduced.
The sensor 102 of
The memory object controller 106 of the memory object container 104 of
The object list manager 110 of
The query result determiner 112 of
The sensor interface 200 of
The memory object organizer 202 of
The memory object tagger 204 of
The memory object controller interface 300 of
The memory object referencer 302 of
When the memory object referencer 302 of
The query receiver 400 of
Initially, the sensor 102 transmits the sensor data 501 to the memory object container 104. The memory object container 104 processes the sensor data 501 to generate and tag memory objects corresponding to the sensor data 501. For example, if the sensor data includes a sensed ship at a location moving at some speed, the memory object container stores the data relating to the characteristics of the ship, the location, the speed etc. in a memory object. Once a memory object has been created, the memory object container 104 transmits the status data 502 to the object list manager 110. For example, if the snapshot is designed to include only object type data, the memory object container 104 transmits the status data 502 to include the tag of the newly generated memory object with a snapshot identifying that the newly generated memory object is a ship. Additionally or alternatively, the example sensor 102 may transmit the sensor data 501 directly to the example object list manager 110, and the example object list manager 110 may generate the reference based on the sensor data 501. The object list manager 110 generates and stores references and snapshots to the newly created memory objects based on the status data 502. As shown in the illustrated diagram of
When a user initiates a query, the user interface 114 transmits the query 508 to the query result determiner 112. The query may correspond to one or more characteristics included in the snapshot stored at the object list manager 110. As described above, the query 508 includes at least one filter criteria (e.g., characteristic(s) corresponding to a snapshot) that is to be identified in the active memory objects 108a-d of the memory object container 104. In response to receiving the query 508, the query result determiner 112 transmits the query 510 to the object list manager 110. As described above, the object list manager 110 stores references (e.g., tags and snapshots) to active memory objects of the memory object container 104. Accordingly, the object list manager 110 searches the stored references to identify active memory objects that match the filter criteria (e.g., based on the snapshots of the references) of the query 508, 510. Once the object list manager 110 determines the corresponding memory objects, the object list manager 110 returns the tag data 512, identifying the tags and/or snapshot data of the corresponding memory objects. In some examples, the tag data includes the tag of a memory object that corresponds to the example query 510.
In some examples, the query result determiner 112 transmits the tags and/or the identified memory object data back to the user interface 114. In some examples, the query result determiner 112 gathers additional data directly from the memory objects of the memory object container 104 that is not included in the tag data 512 (e.g., other characteristics not included in the snapshot). In such examples, the query result determiner 112 transmits the data request 514 to the memory object container 104 to interface directly with the memory objects 108a-d corresponding to the tag data 512 to collect additional data stored in the corresponding memory objects. For example, the example query 510 may be based on an amount of objects within a certain location range, where the snapshots include location data of objects. Accordingly, the example query result determiner 112 may also want speeds of the objects resulting from the query. In such an example, because speed may not be included in the snapshot, the query result determiner 112 uses the tag data 512 to gather speed data from the memory objects corresponding to the query result.
In response to receiving the data request 514, the memory object container 104 transmits a data response 516 including the requested data from the memory objects 108a-d corresponding to the tag data 512. The query result determiner 112 transmits the query response 518 to the user interface 114. The query response can include the tags, the snapshots, and/or any other data corresponding to the active memory objects that match the filter criteria of the query 508, 510.
While example manners of implementing the memory object controller 106, the object list manager 110, and/or the query result determiner 112 of
Flowcharts representative of example machine readable instructions for implementing the memory object controller 106, the object list manager 110, and/or the query result determiner 112 of
As mentioned above, the example processes of
At block 602, the sensor interface 200 receives sensor data from the sensor 102. As described above, the sensor data includes data related to events and/or changes in an environment. At block 604, the memory object organizer 202 determines if the sensor data has changed. If the sensor data is the same as previously received sensor data, then the memory objects 108a-108f are not to be updated. Accordingly, the such sensor data can be discarded. If the memory object organizer 202 determines that the sensor data has not changed, (block 604: NO), the process returns to block 602 as the memory object organizer 202 waits for additional sensor data. If the memory object organizer 202 determines that the sensor data has changed, (block 604: YES), the memory object organizer 202 determines if the sensor data corresponds to a new memory object (block 606). The sensor data corresponds to a new memory object when the sensor data corresponds to a new object or item that has been sensed by the sensor 102.
If the memory object organizer 202 determines that the sensor data does not correspond to a new memory object (block 606: NO), the process continues to block 614. If the memory object organizer 202 determines that the sensor data corresponds to a new memory object (block 606: YES), the memory object organizer 202 instructs the memory object interface 206 to store the new sensor data in an unused memory object (e.g., memory objects 108e, 108f). At block 610, the memory object tagger 204 tags the memory object corresponding to the new sensor data with a tag (e.g., identifier). At block 612, the memory object organizer 202 instructs the object list manager interface 208 to transmit status data to the object list manager 110 regarding the new memory object. The status data includes the generated tag and a snapshot of the memory object.
At block 614, the memory object organizer 202 determines if the sensor data corresponds to a withdrawal (e.g., deletion) of a currently active memory object. As described above, if an object or event is removed from an environment monitored by the sensor 102, the sensor data will no longer include data related to the removed object or event. Accordingly, the memory objects 108a-108f are to be updated to reflect the removal of the object or event in the sensor data. If the memory object organizer 202 determines that the sensor data does not correspond to a withdrawal of a currently active memory object (block 614: NO), the process continues to block 620. If the memory object organizer 202 determines that the sensor data does correspond to a withdrawal of a currently active memory object (block 614: YES), the memory object tagger 204 assigns an “invalid” tag to the corresponding memory object (e.g., changing the tag to the “invalid” tag) (block 616). At block 618, the memory object organizer 202 updates the object list manager 110 (e.g., via the object list manager interface 208) regarding the deletion of the memory object by transmitting status data.
At block 620, the memory object organizer 202 determines if the sensor data corresponds to a change of data in one or more of the memory objects 108a-f. For example, if the sensor data corresponds to objects in a particular area. Objects changing directions, speeds, location, etc., can correspond to changes in data to be stored in a corresponding memory object. If the memory object organizer 202 determines that the sensor data corresponds to a change of data in a memory object (block 620: YES), the memory object organizer 202 instructs the object list manager interface 208 to transmit an initial memory object update flag corresponding to the memory object that is getting updated (block 622). The initial memory object update flag warns the object list manager 110 that the data is temporarily in flux. At block 624, the memory object organizer 202 instructs the memory object interface 206 to update the data the one or more memory objects corresponding to a change in data. At block 626, the memory object organizer transmits, via the object list manager interface 208, a memory object updated flag to the object list manager 110 to verify that the data is updated and the corresponding memory object(s) are no longer in flux.
At block 702, the memory object controller interface 300 determines if status data from the memory object container 106 has been received. As described above, the status data can include data related to a new memory object, deletion of an old object, or flags identifying changes to data in current memory objects. If the memory object controller interface 300 determines that status data from the memory object container 106 has not been received (block 702: NO), the memory object controller interface 300 continues to wait until status data has been received. If the memory object controller interface 300 determines that status data from the memory object container 106 has been received (block 702: YES), the memory object referencer 302 determines if the status data corresponds to a withdrawal (e.g., deletion) of a memory object (e.g., one of the memory objects 108a-f) (block 704).
If the memory object referencer 302 determines that the status data corresponds to a withdrawal of a memory object (block 704: YES), the memory object referencer 302 deletes the reference to the memory object in the memory object reference storage 304 (block 706). If the memory object referencer 302 determines that the status data does not correspond to a withdrawal of a memory object (block 704: NO), the process continues to block 708.
At block 708, the memory object referencer 302 determines if the status data corresponds to a new memory object. If the memory object referencer 302 determines that the status data corresponds to a new memory object (block 708: Yes), the memory object referencer 302 creates and stores a reference to the new memory object in the memory object reference storage 304 (block 710). As described above in conjunction with
At block 712, the memory object referencer 302 determines if the status data corresponds to an initial memory update flag. The initial memory update flag warns the object list manager 110 that the data of a memory object is currently changing. If the memory object referencer 302 determines that the status data corresponds to an initial memory update flag (block 712: YES), the memory object referencer 302 flags the reference corresponding to the initial memory update flag (block 714). When the query results determiner 112 transmits a query corresponding to the flagged reference, the flag identifies that the data in the flagged memory object is currently changing. If the memory object referencer 302 determines that the status data does not correspond to an initial memory update flag (block 712: NO), the process continues to block 716.
At block 716, the memory object referencer 302 determines if the status data corresponds to a memory object updated flag. The memory object updated flag lets the object list manager 110 know that the memory object has been updated (e.g., is no longer in flux). If the memory object referencer 302 determines that the status data corresponds to a memory object updated flag (block 716: YES), the memory object referencer 302 removes the flag from the reference corresponding to the memory object updated flag (block 718). If the memory object referencer 302 determines that the status data does not correspond to a memory object updated flag (block 716: NO), the process returns to block 702.
At block 802, the query result determiner interface 306 determines if query instructions from the query results determiner 112 have been received. In some examples, the query instructions include a query of one or more properties (e.g., filter criteria) that can be stored in one or more of the memory objects 108a-f. If the query result determiner interface 306 determines that query instructions from the query results determiner 112 have not been received (block 802: NO), the process returns to block 802 until query instructions have been received. If the query result determiner interface 306 determines that query instructions from the query results determiner 112 have been received (block 802: YES), the memory object referencer 302 determines query results including references to the memory objects 108a-f that match the filter criteria (block 804).
At block 806, the memory object referencer 302 determines if the query results include one or more flagged references. As described above, a flagged reference corresponds to a memory object a that is currently changing data (e.g., in flux). Accordingly, a flagged reference can include an out-of-date and/or inaccurate data stored in a memory object. If the memory object referencer 302 determines that the query results do include one or more flagged references (block 806: YES), the query result determiner interface 306 transmits one or more tags corresponding to query results and a warning corresponding to the flagged references to the query results determine 112 (block 808). Accordingly, the query results determiner 112 can determine how to handle the flagged references. If the memory object referencer 302 determines that the query results do not include one or more flagged references (block 806: NO), the query result determiner interface 306 transmits a response including one or more tags corresponding to query results to the query results determine 112 (block 810). In some examples, when no references correspond to the query instructions, the query results determiner interface 306 transmits a response with no tags.
At block 902, the query receiver 400 receives query instructions from the user interface 114. In some examples, a query instruction corresponds to a search of one or more properties (e.g., filter criteria) that may or may not be stored in the example memory objects 108a-f. At block 904, the object list manager interface 402 transmits the query instructions to the object list manager 110. At block 906, the object list manager interface 402 determines if a response including tags for memory objects corresponding to the query has been received by the object list manager 110. If the query results in no tags (e.g., no references correspond to the query instructions), the response will not include any tags. In some examples, the response includes a warning that one or more of the tags is currently being updated. In such examples, the query receiver 400 transmits the warning to the user interface 114, the object list manager interface 402 waits a duration of time and resend the query instructions to the object list manager 110, and/or the object list manager interface 402 can discard the warning. The action taken in response to a warning can be based on user and/or manufacturer preferences.
If the object list manager interface 402 determines that the response including the tags for memory objects corresponding to the query has not been received (block 906: NO), the process returns to block 906 until the response is received. If the object list manager interface 402 determines that the response including the tag(s) for memory object(s) corresponding to the query has been received (block 906: YES), the memory object interface 404 can identify memory object(s) corresponding to the tag(s) (block 908). At block 910, the memory object interface 404 can gather additional data from the one or more memory objects corresponding to the received tags. In some examples, when additional data is not desired, blocks 908, 910 can be omitted. At block 912, the query receiver 400 transmits a query response including data related to the query to the user interface 114.
The processor platform 1000 of the illustrated example includes a processor 1012. The processor 1012 of the illustrated example is hardware. For example, the processor 1012 can be implemented by integrated circuits, logic circuits, microprocessors or controllers from any desired family or manufacturer.
The processor 1012 of the illustrated example includes a local memory 1013 (e.g., a cache). The example processor 1012 of
The processor platform 1000 of the illustrated example also includes an interface circuit 1020. The interface circuit 1020 may be implemented by any type of interface standard, such as an Ethernet interface, a universal serial bus (USB), and/or a PCI express interface.
In the illustrated example, one or more input devices 1022 are connected to the interface circuit 1020. The input device(s) 1022 permit(s) a user to enter data and commands into the processor 1012. The input device(s) can be implemented by, for example, a sensor, a microphone, a camera (still or video), a keyboard, a button, a mouse, a touchscreen, a track-pad, a trackball, isopoint and/or a voice recognition system.
One or more output devices 1024 are also connected to the interface circuit 1020 of the illustrated example. The output devices 1024 can be implemented, for example, by display devices (e.g., a light emitting diode (LED), an organic light emitting diode (OLED), a liquid crystal display, a cathode ray tube display (CRT), a touchscreen, a tactile output device, and/or speakers). The interface circuit 1020 of the illustrated example, thus, typically includes a graphics driver card, a graphics driver chip or a graphics driver processor.
The interface circuit 1020 of the illustrated example also includes a communication device such as a transmitter, a receiver, a transceiver, a modem and/or network interface card to facilitate exchange of data with external machines (e.g., computing devices of any kind) via a network 1026 (e.g., an Ethernet connection, a digital subscriber line (DSL), a telephone line, coaxial cable, a cellular telephone system, etc.).
The processor platform 1000 of the illustrated example also includes one or more mass storage devices 1028 for storing software and/or data. Examples of such mass storage devices 1028 include floppy disk drives, hard drive disks, compact disk drives, Blu-ray disk drives, RAID systems, and digital versatile disk (DVD) drives.
The coded instructions 1032 of
From the foregoing, it will be appreciated that the above disclosed methods, apparatus, and articles of manufacture have been disclosed providing safe memory object access in memory management mechanisms. Examples disclosed herein include tagging active memory objects with an enumerated tag and tagging inactive memory objects with an invalid tag. Examples disclosed herein further include a storage device to store references to the active memory objects, the references including the tags and a snapshot of the memory objects. When a memory object is no longer active, examples disclosed herein change the tag to the invalid tag and remove the reference in the storage. In this matter, when a query is submitted, examples disclosed herein search the stored references to identify a match to the query. Accordingly, the query results reflect data from active memory objects. Using examples disclosed herein, a more secure memory management system is realized that does not cause errors and/or crash due to querying inactive memory objects.
Traditional memory management techniques include, in response to a query, copying the data of a memory object into a stack. However, if the size of the memory object changes, the stack may not be sufficient to store the memory object, thereby causing system errors and/or crashes. Examples disclosed herein alleviate such problems by storing references to memory objects, as opposed to all the data in the memory object. Accordingly, a query can be run without the risk of running out of memory (e.g., due to the large amount of data to be stored using traditional stacking techniques).
Although certain example methods, apparatus and articles of manufacture have been described herein, the scope of coverage of this patent is not limited thereto. On the contrary, this patent covers all methods, apparatus and articles of manufacture fairly falling within the scope of the claims of this patent.