US20020112089A1 - Method and system for supporting a system call and interprocess communication in a fault-tolerant,scalable distributed computer environment - Google Patents

Method and system for supporting a system call and interprocess communication in a fault-tolerant,scalable distributed computer environment Download PDF

Info

Publication number
US20020112089A1
US20020112089A1 US10/120,606 US12060602A US2002112089A1 US 20020112089 A1 US20020112089 A1 US 20020112089A1 US 12060602 A US12060602 A US 12060602A US 2002112089 A1 US2002112089 A1 US 2002112089A1
Authority
US
United States
Prior art keywords
memory space
agent
data
socket
processes
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Abandoned
Application number
US10/120,606
Inventor
Bahman Zargham
Jim Uren
Robert Shaw
Sylvia Chan
Lars Plum
Minoo Gupta
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hewlett Packard Development Co LP
Original Assignee
Compaq Information Technologies Group LP
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Compaq Information Technologies Group LP filed Critical Compaq Information Technologies Group LP
Priority to US10/120,606 priority Critical patent/US20020112089A1/en
Assigned to COMPAQ COMPUTER CORPORATION reassignment COMPAQ COMPUTER CORPORATION MERGER (SEE DOCUMENT FOR DETAILS). Assignors: TANDEM COMPUTERS INCORPORATED
Assigned to COMPAQ INFORMATION TECHNOLOGIES GROUP, L.P. reassignment COMPAQ INFORMATION TECHNOLOGIES GROUP, L.P. ASSIGNMENT OF ASSIGNORS INTEREST (SEE DOCUMENT FOR DETAILS). Assignors: COMPAQ COMPUTER CORPORATION
Publication of US20020112089A1 publication Critical patent/US20020112089A1/en
Assigned to HEWLETT-PACKARD DEVELOPMENT COMPANY, L.P. reassignment HEWLETT-PACKARD DEVELOPMENT COMPANY, L.P. CHANGE OF NAME (SEE DOCUMENT FOR DETAILS). Assignors: COMPAQ INFORMATION TECHNOLOGIES GROUP LP
Abandoned legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/542Event management; Broadcasting; Multicasting; Notifications
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues

