Systems and methods for detecting intrusion while in artificial reality
11361512 · 2022-06-14
Assignee
Inventors
- Gaurav Chaurasia (Zurich, CH)
- Alexandru-Eugen Ichim (Ruschlikon, CH)
- Eldad Yitzhak (San Mateo, CA, US)
- Arthur Benjamin Nieuwoudt (San Carlos, CA, US)
- Gioacchino Noris (Zurich, CH)
- Alexander Sorkine Hornung (Zurich, CH)
Cpc classification
G06F3/011
PHYSICS
G02B30/50
PHYSICS
G06F9/542
PHYSICS
International classification
G06T19/00
PHYSICS
Abstract
In one embodiment, a method includes displaying, through a head-mounted display (HMD), virtual objects to a user wearing the HMD. The method then accesses a boundary definition that corresponds to a boundary within a physical space surrounding the user and generates a plurality of spatial points based on depth measurements of physical objects within the physical space. Based on the spatial points, a location at which a physical object is likely to exist is determined. The method determines whether the location of the physical object is inside the boundary definition and, in response to this determination, issues an alert to the user.
Claims
1. A method comprising, by a computing system: displaying, through a head-mounted display (HMD), one or more virtual objects to a user wearing the HMD; accessing (i) a boundary definition that corresponds to a boundary within a physical space surrounding the user and (ii) a threshold distance from the user, wherein physical objects detected inside the boundary definition and beyond the threshold distance trigger alerts, and physical objects detected inside the boundary definition and within the threshold distance are ignored; generating a plurality of spatial points based on depth measurements of a physical object within the physical space; determining, based on the spatial points, a location at which the physical object is likely to exist; determining that the location of the physical object is inside the boundary definition; and issuing an alert to the user in response to the determination that the location of the physical object is inside the boundary definition and beyond the threshold distance.
2. The method of claim 1, further comprising dividing the physical space into a plurality of voxels, wherein the voxels are assigned respective occupancy state values using the spatial points, wherein the location at which the physical object is likely to exist is determined based on the occupancy state value of at least a first voxel of the plurality of voxels.
3. The method of claim 2, wherein the occupancy state value of the first voxel is determined by: determining a subset of the spatial points contained by the first voxel; determining that the subset of spatial points satisfies one or more criteria; and setting the occupancy state value of the first voxel to indicate that the first voxel is occupied.
4. The method of claim 3, wherein determining that the subset of spatial points satisfies the one or more criteria comprises determining that a number of spatial points in the subset satisfies a threshold number.
5. The method of claim 2, wherein determining the location at which the physical object is likely to exist comprises determining whether a threshold number of contiguous voxels have respective occupancy state values that indicate the contiguous voxels are occupied.
6. The method of claim 2, wherein issuing the alert to the user comprises generating a display that illustrates the first voxel associated with the physical object.
7. The method of claim 6, further comprising: determining that one or more second voxels of the plurality of voxels have respective occupancy state values that indicate the one or more second voxels are occupied; and determining that the one or more second voxels are outside the boundary definition, wherein the generated display excludes the one or more second voxels.
8. The method of claim 1, further comprising: casting rays towards the location at which the physical object is likely to exist; and determining, based on the cast rays, regions in the physical space that are likely to be unoccupied.
9. The method of claim 8, wherein determining the regions in the physical space that are likely to be unoccupied comprises: dividing the physical space into a plurality of voxels; and identifying a first subset of the voxels intersected by the cast rays prior to the rays intersecting a second subset of the voxels corresponding to the location at which the physical object is likely to exist, wherein the regions in the physical space that are likely to be unoccupied are determined based on the first subset of voxels.
10. The method of claim 1, wherein the alert comprises an outline or aura of the physical object overlaid on media viewed by the user.
11. The method of claim 1, wherein the alert comprises opening a portal in media viewed by the user to allow the physical object to be directly viewed by the user.
12. The method of claim 1, further comprising: determining an intensity of media viewed by a user; and selecting the alert from among a plurality of types of alerts based on the intensity of the media.
13. The method of claim 12, wherein the intensity indicates an activity level of the media.
14. The method of claim 12, wherein the alert is a visual or audio alert, and respective visual characteristics or audio characteristics of the alert are selected based on the intensity of the media.
15. The method of claim 1, wherein issuing the alert comprises pausing media viewed by the user to issue the alert.
16. The method of claim 1, wherein the physical object comprises a physical object outside the boundary definition that protrudes inside the boundary definition and is located beyond the threshold distance from the user.
17. The method of claim 1, further comprising: receiving, from the user, input creating the boundary definition; and issuing the alert to the user while receiving the input if the physical object is detected while creating the boundary definition.
18. The method of claim 1, further comprising: creating a radius of space surrounding the user; and ignoring physical objects detected within the radius.
19. A system comprising: one or more processors; and one or more computer-readable non-transitory storage media coupled to one or more of the processors and comprising instructions operable when executed by one or more of the processors to cause the system to: display, through a head-mounted display (HMD), one or more virtual objects to a user wearing the HMD; access (i) a boundary definition that corresponds to a boundary within a physical space surrounding the user and (ii) a threshold distance from the user, wherein physical objects detected inside the boundary definition and beyond the threshold distance trigger alerts, and physical objects detected inside the boundary definition and within the threshold distance are ignored; generate a plurality of spatial points based on depth measurements of a physical object within the physical space; determine, based on the spatial points, a location at which the physical object is likely to exist; determine that the location of the physical object is inside the boundary definition; and issue an alert to the user in response to the determination that the location of the physical object is inside the boundary definition and beyond the threshold distance.
20. One or more computer-readable non-transitory storage media embodying software that is operable when executed to: display, through a head-mounted display (HMD), one or more virtual objects to a user wearing the HMD; access (i) a boundary definition that corresponds to a boundary within a physical space surrounding the user and (ii) a threshold distance from the user, wherein physical objects detected inside the boundary definition and beyond the threshold distance trigger alerts, and physical objects detected inside the boundary definition and within the threshold distance are ignored; generate a plurality of spatial points based on depth measurements of a physical object within the physical space; determine, based on the spatial points, a location at which the physical object is likely to exist; determine that the location of the physical object is inside the boundary definition; and issue an alert to the user in response to the determination that the location of the physical object is inside the boundary definition and beyond the threshold distance.
Description
BRIEF DESCRIPTION OF THE DRAWINGS
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)
DESCRIPTION OF EXAMPLE EMBODIMENTS
(11)
(12)
(13) In particular embodiments, user 201 may be an individual that interacts or communicates with or over social-networking system 260. In particular embodiments, social-networking system 260 may be a network-addressable computing system hosting an online social network. Social-networking system 260 may generate, store, receive, and send social-networking data, such as, for example, user-profile data, concept-profile data, social-graph information, or other suitable data related to the online social network. Social-networking system 260 may be accessed by the other components of network environment 200 either directly or via network 210. In particular embodiments, social-networking system 260 may include an authorization server (or other suitable component(s)) that allows user 201 to opt in to or opt out of having their actions logged by social-networking system 260 or shared with other systems (e.g., third-party systems 270), for example, by setting appropriate privacy settings. A privacy setting of a user may determine what information associated with the user may be logged, how information associated with the user may be logged, when information associated with the user may be logged, who may log information associated with the user, whom information associated with the user may be shared with, and for what purposes information associated with the user may be logged or shared. Authorization servers may be used to enforce one or more privacy settings of the users of social-networking system 260 through blocking, data hashing, anonymization, or other suitable techniques as appropriate. In particular embodiments, third-party system 270 may be a network-addressable computing system that can host media such as games playable by the user through the HMD. Third-party system 270 may generate, store, receive, and send media and user data, such as, for example, an initial download of a game itself, data used during gameplay, or information about the user playing the game, such as gaming progress, preferences, or patterns. The third-party system data generated, stored, received, and sent may be determined by preferences or privacy settings of the user stored as social-networking data in social-networking system 260. Third-party system 270 may be accessed by the other components of network environment 200 either directly or via network 210. In particular embodiments, one or more users 201 may use one or more main computer systems 230 to access, send data to, and receive data from social-networking system 260 or third-party system 270. Main computer system 230 may access social-networking system 260 or third-party system 270 directly, via network 210, or via a third-party system. As an example and not by way of limitation, main computer system 230 may access third-party system 270 via social-networking system 260. Main computer system 230 may be any suitable computing device, such as, for example, a personal computer, a laptop computer, a cellular telephone, a smartphone, a tablet computer, or an augmented/virtual reality device.
(14) This disclosure contemplates any suitable network 210. As an example and not by way of limitation, one or more portions of network 210 may include an ad hoc network, an intranet, an extranet, a virtual private network (VPN), a local area network (LAN), a wireless LAN (WLAN), a wide area network (WAN), a wireless WAN (WWAN), a metropolitan area network (MAN), a portion of the Internet, a portion of the Public Switched Telephone Network (PSTN), a cellular telephone network, or a combination of two or more of these. Network 210 may include one or more networks 210.
(15) Links 250 may connect main computer system 230, social-networking system 260, and third-party system 270 to communication network 210 or to each other. This disclosure contemplates any suitable links 250. In particular embodiments, one or more links 250 include one or more wireline (such as for example Digital Subscriber Line (DSL) or Data Over Cable Service Interface Specification (DOCSIS)), wireless (such as for example Wi-Fi or Worldwide Interoperability for Microwave Access (WiMAX)), or optical (such as for example Synchronous Optical Network (SONET) or Synchronous Digital Hierarchy (SDH)) links. In particular embodiments, one or more links 250 each include an ad hoc network, an intranet, an extranet, a VPN, a LAN, a WLAN, a WAN, a WWAN, a MAN, a portion of the Internet, a portion of the PSTN, a cellular technology-based network, a satellite communications technology-based network, another link 250, or a combination of two or more such links 250. Links 250 need not necessarily be the same throughout network environment 200. One or more first links 250 may differ in one or more respects from one or more second links 250.
(16) In the context of AR/VR, a user wearing an HMD may enter or virtually create a play space, or guardian, within which to interact with some specific media. For example, the user may play a game within the guardian. However, this guardian is only visible to the user wearing the HMD. Thus, other people, unable to see its virtual boundary, may inadvertently walk into the guardian. Additionally, during setup of the guardian, the user may not notice objects within or protruding into the guardian. Because these human or other intruders may pose a collision hazard to the user, there is a need to accurately detect their existence and location so as to warn the user of their presence.
(17)
(18)
(19) However, users are prone to errors when setting up guardians, and sometimes a physical object that could pose a collision hazard to the user is accidentally included within the guardian.
(20)
(21) Once created, the guardian may be validated and checked for any included objects or portions of objects, and then continuously monitored to detect any new intruders.
(22)
(23) The HMD 504 may have external-facing cameras, such as four cameras 505A, 505B, 505C, and 505D (not shown) arranged around the HMD in
(24) The captured frames may be processed to generate depth measurements of physical objects observed by the cameras 505A-505D. Depth may be measured in a variety of ways. In particular embodiments, depth may be computed based on stereo images. For example, pairs of cameras among cameras 505A-505D may share an overlapping field of view and be configured to capture images simultaneously. As a result, the same physical object may be captured by both cameras in a pair at the same time. For example, a particular feature of an object may appear at one pixel p.sub.A in the image captured by camera 505A, and the same feature may appear at another pixel p.sub.B in the image captured by camera 505B. As long as the depth measurement system knows that the two pixels correspond to the same feature, it may use triangulation techniques to compute the depth of the observed feature. For example, based on the camera 505A's position within a 3D space and the pixel location of p.sub.A relative to the camera 505A's field of view, a line could be projected from the camera 505A and through the pixel p.sub.A. A similar line could be projected from the other camera 505B and through the pixel p.sub.B. Since both pixels correspond to the same physical feature, the two lines intersect. The two intersecting lines and an imaginary line drawn between the two cameras 505A and 505B form a triangle, which may be used to compute the distance of the observed feature from either camera 505A or 505B or a point in space where the observed feature is located.
(25) In particular embodiments, the pose (e.g., position and orientation) of the HMD 504 within the environment may be needed. For example, in order to render the appropriate display for the user 502 while he is moving about in a virtual environment, the system 500 would need to determine his position and orientation at any moment. Based on the pose of the HMD, the system 500 may further determine the viewpoint of any of the cameras 505A-505D or either of the user's eyes. In particular embodiments, the HMD 504 may be equipped with inertial-measurement units (“IMUs”). The data generated by the IMUS, along with the stereo imagery captured by the external-facing cameras, allow the system 500 to compute the pose of the HMD 504 using, for example, SLAM (simultaneous localization and mapping) or other suitable techniques.
(26) In particular embodiments, the artificial reality system 500 may further have one or more controllers 506 that enable the user 502 to provide inputs. The controller 506 may communicate with the HMD 504 or a separate computing unit 508 via a wireless or wired connection. The controller 506 may have any number of buttons or other mechanical input mechanisms. In addition, the controller 506 may have an IMU so that the position of the controller 506 may be tracked. The controller 506 may further be tracked based on predetermined patterns on the controller. For example, the controller 506 may have several infrared LEDs or other known observable features that collectively form a predetermined pattern. Using a sensor or camera, the system 500 may be able to capture an image of the predetermined pattern on the controller. Based on the observed orientation of those patterns, the system may compute the controller's position and orientation relative to the sensor or camera.
(27) The artificial reality system 500 may further include a computer unit 508. The computer unit may be a stand-alone unit that is physically separate from the HMD 504 or it may be integrated with the HMD 504. In embodiments where the computer 508 is a separate unit, it may be communicatively coupled to the HMD 504 via a wireless or wired link. The computer 508 may be a high-performance device, such as a desktop or laptop, or a resource-limited device, such as a mobile phone. A high-performance device may have a dedicated GPU and a high-capacity or constant power source. A resource-limited device, on the other hand, may not have a GPU and may have limited battery capacity. As such, the algorithms that could be practically used by an AR/VR system 500 may depend on the capabilities of its computer unit 508.
(28) Depth measurements of physical objects generated based on images can be imprecise, particularly as the distance from the cameras increases. As a result, the 3D points obtained through this process may be noisy and unreliable. To improve the reliability of the data gathered, a method of considering a quantity and/or temporal consistency of detected 3D points may be performed, as illustrated in
(29) In particular embodiments, each of the 3D points in the point cloud falls into one voxel in the voxel grid and a voxel may contain many 3D points. Each 3D point corresponds to a potential detected object or feature in the physical space, and each point counts as a vote that its corresponding voxel is occupied. If a given voxel contains enough points, or votes, within it, then the system would have more confidence that the points correspond to one or more actual physical objects within the voxel, rather than merely noise.
(30) At step 620, a number of points within each voxel of the voxel grid is determined. At step 630, the method determines whether the points within each voxel satisfy one or more threshold criteria (e.g., if the number of points within the threshold is greater than a predefined number, such as 3, 5, 10, etc.). In particular embodiments, the threshold criteria may be uniformly applied across the voxel grid. In other embodiments, different voxels may use different threshold criteria (e.g., the threshold could be a function of distance between the voxel and the user, such that voxels that are farther away have higher threshold requirements than closer voxels). If the threshold criteria are satisfied, the method proceeds to step 631, in which a state of the voxel is updated to “occupied”. A greater number of points within a voxel indicates a higher likelihood that the points accurately correspond to an object, whereas if only one or a few points are detected, there may be a higher likelihood that the points are just noise. Similarly, many points clustered densely together indicates a higher likelihood that they accurately correspond to a detected object, whereas if only a few scattered points are detected, there may be a higher likelihood that the points are just noise. If the number of points within a voxel is not greater than the threshold, the method proceeds to step 632, in which the state of the voxel is further assessed to determine whether it should be either “free” or “unknown”.
(31) Additionally or alternatively to step 630, step 640 may be performed. At step 640, the method determines, for each of the detected points of each voxel, whether the point has been detected for a threshold amount of time or a threshold number of frames. If a point has not been detected for a threshold amount of time, the method proceeds to step 680, in which the point is ignored, and no vote for “occupied” is added to the corresponding voxel. On the other hand, if a point is detected for a threshold amount of time, the method proceeds to step 650, in which a vote of “occupied” is added to the voxel containing the point. The longer a point has been detected, the greater the likelihood that it accurately corresponds to an object. For example, if a point is only detected for a brief amount of time, or if it flashes in and out of existence over a series of frames, it is likely to be just noise; on the other hand, if a point is detected and remains consistently detected for a certain amount of time, it likely corresponds to an actual detected object. Thus, the consistency in which a point is observed over time may be used to weigh the vote of that point. For example, a point that has been consistently observed in the past five frames may be weighted more than a point that is observed in only the current frame. The method then proceeds to step 660, in which a number of “occupied” votes are tallied for each voxel.
(32) At step 670, it is determined whether the tallied number of votes is greater than a threshold. If so, the method proceeds to step 671, in which the state of the corresponding voxel is set to “occupied”; otherwise, the method proceeds to step 672, in which the state of the voxel is further assessed to determine whether it should be “free” or “unknown”.
(33) Either or both of the considerations of point density, as described with respect to steps 630-632, and temporal consistency, as described with respect to steps 640-680, may be used when determining the state of a voxel, depending on factors such as the processing resource consumption and capabilities of the AR/VR system.
(34) In particular embodiments, once voxels have been assigned their states, the system may detect a number of contiguous voxels having states of “occupied”. If more than a threshold number of contiguous voxels are occupied, the system may determine that there is sufficient evidence that an actual object(s) is at the location of these adjoining voxels. Additionally, temporal decay may be considered in the detection of an object. For instance, if a voxel becomes occupied but adjoining voxels do not, after a certain amount of time, the state of the voxel may be set to “free” or “unknown”, as it is less likely that an object will occupy only a single voxel. If, on the other hand, a voxel becomes occupied for less than a threshold amount of time, but adjoining voxels are also occupied, the system may determine that an object is present and moving through the locations of the occupied voxels.
(35) As illustrated in
(36) In particular embodiments, each voxel may store a floating point value, with the state of a voxel corresponding to a given subrange of values, as discussed above. Each point within a voxel contributes a vote (which could be weighted) to the state of the voxel being occupied; however, not all votes may be given the same weight. For example, a noise model may be used to weight the value of a point based on its distance from the cameras of the HMD. With stereo reconstruction, the detection of points becomes less precise and less reliable as the distance between the point and the cameras increases. Thus, distant points may be given less weight than closer points when tallying votes for a given voxel.
(37) When an object poses a hazard to the user, a visual and/or audio alert may be issued to the user to indicate the presence and/or location of the object. However, these hazardous objects are generally ones that are within the guardian, as the user expects the space within the guardian boundary to be safe (e.g., free of obstacles) and objects outside of the guardian may not be close enough to the user to pose a danger. Accordingly, in particular embodiments, a distinction may be made between occupied voxels within the guardian and those outside the guardian. When the physical space is divided into the voxel grid, locations of voxels may be compared to the location of the boundary of the guardian. Voxels deemed to be “occupied” within the boundary may trigger an alert and voxels beyond that boundary may be ignored.
(38) In particular embodiments, within the guardian, distance ranges may be set to control when it is appropriate to issue an alert to the user for a detected intruder. For example, even if an intruder is within the guardian, it may be far enough away from the user as to not pose a risk. For instance, an intruder such as a person or pet may pass quickly through a portion of the guardian that is distant enough (e.g., 10, 12, 15 meters) from the user or brief enough (e.g., 1 or less than 1 second) so as not to impede his movements during, for example, playing a game. In such a case, it may not be necessary or desirable to interrupt the game.
(39) Similarly, a threshold distance may be set surrounding the user, and objects close to the user within that threshold distance may not cause an alert to be issued. This may prevent, for example, an alert being issued in response to movement of the user's own arms or legs. The size of the threshold distance may be determined in several ways. It may simply be a set predetermined size. Alternatively, the threshold may be based on detection of a controller held by the user, and distance within which to ignore detected objects may be a function of how close to the body the user is holding the controller (because an object within this distance is likely to be either a part of the user's body or something that the user is deliberately touching). Another option to avoid issuing an alert for movements of the user himself is to perform body tracking of the user.
(40) Once the system has detected an intruder and determined that alert should be issued, many options exist as to the nature or properties of that alert. Particular visualization or audio techniques may be based on, for example, which voxels are actually occupied, when they are detected, or on properties of the media being viewed by the user through the HMD. As an example, as illustrated in
(41) After guardian setup, during presentation of media, the user is fully immersed in VR. Thus, when an intruder is detected, this element of the real world must be presented on top of the VR content, or the VR content may be disrupted to show the intruder. One example is shown in
(42) Safety considerations may dictate a more intrusive alert, however, particularly during very active games involving a lot of user movement. In such a situation, the game may be paused when an alert is issued. Additionally or alternatively, as shown in
(43) Characteristics of visual and/or audio alerts, and how much to pull the user out of the game or disrupt the user's immersive experience, may be further based on characteristics such as visual/audio intensity or activity level of the media or game being viewed. For example, if a user is playing a very quiet, relaxing game that does not involve much movement, it may not be necessary to interrupt the game, or in some cases even issue an alert, for certain types of intruders. If an alert is issued, such as for an approaching pet, characteristics of the alert may be selected so as not to startle the user, as could occur if intrusive, flashing visualizations or loud audio alerts were issued during the quiet game. On the other hand, if the user is playing a very fast-paced game, or one with bright or psychedelic visual characteristics, a simple outline of an intruder may not be noticed, and thus the game may need to be paused, or a visual or audio alert that would properly stand out from such media would need to be generated.
(44) Systems and Methods
(45)
(46) This disclosure contemplates any suitable number of computer systems 1000. This disclosure contemplates computer system 1000 taking any suitable physical form. As example and not by way of limitation, computer system 1000 may be an embedded computer system, a system-on-chip (SOC), a single-board computer system (SBC) (such as, for example, a computer-on-module (COM) or system-on-module (SOM)), a desktop computer system, a laptop or notebook computer system, an interactive kiosk, a mainframe, a mesh of computer systems, a mobile telephone, a personal digital assistant (PDA), a server, a tablet computer system, an augmented/virtual reality device, or a combination of two or more of these. Where appropriate, computer system 1000 may include one or more computer systems 1000; be unitary or distributed; span multiple locations; span multiple machines; span multiple data centers; or reside in a cloud, which may include one or more cloud components in one or more networks. Where appropriate, one or more computer systems 1000 may perform without substantial spatial or temporal limitation one or more steps of one or more methods described or illustrated herein. As an example and not by way of limitation, one or more computer systems 1000 may perform in real time or in batch mode one or more steps of one or more methods described or illustrated herein. One or more computer systems 1000 may perform at different times or at different locations one or more steps of one or more methods described or illustrated herein, where appropriate.
(47) In particular embodiments, computer system 1000 includes a processor 1002, memory 1004, storage 1006, an input/output (I/O) interface 1008, a communication interface 1010, and a bus 1012. Although this disclosure describes and illustrates a particular computer system having a particular number of particular components in a particular arrangement, this disclosure contemplates any suitable computer system having any suitable number of any suitable components in any suitable arrangement.
(48) In particular embodiments, processor 1002 includes hardware for executing instructions, such as those making up a computer program. As an example and not by way of limitation, to execute instructions, processor 1002 may retrieve (or fetch) the instructions from an internal register, an internal cache, memory 1004, or storage 1006; decode and execute them; and then write one or more results to an internal register, an internal cache, memory 1004, or storage 1006. In particular embodiments, processor 1002 may include one or more internal caches for data, instructions, or addresses. This disclosure contemplates processor 1002 including any suitable number of any suitable internal caches, where appropriate. As an example and not by way of limitation, processor 1002 may include one or more instruction caches, one or more data caches, and one or more translation lookaside buffers (TLBs). Instructions in the instruction caches may be copies of instructions in memory 1004 or storage 1006, and the instruction caches may speed up retrieval of those instructions by processor 1002. Data in the data caches may be copies of data in memory 1004 or storage 1006 for instructions executing at processor 1002 to operate on; the results of previous instructions executed at processor 1002 for access by subsequent instructions executing at processor 1002 or for writing to memory 1004 or storage 1006; or other suitable data. The data caches may speed up read or write operations by processor 1002. The TLBs may speed up virtual-address translation for processor 1002. In particular embodiments, processor 1002 may include one or more internal registers for data, instructions, or addresses. This disclosure contemplates processor 1002 including any suitable number of any suitable internal registers, where appropriate. Where appropriate, processor 1002 may include one or more arithmetic logic units (ALUs); be a multi-core processor; or include one or more processors 1002. Although this disclosure describes and illustrates a particular processor, this disclosure contemplates any suitable processor.
(49) In particular embodiments, memory 1004 includes main memory for storing instructions for processor 1002 to execute or data for processor 1002 to operate on. As an example and not by way of limitation, computer system 1000 may load instructions from storage 1006 or another source (such as, for example, another computer system 1000) to memory 1004. Processor 1002 may then load the instructions from memory 1004 to an internal register or internal cache. To execute the instructions, processor 1002 may retrieve the instructions from the internal register or internal cache and decode them. During or after execution of the instructions, processor 1002 may write one or more results (which may be intermediate or final results) to the internal register or internal cache. Processor 1002 may then write one or more of those results to memory 1004. In particular embodiments, processor 1002 executes only instructions in one or more internal registers or internal caches or in memory 1004 (as opposed to storage 1006 or elsewhere) and operates only on data in one or more internal registers or internal caches or in memory 1004 (as opposed to storage 1006 or elsewhere). One or more memory buses (which may each include an address bus and a data bus) may couple processor 1002 to memory 1004. Bus 1012 may include one or more memory buses, as described below. In particular embodiments, one or more memory management units (MMUs) reside between processor 1002 and memory 1004 and facilitate accesses to memory 1004 requested by processor 1002. In particular embodiments, memory 1004 includes random access memory (RAM). This RAM may be volatile memory, where appropriate. Where appropriate, this RAM may be dynamic RAM (DRAM) or static RAM (SRAM). Moreover, where appropriate, this RAM may be single-ported or multi-ported RAM. This disclosure contemplates any suitable RAM. Memory 1004 may include one or more memories 1004, where appropriate. Although this disclosure describes and illustrates particular memory, this disclosure contemplates any suitable memory.
(50) In particular embodiments, storage 1006 includes mass storage for data or instructions. As an example and not by way of limitation, storage 1006 may include a hard disk drive (HDD), a floppy disk drive, flash memory, an optical disc, a magneto-optical disc, magnetic tape, or a Universal Serial Bus (USB) drive or a combination of two or more of these. Storage 1006 may include removable or non-removable (or fixed) media, where appropriate. Storage 1006 may be internal or external to computer system 1000, where appropriate. In particular embodiments, storage 1006 is non-volatile, solid-state memory. In particular embodiments, storage 1006 includes read-only memory (ROM). Where appropriate, this ROM may be mask-programmed ROM, programmable ROM (PROM), erasable PROM (EPROM), electrically erasable PROM (EEPROM), electrically alterable ROM (EAROM), or flash memory or a combination of two or more of these. This disclosure contemplates mass storage 1006 taking any suitable physical form. Storage 1006 may include one or more storage control units facilitating communication between processor 1002 and storage 1006, where appropriate. Where appropriate, storage 1006 may include one or more storages 1006. Although this disclosure describes and illustrates particular storage, this disclosure contemplates any suitable storage.
(51) In particular embodiments, I/O interface 1008 includes hardware, software, or both, providing one or more interfaces for communication between computer system 1000 and one or more I/O devices. Computer system 1000 may include one or more of these I/O devices, where appropriate. One or more of these I/O devices may enable communication between a person and computer system 1000. As an example and not by way of limitation, an I/O device may include a keyboard, keypad, microphone, monitor, mouse, printer, scanner, speaker, still camera, stylus, tablet, touch screen, trackball, video camera, another suitable I/O device or a combination of two or more of these. An I/O device may include one or more sensors. This disclosure contemplates any suitable I/O devices and any suitable I/O interfaces 1008 for them. Where appropriate, I/O interface 1008 may include one or more device or software drivers enabling processor 1002 to drive one or more of these I/O devices. I/O interface 1008 may include one or more I/O interfaces 1008, where appropriate. Although this disclosure describes and illustrates a particular I/O interface, this disclosure contemplates any suitable I/O interface.
(52) In particular embodiments, communication interface 1010 includes hardware, software, or both providing one or more interfaces for communication (such as, for example, packet-based communication) between computer system 1000 and one or more other computer systems 1000 or one or more networks. As an example and not by way of limitation, communication interface 1010 may include a network interface controller (NIC) or network adapter for communicating with an Ethernet or other wire-based network or a wireless NIC (WNIC) or wireless adapter for communicating with a wireless network, such as a WI-FI network. This disclosure contemplates any suitable network and any suitable communication interface 1010 for it. As an example and not by way of limitation, computer system 1000 may communicate with an ad hoc network, a personal area network (PAN), a local area network (LAN), a wide area network (WAN), a metropolitan area network (MAN), or one or more portions of the Internet or a combination of two or more of these. One or more portions of one or more of these networks may be wired or wireless. As an example, computer system 1000 may communicate with a wireless PAN (WPAN) (such as, for example, a BLUETOOTH WPAN), a WI-FI network, a WI-MAX network, a cellular telephone network (such as, for example, a Global System for Mobile Communications (GSM) network), or other suitable wireless network or a combination of two or more of these. Computer system 1000 may include any suitable communication interface 1010 for any of these networks, where appropriate. Communication interface 1010 may include one or more communication interfaces 1010, where appropriate. Although this disclosure describes and illustrates a particular communication interface, this disclosure contemplates any suitable communication interface.
(53) In particular embodiments, bus 1012 includes hardware, software, or both coupling components of computer system 1000 to each other. As an example and not by way of limitation, bus 1012 may include an Accelerated Graphics Port (AGP) or other graphics bus, an Enhanced Industry Standard Architecture (EISA) bus, a front-side bus (FSB), a HYPERTRANSPORT (HT) interconnect, an Industry Standard Architecture (ISA) bus, an INFINIBAND interconnect, a low-pin-count (LPC) bus, a memory bus, a Micro Channel Architecture (MCA) bus, a Peripheral Component Interconnect (PCI) bus, a PCI-Express (PCIe) bus, a serial advanced technology attachment (SATA) bus, a Video Electronics Standards Association local (VLB) bus, or another suitable bus or a combination of two or more of these. Bus 1012 may include one or more buses 1012, where appropriate. Although this disclosure describes and illustrates a particular bus, this disclosure contemplates any suitable bus or interconnect.
(54) Herein, a computer-readable non-transitory storage medium or media may include one or more semiconductor-based or other integrated circuits (ICs) (such, as for example, field-programmable gate arrays (FPGAs) or application-specific ICs (ASICs)), hard disk drives (HDDs), hybrid hard drives (HHDs), optical discs, optical disc drives (ODDs), magneto-optical discs, magneto-optical drives, floppy diskettes, floppy disk drives (FDDs), magnetic tapes, solid-state drives (SSDs), RAM-drives, SECURE DIGITAL cards or drives, any other suitable computer-readable non-transitory storage media, or any suitable combination of two or more of these, where appropriate. A computer-readable non-transitory storage medium may be volatile, non-volatile, or a combination of volatile and non-volatile, where appropriate.
(55) Herein, “or” is inclusive and not exclusive, unless expressly indicated otherwise or indicated otherwise by context. Therefore, herein, “A or B” means “A, B, or both,” unless expressly indicated otherwise or indicated otherwise by context. Moreover, “and” is both joint and several, unless expressly indicated otherwise or indicated otherwise by context. Therefore, herein, “A and B” means “A and B, jointly or severally,” unless expressly indicated otherwise or indicated otherwise by context.
(56) The scope of this disclosure encompasses all changes, substitutions, variations, alterations, and modifications to the example embodiments described or illustrated herein that a person having ordinary skill in the art would comprehend. The scope of this disclosure is not limited to the example embodiments described or illustrated herein. Moreover, although this disclosure describes and illustrates respective embodiments herein as including particular components, elements, feature, functions, operations, or steps, any of these embodiments may include any combination or permutation of any of the components, elements, features, functions, operations, or steps described or illustrated anywhere herein that a person having ordinary skill in the art would comprehend. Furthermore, reference in the appended claims to an apparatus or system or a component of an apparatus or system being adapted to, arranged to, capable of, configured to, enabled to, operable to, or operative to perform a particular function encompasses that apparatus, system, component, whether or not it or that particular function is activated, turned on, or unlocked, as long as that apparatus, system, or component is so adapted, arranged, capable, configured, enabled, operable, or operative. Additionally, although this disclosure describes or illustrates particular embodiments as providing particular advantages, particular embodiments may provide none, some, or all of these advantages.