The present invention relates generally to the field of computing. More particularly, the invention provides a mechanism that supports the partitioning or factoring of applications in a manner that allows operations requiring a measure of trust or security to be integrated into ordinary, non-secure software.
In the field of computing, there is a tension between systems that provide a high degree of security on the one hand, and systems that provide large number of functional features and a high degree of extensibility on the other hand. Security in the field of computing depends on the ability to understand and predict the behavior of a computer system (that is, the behavior of both the software and the hardware) with a high degree of certainty—i.e., the ability to ensure that the system will not, through inadvertent misuse or deliberate attack, behave in some manner other than that for which it was designed. For example, a computer system that is designed to protect copyrighted material from copying is only trustworthy to the extent that we can be assured the system will actually do what it was designed to do. Large, open architectures, however, tend to be unwieldy and complex, which makes it difficult to analyze their behavior, since there are a large number of variables that can affect that behavior. At the present time, it seems unlikely that a large complex program such as a full-service operating system or word processor could have its behavior verified to a high degree of certainty. It is possible to write a small program whose behavior can be tested and verified under a wide variety of conditions and classes of attack, but such a program would only be able to perform a limited set of functions. Thus, a tension exists between providing a large amount of functionality and providing a high degree of security.
One solution that has been proposed is to run two systems side by side—one large system that has a high degree of functionality, and another small system that has a high degree of security. Thus, a full-service operating system such as WINDOWS XP could be run along side a small, high-assurance operating system. Whenever an event occurred in the full-service operating system that needed to be performed in a tightly-controlled manner with a high-degree of trust, the task could be passed to the high-assurance operating system.
Operating systems provide environments in which other programs can execute. However, the mere fact that two operating systems can exist side by side does not address the problem of how a given application can make use of both environments. It would be desirable for an application to use the full-featured environment to perform most functions (i.e., those not requiring a high degree of security), and to use the high-assurance environment to perform functions that do require a high degree of security. Moreover, it is desirable to use these two environments in a way that provides an integrated user experience.
In view of the foregoing, there is a need for a system that overcomes the drawbacks of the prior art.
The present invention provides a mechanism whereby the functionality of an application can be factored or partitioned into multiple parts—i.e., those actions that require some degree of security or protection, and those that do not. In accordance with the invention, an application is embodied as at least two software objects: one software object that runs in a full-featured (but low-assurance) environment, and another software object that runs in a high-assurance (but limited-featured) environment. As the object in the full-featured environment executes, it may encounter data that requires some degree of protection (e.g., the data may require secrecy, or it may need to be verifiable in the sense of determining that the data has not been tampered with). When the software object that runs in the full-featured environment encounters such data, that software object causes the data to be passed to the high-assurance environment. The software object operating in the high-assurance environment then operates on the data. Any input, output, or storage of the data that is required while the data is being processed is performed using the high-assurance environment, in order to resist interception or tampering with the data by events arising outside of the high-assurance environment.
The two environments are hosted by a base component that provides the infrastructure (or “plumbing”) needed for the two environments to communicate. For example, a data object that needs to be processed in a high-assurance environment may have a wrapper generated by the base component. This wrapper may identify the environment to which the data object is to be routed for processing, and may also provide a seal that enables verification of the fact that the data object has not been modified since it was wrapped by the base component. Thus, a software object can pass the data object to the base component, and the base component will be able to: (1) determine which environment the data object should be passed to, and (2) verify that the data object has not been tampered with since it was created. This latter action provides the infrastructure that allows the trustworthiness of an object to be established across platforms: If an object is created on a first machine (having a first base component), then the first base component signs the object as an attestation that the object is the exact object that was generated in a high-assurance environment known to that base component. When the object is then opened on another machine, the other machine can then verify the signature and make a decision about whether they trust the signer. (E.g., some machines and/or base components may be better at ensuring correct behavior of their hosted environments than other machines; each machine can decide for itself whether it trusts the platform on which a given data object was created.)
Other features of the invention are described below.
The foregoing summary, as well as the following detailed description of preferred embodiments, is better understood when read in conjunction with the appended drawings. For the purpose of illustrating the invention, there is shown in the drawings exemplary constructions of the invention; however, the invention is not limited to the specific methods and instrumentalities disclosed. In the drawings:
The present invention provides a mechanism that allows application to be partitioned or “factored” into secure and non-secure components, and that allows these components to work together to provide an integrated user experience with respect to the application. For example, a word processing program could be partitioned into a non-secure component that performs most of the layout, editing, printing, spell-checking, grammar-checking, etc., functions that one associates with a word processor, and a secure component that enables the display and editing of data objects that need some manner of protection. The non-secure component could run in an ordinary, open environment such as a typical commercial operating system. The secure component could run in a high-assurance environment that allows certain types of software to run with a high assurance that the software will behave correctly. The invention provides various features with respect to such a scenario. First, the invention provides for an integrated user experience across the two components, so that, from the user's perspective, the user appears as much as possible to be using a single application. Second, the invention provides the infrastructure or “plumbing” that allows an application to handle both secure and non-secure data, and for such data to be used across partitions.
With respect to the user experience, it is generally the case that the user starts out using the non-secure portion of the application. Data that arises in the course of such use (e.g., sensitive text items in a word processing document, sensitive financial figures in a spreadsheet, etc.), is preferably integrated into the user experience in some way by the non-secure portion of the application, even though the data cannot actually be displayed by the non-secure portion. For example, if a sensitive or secret text item in a word processing document, the non-secure portion of the word processor may be able to display a box that represents the item, together with some type of graphic (e.g., squiggly lines indicative of text) that represent the fact that the text exists even though it cannot be displayed. In one example, the user could click on the box or graphic, and the secure portion of the application would then be invoked to display the text in the same location on the screen where the box occurs. Thus, the secure and non-secure portions of the application are integrated with respect to the user experience.
With respect to the infrastructure, the invention provides mechanisms that allow data objects in one environment to be routed to another environment. Typically, a data object that is secret or sensitive—and thus needs to be processed by the secure portion—will be encrypted so that the non-secure portion cannot read it. Thus, such an object will typically be wrapped in a series of wrappers by each component that played a part in generating the data object. Each wrapper preferably contains an identifier of the component that attached the wrapper, as well as a seal that allows the integrity of the data inside the wrapper to be verified. The outer wrapper is preferably attached by the root of trust on the machine that created the wrapper—i.e., a base component that hosts the various environments on a single machine, and that has been verified by some well known authority to be trustworthy in its behavior. This outer wrapper allows the base component to serve as a router. Thus, when the non-secure portion encounters the object, it may not be able to read the object but can identify the object as one that needs to be sent to another environment for processing. Thus, the non-secure portion sends the object to the base component, which then routes the object to the correct environment based on which environment is identified in the wrapper.
Additionally, if the object is created on a first machine and opened on a second machine, the second machine can determine the trustworthiness of the object by checking the signature that is part of the outer wrapper. It should be understood that when the base component wraps and seals an object, the base component is essentially attesting that, during the creation of the object, the base component correctly performed its functions in terms of protecting the creation process from outside tampering. (The base component typically provides the mechanisms that allow a high-assurance environment to protect itself from tampering—e.g., a trusted processor module (TPM), a memory isolation mechanism, etc.) Some base components may perform this function better than others, so any machine on which the data object is opened can make a decision about whether to trust that the object was actually created according to the security requirements that apply to that object. For example, if the object constitutes text that was entered by the keyboard, the high-assurance environment may receive input from the keyboard in a secure manner, but that environment's ability to receive keyboard input securely may depend on the base component's ability to protect the path from the keyboard to the high-assurance environment. Since the wrapper contains a seal or signature generated by a particular base component, the wrapper supports a trust model in which different machines can make decisions about how reliable a data object is based on the presumed security of the machine on which the data object was created.
The following describes systems, methods, and mechanisms that support the use of factored or partitioned applications.
Exemplary Computing Arrangement
The invention is operational with numerous other general purpose or special purpose computing system environments or configurations. Examples of well known computing systems, environments, and/or configurations that may be suitable for use with the invention include, but are not limited to, personal computers, server computers, hand-held or laptop devices, multiprocessor systems, microprocessor-based systems, set top boxes, programmable consumer electronics, network PCs, minicomputers, mainframe computers, embedded systems, distributed computing environments that include any of the above systems or devices, and the like.
The invention may be described in the general context of computer-executable instructions, such as program modules, being executed by a computer. Generally, program modules include routines, programs, objects, components, data structures, etc. that perform particular tasks or implement particular abstract data types. The invention may also be practiced in distributed computing environments where tasks are performed by remote processing devices that are linked through a communications network or other data transmission medium. In a distributed computing environment, program modules and other data may be located in both local and remote computer storage media including memory storage devices.
With reference to
Computer 110 typically includes a variety of computer readable media. Computer readable media can be any available media that can be accessed by computer 110 and includes both volatile and nonvolatile media, removable and non-removable media. By way of example, and not limitation, computer readable media may comprise computer storage media and communication media. Computer storage media includes both volatile and nonvolatile, removable and non-removable media implemented in any method or technology for storage of information such as computer readable instructions, data structures, program modules or other data. Computer storage media includes, but is not limited to, RAM, ROM, EEPROM, flash memory or other memory technology, CDROM, digital versatile disks (DVD) or other optical disk storage, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, or any other medium which can be used to store the desired information and which can accessed by computer 110. Communication media typically embodies computer readable instructions, data structures, program modules or other data in a modulated data signal such as a carrier wave or other transport mechanism and includes any information delivery media. The term “modulated data signal” means a signal that has one or more of its characteristics set or changed in such a manner as to encode information in the signal. By way of example, and not limitation, communication media includes wired media such as a wired network or direct-wired connection, and wireless media such as acoustic, RF, infrared and other wireless media. Combinations of any of the above should also be included within the scope of computer readable media.
The system memory 130 includes computer storage media in the form of volatile and/or nonvolatile memory such as read only memory (ROM) 131 and random access memory (RAM) 132. A basic input/output system 133 (BIOS), containing the basic routines that help to transfer information between elements within computer 110, such as during start-up, is typically stored in ROM 131. RAM 132 typically contains data and/or program modules that are immediately accessible to and/or presently being operated on by processing unit 120. By way of example, and not limitation,
The computer 110 may also include other removable/non-removable, volatile/nonvolatile computer storage media. By way of example only,
The drives and their associated computer storage media discussed above and illustrated in
The computer 110 may operate in a networked environment using logical connections to one or more remote computers, such as a remote computer 180. The remote computer 180 may be a personal computer, a server, a router, a network PC, a peer device or other common network node, and typically includes many or all of the elements described above relative to the computer 110, although only a memory storage device 181 has been illustrated in
When used in a LAN networking environment, the computer 110 is connected to the LAN 171 through a network interface or adapter 170. When used in a WAN networking environment, the computer 110 typically includes a modem 172 or other means for establishing communications over the WAN 173, such as the Internet. The modem 172, which may be internal or external, may be connected to the system bus 121 via the user input interface 160, or other appropriate mechanism. In a networked environment, program modules depicted relative to the computer 110, or portions thereof, may be stored in the remote memory storage device. By way of example, and not limitation,
Partitioned or “Factored” Application
Software, such as an application program, typically performs various different functions and operates on various different types of data. In this sense, an application can be viewed as a collection of different functionalities. It may be useful to break an application down into its various different functionalities, so that these different functionalities can be performed separately (e.g., assigned to environments providing different levels of security).
Application 135 comprises various different functionalities 202(1), 202(2), . . . , 202(n), 202(n+1), 202(n+2), . . . , 202(n+m). For example, application 135 may be a word processing program, and the separate functionalities may be editing, viewing, printing, tracking changes, etc. It should be noted that, while
In one example, functionalities may be grouped together such that functionalities 202(1) through 202(n) are part of a first “partition” 206(1), and functionalities 202(n+1) through 202(n+m) are part of a second partition 206(2). It may be convenient to group functionalities in this manner, so that functionalities in the same partition can be treated similarly. For example, partition 206(1) may include the functionalities of application 135 that involve ordinary, non-secure data, while partition 206(2) may include the functionalities of application 135 that involve secret or secure data (or data that otherwise requires some level of protection). Thus, functionalities in partition 206(1) can be performed in an ordinary open environment (e.g., the environment provided by an ordinary commercial operating system), while the functionalities in partition 206(2) can be run in a high-assurance environment. (High assurance environments are more particularly discussed below.)
It should be understood that
Example Partitioned Application
As discussed above, the various functionalities of an application may be partitioned according to any criteria. In the example of
User interface 400 is an interface for a word processing program. (It should be understood that a word processing program is a convenient example of an application, although it is by no means the only example.) In the example of
If the user wishes to view content items 402(3), 402(4), and 402(5), the user may, for example, click on the squiggles 405 that represent a given content item. This action may cause the secure partition to be invoked. The content contained in one of the secure items can then be passed to the secure partition for handling. In one example, the secure partition may then display the actual content item in a window that is superimposed over the place for the content that was laid out by the non-secure partition—e.g., when the secure partition displays content item 402(3), it may do so by placing an image of that content item on top of the region where the squiggles 405 that represent content item 402(3) had been previously shown. Although the above-described scenario involves the user's interacting with two different pieces of software (i.e., the secure and non-secure partitions), it may appear to the user that he is interacting with a single application, thereby providing an integrated user experience across the two partitions.
A spread sheet, where the user can enter formulas and build tables, etc., in the non-secure partition but where the actual data to be operated on is available only to the secure partition. Thus, the non-secure partition displays some placeholder data (e.g., “xxxx”) in each cell. Evaluation and rendering of the data in the cells is performed by the secure partition of the application. When the user pushes the “calculate” button, a window (generated by the secure partition) pops up and displays the cell values in the appropriate rows and columns, which are calculated based on the underlying data that is available to the secure partition. In this implementation, the secure partition will have an evaluation engine and a (trivial) rendering routine, but will not need to incorporate other aspects of the spreadsheet's user interface, help windows, formula builders, etc.
A securities trading application, where functions are assigned to the secure and non-secure partitions accordingly. For example, displaying trading graphs and stock information (which is publicly available) can be performed by the non-secure partition. The secure partition, on the other hand, allows the user to enter the stock trading symbol, the price and number of shares to be bought or sold by the user, and sends this information to a remote trading server, after first verifying the identity of the server.
A word processor that outputs a document in an image format (e.g., Portable Document Format, or “PDF”). The secure partition is capable of reading and displaying the image. This rendering of the document is called the “facsimile” of the document. The underlying word processing document (i.e., the version of the document that contains formatting codes and text characters, instead of just an image) and its facsimile are sent by the non-secure partition to the secure partition, and the secure partition displays the facsimile. The user signs the facsimile (or a digest of the document and the facsimile) using a secure signing agent in a secure environment. The signed facsimile (called “facsimile-0”) and the underlying document are returned in a blob to the non-secure partition. When a verifier receives the blob containing the document, facsimile-0 and the signature of the facsimile, the verifier first renders a new copy of the facsimile (called facsimile-1) based on the underlying word processing document. The verifier transmits, facsimile-0, facsimile-1, the Word document and the signature over to the secure partition, which verifies that the facsimiles are identical, and that the signature over facsimile-0 is valid. While this model does not provide for secrecy of the document (since facsimile-1 of the document can still be rendered by the non-secure partition), it does serve to verify the integrity of the document—i.e., the fact that the document is the one that was originally created, and has not been modified.
One component that runs as part of base component 508 is a reference monitor 510. Reference monitor 510 performs the function of routing a given data object to the correct environment for processing. For example, labeled data 506 may be encountered (or generated, or inputted) during the running of an application, and reference monitor 510 causes labeled data 506 to be routed to the correct environment. Labeled data 506 is associated with an identifying tag that allows reference monitor 510 to determine which environment the labeled data should be routed to. Additionally, labeled data 506 may also contain additional tags that allow the destination environment to determine which processor the data should be given to for processing. An example structure of labeled data 506 is discussed below in connection with
Labeled data 506 may be encountered (or generated, or inputted) in any location, although most typically labeled data will be encountered in one environment and will be passed to another environment. For example, the non-secure portion of a word processing application may encounter labeled data that contains some secret text. The word processing application can then display a representation of the text in the manner shown in
It should be understood that, within the model of
It should also be understood that there is no requirement as to what types of environments are available, but it may be particularly useful for one environment to be a high assurance operating system, and for the other environment to be an ordinary, full-service open operating system. A “high assurance” operating system is one that provides a relatively high level of assurance that it will perform its expected functions correctly. Given that all software (including an operating system) is associated with a specification that describes the expected function of the software, and given that all software is subject to some level of bugs or attacks that cause the software to behave in an unexpected manner, a “high-assurance” operating system is one that provides a relatively high level of trust that the operating system will behave according to its specification. (Most commercial software comes with an explicit, written specification, although a specification in this context can also constitute an implicit, unwritten understanding as to how the software should behave.) High assurance is not the same thing as security, although high assurance can be used to achieve security. For example, a processor for secret data can be designed to run in the high-assurance operating system; to the extent that the processor's ability to protect secret data depends on the correct behavior of the environment in which it runs (e.g., the correct execution of system calls, correct process isolation, etc.), the processor can provide a level of security that might not be achievable if the processor were to run in an ordinary, full-service operating system. (The trade-off for high assurance is that a high assurance environment may have a very limited scope of functionality; the larger a program is, the more difficult it is to verify that the program will behave correctly in a wide variety of circumstances. Thus, a full-service commercial operating system such as WINDOWS XP would typically not be considered high assurance.)
In the context of the above description of high-assurance, it can be appreciated that it is often useful to partition an application into a low-security processor that handles data that does not require significant security, and a high-security processor that handles data requiring more security. The high security processor can run in a high-assurance environment, and the low-security processor can run in a low-assurance environment.
Example Architecture to Support a Partitioned Application
In the example of
Within a given operating system, it is possible to run a piece of application-level software. For example, the MICROSOFT WORD word processing program (604) and the MICROSOFT EXCEL spreadsheet program (606) run under the WINDOWS XP operating system 602(1). The Linux operating system 602(2), nexus 602(3), and the OS/2 operating system 602(4) may also run their own application programs. In this example, programs called “Word-let” (608) and “Excel-let” (610) run under nexus 602(3). Word-let 608 is the secure program that works with WORD 604 when WORD needs to handle secure data. Similarly, Excel-let 610 handles secure data for EXCEL 606. Thus, in the example of
As discussed above, nexus 602(3) is a high-assurance operating system that can provide an environment in which a trusted application (i.e., an application whose behavior is sufficiently certain that it can be trusted with sensitive operations such as opening secret data) can execute. However, nexus 602(3) is likely to provide very limited functionality. Thus, it is useful to partition a word processing application, for example, into WORD 604 and Word-let 608 so that WORD can use the extensive features available in a general-purpose operating system to provide broad functionality, and Word-let can use the high-assurance nature of the environment provided by nexus 602(3) to perform a (probably limited) set of sensitive functions with a high degree of trustworthiness.
Registration and directory service: The base component may provide an interface by which environments hosted by the base component can register with the base component. The base component may also provide methods by which hosted environments can be started (or the base component may be one of the hosted environments). The assurance level of an environment is meta-information associated with the environment, and the base component may provide an optional service to access and lookup this information in a structured way.
Separation: Hosted environments have a security context assigned to them by the base component. The security context of an environment may contain such components as:
a. DAC context e.g., the code-id of an environment.
b. MAC context: In case of MAC, the MAC context of an environment consists of a sensitivity label and a category.
Communication: Inter-environment communication is regulated by the base component by using uni-directional transports owned by the base component.
a. Transports provide in-sequence and reliable message delivery between environments. A synchronization object is provided for notifying an environment of arrival of data on a transport.
b. Access Control: Transports are objects owned by the base component, and the ability of a hosted environment to read from or write onto a transport is regulated by the access control model enforced by the base component. In case of DAC, this is controlled by an ACL on the transport for the actions “read” and “write”. In the case of MAC, this is controlled by the label attached to the transport. In order to provide for export to multi-level devices, the base component provides implementations of front-end security filters. Front-end security filters (FESF) are functions registered to the base component that can be attached to the write or read ends of transports. In case of a write(read)-FESF, the write FESF is called by the VMM before data is written (read) to (from) the transport by a VM. An example of a write-FESF is Seal( ) that is typically applied to data in a high-assurance environment before that data is written to an ordinary (non-high-assurance) environment if MAC is in force. If MAC is not in force, an environment will have to encrypt data that it considers privacy sensitive before sending it to another environment.
Messages: Transports carry messages across different environments. A message is a data blob created by the base component that is structured as follows:
a. Security context assigned by the base component: Contains a DAC and MAC context. The DAC context contains the subject-id of the creating environment. The MAC context contains the sensitivity label and category of the creating environment.
b. Content: Data (including security context assigned by a creating environment).
Higher level abstractions: Environments (or applications or other software objects running in an environment) may implement an RPC interface by themselves by using the communications abstraction exposed by the base component. This may be a service provided by an environment, or simply library code. Another abstraction that may be exposed is a socket call interface between environments, which need not be implemented by the base component.
Focus management: In many of the examples of partitioned applications, arrival of a message from one environment to the other may cause a change in the current owner of the secure input or output device. Focus management is provided by the base component on request by environments—e.g., an environment may request a change in focus upon arrival of a message from another environment. An environment then has a session with the secure input/output device and then relinquishes control. The base component can force termination of an I/O session by an environment.
Example Data Object for Use with Partitioned Applications
Data object 700 includes a data item 702. Data item 702 is the underlying substantive content that data object 700 exists for the purpose of carrying—e.g., a secret word processing document (or portion thereof), sensitive financial data for a spreadsheet, password information to authenticate a user in a financial transaction, etc.
Data item 702 is wrapped in a series of wrappers by each layer of the architecture that handles the data. Each wrapper serves two purposes: (1) the wrapper identifies the entity (e.g., an application, an environment, etc.) that placed the wrapper on the item, which assists in later routing the item to that entity; (2) the wrapper seals the item in a manner that later allows one to verify that the item has not been modified since it was wrapped. For example, if Word-let 608 creates data item 702, then Word-let can attach both a digital signature of data item 702, as well as a header that identifies Word-let as the processor to which data item 702 should later be routed when it needs to be handled in some manner. The signature and header thus constitute a wrapper 704. It should be noted that wrappers are not limited to signatures and headers, or to any particular embodiment, and there are various known techniques that allow an item to be identified, and that allow the item's integrity (i.e., non-modification) to be verified.
As described above, security of a processor such as Word-let is based on a hierarchy of trusted components—i.e., Word-let is trustworthy because it relies on the high-assurance of the nexus; the nexus is trustworthy because it relies on the isolation capabilities of the base component, etc. Thus, each component in the hierarchy that is in the chain leading up to the application that creates data item 702 wraps the item in its own wrapper. The data item 702, which is already wrapped by Word-let's wrapper, is then wrapped by the nexus's wrapper 706. This (doubly-wrapped) item is then wrapped by the base component's wrapper 708. Each wrapper essentially identifies the wrapping component and also constitutes a verifiable assertion (to the extent that the wrapping component is trustworthy) that the wrapped contents have not been changed since they were wrapped.
Additionally, since the wrappers are nested according to the order of the hierarchy, each wrapper is useful for routing purposes. Thus, when data object 700 is encountered by an application, the outer wrapper 708 identifies the object as one that needs to be routed to another processor, so the object is sent to the base component. The base component then uses the wrapper to verify the integrity of the contents inside the wrapper, and uses the next-level wrapper 706 to determine which environment the contents needs to be routed to (in this case, to the nexus). The nexus then verifies the integrity of the contents inside wrapper 706, and also uses wrapper 704 to determine which software object (in this case, Word-let) will handle contents. Word-let then verifies the integrity of the contents inside wrapper 704. This contents is data item 702. Thus, the structure of data object 700 allows data item 702 to be routed and verified at each step in the chain leading up to the processor that will handle data item 702.
Example Process of Using Partitioned Application
Initially, processor 1 is running; during the time the processor 1 is running, processor 1 encounters a data object (802). As discussed above, processor 1 may not be able to read the data object, but may be able to recognize the data object as something that needs to be sent elsewhere for processing. Thus, processor 1 sends the data object to the reference monitor (804).
The reference monitor uses the outer-most wrapper of the data object to determine where the data object needs to be sent. As discussed above, the reference monitor (which is preferably part of the above-discussed base component) also uses the outer-most wrapper to verify the integrity of that wrapper's contents. In this example, it is assumed that that the integrity of the contents has been maintained, and that the reference monitor determines that the data object needs to be processed by processor 2 (806). (As discussed above, the reference monitor may not be directly aware of processor 2's existence, but rather may use the wrapper to route the object to a particular environment, where the object is subsequently routed to processor 2 by the receiving environment. Since the use of nested wrappers in this manner is discussed above in connection with
When the determination has been made that the data object is destined for processor 2, it is determined (808) whether processor 2 is running. For example, this determination may be made by the environment in which processor 2 is intended to run (e.g., the nexus, in prior examples). If processor 2 is not running, then processor 2 is started (810). After processor 2 has been started (or otherwise determined to have been already running), then processor 2 is given focus (i.e., the ability to perform I/O on input and output devices) if processor 2 is to handle any input or output.
It is noted that the foregoing examples have been provided merely for the purpose of explanation and are in no way to be construed as limiting of the present invention. While the invention has been described with reference to various embodiments, it is understood that the words which have been used herein are words of description and illustration, rather than words of limitations. Further, although the invention has been described herein with reference to particular means, materials and embodiments, the invention is not intended to be limited to the particulars disclosed herein; rather, the invention extends to all functionally equivalent structures, methods and uses, such as are within the scope of the appended claims. Those skilled in the art, having the benefit of the teachings of this specification, may effect numerous modifications thereto and changes may be made without departing from the scope and spirit of the invention in its aspects.
Number | Name | Date | Kind |
---|---|---|---|
5859966 | Hayman et al. | Jan 1999 | A |
5892900 | Ginter et al. | Apr 1999 | A |
6006332 | Rabne et al. | Dec 1999 | A |
6397242 | Devine et al. | May 2002 | B1 |
6490720 | Carlsen et al. | Dec 2002 | B1 |
6496823 | Blank et al. | Dec 2002 | B2 |
6496847 | Bugnion et al. | Dec 2002 | B1 |
7039801 | Narin | May 2006 | B2 |
7043616 | McGrath | May 2006 | B1 |
7082507 | Christie et al. | Jul 2006 | B1 |
7130951 | Christie et al. | Oct 2006 | B1 |
7130977 | Christie et al. | Oct 2006 | B1 |
7146477 | Strongin et al. | Dec 2006 | B1 |
7165135 | Christie et al. | Jan 2007 | B1 |
7228426 | Sinha et al. | Jun 2007 | B2 |
7313687 | Kaler et al. | Dec 2007 | B2 |
20020184520 | Bush et al. | Dec 2002 | A1 |
20030041255 | Chen et al. | Feb 2003 | A1 |
20030101322 | Gardner | May 2003 | A1 |
20030200402 | Willman et al. | Oct 2003 | A1 |
20040064718 | Harrington et al. | Apr 2004 | A1 |
20040210764 | McGrath et al. | Oct 2004 | A1 |
20040230794 | England et al. | Nov 2004 | A1 |
20040250036 | Willman et al. | Dec 2004 | A1 |
20050033980 | Willman et al. | Feb 2005 | A1 |
20050044169 | Arbeitman et al. | Feb 2005 | A1 |
Number | Date | Country | |
---|---|---|---|
20050091661 A1 | Apr 2005 | US |