Definitions

  • the present invention is related to the field of digital circuits and to the field of instructions and program code for the operation thereof. More particularly, the present invention is related to data communication between digital circuits or between processes running on the same circuit. The invention is further related to fault-tolerant and scalable distributed processor and distributed memory digital processing systems.
  • This discussion of the present invention presupposes some familiarity with computer programming and software, particularly data input and output (I/ 0 ), network communications, and interprocess communications.
  • the present invention also presupposes some familiarity with multiprocessor and nonshared memory computer systems, as discussed in co-assigned U.S. Pat. No. 4,228,496, which is incorporated herein by reference to the extent necessary to understand and enable the invention.
  • This discussion of the present invention also presupposes some familiarity with the UNIX and related operating systems and with the well-known sockets protocol for enabling interprocess and network communication.
  • select( ) or a similar system call to inform the OS kernel that they are interested in a particular resource for interprocess communication.
  • a simple example would be a process that needs to wait for a particular resource to have data to read or to be available for a write. Rather than the process using CPU time to repeatedly query the connection to determine if the connection is ready, the process may call select( ) and then become dormant if the connection is not immediately ready. The call to select( ) registers with the OS kernel that the calling process needs to be awakened when the interprocess communication resource becomes ready.
  • the select( ) OS call may be used by a process having open connections to one or more sockets.
  • a socket is a resource for interprocess communication that is generally used between a user process and a special I/O process handling a network I/O protocol such as the common internet protocols TCP or IP.
  • Sockets are generally implemented as a data structure within the OS memory space, and this memory space is accessible to the OS, the I/O process responsible for delivering data to the socket, and the user process that is communicating via the socket.
  • a socket data structure has associated with it all state information necessary to handle the interprocess communication and generally includes a pointer to a memory location for temporarily storing the actual data packets flowing between the user process and the I/O connection.
  • Select( ) also may be used on other OS data structures used for interprocess communication such as pipes or FIFOs and for other opened I/O such as ttys, disk opens, and directory opens. While select( ) performs a similar function no matter what type of data structure it is called on, the details of the select( ) implementation for different data structures may vary in different operating systems as described more fully below.
  • select( ) can be easily implemented because the data structures representing sockets, pipes, or FIFOs in the system are contained in a single memory space, as shown in FIG. 1 , and therefore can be directly accessible to every process running in that memory space, including the OS.
  • select( ) is more difficult to implement because the information regarding the occurrence of different events on different data structures may be contained in a memory different from that which holds the user process calling select and may not be directly accessible even to the OS local to the process that called select.
  • a distributed operating system incorporating a distributed select function includes: a first agent running in a first memory space; a second agent running in a second memory space; a first data structure for interprocess communication residing in the first memory space, and a second data structure for interprocess communication residing in the second memory space.
  • the first and second agents send and receive messages between the first and second memory spaces and provide a standard select function interface to user processes.
  • a method in a computing environment having multiple CPUs and multiple memory spaces for facilitating communication between a process in a first memory space and a process in a second memory space includes: creating a first agent process in the first memory space; directing to the agent a request by a first process for creating an interprocess connection to a process in a second memory space; creating a data structure in the first memory space for facilitating interprocess communication; transmitting a message representing the request from the agent to the second memory space; receiving the request at a second process in the second memory space; creating a data structure in the second memory space for facilitating interprocess communication; using the first and the second data structures to communicate data with processes in the respective memory spaces; and using the agent and the second process to communicate data between the data structures.
  • the first process is unaware that it is running in a distributed memory space environment.
  • the process in the second memory space can be a second agent, a continuously running I/O process, etc.
  • a computer readable medium in a distributed computing environment embodies program code with instructions for facilitating communication between a process existing in a first memory space and a process existing in a second memory space, including instructions for: creating a first agent process in the first memory space; directing to the agent a request by a first process for creation of an interprocess connection to a process in a second memory space; creating a data structure in the first memory space for facilitating interprocess communication; transmitting a message representing the request from the agent to the second memory space; receiving the request at a second process in the second memory space; creating a data structure in the second memory space for facilitating interprocess communication; using the first and the second data structures to communicate data with processes in the respective memory spaces; and using the agent and the second process to communicate data between the data structures.
  • a method for facilitating a system function call and interprocess communication in a distributed computer system environment in which two processes are instantiated, each in its own memory space that is associated with its operating system, and in which a first of the two processes calls a system function for establishing interprocess communication with the second of the two process.
  • This method includes: instantiating an agent in each of the memory spaces, a first agent in the memory space of the first process and a second agent in the memory space of the second process; receiving the system function call from the first process at its operating system; prompting the first agent, in response to the system function call, to create a shadow socket in the memory space of the first process; prompting the second agent, in response to a message from the first agent about the system function call, to create a real socket in the memory space of the second process, the real socket receiving data associated with the system function call; transferring the data from the real socket to the shadow socket; and prompting the first agent to wake-up the first process when the I/O data is available in the shadow socket, wherein the first socket is not aware that the second process is in a remote memory space.
  • one system function call is select( ) and, in one instance, the first and second processes are user and input/output (I/O) processes, respectively.
  • the real socket receives I/O data as well as connection information including the I/O data destination (first memory space).
  • Connection a means for communicating data between processes or between a process and an I/O device, such as a socket, a RAM file, a disk file, a directory, a pipe, a FIFO, a TTY, etc.
  • Event an occurrence on a connection, such as a ready-to-read, ready-to-write, or exceptional condition.
  • File descriptor An identifier local to a user process and shared by only that process and related (child) processes for identifying a particular connection opened or created by that process.
  • I/O process An input/output process for managing data input and output on some physical resources such as a network. Also called a server process.
  • Kernel The executing operating system executable code that manages the activity of all other processes.
  • OS Operating System
  • Process a collection (generally a sequence) of executable program code and associated state information that can independently execute and may at any given time be either executing or dormant.
  • Socket A data construct residing in a memory that allows one process to communicate data with another process via a standard interface.
  • User process A process created to perform a user function. Also called an application.
  • FIG. 1 is a block diagram illustrating a computing environment of the prior art in which a select( ) function may be utilized.
  • FIG. 2 is a block diagram illustrating a distributed computing environment embodying the invention.
  • FIG. 3 is a block diagram illustrating an agent in accordance with the invention.
  • FIG. 4 is a flow chart of a method of creating an interprocess connection according to the invention.
  • FIG. 5 is a flow chart of a method of accomplishing a distributed select according to the invention.
  • FIG. 6 is a block diagram illustrating a generalized computing system upon which the present invention may be implemented.
  • FIG. 1 is a block diagram illustrating a computing environment of the prior art. This figure depicts a computer system 1 , with multiple CPUs 5 a - b , a shared memory space 10 , I/O ports 15 a - b with I/O processes 22 a - c , user processes 24 a - c , sockets 26 a - b , and FIFO 27 .
  • Processes shown in FIG. 1 include the operating system process 20 , also referred to as the kernel, I/O processes 22 a - c , and user processes 24 a - c.
  • the operating system process 20 also referred to as the kernel
  • I/O processes 22 a - c I/O processes 22 a - c
  • user processes 24 a - c user processes 24 a - c.
  • Kernel 20 is a continually running process that manages the overall operation of the operating system and resource usage by other processes.
  • I/O processes 22 a - c are each generally connected to a physical I/O interconnection such as a network connection, disk drive, or video display, and manage data communications between the physical device and other processes in the system.
  • User processes 24 a - c are user-invoked executable code that perform user functions.
  • Sockets 26 a - b and FIFO 27 are data structures residing in the shared memory space that are created by a process or the kernel to facilitate interprocess communication.
  • SOCKET_B is connected between I/O process 22 b and user process 24 a .
  • data intended for USER_PROCESS_A can be received by I/O_PROCESS_B and stored at the memory location pointed to by SOCKET_B even when USER_PROCESS_A is not available.
  • USER_PROCESS_A becomes available, or is awakened by the kernel, it can read the data from SOCKET_B, without interrupting whatever new action I/O_PROCESS_B is undertaking.
  • SOCKET_B is generally constructed so that it can receive and store a large number of data packets until a user process that wants data from the socket performs a read on that socket. For each read preformed, SOCKET_B delivers. and then discards the next packet of data in the order it was received from I/O_PROCESS_B.
  • a process such as USER_PROCESS_A may call select( ) on SOCKET_B when it wants to access SOCKET_B, but it is not sure that SOCKET_B is ready for the type of operation desired.
  • the select( ) call alerts OS kernel 20 that USER_PROCESS_A wishes to be awakened when SOCKET_B is ready to perform the requested operation.
  • a process may call a select( )-type function when it is waiting for one or more events to occur on one or more connections.
  • a process may go dormant after calling select( ) if the event does not happen immediately.
  • select( ) as called on sockets, there are three types of events: (1) a socket is ready to have data read from it, (2) a socket is ready to have data written to it, and (3) an exceptional condition relating to a socket is pending.
  • exceptional conditions are defined only for sockets, while read/write readiness is defined for most connections.
  • the process calling select( ) provides the following parameters to OS kernel 20 :
  • Bits set in a bitmask identify the connections in which the calling process is interested for that operation. If no connections of interest are ready, then the process is suspended until one of the connections becomes ready or the timeout expires.
  • the select( ) system call returns a count of how many requested connections are ready (this value can be 0 if the timeout expires) and updates the bitmasks—if a bit was set and the corresponding connection is not ready, then that bit is cleared to 0; if a bit was set and the corresponding connection is ready, then the bit is left set to 1.
  • FD's are generally integer identifiers that are assigned when a user process executes a particular system call to establish a connection, such as open( ) (on existing disk files, directories, etc.), socket( ), pipe( ), etc.
  • FD's once returned, are used for subsequent system calls like read( ), write( ), close( ), or select( ) to identify the connection on which to perform the operation, and are used in bitmasks as described above.
  • OS 20 maintains a data structure regarding information about each process, the FD's defined for that process and the connections indicated by those FD's.
  • interprocess communication takes place through the mechanism of the shared memory and is managed by OS 20 . If OS 20 or any other authorized process wishes to know the status of any one of the sockets 26 a - b or of any other connection resource, it simply reads the shared memory space where those sockets reside and thereby acquires the relevant data.
  • FIG. 2 is a block diagram illustrating a computing environment 2 in which a distributed select( ) and other interprocess communication functions may be advantageously utilized according to the present invention.
  • this computer environment may include multiple CPUs 5 a - c , I/O ports such as PORT_ 1 , user processes 24 a - d , sockets such as 26 a , and pipes or FIFOs such as 27 a.
  • Computing environment 2 differs from 1 in that environment 2 is distributed onto a number of nonshared memory spaces 10 a - c , with each memory space generally having its own OS kernel 20 , 22 , or 23 .
  • Data structures, including resources for interprocess communication, residing in one memory space are not directly accessible to processes in a different memory space.
  • data structures, processes, and CPUs will be referred to as local to one another if they are directly associated with the same memory space and will be referred to as remote to processes or CPUs connected with other memory spaces.
  • a user process such as USER_PROCESS_A is not necessarily aware that it is running in a distributed memory environment; however, the invention allows USER_PROCESS_A to establish an interprocess connection with any other process in the environment as though, from USER_PROCESS_A's perspective, all processes were running in the same memory space.
  • a user process such as USER_PROCESS_A, may in addition call a select( ) type function on opened interprocess connections even when those connections are not local to the calling process.
  • Computer environment 2 includes a number of mechanisms that allow this, including communication channel 50 allowing CPUs 5 a - c to communicate data to each other.
  • One mechanism for this CPU to CPU communication is a messaging system, such as the GuardianTM messaging system described in U.S. Pat. No. 4,228,496.
  • computer environment 2 also includes a number of agent processes in order to facilitate interprocess communications and implement a distributed select( ) function.
  • agent processes such as 30 a - c , 32 a - c , 33 a - c , are created by each OS in order to manage connections over the distributed environment as described below.
  • the present invention may be further understood by considering the method, as illustrated by FIGS. 2 and 4, by which a connection between two processes is established in a distributed memory environment in accordance with the present invention.
  • a connection between two processes is established in a distributed memory environment in accordance with the present invention.
  • USER_PROCESS_A in memory space 10 a wishes to establish a connection with I/O_PROCESS_A residing in a remote memory space 10 c .
  • USER_PROCESS_A is not necessarily aware that it is running in a distributed memory environment.
  • the interprocess connection would be created as follows: USER_PROCESS_A calls a system function to create the connection to I/O PROCESS A (Step S 2 ).
  • this system function might be a socket( ) call.
  • the system function call is received by the memory space 10 a operating system, which is specifically designed to operate over a distributed environment (Step S 4 ).
  • the operating system alerts SOCKET_AGENT_ 1 that USER_PROCESS_A wishes to create a socket with I/O_PROCESS_A (Step S 6 ).
  • SOCKET_AGENT_ 1 creates a SHADOW_SOCKET_A local to USER_PROCESS_A (Step S 8 ). Once created, this SHADOW_SOCKET_A, from USER_PROCESS_A's perspective, behaves just as a socket would in a nondistributed memory environment.
  • SOCKET_AGENT_ 1 then sends a message to the remote memory space 10 c via CPU_ 1 and the CPU bus 50 (Step S 10 ).
  • I/O PROCESS_A When this message is received at the remote memory space by I/O PROCESS_A, I/O_PROCESS_A creates the real SOCKET A in its memory space for holding connection information and storing data received on PORT_ 1 (Step S 12 ).
  • I/O_PROCESS A checks SOCKET_A to determine what to do with that data (Step S 14 ).
  • I/O_PROCESS_A is a process that is always running and is specifically aware it is in a distributed environment.
  • one mode is defined wherein the data is immediately transmitted from SOCKET_A to SHADOW_SOCKET_A and is stored there until it is read by USER_PROCESS_A, and an alternative mode is defined where data is held at SOCKET_A until a read request is received from USER_PROCESS_A.
  • Step S 18 When a message is received at memory space 10 a , it is passed to SOCKET_AGENT_ 1 , which is always running (Step S 18 ). SOCKET_AGENT_ 1 then examines SHADOW_SOCKET_A to determine whether action needs to be taken in response to the message from I/O_PROCESS_A (Step S 20 ). If SOCKET_AGENT_ 1 determines that USER_PROCESS_A is waiting to receive data, SOCKET_AGENT_ 1 can initiate a wake-up to USER_PROCESS_A, which can then take the appropriate action (Step S 22 ).
  • the present invention further enhances a distributed memory space environment by providing a means for implementing a select( ) system function in that environment.
  • agents such as 30 a - c perform a number of key functions in implementing a distributed select( ), as illustrated in FIG. 5.
  • an agent is passed, by its local OS, all select( ) calls from any local processes that refer to remote connections (Step T 2 ).
  • the agent prepares messages to the remote connections which are transmitted over message bus 50 (Step T 6 ).
  • the agent process receives all notify messages from the remote connections in response to events specified by the distributed select( ) call (Step T 8 ).
  • the remote process or the agent managing the remote connection keeps track of which interprocess resources (or FDs) are of interest to a given user process, and which operations are of interest for a given resource, and which CPUs are interested in a given resource/operation.
  • an I/O process or a remote agent When an I/O process or a remote agent receives a request for a notify via a select( ) or other call when a particular FD is ready, if the FD is not ready, the I/O process or remote agent stores information indicating that there is interest in the FD and which CPU is interested in the FD and what event is of interest (Step T 10 ). If the FD becomes ready for the operation of interest, the I/O process sends readiness information to the requesting CPU (Step T 12 ).
  • the calling process (or OS kernel on behalf of the calling process) sends the message to the remote process expressing interest in a given FD
  • the response from the remote process is not necessarily returned to the calling process because the calling process may have terminated or may timeout on select( ) then exit normally.
  • the present invention solves this problem by having all responses to select( ) returned to an agent process.
  • the agent processes are always available to receive responses and to take the appropriate action.
  • the agent process acts as a middleman between local processes calling select( ) and remote processes.
  • An agent acquires the select( ) messages built by an OS kernel and sends them to the remote process.
  • An agent receives select( ) readiness messages from the remote process.
  • An agent posts the information from the messages to data structures such as sockets, adds FDs to the calling process' linked list of ready FDs, and wakes the calling process when a selected FD becomes ready.
  • FIG. 3 shows a block diagram of an agent process as an example of an embodiment of the present invention.
  • an agent process includes a local interface for interacting with the local operating system and local processes.
  • this local interface 130 receives all select( ) calls from local processes, even those which do not require any remote access.
  • agent process 30 a sends a message via a remote interface 134 to a remote process running in a remote memory space.
  • agent process 30 a receives any responses to requests it has sent to remote processes, it passes those responses to a distributor 136 , which determines which local processes need to be notified of the response and what action, such as waking up a local process, needs to be taken. Distributor 136 then uses a local interface to communicate such responses and take appropriate action.
  • Another aspect of the current invention is that, in order to maintain consistency between socket function calls, the present invention may employ a separate shadow socket and real socket and use of a socket agent to communicate between a user process and an I/O process even when the user process and the I/O process reside within the same memory space.
  • agent processes there are as many as three agent processes in each distributed memory space, one handling sockets, one handling pipes, and one handling FIFOs.
  • Alternative embodiments could employ one agent process, or more than one, to handle different interprocess communication resources.
  • one agent process could handle pipes and FIFOS and a different agent process could handle sockets.
  • OS kernel code performs several functions to implement the distributed select( ).
  • the kernel accepts and validates input parameters from processes calling select( ) and gathers and formats return parameter information. It marks kernel data structures to provide information needed by the local agent process. And it builds the select( ) messages which are sent to remote processes.
  • the OS kernel in one embodiment invokes the system call “WAIT” to suspend the select( ) calling process.
  • the calling process is awakened by the agent if an FD becomes ready, or by the OS kernel if select( ) times out or is interrupted by a signal. If the calling process is awakened due to an FD becoming ready, it still needs to learn which FD of interest is ready and for which operation (read/write/exception).
  • One optimization of the present invention is to provide the agent with the location of a linked list of data structures containing information regarding ready FDs. When a calling process is awakened, the OS kernel (on behalf of the calling process) will peruse this list to learn which FDs are ready.
  • the kernel checks whether these FDs are ones the calling process is interested in. If so, the kernel updates the calling-process-provided bitmaps and returns control to the calling process. If not, the kernel suspends the calling process again and waits for FDs of interest to become ready.
  • a benefit of the present invention concerns how multiple instances of the same connection or FD existing on the local CPU are handled.
  • a calling process may fork( ) and create child processes which inherit the parent's open FDs, or the calling process may call dup( ) and obtain multiple FDs which refer to the same connection. In either of these cases, it is possible that select may be called such that interest is indicated for the same FD multiple times. Both parent and child may call select( ) on an FD independently, or a single process may call select( ) using multiple FD s that refer to the same open. In order to reduce message bandwidth on bus 50 and improve system performance, it is desirable to send only a single select( ) message to the remote process indicating that a particular FD and event on that FD are of interest.
  • a second select( ) request comes into the local OS kernel, that select is passed to the local agent process which checks against a database it maintains to determine that the remote process has already been contacted regarding that FD and therefore there is no need to send another message to the remote process (Step T 6 ).
  • the agent process records that this second select( ) call was made so that when the remote process sends a response indicating that the FD has become ready, the response is distributed to all calling processes that called select( ) and/or to multiple duplicate FDs in the same process. Not sending unnecessary duplicate select( ) requests to the remote process saves duplicate messages on bus 50 on both the transmit and receive end of the select.
  • the present invention provides a mechanism for increased fault tolerance of select( ) functions and interprocess communication in a distributed memory environment such as shown in FIG. 2.
  • an agent process will, from time to time, check to see if remote processes to which it is maintaining connection information are still active in a remote CPU. If a remote process terminates unexpectedly, the local agent will become aware of this and will inform local processes that may be paused or asleep, waiting for action by the remote process to awaken and to take appropriate action.
  • the distributed memory system as shown in FIG. 2 is fault-tolerant in that one entire memory space and its associated CPU can fail, and the overall environment will continue to function and recover from the failure of one piece.
  • the present invention also provides a means for increased scalability in a distributed memory system such as that shown in FIG. 2.
  • any number of additional memory spaces with CPUs may be added to an integrated system, each separate space having its own set of agent processes to handle socket, FIFO, and pipe connections.
  • the invention will work much the same way regardless of the number of additional memory space environments that are added to the system.
  • interprocess communications may be handled identically for different types of interprocess connections such as sockets, pipes, or FIFO.
  • the invention also allows for variations in the handling of different types of interprocess connections in order to optimize performance.
  • a separate agent process may be created in each memory space for sockets, FIFOS, and pipes.
  • a pipe agent such as 32 c may operate similarly to the socket agent previously described, with the difference being that, for a pipe connection, the pipe agent such as 32 c communicates with a remote pipe agent such as 33 c rather than communicating with a remote I/O process.
  • the remote pipe agent 33 c may create a shadow pipe 27 b to communicate data locally with the USER_PROCESS_C.
  • Pipe agent communications such as those between 32 c and 33 c take over the CPU system bus 50 as for sockets.
  • agent to agent communications are not necessary for socket communication, because in the case of sockets, there is always a continuously running remote l/O process that can create the remote real socket and can send a receive messages on the remote end.
  • FIFOs and pipes are not automatically associated with such a continuously running process, and so agent to agent communication is used.
  • an operating system facilitates interprocess communications and the select function by providing a continuously running process at both ends of a remote interprocess connection.
  • this continuously running process is the socket agent and on the other end it is the I/O process itself.
  • the I/O process like the agents, is specifically designed to operate in the distributed environment and is able to send and receive messages directed to the remote memory spaces.
  • a distributed select function may also be used with other types of files, including directories and disk files. These two file types are always ready for reading and writing and never ready for exceptions, so the implementation of select( ) for these files, even in a distributed environment, is trivial in that once select( ) determines the file type, the status is known.
  • a TTY file also called the character file, has select implemented in the same way as select is called on sockets.
  • TTY select( ) similar to socket select( ), relies on a central I/O process to keep the controlling data structures.
  • I/O process A 22 b would be a Telnet server, and is responsible for maintaining the state of the data structures that hold the state of the open TTY connections.
  • the Telnet server is also responsible for communicating with a TTY agent process in each CPU to give back the status to the select( ) and the agent process in each CPU wakes up processes waiting for TTY select indications.
  • the present invention may provide for two different modes by which data received by an I/O process such as 22 b is transmitted to a remote memory space.
  • the normal case is data forwarding mode in which, as soon as data is received by process 22 b , process 22 b examines the port address of the data and looks up the ultimate address of the data in SOCKET_A. From 26 a , process 22 b determines that the data is destined for process 24 a on memory 10 a . Process 22 b then composes a message to SOCKET_AGENT_ 1 , including the packet data, and sends the message over bus 50 . When the message is received by SOCKET_AGENT_ 1 ; SOCKET_AGENT_ 1 places the packet data in the memory location specified by SHADOW_SOCKET_A, and then wakes up user process 24 a as appropriate.
  • the invention also may provide a contention mode forwarding strategy.
  • I/O process 22 b operates in contention mode when it determines that user processes in more than one memory space are interested in reading data from a particular socket. In that case, packet data cannot be forwarded to a shadow socket, because I/O process 22 b does not know what process will next do a read on the data.
  • contention mode the packet data is then stored at SOCKET_A, and a message indicating that data is ready is sent over bus 50 .
  • a read( ) is invoked by a local process such as 26 b , that read is forwarded by the OS to the local socket agent, which then sends a message over bus 50 to process 22 b to deliver a packet of data. In this way, the sockets protocol of always delivering the next available packet to the next read request is preserved.
  • FIG. 6 illustrates an example of a computer system that may be used to execute software embodying aspects of the present invention.
  • FIG. 6 shows a computer system 700 which includes a monitor 703 , screen 705 , cabinet 707 , keyboard 709 , and mouse 711 .
  • Mouse 711 may have one or more buttons such as mouse buttons 713 .
  • Cabinet 707 is shown housing a disk drive 715 for reading a CD-ROM or other type disk 717 .
  • Cabinet 707 also houses the multiple computer processors and memory spaces as shown in FIG. 2.
  • the invention may be incorporated into operating system software or system utility software recorded onto a medium such as disk 717 which, when loaded into an appropriate computer system causes the system to perform the described method.

Abstract

A distributed computing system environment includes multiple CPUs, multiple non-shared memory spaces and a means for implementing system calls and interprocess communications. The system is both fault-tolerant and scalable in that agents exist independently in each non-shared memory space to handle interprocess connections between memory spaces.

Description

    REFERENCE TO PRIOR APPLICATION
  • This application is a Division of U.S. Application Ser. No. 08/835,398, filed Apr. 7, 1997, titled “Method and Apparatus for Supporting A Select( ) System Call and Interprocess Communication In A Fault-Tolerant, Scalable Distributed Computer Environment,” which application is incorporated herein by reference and which application claims the benefit of U.S. Provisional Application Ser. No. 60/024,769, filed Aug. 21, 1996.[0001]
  • BACKGROUND OF THE INVENTION
  • The present invention is related to the field of digital circuits and to the field of instructions and program code for the operation thereof. More particularly, the present invention is related to data communication between digital circuits or between processes running on the same circuit. The invention is further related to fault-tolerant and scalable distributed processor and distributed memory digital processing systems. [0002]
  • This discussion of the present invention presupposes some familiarity with computer programming and software, particularly data input and output (I/[0003] 0), network communications, and interprocess communications. The present invention also presupposes some familiarity with multiprocessor and nonshared memory computer systems, as discussed in co-assigned U.S. Pat. No. 4,228,496, which is incorporated herein by reference to the extent necessary to understand and enable the invention. This discussion of the present invention also presupposes some familiarity with the UNIX and related operating systems and with the well-known sockets protocol for enabling interprocess and network communication.
  • In all cases, the glossary and specific examples given herein are intended to be illustrative of the invention but not limiting. It will be apparent to anyone of skill in the art that the present invention may be implemented in an unlimited variety of operating system environments. Therefore, the invention should not be limited except as provided in the attached claims. [0004]
  • In UNIX and other operating systems (OS's), processes use a select( ) (or a similar) system call to inform the OS kernel that they are interested in a particular resource for interprocess communication. A simple example would be a process that needs to wait for a particular resource to have data to read or to be available for a write. Rather than the process using CPU time to repeatedly query the connection to determine if the connection is ready, the process may call select( ) and then become dormant if the connection is not immediately ready. The call to select( ) registers with the OS kernel that the calling process needs to be awakened when the interprocess communication resource becomes ready. [0005]
  • The select( ) OS call may be used by a process having open connections to one or more sockets. A socket is a resource for interprocess communication that is generally used between a user process and a special I/O process handling a network I/O protocol such as the common internet protocols TCP or IP. Sockets are generally implemented as a data structure within the OS memory space, and this memory space is accessible to the OS, the I/O process responsible for delivering data to the socket, and the user process that is communicating via the socket. A socket data structure has associated with it all state information necessary to handle the interprocess communication and generally includes a pointer to a memory location for temporarily storing the actual data packets flowing between the user process and the I/O connection. [0006]
  • Select( ) also may be used on other OS data structures used for interprocess communication such as pipes or FIFOs and for other opened I/O such as ttys, disk opens, and directory opens. While select( ) performs a similar function no matter what type of data structure it is called on, the details of the select( ) implementation for different data structures may vary in different operating systems as described more fully below. [0007]
  • A good description of the select( ) system call and sockets can be found in the reference book [0008] UNIX Network Programming, by Richard Stevens, (section 6.13), Prentice Hall, 1990.
  • Background of Distributed Memory Environments
  • In operating systems that have a single central processing unit (CPU) or multiple CPUs with shared memory, select( ) can be easily implemented because the data structures representing sockets, pipes, or FIFOs in the system are contained in a single memory space, as shown in FIG. [0009] 1, and therefore can be directly accessible to every process running in that memory space, including the OS.
  • However, in non-shared memory distributed systems, such as that discussed in U.S. Pat. No. 4,228,496, select( ) is more difficult to implement because the information regarding the occurrence of different events on different data structures may be contained in a memory different from that which holds the user process calling select and may not be directly accessible even to the OS local to the process that called select. [0010]
  • What is needed is a method for performing a select( ) function effectively in a distributed memory environment. [0011]
  • SUMMARY OF THE INVENTION
  • In one embodiment, a distributed operating system incorporating a distributed select function includes: a first agent running in a first memory space; a second agent running in a second memory space; a first data structure for interprocess communication residing in the first memory space, and a second data structure for interprocess communication residing in the second memory space. In this system, the first and second agents send and receive messages between the first and second memory spaces and provide a standard select function interface to user processes. [0012]
  • In another embodiment, a method in a computing environment having multiple CPUs and multiple memory spaces for facilitating communication between a process in a first memory space and a process in a second memory space includes: creating a first agent process in the first memory space; directing to the agent a request by a first process for creating an interprocess connection to a process in a second memory space; creating a data structure in the first memory space for facilitating interprocess communication; transmitting a message representing the request from the agent to the second memory space; receiving the request at a second process in the second memory space; creating a data structure in the second memory space for facilitating interprocess communication; using the first and the second data structures to communicate data with processes in the respective memory spaces; and using the agent and the second process to communicate data between the data structures. Notably, the first process is unaware that it is running in a distributed memory space environment. Also, the process in the second memory space can be a second agent, a continuously running I/O process, etc. [0013]
  • In yet another embodiment, a computer readable medium in a distributed computing environment embodies program code with instructions for facilitating communication between a process existing in a first memory space and a process existing in a second memory space, including instructions for: creating a first agent process in the first memory space; directing to the agent a request by a first process for creation of an interprocess connection to a process in a second memory space; creating a data structure in the first memory space for facilitating interprocess communication; transmitting a message representing the request from the agent to the second memory space; receiving the request at a second process in the second memory space; creating a data structure in the second memory space for facilitating interprocess communication; using the first and the second data structures to communicate data with processes in the respective memory spaces; and using the agent and the second process to communicate data between the data structures. [0014]
  • In yet another embodiment, a method for facilitating a system function call and interprocess communication in a distributed computer system environment in which two processes are instantiated, each in its own memory space that is associated with its operating system, and in which a first of the two processes calls a system function for establishing interprocess communication with the second of the two process. This method includes: instantiating an agent in each of the memory spaces, a first agent in the memory space of the first process and a second agent in the memory space of the second process; receiving the system function call from the first process at its operating system; prompting the first agent, in response to the system function call, to create a shadow socket in the memory space of the first process; prompting the second agent, in response to a message from the first agent about the system function call, to create a real socket in the memory space of the second process, the real socket receiving data associated with the system function call; transferring the data from the real socket to the shadow socket; and prompting the first agent to wake-up the first process when the I/O data is available in the shadow socket, wherein the first socket is not aware that the second process is in a remote memory space. In this environment, one system function call is select( ) and, in one instance, the first and second processes are user and input/output (I/O) processes, respectively. Hence, in this instance the real socket receives I/O data as well as connection information including the I/O data destination (first memory space). [0015]
  • Advantages of the invention will be understood by those skilled in the art, in part, from the description herein. Also, advantages of the invention will be realized from practice of the invention disclosed herein. [0016]
  • Glossary
  • The following terms are used in this application in accordance with the explanations below and also in accordance with their broad meanings as understood in the art. [0017]
  • Connection—a means for communicating data between processes or between a process and an I/O device, such as a socket, a RAM file, a disk file, a directory, a pipe, a FIFO, a TTY, etc. [0018]
  • Event—an occurrence on a connection, such as a ready-to-read, ready-to-write, or exceptional condition. [0019]
  • File descriptor (FD)—An identifier local to a user process and shared by only that process and related (child) processes for identifying a particular connection opened or created by that process. [0020]
  • I/O process—An input/output process for managing data input and output on some physical resources such as a network. Also called a server process. [0021]
  • Kernel—The executing operating system executable code that manages the activity of all other processes. [0022]
  • Message—In a distributed CPU environment, data communicated between two or more different CPUs or memory spaces over a communications channel. [0023]
  • Operating System (OS)—The kernel and other callable functions and resources available to processes. [0024]
  • Process—a collection (generally a sequence) of executable program code and associated state information that can independently execute and may at any given time be either executing or dormant. [0025]
  • Socket—A data construct residing in a memory that allows one process to communicate data with another process via a standard interface. [0026]
  • User process—A process created to perform a user function. Also called an application. [0027]
  • BRIEF DESCRIPTION OF THE DRAWINGS
  • FIG. 1 is a block diagram illustrating a computing environment of the prior art in which a select( ) function may be utilized. [0028]
  • FIG. 2 is a block diagram illustrating a distributed computing environment embodying the invention. [0029]
  • FIG. 3 is a block diagram illustrating an agent in accordance with the invention. [0030]
  • FIG. 4 is a flow chart of a method of creating an interprocess connection according to the invention. [0031]
  • FIG. 5 is a flow chart of a method of accomplishing a distributed select according to the invention. [0032]
  • FIG. 6 is a block diagram illustrating a generalized computing system upon which the present invention may be implemented.[0033]
  • DESCRIPTION OF THE PREFERRED EMBODIMENT Select( ) and Sockets in a Single-Memory-Space Computer
  • FIG. 1 is a block diagram illustrating a computing environment of the prior art. This figure depicts a [0034] computer system 1, with multiple CPUs 5 a-b, a shared memory space 10, I/O ports 15 a-b with I/O processes 22 a-c, user processes 24 a-c, sockets 26 a-b, and FIFO 27.
  • Processes shown in FIG. 1 include the [0035] operating system process 20, also referred to as the kernel, I/O processes 22 a-c, and user processes 24 a-c.
  • [0036] Kernel 20 is a continually running process that manages the overall operation of the operating system and resource usage by other processes. I/O processes 22 a-c are each generally connected to a physical I/O interconnection such as a network connection, disk drive, or video display, and manage data communications between the physical device and other processes in the system. User processes 24 a-c are user-invoked executable code that perform user functions.
  • Sockets [0037] 26 a-b and FIFO 27 are data structures residing in the shared memory space that are created by a process or the kernel to facilitate interprocess communication.
  • As shown in FIG. 1, SOCKET_B is connected between I/[0038] O process 22 b and user process 24 a. With SOCKET_B connected as such, data intended for USER_PROCESS_A can be received by I/O_PROCESS_B and stored at the memory location pointed to by SOCKET_B even when USER_PROCESS_A is not available. Whenever USER_PROCESS_A becomes available, or is awakened by the kernel, it can read the data from SOCKET_B, without interrupting whatever new action I/O_PROCESS_B is undertaking. SOCKET_B is generally constructed so that it can receive and store a large number of data packets until a user process that wants data from the socket performs a read on that socket. For each read preformed, SOCKET_B delivers. and then discards the next packet of data in the order it was received from I/O_PROCESS_B.
  • Select( )
  • A process such as USER_PROCESS_A may call select( ) on SOCKET_B when it wants to access SOCKET_B, but it is not sure that SOCKET_B is ready for the type of operation desired. The select( ) call [0039] alerts OS kernel 20 that USER_PROCESS_A wishes to be awakened when SOCKET_B is ready to perform the requested operation.
  • Stated more generally, a process may call a select( )-type function when it is waiting for one or more events to occur on one or more connections. A process may go dormant after calling select( ) if the event does not happen immediately. In one specific implementation of select( ), as called on sockets, there are three types of events: (1) a socket is ready to have data read from it, (2) a socket is ready to have data written to it, and (3) an exceptional condition relating to a socket is pending. Generally, exceptional conditions are defined only for sockets, while read/write readiness is defined for most connections. [0040]
  • In a specific example, the process calling select( ) provides the following parameters to OS kernel [0041] 20:
  • Bitmask for read; [0042]
  • Bitmask for write; [0043]
  • Bitmask for exception (for sockets); [0044]
  • Size of bitmask (number of bits); [0045]
  • Timeout; and [0046]
  • A variable for the select( ) return value. [0047]
  • Bits set in a bitmask identify the connections in which the calling process is interested for that operation. If no connections of interest are ready, then the process is suspended until one of the connections becomes ready or the timeout expires. The select( ) system call returns a count of how many requested connections are ready (this value can be 0 if the timeout expires) and updates the bitmasks—if a bit was set and the corresponding connection is not ready, then that bit is cleared to 0; if a bit was set and the corresponding connection is ready, then the bit is left set to 1. [0048]
  • File Descriptors (FD's)
  • In general, in UNIX and similar systems, information regarding connections requested by a user process are communicated between the user process and the OS using File Descriptors (FD's). FD's are generally integer identifiers that are assigned when a user process executes a particular system call to establish a connection, such as open( ) (on existing disk files, directories, etc.), socket( ), pipe( ), etc. FD's, once returned, are used for subsequent system calls like read( ), write( ), close( ), or select( ) to identify the connection on which to perform the operation, and are used in bitmasks as described above. FD's in general are local to the process that requested them, but may also be inherited by child processes and in some cases may be passed to other processes. [0049] OS 20 maintains a data structure regarding information about each process, the FD's defined for that process and the connections indicated by those FD's.
  • Use of Shared Memory Space for Interprocess Communication
  • In the shared memory system shown in FIG. 1, interprocess communication takes place through the mechanism of the shared memory and is managed by [0050] OS 20. If OS 20 or any other authorized process wishes to know the status of any one of the sockets 26 a-b or of any other connection resource, it simply reads the shared memory space where those sockets reside and thereby acquires the relevant data.
  • Overview of Distributed Memory Space Implementations
  • FIG. 2 is a block diagram illustrating a [0051] computing environment 2 in which a distributed select( ) and other interprocess communication functions may be advantageously utilized according to the present invention. As in FIG. 1, this computer environment may include multiple CPUs 5 a-c, I/O ports such as PORT_1, user processes 24 a-d, sockets such as 26 a, and pipes or FIFOs such as 27 a.
  • [0052] Computing environment 2 differs from 1 in that environment 2 is distributed onto a number of nonshared memory spaces 10 a-c, with each memory space generally having its own OS kernel 20, 22, or 23. Data structures, including resources for interprocess communication, residing in one memory space are not directly accessible to processes in a different memory space. For purposes of this discussion, data structures, processes, and CPUs will be referred to as local to one another if they are directly associated with the same memory space and will be referred to as remote to processes or CPUs connected with other memory spaces.
  • According to the present invention, a user process such as USER_PROCESS_A is not necessarily aware that it is running in a distributed memory environment; however, the invention allows USER_PROCESS_A to establish an interprocess connection with any other process in the environment as though, from USER_PROCESS_A's perspective, all processes were running in the same memory space. [0053]
  • According to the invention, a user process, such as USER_PROCESS_A, may in addition call a select( ) type function on opened interprocess connections even when those connections are not local to the calling process. [0054]
  • [0055] Computer environment 2 includes a number of mechanisms that allow this, including communication channel 50 allowing CPUs 5 a-c to communicate data to each other. One mechanism for this CPU to CPU communication is a messaging system, such as the Guardian™ messaging system described in U.S. Pat. No. 4,228,496.
  • According to the present invention, [0056] computer environment 2 also includes a number of agent processes in order to facilitate interprocess communications and implement a distributed select( ) function. These agent processes, such as 30 a-c, 32 a-c, 33 a-c, are created by each OS in order to manage connections over the distributed environment as described below.
  • Establishing a Remote Interprocess Connection
  • The present invention may be further understood by considering the method, as illustrated by FIGS. 2 and 4, by which a connection between two processes is established in a distributed memory environment in accordance with the present invention. For the purposes of this example, assume that USER_PROCESS_A in [0057] memory space 10 a wishes to establish a connection with I/O_PROCESS_A residing in a remote memory space 10 c. USER_PROCESS_A is not necessarily aware that it is running in a distributed memory environment.
  • According to the present invention, the interprocess connection would be created as follows: USER_PROCESS_A calls a system function to create the connection to I/O PROCESS A (Step S[0058] 2). In one specific embodiment, this system function might be a socket( ) call.
  • The system function call is received by the [0059] memory space 10 a operating system, which is specifically designed to operate over a distributed environment (Step S4). The operating system alerts SOCKET_AGENT_1 that USER_PROCESS_A wishes to create a socket with I/O_PROCESS_A (Step S6). SOCKET_AGENT_1 creates a SHADOW_SOCKET_A local to USER_PROCESS_A (Step S8). Once created, this SHADOW_SOCKET_A, from USER_PROCESS_A's perspective, behaves just as a socket would in a nondistributed memory environment.
  • SOCKET_AGENT_[0060] 1 then sends a message to the remote memory space 10 c via CPU_1 and the CPU bus 50 (Step S10). When this message is received at the remote memory space by I/O PROCESS_A, I/O_PROCESS_A creates the real SOCKET A in its memory space for holding connection information and storing data received on PORT_1 (Step S12). Whenever I/O data is received by I/O_PROCESS_A, I/O_PROCESS A checks SOCKET_A to determine what to do with that data (Step S14).
  • If SOCKET_A indicates that USER PROCESS_A is the destination for that data, I/O_PROCESS_A or [0061] kernel 23 initiates a message again through the CPU to the memory space 10 a alerting the memory space 10 a processes to the presence of the data in SOCKET_A (Step S16). According to one embodiment of the invention, I/O_PROCESS_A, like SOCKET_AGENT_1, is a process that is always running and is specifically aware it is in a distributed environment. According to one embodiment of the invention, one mode is defined wherein the data is immediately transmitted from SOCKET_A to SHADOW_SOCKET_A and is stored there until it is read by USER_PROCESS_A, and an alternative mode is defined where data is held at SOCKET_A until a read request is received from USER_PROCESS_A.
  • When a message is received at [0062] memory space 10 a, it is passed to SOCKET_AGENT_1, which is always running (Step S18). SOCKET_AGENT_1 then examines SHADOW_SOCKET_A to determine whether action needs to be taken in response to the message from I/O_PROCESS_A (Step S20). If SOCKET_AGENT_1 determines that USER_PROCESS_A is waiting to receive data, SOCKET_AGENT_1 can initiate a wake-up to USER_PROCESS_A, which can then take the appropriate action (Step S22).
  • Distributed Select( )
  • The present invention further enhances a distributed memory space environment by providing a means for implementing a select( ) system function in that environment. According to the present invention, agents such as [0063] 30 a-c perform a number of key functions in implementing a distributed select( ), as illustrated in FIG. 5.
  • According to one embodiment of the invention, an agent is passed, by its local OS, all select( ) calls from any local processes that refer to remote connections (Step T[0064] 2). The agent prepares messages to the remote connections which are transmitted over message bus 50 (Step T6). The agent process receives all notify messages from the remote connections in response to events specified by the distributed select( ) call (Step T8).
  • The remote process or the agent managing the remote connection keeps track of which interprocess resources (or FDs) are of interest to a given user process, and which operations are of interest for a given resource, and which CPUs are interested in a given resource/operation. [0065]
  • When an I/O process or a remote agent receives a request for a notify via a select( ) or other call when a particular FD is ready, if the FD is not ready, the I/O process or remote agent stores information indicating that there is interest in the FD and which CPU is interested in the FD and what event is of interest (Step T[0066] 10). If the FD becomes ready for the operation of interest, the I/O process sends readiness information to the requesting CPU (Step T12).
  • Although, logically speaking, the calling process (or OS kernel on behalf of the calling process) sends the message to the remote process expressing interest in a given FD, according to the invention the response from the remote process is not necessarily returned to the calling process because the calling process may have terminated or may timeout on select( ) then exit normally. The present invention solves this problem by having all responses to select( ) returned to an agent process. The agent processes are always available to receive responses and to take the appropriate action. [0067]
  • The agent process acts as a middleman between local processes calling select( ) and remote processes. An agent acquires the select( ) messages built by an OS kernel and sends them to the remote process. An agent receives select( ) readiness messages from the remote process. An agent posts the information from the messages to data structures such as sockets, adds FDs to the calling process' linked list of ready FDs, and wakes the calling process when a selected FD becomes ready. [0068]
  • FIG. 3 shows a block diagram of an agent process as an example of an embodiment of the present invention. According to the present invention, an agent process includes a local interface for interacting with the local operating system and local processes. According to one embodiment of the invention, this [0069] local interface 130 receives all select( ) calls from local processes, even those which do not require any remote access. According to the present invention, when an agent determines from its select data base that a particular connection operation requires notification of a remote process, and that remote process has not already been notified, the CPU upon which the process is running desires notification of that particular connection event, agent process 30 a sends a message via a remote interface 134 to a remote process running in a remote memory space.
  • Once [0070] agent process 30 a receives any responses to requests it has sent to remote processes, it passes those responses to a distributor 136, which determines which local processes need to be notified of the response and what action, such as waking up a local process, needs to be taken. Distributor 136 then uses a local interface to communicate such responses and take appropriate action.
  • Another aspect of the current invention is that, in order to maintain consistency between socket function calls, the present invention may employ a separate shadow socket and real socket and use of a socket agent to communicate between a user process and an I/O process even when the user process and the I/O process reside within the same memory space. [0071]
  • In one specific embodiment of an environment incorporating the invention, there are as many as three agent processes in each distributed memory space, one handling sockets, one handling pipes, and one handling FIFOs. Alternative embodiments could employ one agent process, or more than one, to handle different interprocess communication resources. For example, one agent process could handle pipes and FIFOS and a different agent process could handle sockets. [0072]
  • OS Kernel Code Functions in Distributed Select( )
  • In one specific embodiment of the present invention, OS kernel code performs several functions to implement the distributed select( ). The kernel accepts and validates input parameters from processes calling select( ) and gathers and formats return parameter information. It marks kernel data structures to provide information needed by the local agent process. And it builds the select( ) messages which are sent to remote processes. [0073]
  • The OS kernel in one embodiment invokes the system call “WAIT” to suspend the select( ) calling process. The calling process is awakened by the agent if an FD becomes ready, or by the OS kernel if select( ) times out or is interrupted by a signal. If the calling process is awakened due to an FD becoming ready, it still needs to learn which FD of interest is ready and for which operation (read/write/exception). One optimization of the present invention is to provide the agent with the location of a linked list of data structures containing information regarding ready FDs. When a calling process is awakened, the OS kernel (on behalf of the calling process) will peruse this list to learn which FDs are ready. The kernel checks whether these FDs are ones the calling process is interested in. If so, the kernel updates the calling-process-provided bitmaps and returns control to the calling process. If not, the kernel suspends the calling process again and waits for FDs of interest to become ready. [0074]
  • Reducing Messages Between CPUs
  • A benefit of the present invention concerns how multiple instances of the same connection or FD existing on the local CPU are handled. As is known in the art, a calling process may fork( ) and create child processes which inherit the parent's open FDs, or the calling process may call dup( ) and obtain multiple FDs which refer to the same connection. In either of these cases, it is possible that select may be called such that interest is indicated for the same FD multiple times. Both parent and child may call select( ) on an FD independently, or a single process may call select( ) using multiple FD s that refer to the same open. In order to reduce message bandwidth on [0075] bus 50 and improve system performance, it is desirable to send only a single select( ) message to the remote process indicating that a particular FD and event on that FD are of interest.
  • According to the invention, when a second select( ) request comes into the local OS kernel, that select is passed to the local agent process which checks against a database it maintains to determine that the remote process has already been contacted regarding that FD and therefore there is no need to send another message to the remote process (Step T[0076] 6). However, the agent process records that this second select( ) call was made so that when the remote process sends a response indicating that the FD has become ready, the response is distributed to all calling processes that called select( ) and/or to multiple duplicate FDs in the same process. Not sending unnecessary duplicate select( ) requests to the remote process saves duplicate messages on bus 50 on both the transmit and receive end of the select.
  • Fault Tolerance
  • The present invention provides a mechanism for increased fault tolerance of select( ) functions and interprocess communication in a distributed memory environment such as shown in FIG. 2. According to this aspect of the invention, an agent process will, from time to time, check to see if remote processes to which it is maintaining connection information are still active in a remote CPU. If a remote process terminates unexpectedly, the local agent will become aware of this and will inform local processes that may be paused or asleep, waiting for action by the remote process to awaken and to take appropriate action. According to this aspect of the invention, the distributed memory system as shown in FIG. 2 is fault-tolerant in that one entire memory space and its associated CPU can fail, and the overall environment will continue to function and recover from the failure of one piece. [0077]
  • Scalability
  • The present invention also provides a means for increased scalability in a distributed memory system such as that shown in FIG. 2. According to this aspect of the invention, any number of additional memory spaces with CPUs may be added to an integrated system, each separate space having its own set of agent processes to handle socket, FIFO, and pipe connections. The invention will work much the same way regardless of the number of additional memory space environments that are added to the system. [0078]
  • Variations of Implementation for FIFOs and Pipes
  • According to the present invention, interprocess communications may be handled identically for different types of interprocess connections such as sockets, pipes, or FIFO. However, the invention also allows for variations in the handling of different types of interprocess connections in order to optimize performance. [0079]
  • As shown in FIG. 2, a separate agent process may be created in each memory space for sockets, FIFOS, and pipes. According to an embodiment of the invention, a pipe agent such as [0080] 32 c may operate similarly to the socket agent previously described, with the difference being that, for a pipe connection, the pipe agent such as 32 c communicates with a remote pipe agent such as 33 c rather than communicating with a remote I/O process. In this case, the remote pipe agent 33 c may create a shadow pipe 27 b to communicate data locally with the USER_PROCESS_C. Pipe agent communications such as those between 32 c and 33 c take over the CPU system bus 50 as for sockets. Such agent to agent communications are not necessary for socket communication, because in the case of sockets, there is always a continuously running remote l/O process that can create the remote real socket and can send a receive messages on the remote end. FIFOs and pipes are not automatically associated with such a continuously running process, and so agent to agent communication is used.
  • However, the essential operation of the invention for sockets, pipes, and FIFOs is similar. In each case, an operating system according to the invention facilitates interprocess communications and the select function by providing a continuously running process at both ends of a remote interprocess connection. In the case of sockets, on one end this continuously running process is the socket agent and on the other end it is the I/O process itself. The I/O process, like the agents, is specifically designed to operate in the distributed environment and is able to send and receive messages directed to the remote memory spaces. [0081]
  • It should be further understood that according to the present invention, a distributed select function may also be used with other types of files, including directories and disk files. These two file types are always ready for reading and writing and never ready for exceptions, so the implementation of select( ) for these files, even in a distributed environment, is trivial in that once select( ) determines the file type, the status is known. [0082]
  • Variations of Implementation for TTYs
  • According to another embodiment, a TTY file, also called the character file, has select implemented in the same way as select is called on sockets. According to the invention, TTY select( ), similar to socket select( ), relies on a central I/O process to keep the controlling data structures. However, in the case of TTY, I/[0083] O process A 22 b would be a Telnet server, and is responsible for maintaining the state of the data structures that hold the state of the open TTY connections. The Telnet server is also responsible for communicating with a TTY agent process in each CPU to give back the status to the select( ) and the agent process in each CPU wakes up processes waiting for TTY select indications.
  • Contention Mode and Data Forwarding Mode
  • The present invention, in one embodiment, may provide for two different modes by which data received by an I/O process such as [0084] 22 b is transmitted to a remote memory space.
  • The normal case is data forwarding mode in which, as soon as data is received by [0085] process 22 b, process 22 b examines the port address of the data and looks up the ultimate address of the data in SOCKET_A. From 26 a, process 22 b determines that the data is destined for process 24 a on memory 10 a. Process 22 b then composes a message to SOCKET_AGENT_1, including the packet data, and sends the message over bus 50. When the message is received by SOCKET_AGENT_1; SOCKET_AGENT_1 places the packet data in the memory location specified by SHADOW_SOCKET_A, and then wakes up user process 24 a as appropriate.
  • The invention also may provide a contention mode forwarding strategy. I/[0086] O process 22 b operates in contention mode when it determines that user processes in more than one memory space are interested in reading data from a particular socket. In that case, packet data cannot be forwarded to a shadow socket, because I/O process 22 b does not know what process will next do a read on the data. In contention mode, the packet data is then stored at SOCKET_A, and a message indicating that data is ready is sent over bus 50. When a read( ) is invoked by a local process such as 26 b, that read is forwarded by the OS to the local socket agent, which then sends a message over bus 50 to process 22 b to deliver a packet of data. In this way, the sockets protocol of always delivering the next available packet to the next read request is preserved.
  • Invention on Computer Readable Media
  • FIG. 6 illustrates an example of a computer system that may be used to execute software embodying aspects of the present invention. FIG. 6 shows a [0087] computer system 700 which includes a monitor 703, screen 705, cabinet 707, keyboard 709, and mouse 711. Mouse 711 may have one or more buttons such as mouse buttons 713. Cabinet 707 is shown housing a disk drive 715 for reading a CD-ROM or other type disk 717. Cabinet 707 also houses the multiple computer processors and memory spaces as shown in FIG. 2. According to one embodiment of the invention, the invention may be incorporated into operating system software or system utility software recorded onto a medium such as disk 717 which, when loaded into an appropriate computer system causes the system to perform the described method.
  • The present invention has been described with reference to specific embodiments, but other embodiments will be obvious to persons of skill in the art. In particular, method steps are grouped functionally for the purposes of understanding the invention. It will be understood by those of skill in the art, however, that various method steps could be performed in different orders or could be placed in different functional groupings without changing the essential nature of the invention. The invention, therefore, should not be limited except as provided in the attached claims. [0088]

Claims (12)

What is claimed is:
1. A distributed operating system incorporating a distributed select function, comprising:
a first agent running in a first memory space;
a second agent running in a second memory space;
a first data structure for interprocess communication residing in the first memory space; and
a second data structure for interprocess communication residing in the second memory space;
wherein the first and second agents send and receive messages between the first and the second memory spaces and provide a standard select function interface to user processes.
2. A distributed computing environment, comprising:
a plurality of central processing units;
a plurality of memory spaces;
a communication channel for communicating messages between the plurality of central processing units;
a first agent running in a first memory space;
a second agent running in a second memory space;
a first data structure for interprocess communication residing in the first memory space; and
a second data structure for interprocess communication residing in the second memory space,
wherein the first and second agents send and receive messages between the first and the second memory spaces and provide a standard select function interface to user processes.
3. A method in a computing environment having multiple CPUs and multiple memory spaces for facilitating communication between a process in a first memory space and a process in a second memory space, comprising:
creating a first agent process in the first memory space;
directing to the agent a request by a first process for creating an interprocess connection to a process in a second memory space;
creating a data structure in the first memory space for facilitating interprocess communication;
transmitting a message representing the request from the agent to the second memory space;
receiving the request at a second process in the second memory space;
creating a data structure in the second memory space for facilitating interprocess communication;
using the first and the second data structures to communicate data with processes in the respective memory spaces; and
using the agent and the second process to communicate data between the data structures.
4. The method according to claim 3 wherein the first process is unaware that it is running in a distributed memory space environment.
5. The method according to claim 3 wherein the process in the second memory space is a second agent.
6. The method according to claim 3 wherein the second process in the second memory space is a continuously running I/O process.
7. In a distributed computing environment, a computer readable medium embodying program code with instructions for facilitating communication between a process existing in a first memory space and a process existing in a second memory space, comprising:
instructions for creating a first agent process in the first memory space;
instructions for directing to the agent a request by a first process for creation of an interprocess connection to a process in a second memory space;
instructions for creating a data structure in the first memory space for facilitating interprocess communication;
instructions for transmitting a message representing the request from the agent to the second memory space;
instructions for receiving the request at a second process in the second memory space;
instructions for creating a data structure in the second memory space for facilitating interprocess communication;
instructions for using the first and the second data structures to communicate data with processes in the respective memory spaces; and
instructions for using the agent and the second process to communicate data between the data structures.
8. A distributed computing system for facilitating communication between a process existing in a first memory space and a process existing in a second memory space, comprising:
means for creating a first agent process in the first memory space;
means for directing to the agent a request by a first process for creation of an interprocess connection to a process in a second memory space;
means for creating a data structure in the first memory space for facilitating interprocess communication;
means for transmitting a message representing the request from the agent to the second memory space;
means for receiving the request at a second process in the second memory space;
means for creating a data structure in the second memory space for facilitating interprocess communication;
means for using the first and the second data structures to communicate data with processes in the respective memory spaces; and
means for using the agent and the second process to communicate data between the data structures.
9. A method for facilitating a system function call and interprocess communication in a distributed computer system environment in which two processes are instantiated, each in its own memory space that is associated with its operating system, and in which a first of the two processes calls a system function for establishing interprocess communication with the second of the two process, comprising:
instantiating an agent in each of the memory spaces, a first agent in the memory space of the first process and a second agent in the memory space of the second process;
receiving the system function call from the first process at its operating system;
prompting the first agent, in response to the system function call, to create a shadow socket in the memory space of the first process;
prompting the second agent, in response to a message from the first agent about the system function call, to create a real socket in the memory space of the second process, the real socket receiving data associated with the system function call;
transferring the data from the real socket to the shadow socket; and
prompting the first agent to wake-up the first process when the I/O data is available in the shadow socket, wherein the first socket is not aware that the second process is in a remote memory space.
10. A method as in claim 9, wherein the first and second processes are user and input/output (I/O) processes, respectively, such that the real socket receives I/O data as well as connection information including the I/O data destination at the first memory space.
11. A method as in claim 9, wherein the system function call is select( ).
12. A distributed computer system for facilitating a system function call and interprocess communication in which two processes are instantiated, each in its own memory space that is associated with its operating system and in which a first of the two processes is configured to call a system function for establishing interprocess communication with the second of the two process, comprising:
means for instantiating an agent in each of the memory spaces, a first agent in the memory space of the first process and a second agent in the memory space of the second process;
means for receiving the system function call from the first process at its operating system;
means for prompting the first agent, in response to the system function call, to create a shadow socket in the memory space of the first process;
means for prompting the second agent, in response to a message from the first agent about the system function call, to create a real socket in the memory space of the second process, the socket receiving data associated with the system function call;
means for transferring the data from the real socket to the shadow socket; and
means for prompting the first agent to wake-up the first process when the l/O data is available in the shadow socket, wherein the first socket is not aware that the second process is in a remote memory space.
US10/120,606 1996-08-21 2002-04-10 Method and system for supporting a system call and interprocess communication in a fault-tolerant,scalable distributed computer environment Abandoned US20020112089A1 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
US10/120,606 US20020112089A1 (en) 1996-08-21 2002-04-10 Method and system for supporting a system call and interprocess communication in a fault-tolerant,scalable distributed computer environment

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US2479696P 1996-08-21 1996-08-21
US08/835,398 US6470398B1 (en) 1996-08-21 1997-04-07 Method and apparatus for supporting a select () system call and interprocess communication in a fault-tolerant, scalable distributed computer environment
US10/120,606 US20020112089A1 (en) 1996-08-21 2002-04-10 Method and system for supporting a system call and interprocess communication in a fault-tolerant,scalable distributed computer environment

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
US08/835,398 Division US6470398B1 (en) 1996-08-21 1997-04-07 Method and apparatus for supporting a select () system call and interprocess communication in a fault-tolerant, scalable distributed computer environment

Publications (1)

Publication Number Publication Date
US20020112089A1 true US20020112089A1 (en) 2002-08-15

Family

ID=26698880

Family Applications (2)

Application Number Title Priority Date Filing Date
US08/835,398 Expired - Fee Related US6470398B1 (en) 1996-08-21 1997-04-07 Method and apparatus for supporting a select () system call and interprocess communication in a fault-tolerant, scalable distributed computer environment
US10/120,606 Abandoned US20020112089A1 (en) 1996-08-21 2002-04-10 Method and system for supporting a system call and interprocess communication in a fault-tolerant,scalable distributed computer environment

Family Applications Before (1)

Application Number Title Priority Date Filing Date
US08/835,398 Expired - Fee Related US6470398B1 (en) 1996-08-21 1997-04-07 Method and apparatus for supporting a select () system call and interprocess communication in a fault-tolerant, scalable distributed computer environment

Country Status (4)

Country Link
US (2) US6470398B1 (en)
EP (1) EP0920662A1 (en)
JP (1) JP2001527665A (en)
WO (1) WO1998008164A1 (en)

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030005026A1 (en) * 2001-07-02 2003-01-02 International Business Machines Corporation Method of launching low-priority tasks
US20070113266A1 (en) * 2005-11-12 2007-05-17 Ross Alan D Operating system independent data management
US20080072278A1 (en) * 2006-09-19 2008-03-20 Searete Llc, A Limited Liability Corporation Of The State Of Delaware Evaluation systems and methods for coordinating software agents
US20080072277A1 (en) * 2006-09-19 2008-03-20 Searete Llc, A Limited Liability Corporation Of The State Of Delaware Evaluation systems and methods for coordinating software agents
US20080072241A1 (en) * 2006-09-19 2008-03-20 Searete Llc, A Limited Liability Corporation Of The State Of Delaware Evaluation systems and methods for coordinating software agents
US20080127293A1 (en) * 2006-09-19 2008-05-29 Searete LLC, a liability corporation of the State of Delaware Evaluation systems and methods for coordinating software agents
US20120005379A1 (en) * 2010-06-30 2012-01-05 Emc Corporation Data access during data recovery
US20140095874A1 (en) * 2012-10-01 2014-04-03 Salesforce.Com, Inc. Method and system for secured inter-application communication in mobile devices
US9235585B1 (en) 2010-06-30 2016-01-12 Emc Corporation Dynamic prioritized recovery
US9367561B1 (en) 2010-06-30 2016-06-14 Emc Corporation Prioritized backup segmenting
EP1705829B2 (en) 2003-12-05 2016-09-28 ZTE Corporation System for realizing softswitch allopatric disaster recovery based on packet network
US10025734B1 (en) * 2010-06-29 2018-07-17 EMC IP Holding Company LLC Managing I/O operations based on application awareness
CN114979305A (en) * 2022-06-30 2022-08-30 京东方科技集团股份有限公司 Communication method, device, equipment, storage medium and program product

Families Citing this family (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0967545A1 (en) * 1998-06-23 1999-12-29 BRITISH TELECOMMUNICATIONS public limited company A system and method for the co-ordination and control of information supply using a distributed multi-agent platform
US20060034275A1 (en) 2000-05-03 2006-02-16 At&T Laboratories-Cambridge Ltd. Data transfer, synchronising applications, and low latency networks
US6976258B1 (en) 1999-11-30 2005-12-13 Ensim Corporation Providing quality of service guarantees to virtual hosts
US6754716B1 (en) 2000-02-11 2004-06-22 Ensim Corporation Restricting communication between network devices on a common network
US7343421B1 (en) 2000-02-14 2008-03-11 Digital Asset Enterprises Llc Restricting communication of selected processes to a set of specific network addresses
US6948003B1 (en) 2000-03-15 2005-09-20 Ensim Corporation Enabling a service provider to provide intranet services
US6985937B1 (en) 2000-05-11 2006-01-10 Ensim Corporation Dynamically modifying the resources of a virtual server
US6907421B1 (en) 2000-05-16 2005-06-14 Ensim Corporation Regulating file access rates according to file type
US6909691B1 (en) 2000-08-07 2005-06-21 Ensim Corporation Fairly partitioning resources while limiting the maximum fair share
US6732211B1 (en) * 2000-09-18 2004-05-04 Ensim Corporation Intercepting I/O multiplexing operations involving cross-domain file descriptor sets
US6854119B1 (en) * 2000-09-29 2005-02-08 International Business Machines Corporation Method, apparatus and article of manufacture for tracking processes
DE10051147B4 (en) * 2000-10-16 2005-04-14 Siemens Ag Method for accessing and working in an IP network
US7219354B1 (en) 2000-12-22 2007-05-15 Ensim Corporation Virtualizing super-user privileges for multiple virtual processes
CA2383825A1 (en) * 2002-04-24 2003-10-24 Ibm Canada Limited-Ibm Canada Limitee Dynamic configuration and self-tuning of inter-nodal communication resources in a database management system
US20040139447A1 (en) * 2003-01-14 2004-07-15 Hope Clifford C. Message suppression in an event management system
CA2416355A1 (en) * 2003-01-14 2004-07-14 Cognos Incorporated Iterative escalation in an event management system
CA2416337A1 (en) * 2003-01-14 2004-07-14 Cognos Incorporated Contextual drill through in an event management system
US20040139444A1 (en) * 2003-01-14 2004-07-15 Hope Clifford C. Notification service in an event management system
US20040138931A1 (en) * 2003-01-14 2004-07-15 Hope Clifford C. Trend detection in an event management system
CA2416400A1 (en) * 2003-01-14 2004-07-14 Cognos Incorporated Event management system and method
CA2416352A1 (en) * 2003-01-14 2004-07-14 Cognos Incorporated Autonomous dynamic behavior modification in an event management system
US8230445B2 (en) * 2003-01-14 2012-07-24 International Business Machines Corporation Event management method and system
US20040139452A1 (en) * 2003-01-14 2004-07-15 Hope Clifford C. Dynamic recipients in an event management system
US7096391B2 (en) * 2003-04-29 2006-08-22 Hewlett-Packard Development Company, L.P. Error message suppression system and method
KR100548154B1 (en) * 2003-06-11 2006-01-31 (주)엔텔스 Method and apparatus for packet transmission control and packet charging data generation in wired and wireless communication networks
US7454758B2 (en) 2004-02-05 2008-11-18 Aol Llc, A Delaware Limited Liability Company Inter-process communication on a computer
US20060200278A1 (en) * 2005-03-02 2006-09-07 Honeywell International Inc. Generic software fault mitigation
US7934218B2 (en) * 2006-03-30 2011-04-26 International Business Machines Corporation Interprocess communication management using a socket layer
US8141102B2 (en) * 2008-09-04 2012-03-20 International Business Machines Corporation Data processing in a hybrid computing environment

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5537417A (en) * 1993-01-29 1996-07-16 International Business Machines Corporation Kernel socket structure for concurrent multiple protocol access
US5867661A (en) * 1996-02-15 1999-02-02 International Business Machines Corporation Method and apparatus of using virtual sockets for reducing data transmitted over a wireless communication link between a client web browser and a host web server using a standard TCP protocol
US5918018A (en) * 1996-02-09 1999-06-29 Secure Computing Corporation System and method for achieving network separation
US6157959A (en) * 1997-07-03 2000-12-05 Tandem Computers, Incorporated Method and apparatus for providing portable kernel-mode support for fast interprocess communication
US6282581B1 (en) * 1997-03-27 2001-08-28 Hewlett-Packard Company Mechanism for resource allocation and for dispatching incoming calls in a distributed object environment
US6567861B1 (en) * 1997-09-17 2003-05-20 International Business Machines Corporation Method and apparatus for remotely running objects using data streams and/or complex parameters

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4924384A (en) 1988-09-21 1990-05-08 International Business Machines Corporation Method for controlling the peer-to-peer processing of a distributed application across a synchronous request/response interface using push-down stack automata
US5142622A (en) * 1989-01-31 1992-08-25 International Business Machines Corporation System for interconnecting applications across different networks of data processing systems by mapping protocols across different network domains
JPH0689269A (en) * 1991-02-13 1994-03-29 Hewlett Packard Co <Hp> Processor control device, processor pausing device and method thereof
IL97894A0 (en) 1991-04-17 1992-06-21 Ibm Multi-processor computer system
US5590181A (en) * 1993-10-15 1996-12-31 Link Usa Corporation Call-processing system and method
CA2118169A1 (en) * 1993-10-27 1995-04-28 Michael R.C. Seaman Event architecture for system management in an operating system
US5606705A (en) * 1994-04-15 1997-02-25 Honeywell Inc. Communication coordinator for messages to be sent from at least one data source to a plurality of clients
US5706516A (en) * 1995-01-23 1998-01-06 International Business Machines Corporation System for communicating messages among agent processes
US5721825A (en) * 1996-03-15 1998-02-24 Netvision, Inc. System and method for global event notification and delivery in a distributed computing environment
US6237035B1 (en) * 1997-12-18 2001-05-22 International Business Machines Corporation System and method for preventing duplicate transactions in an internet browser/internet server environment

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5537417A (en) * 1993-01-29 1996-07-16 International Business Machines Corporation Kernel socket structure for concurrent multiple protocol access
US5918018A (en) * 1996-02-09 1999-06-29 Secure Computing Corporation System and method for achieving network separation
US5867661A (en) * 1996-02-15 1999-02-02 International Business Machines Corporation Method and apparatus of using virtual sockets for reducing data transmitted over a wireless communication link between a client web browser and a host web server using a standard TCP protocol
US6282581B1 (en) * 1997-03-27 2001-08-28 Hewlett-Packard Company Mechanism for resource allocation and for dispatching incoming calls in a distributed object environment
US6157959A (en) * 1997-07-03 2000-12-05 Tandem Computers, Incorporated Method and apparatus for providing portable kernel-mode support for fast interprocess communication
US6567861B1 (en) * 1997-09-17 2003-05-20 International Business Machines Corporation Method and apparatus for remotely running objects using data streams and/or complex parameters

Cited By (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030005026A1 (en) * 2001-07-02 2003-01-02 International Business Machines Corporation Method of launching low-priority tasks
US8327369B2 (en) 2001-07-02 2012-12-04 International Business Machines Corporation Launching low-priority tasks
US7356820B2 (en) * 2001-07-02 2008-04-08 International Business Machines Corporation Method of launching low-priority tasks
US8245231B2 (en) 2001-07-02 2012-08-14 International Business Machines Corporation Method of launching low-priority tasks
US20080141257A1 (en) * 2001-07-02 2008-06-12 International Business Machines Corporation Method of Launching Low-Priority Tasks
US20080235694A1 (en) * 2001-07-02 2008-09-25 International Business Machines Corporation Method of Launching Low-Priority Tasks
EP1705829B2 (en) 2003-12-05 2016-09-28 ZTE Corporation System for realizing softswitch allopatric disaster recovery based on packet network
US7565685B2 (en) * 2005-11-12 2009-07-21 Intel Corporation Operating system independent data management
US20070113266A1 (en) * 2005-11-12 2007-05-17 Ross Alan D Operating system independent data management
US8627402B2 (en) * 2006-09-19 2014-01-07 The Invention Science Fund I, Llc Evaluation systems and methods for coordinating software agents
US20080127293A1 (en) * 2006-09-19 2008-05-29 Searete LLC, a liability corporation of the State of Delaware Evaluation systems and methods for coordinating software agents
US20080072241A1 (en) * 2006-09-19 2008-03-20 Searete Llc, A Limited Liability Corporation Of The State Of Delaware Evaluation systems and methods for coordinating software agents
US8601530B2 (en) 2006-09-19 2013-12-03 The Invention Science Fund I, Llc Evaluation systems and methods for coordinating software agents
US8607336B2 (en) 2006-09-19 2013-12-10 The Invention Science Fund I, Llc Evaluation systems and methods for coordinating software agents
US20080072277A1 (en) * 2006-09-19 2008-03-20 Searete Llc, A Limited Liability Corporation Of The State Of Delaware Evaluation systems and methods for coordinating software agents
US20080072278A1 (en) * 2006-09-19 2008-03-20 Searete Llc, A Limited Liability Corporation Of The State Of Delaware Evaluation systems and methods for coordinating software agents
US8984579B2 (en) 2006-09-19 2015-03-17 The Innovation Science Fund I, LLC Evaluation systems and methods for coordinating software agents
US9178911B2 (en) 2006-09-19 2015-11-03 Invention Science Fund I, Llc Evaluation systems and methods for coordinating software agents
US9680699B2 (en) 2006-09-19 2017-06-13 Invention Science Fund I, Llc Evaluation systems and methods for coordinating software agents
US10025734B1 (en) * 2010-06-29 2018-07-17 EMC IP Holding Company LLC Managing I/O operations based on application awareness
US9697086B2 (en) * 2010-06-30 2017-07-04 EMC IP Holding Company LLC Data access during data recovery
US9367561B1 (en) 2010-06-30 2016-06-14 Emc Corporation Prioritized backup segmenting
US9235585B1 (en) 2010-06-30 2016-01-12 Emc Corporation Dynamic prioritized recovery
US20120005379A1 (en) * 2010-06-30 2012-01-05 Emc Corporation Data access during data recovery
US10055298B2 (en) 2010-06-30 2018-08-21 EMC IP Holding Company LLC Data access during data recovery
US10922184B2 (en) 2010-06-30 2021-02-16 EMC IP Holding Company LLC Data access during data recovery
US11294770B2 (en) 2010-06-30 2022-04-05 EMC IP Holding Company LLC Dynamic prioritized recovery
US11403187B2 (en) 2010-06-30 2022-08-02 EMC IP Holding Company LLC Prioritized backup segmenting
US9442778B2 (en) * 2012-10-01 2016-09-13 Salesforce.Com, Inc. Method and system for secured inter-application communication in mobile devices
US20140095874A1 (en) * 2012-10-01 2014-04-03 Salesforce.Com, Inc. Method and system for secured inter-application communication in mobile devices
US10148640B2 (en) 2012-10-01 2018-12-04 Salesforce.Com, Inc. Secured inter-application communication in mobile devices
CN114979305A (en) * 2022-06-30 2022-08-30 京东方科技集团股份有限公司 Communication method, device, equipment, storage medium and program product

Also Published As

Publication number Publication date
US6470398B1 (en) 2002-10-22
EP0920662A1 (en) 1999-06-09
JP2001527665A (en) 2001-12-25
WO1998008164A1 (en) 1998-02-26

Similar Documents

Publication Publication Date Title
US6470398B1 (en) Method and apparatus for supporting a select () system call and interprocess communication in a fault-tolerant, scalable distributed computer environment
US5566337A (en) Method and apparatus for distributing events in an operating system
Gaspar et al. DIM, a portable, light weight package for information publishing, data transfer and inter-process communication
US8091092B2 (en) Locally providing globally consistent information to communications layers
US5396630A (en) Method and system for object management across process boundries in a data processing system
US7246167B2 (en) Communication multiplexor using listener process to detect newly active client connections and passes to dispatcher processes for handling the connections
US6868442B1 (en) Methods and apparatus for processing administrative requests of a distributed network application executing in a clustered computing environment
JP3837291B2 (en) Application independent messaging system
US6405262B1 (en) Efficient inter-process object and interface pinging
US8195757B2 (en) Method, apparatus and computer program for controlling retention of publications
US6868544B2 (en) Method and system for general-purpose interactive notifications
US20040068479A1 (en) Exploiting asynchronous access to database operations
US6557046B1 (en) Method and system for providing an event system infrastructure
US6415332B1 (en) Method for handling of asynchronous message packet in a multi-node threaded computing environment
JPH10124470A (en) Mechanism for calling processing of multiplexed message with small overhead of low context switching
JPH05204673A (en) Method and process of communication between process using named pipe
US20070233876A1 (en) Interprocess communication management using a socket layer
JPH05508037A (en) Apparatus and method for realizing data communication between a terminal device and a user program
US6385659B1 (en) Handling of asynchronous message packet in a multi-node threaded computing environment
US7275250B1 (en) Method and apparatus for correlating events
CN111309501A (en) High availability distributed queues
US20090141635A1 (en) Using status inquiry and status response messages to exchange management information
US7331050B2 (en) System and method for communicating information between application programs
US20100250684A1 (en) High availability method and apparatus for shared resources
CN115914330B (en) Heterogeneous inter-application communication method based on NIO asynchronous thread model

Legal Events

Date Code Title Description
AS Assignment

Owner name: COMPAQ COMPUTER CORPORATION, TEXAS

Free format text: MERGER;ASSIGNOR:TANDEM COMPUTERS INCORPORATED;REEL/FRAME:012797/0940

Effective date: 19981222

Owner name: COMPAQ INFORMATION TECHNOLOGIES GROUP, L.P., TEXAS

Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:COMPAQ COMPUTER CORPORATION;REEL/FRAME:012797/0969

Effective date: 20010620

AS Assignment

Owner name: HEWLETT-PACKARD DEVELOPMENT COMPANY, L.P., TEXAS

Free format text: CHANGE OF NAME;ASSIGNOR:COMPAQ INFORMATION TECHNOLOGIES GROUP LP;REEL/FRAME:014628/0103

Effective date: 20021001

STCB Information on status: application discontinuation

Free format text: ABANDONED -- FAILURE TO RESPOND TO AN OFFICE ACTION