A method facilitates providing appropriate quality of service guarantees to a plurality of virtual hosts on a single physical host computer. A server application program and its child processes service communication requests made to the plurality of virtual hosts. quality of service parameters associated with the virtual hosts are stored. communication requests made to a specific one of the virtual hosts are detected. The quality of service parameters associated with the specific virtual host are obtained. operating system resources are utilized to guarantee, to a child process of the server application program, a quality of service according to the obtained quality of service parameters associated with the virtual host. communication between the virtual host and the client is allowed to proceed, the communication being managed by the child process.
|
0. 19. A system for providing a quality of service guarantee to a child process of an application program, wherein the application program and its child process service requests made to multiple network addresses, a network address indicating a virtual host, the virtual host comprising a virtualized server application program, the system comprising:
a processor;
a storing component that stores a quality of service parameter associated with a network address;
a component that intercepts a system call, made by the child process, that establishes a communication channel between a client and the network address, wherein intercepting the system call comprises:
a communication component that saves a copy of a first pointer that points to object code of the system call, replaces the first pointer with a second pointer that points to different object code such that making the system call causes the different object code to execute and enables communication between the network address and the client, the communication being managed by the child process;
wherein when the different object code executes, it uses the saved copy of the first pointer to transfer execution to the intercepted system call, thereby establishing a communication channel, determines that the established communication channel is to one of the multiple network addresses serviced by the application program and its child process, obtains a quality of service parameter associated with the network address, and utilizes an operating system resource to request a guarantee of a quality of service according to the obtained quality of service parameter.
1. A computer-implemented method for providing a quality of service guarantee to a child process of an application program, wherein the application program and its child process service requests made to a plurality of network addresses, a network address indicating a virtual host, a virtual host comprising a virtualized server application program the method comprising:
storing a quality of service parameter associated with a network address;
intercepting a system call, made by the child process, that establishes a communication channel between a client and the network address, wherein intercepting the system call comprises:
saving a copy of a first pointer, which points to object code of the system call; and
replacing the first pointer with a second pointer, which points to different object code, such that making the system call causes the different object code to execute; and
enabling communication between the network address and the client, the communication being managed by the child process;
wherein execution of the different object code comprises:
using the saved copy of the first pointer to transfer execution to the intercepted system call, thereby establishing a communication channel;
determining that the established communication channel is to one of the plurality of network addresses serviced by the application program and its child process;
obtaining a quality of service parameter associated with the network address; and
utilizing an operating system resource to request a guarantee, to the child process, of a quality of service according to the obtained quality of service parameter.
10. A computer-readable medium storing a computer program product for providing a quality of service guarantee to a child process of an application program, wherein the application program and its child process service requests made to a plurality of network addresses, a network address indicating a virtual host, a virtual host comprising a virtualized server application program, the computer program product comprising:
program code for storing a quality of service parameter associated with a network address;
program code for intercepting a system call, made by the child process, that establishes a communication channel between a client and the network address, wherein the program code for intercepting the system call comprises:
program code for saving a copy of a first pointer, which points to object code of the system call; and
program code for replacing the first pointer with a second pointer, which points to different object code, such that making the system call causes the different object code to execute; and
program code for enabling communication between the network address and the client, the communication being managed by the child process;
wherein the different object code comprises:
program code for using the saved copy of the first pointer to transfer execution to the intercepted system call, thereby establishing a communication channel;
program code for determining that the established communication channel is to one of the plurality of network addresses serviced by the application program and its child process:
program code for obtaining a quality of service parameter associated with the network address; and
program code for utilizing an operating system resource to request a guarantee, to the child process, of a quality of service according to the obtained quality of service parameter.
2. A computer-implemented method for providing a quality of service guarantee to a child process of an application program, wherein the application program and its child process service requests made to a plurality of network addresses, a network address indicating a virtual host, a virtual host comprising a virtualized server application program, the method comprising:
storing a quality of service parameter associated with a network address;
intercepting a system call which establishes a communication channel between a client and the network address;
allowing establishment of the communication channel;
storing an indicator of an association between an application program that made the intercepted system call, the established communication channel, and the network address;
intercepting a system call which creates a child process;
allowing creation of the child process;
storing an indicator of an association between an application program that made the intercepted system call and the created child process;
intercepting a system call which creates a copy of a file descriptor;
allowing creation of the copy of the file descriptor;
storing an indicator of an association between the file descriptor and the created copy of the file descriptor;
intercepting a system call which transports data through a communication channel;
determining, by examining the stored association indicators, that an application that made the intercepted system call is a child process of a parent application that established a communication channel to one the network address;
determining, by examining the stored association indicators, that the communication channel through which the intercepted system call transports data is the communication channel established by the parent application to the network address;
obtaining the quality of service parameter associated with the network address;
utilizing an operating system resource to request a guarantee, to the child process that called the intercepted system call, of a quality of service according to the obtained quality of service parameter associated with the network address; and
allowing data to be transported through the communication channel.
11. A computer-readable medium storing a computer program product for providing a quality of service guarantee to a child process of an application program, wherein the application program and its child process service requests made to a plurality of network addresses, a network address indicating a virtual host, a virtual host comprising a virtualized server application program, the computer program product comprising:
program code for storing a quality of service parameter associated with a network address;
program code for intercepting a system call which establishes a communication channel between a client and the network address;
program code for allowing establishment of the communication channel;
program code for storing an indicator of an association between the application program that made the intercepted system call, the established communication channel, and the network address;
program code for intercepting a system call which creates a child process;
program code for allowing creation of the child process;
program code for storing an indicator of an association between an application program that made the intercepted system call and the created child process;
program code for intercepting a system call which creates a copy of a file descriptor;
program code for allowing creation of the copy of the file descriptor;
program code for storing an indicator of an association between the file descriptor and the created copy of the file descriptor;
program code for intercepting a system call which transports data through a communication channel;
program code for determining, by examining the stored association indicators, that an application that called the intercepted system call is a child process of a parent application that established a communication channel to the network address;
program code for determining, by examining the stored association indicators that the communication channel through which the intercepted system call transports data is the communication channel established by the parent application to the network address;
program code for obtaining the quality of service parameter associated with the network address;
utilizing an operating system resource to request a guarantee to the child process that called the intercepted system call, of a quality of service according to the obtained quality of service parameter associated with the network address; and
program code for allowing data to be transported through the communication channel.
3. The method of
4. The method of
5. The method of
saving a copy of a first pointer, which points to object code of the system call to intercept; and
wherein intercepting the system call comprises replacing the first pointer with a second pointer, which points to different object code, such that making the system call causes the different object code to execute.
6. The method of
allowing establishment of the communication channel by using the saved copy of the first pointer to transfer execution to the intercepted system call; and
storing an association between the application program and the established communication channel by storing, in an association table, an entry indicating an association between a process identification number of the application program that made the system call, a file descriptor describing the established communication channel, and the network address to which the channel was established.
7. The method of
allowing creation of the child process by using the saved copy of the first pointer to transfer execution to the intercepted system call; and
storing an association between the application program that called the system call and the created child process by storing, in an association table, an entry indicating an association between a process identification number of the application program that made the system call and a process identification number of the created child process.
8. The method of
9. The method of
12. The computer-readable medium of
13. The computer-readable medium of
14. The computer-readable medium of
program code for saving a copy of a first pointer, which points to object code of the system call to intercept; and
wherein the program code for intercepting the system call comprises program code for replacing the first pointer with a second pointer which points to different object code, such that making the system call causes the different object code to execute.
15. The computer-readable medium of
program code for allowing establishment of the communication channel by using the saved copy of the first pointer to transfer execution to the intercepted system call; and
program code for storing an association between the application program and the established communication channel by storing in an association table an entry indicating an association between a process identification number of the application program that made the system call, a file descriptor describing the established communication channel, and the network address to which the channel was established.
16. The computer-readable medium of
program code for allowing creation of the child process by using the saved copy of the first pointer to transfer execution to the intercepted system call; and
program code for storing an association between the application program that called the system call and the created child process by storing, in an association table, an entry indicating an association between a process identification number of the application program that made the system call and a process identification number of the created child process.
17. The computer-readable medium of
18. The computer-readable medium of
0. 20. The system of
0. 21. The system of
0. 22. The system of
0. 23. The system of
0. 24. The system of
0. 25. The system of
|
This patent application is a reissue application for commonly assigned U.S. Pat. No. 6,976,258, issued from U.S. patent application Ser. No. 09/452,286, filed on Nov. 30, 1999, which is incorporated by reference herein in its entirety.
1. Field of Invention
The present invention relates generally to guaranteeing appropriate quality of service to virtual processes executing on multitasking operating systems, and specifically in one embodiment to guaranteeing quality of service to virtual hosts servicing client requests to multiple network addresses on a single physical host computer.
2. Background of Invention
With the popularity and success of the Internet, server technologies are of great commercial importance today. Typically, a server program executing on a single physical host computer services client requests made to a single network address allocated to the host. However, using Transmission Control Protocol (TCP) and other transport protocols, a server application executing on a single physical host can be programmed to process requests made to multiple network addresses. Such functionality is known as virtual hosting.
To enable virtual hosting, more than one network address is assigned to a single physical host computer. A server program executing on the host opens a communication transport channel (socket) and allows receipt of incoming communications targeted for any of the multiple network addresses assigned to the host. Accepting a communication request by a server executing TCP is a three step process that comprises waiting for the communication request from a client, sending an acknowledgment signal to the client, and receiving a return acknowledgment signal from the client. This three step process is called “three way handshaking” and is a feature of TCP communication. While accepting a communication request, a server is unable to execute other tasks. Thus, a server cannot wait for one incoming communication request and simultaneously service a separate communication request. However, multiple communication requests made to a plurality of network addresses associated with a single physical host require simultaneous service. For this reason, a virtual host server typically accepts the communications requests itself and creates child processes to service the requests.
Two known methods exist for utilizing child processes to service communication requests. The most common involves accepting the communication request by the server, and then generating (forking) a child process to service it. While the child process services the request made by the client and transmits it to the client, the server is free to accept the next communication request, perhaps from another client. As soon as the server accepts a request, the server generates a new child process, which services the request and then terminates. This method of virtual hosting, know as “fork after accept,” is widely used today.
Another method of virtual hosting comprises generating, by the server, a plurality of child processes. The number of child processes created reflects a desired maximum number of communication requests to service simultaneously. Each child process proceeds to accept a communication request. Thus, each child waits for an incoming communication computer, services it, and proceeds to wait for a next request. While a child process is servicing a request it cannot be waiting for another request, but this is allowable because other child processes are waiting for incoming requests. Where all the child processes are busy servicing requests, the maximum desired number of requests is being serviced, and no more can be accepted until one of the child processes finishes servicing a request and begins waiting for a new one. This method, called “fork before accept,” is known and used today, although less commonly than “fork after accept.”
Both virtual host systems that utilize the fork before accept method and those that utilize the fork after accept method can be name-based as well as address-based. As described above, in an address-based virtual host system, each virtual host is identified by a separate network address assigned to a single, physical host. In contrast, in a name-based virtual host system, each virtual host is identified not by a network address, but instead by a domain name. Multiple domain names can be assigned to a single address. Thus, multiple virtual hosts, each identified by a unique domain name, can all be assigned to a single network address. The single network address to which the multiple domain names are assigned is assigned to the single, physical host. Communication requests to a name-based virtual host are made to a domain name, not to a network address. As with address-based virtual host systems, all virtual hosts map to a single physical host.
A virtual host system simulates multiple hosts by servicing client requests made to any of the multiple network addresses or domain names. This is desirable, because providing a unique physical host for each network address or domain name is expensive and inefficient. Hosting services are often provided commercially by an Internet Service Provider (ISP). Without virtual hosting, an ISP would have to provide a separate physical host computer with a unique network address for every customer that purchases host services. Often, a customer purchasing host services from an ISP will neither require nor be amenable to paying for use on an entire host computer. Generally, only a fraction of the processing power, storage, and other resources of a host computer will be required to meet the needs of an individual customer.
Virtual hosting allows an ISP to utilize one physical host computer to provide commercial host services to multiple customers, thereby creating a virtual host server. Each and is provided with resources on the single, physical host computer, effectively sharing the host with other customers. A client computer requests data from a specific customer's host by targeting communication requests to the appropriate network address (or domain name). By utilizing the fork before accept method or the fork after accept method, the virtual host server can service requests to multiple network addresses or domain names. Thus, the functionality of numerous hosts is provided by a single physical host computer, servicing requests made to a plurality of network addresses and domain names by multiple customers.
One shortcoming with virtual hosting as it exists today is the inability to allocate appropriate amounts of computer resources of the physical host to servicing client requests made to specific virtual hosts, and hence to specific customers. Where an ISP provides host services to multiple customers on a single physical computer, it is desirable to allot to each virtual host a specific amount of computer resources appropriate to the needs of the customer, and preferably based upon the amount paid for the services. For example, suppose two customers purchase host services from an ISP. The first customer is a large corporation providing financial services to thousands of clients internationally. The financial services host requires a great deal of storage space, as well as prompt response time to all client requests. Of course, the first customer is willing to compensate the ISP appropriately for providing such a level of host services. The second customer is a sole proprietorship that sells floral arrangements locally. The second customer has a very limited budget, but only requires minimal computer resources. Clearly, it is desirable for the ISP to allocate different percentages of the system resources to the two separate virtual hosts provided by the ISP for the two separate customers. However, this is not possible with conventional virtual hosting techniques.
Multitasking operating systems such as UNIX facilitate specification of resource allocation to multiple concurrent processes. The operating system can be instructed as to how to allocate resources to different processes. System resources can be allocated to processes as a percentage of resources available (for example, the operating system may be instructed to allocate twenty percent of the central processing unit cycles to process A and two percent to process B), or as specific numbers of units (for example, the operating system may be instructed to allocate X cycles per second to process A and Y cycles per second to process B). Such specification of resource allocation is called a guarantee of quality of service.
A server, which is a process, executing on a dedicated physical host services client requests for a single network address (physical host) only. Thus, quality of service can simply be set for the server to the quality of service appropriate for the host. A virtual host server services numerous client requests for multiple virtual hosts. A single virtual host server provides host services for a plurality of customers all of whom may require different quality of service. Although it would be possible to set a single quality of service for the virtual host server, no single quality of service is appropriate for all of the virtual hosts. Because the appropriate quality of service for different virtual hosts is different, providing a single quality of service for all virtual hosts is undesirable. As detailed above, ISP's utilize single service application programs to provide virtual hosting services to multiple customers with varying business needs and budgets. It would be desirable for an ISP to be able to make appropriate quality of service guarantees to different customers purchasing virtual host services. However, conventional virtual host systems can provide only the same quality of service for all virtual hosts supported by the server. With existing virtual host systems, an ISP cannot provide one quality of service to the international financial services corporation of the example given above, and another to the local florist. The ISP either must provide each customer with the same quality of service, which is undesirable, or provide each customer with a separate physical host, which is inefficient and expensive for the ISP, as many customers do not require the resources of a dedicated host computer. What is needed is a virtual host system that provides appropriate quality of service guarantees for each virtual host.
Virtual host systems are being utilized today by ISP's and other providers of host services. As explained above, it would be desirable for existing ISP's providing virtual host systems to be able to provide appropriate quality of service guarantees to multiple virtual hosts. However, many such ISP's would not want to replace their existing virtual host system with one that could provide such guarantees, even if such a system were available. Upgrading a virtual host system is a time consuming and complicated process, often involving costly down time and high labor expenses. It would be desirable to have a system to allow existing users to provide appropriate quality of service guarantees to multiple virtual hosts, without having to upgrade or replace their existing virtual host systems.
The present invention allows providers of virtual host services to make appropriate quality of service guarantees to multiple virtual hosts. In one embodiment, the present invention executes as a virtual host quality of service application program on the same physical host computer as an existing virtual host server. The application program modifies the operating system of the host computer to include a quality of service table comprising appropriate quality of service parameters for all virtual hosts. Then, object code is inserted into the operating system. The object code comprises computer instructions to obtain quality of service parameters for a particular virtual host from the table, and to set the quality of service for the virtual host according to these parameters. Once the object code is inserted, system calls to the operating system pertaining to communications between one of the virtual hosts and a client are intercepted. The system calls are intercepted by replacing a pointer in an operating system function table with a pointer to the inserted object code, so that when a system call is made, the inserted object code is executed rather than the system call. The object code obtains quality of service parameters for the selected virtual host from the quality of service table, and the appropriate quality of service is guaranteed to the virtual host. Virtual host systems utilize child processes of a parent server application to manage communications between a virtual host and a client. Therefore, the inserted object code can guarantee the appropriate quality of service to the virtual host by setting the quality of service guarantees for the child process managing the communication between the virtual host and the client. After the quality of service guarantees are set, the communication between the virtual host and the client proceeds.
The present invention works for all types of virtual hosting systems, including both those that utilize the fork before accept method and those that utilize the fork after accept method. To set quality of service guarantees for a virtual host system utilizing the fork before accept method, system calls that establish a communication channel between a client and a select one of the virtual hosts are intercepted. These system calls are made by child processes of the server application. The present invention then guarantees quality of service appropriate for the virtual host to the child process that made the intercepted system call. Once the quality of service is guaranteed, the child process that made the system call manages the communication between the virtual host and the client.
Guaranteeing quality of service to virtual hosts of a system utilizing the fork after accept method is similarly facilitated. In a system utilizing the fork after accept method, a communication channel is established by the server application prior to generation of a child process to service a communication request. At the time a communication channel is established, it is unknown what child process will service that communication channel. Therefore, under these circumstances, the virtual host quality of service application program intercepts system calls, made by child processes, that transport data through already established communication channels. When such a system call is made, the virtual host quality of service program determines the virtual host to which the client is communicating via the channel. Appropriate quality of service is then guaranteed to the child process that made the intercepted system call. The child process then proceeds to manage communication between the virtual host and the client.
The present invention also guarantees appropriate quality of service to name-based virtual hosts. Clients make communication requests to name-based virtual hosts by passing a domain name to the virtual host server. The domain name is then stored in a communication buffer utilized for communications between the server and the client. The virtual host quality of service program intercepts system calls that transport data through communication channels. When such a system call is made, the communication buffer being used to transport data through the channel is parsed. By parsing the buffer, the domain name to which the client is communicating is isolated, and hence the virtual host associated with the communication is identified. Quality of service guarantees appropriate for the virtual host are then set for the child process that made the system call. That child process proceeds to manage the communication between the virtual host and the client.
In all of the above described embodiments, the present invention allows providers of virtual host services to make appropriate quality of service guarantees to multiple virtual hosts without upgrading or replacing existing virtual host systems.
In another embodiment, the present invention comprises a stand along virtual host system that sets appropriate quality of service guarantees for all virtual hosts. In such an embodiment, the present invention is in the form of a server application program. Unlike other embodiments of the present invention, in order to utilize this embodiment providers of virtual host services must upgrade their virtual host system.
In this embodiment, the virtual host server program stores in computer memory a table including appropriate quality of service guarantees. The server program then receives all client requests for communication with virtual hosts. When utilizing the fork after accept method, the server first receives a client request to communicate with a virtual host, and then creates a child process to manage communication between the virtual host and the client. Next, the server obtains the quality of service parameters associated with the virtual host, and guarantees, to the child process, the quality of service appropriate for the virtual host.
When utilizing the fork before accept method, the server first creates, a plurality of child processes to manage communication requests made to virtual hosts by clients. When the server receives a communication request made to a select one of the virtual hosts by a client, the server obtains the quality of service parameters associated with the virtual host, and guarantees the associated quality of service to the child process that will manage the communication.
As here summarized, the present invention makes appropriate quality of service guarantees to a plurality of virtual hosts comprising a single server application program. Of course, the present invention can also be utilized to make appropriate quality of service guarantees to a plurality of virtual processes of any nature comprising a single application program.
Client computers 111 send requests 113 to a plurality of virtual hosts 115 which are supported by the server 107. All such requests are received by the server application program 107 and are processed by the child processes 109. For purposes of example,
A virtual host quality of service application program 117 executes in the computer memory 103 of the physical host computer 101. The virtual host quality of service application program 117 inserts a quality of service parameter table 119 and object code 121 into the operating system 105 in the computer memory 103. Additionally, the virtual host quality of service application program 117 inserts, into the interrupt vector table 123 of the operating system 105, a pointer 125 to the object code 121. The object code 121 reads the quality of service parameter table 119, and calls the quality of service manager 127 of the operating system 105 to set appropriate quality of service guarantees for the virtual hosts 115 serviced by the virtual host server application program 107. The virtual hosts 115 then transmit responses 129 to the client computers 111. The features and functionality depicted in
I. Virtual Host Systems Utilizing the Fork Before Accept Method
A virtual host server 107 that utilizes the fork before accept virtual hosting method generates a plurality of child processes 109, each of which waits for an incoming communication request 113. When a child process 109 receives a request 113, the child process 109 establishes a communication channel between itself and the requesting client 111. The child process 109 proceeds to use the communication channel to service the request 113 that was made by the client 111 to the network address 201.
During the time that the child process 109 services the communication request 113 to the specific network address 201, it is desirable for the child process 109 to be guaranteed a specific quality of service according to parameters for the virtual host 115 with which the network address 201 is associated. For this reason, the present invention detects when a child process 109 is accepting a communication request 113, and sets quality of service guarantees for the child process 109 based on parameters for the network address 201 to which the request 113 is directed. When the child process 109 finishes a communication session initiated by a request 113 to a specific network address 201, the child process 109 closes the established communication channel and waits for another incoming request 113. The next request 113 the child process 109 receives may be directed to a different network address 201 and hence may require that different quality of service parameters be set for the child process 109. Therefore, the present invention detects when the child process 109 establishes a communication channel to service the new request 113 and proceeds to request appropriate quality of service guarantees for the target network address 201.
In the embodiment of the present invention depicted in
The quality of service program 117 also inserts object code 121 into the operating system 105. Preferably, the object code is dynamically linked to the operating system kernel as a module. The contents and execution of the object code 121 are discussed in detail below. In an alternative embodiment, the object code 121 resides outside of the operating system 105 in computer memory 103. The quality of service program 117 makes a copy 203 of an internal operating system pointer to the operating system function that is called to establish a communication channel. In an alternative embodiment, the copy 203 is made by a module linked to the operating system kernel. In the UNIX operating system, this function is the operating system accept function 205, as pictured in FIG. 2. The copy 203 of the pointer to the system accept function 205 is stored in conventional computer memory 103. In another embodiment, the copy 203 of the pointer is stored in the operating system 105.
It is to be understood that the name of the system function that is called to establish a communication channel can vary from operating system to operating system. The present invention is not limited to any specific operating system, or to any specific operating system function name. Furthermore, some operating systems include more than one function that establishes a communication channel. Embodiments of the present invention targeted for such operating systems create copies 203 of the pointers to all such operating system functions.
The pointer to the system accept function 205 is located in the operating system 105 interrupt vector table 123. It is to be understood that the term “interrupt vector table” as used herein denotes an area in operating system memory in which are stored the addresses of operating system functions (system calls). In the UNIX operating system, this part of the operating system is called the “interrupt vector table,” and that term is used in this specification. Other operating systems employ different terminology to denote the same system component. An interrupt vector table by any other name is still within the scope of the present invention.
The quality of service program 117 replaces the pointer to the system accept function 205 with a pointer 125 to the inserted object code 121, such that when the system accept function 205 is called, the inserted object code 121 is executed instead. In another embodiment, this pointer replacement is executed by a module linked to the operating system 105 kernel. Executing alternative code when a system call is made comprises intercepting the system call. The steps of inserting object code 121 into the operating system 105, making a copy 203 of an operating system pointer, and replacing the operating system pointer with a pointer 125 to the inserted object code facilitate interception of a system call.
When a call is made to the system accept function 205, the operating system 105 uses the pointer 125 in the interrupt vector table 123 to execute the object code 121. The object code 121 first utilizes the saved copy 203 of the pointer to the system accept function 205 to call the system accept function 205. The system accept function 205 executes, thereby establishing the communication channel. When the accept function 205 terminates, the object code 121 continues to execute. The object code 121 determines if the communication channel that was established is to one of the network addresses 201 associated with one of the virtual hosts 115 serviced by the server program 107. Preferably, this determination is made by reading an operating system variable 207 that identifies the network address 201 associated with the communication channel. In UNIX, this system variable 207 is called “local_name,” and is set by the accept function 205. In other operating systems the variable 207 is denoted by a different name. Alternative embodiments of the present invention utilize other methods to determine the network address 201 to which the communication channel was established, for example reading a return value of a system function, polling a system communication manager, or other similar mechanisms as desired.
Where the communication channel that was established is not to one of the network addresses 201 associated with one of the virtual hosts 115, the object code 121 simply exits. The channel will not be used for communication to a virtual host 115, and thus no quality of service guarantees need to be made by the present invention. Where the communication channel is to one of the network addresses 201 associated with one of the virtual hosts 115, the object code 121 requests, from the operating system 105, an appropriate quality of service guarantee for the process that called the system accept function 205.
To set the quality of service guarantees, the object code 121 reads the quality of service table 119, and locates the quality of service parameters for the virtual host 115 associated with the network address 201 to which the communication channel was established. The object code 121 then calls the operating system quality of service manager 127 to request an appropriate quality of service guarantee to the child process 109 that called the system accept function 205. The appropriate quality of service to guarantee is that specified by the quality of service parameters for the virtual host 115 to which the communication channel has been established. Once the quality of service guarantee has been requested, the object code 121 exits, and the child process 109 sends a response 129 to the client 111 via the established communication channel. Communication between the client 111 and the virtual host 115 proceeds over the communication channel. The communication is managed by the child process 109, which has been guaranteed appropriate quality of service.
II. Virtual Host Systems Utilizing the Fork After Accept Method
In the embodiment of the present invention depicted in
The quality of service program 117 makes copies 203 of multiple internal operating system pointers to operating system functions. In an alternative embodiment, the copies 203 are made by a module linked to the operating system kernel. The present invention makes copies 203 of the pointers to the following operating system functions: system functions to establish a communication channel (for example, the UNIX accept function) 205, system functions to generate a child process (for example, the UNIX fork function) 301, system functions to copy a file or a file descriptor (for example, the UNIX dup and dup2 functions), and system functions to read data from a file (for example, the UNIX read function). The copies 203 of the pointers to the system functions are preferably stored in conventional computer memory 103. Alternatively, the copies 203 are stored in the operating system 105.
It is to be understood that the names of the relevant system functions can vary from operating system to operating system. The present invention is not limited to any specific operating system, or to any specific operating system function names. Furthermore, some operating systems include more than one function which performs the above described functionality. Embodiments of the present invention targeted for such operating systems create copies 203 of the pointers to the appropriate operating system functions. For purposes of example, this specification refers to the system accept function 205, the system fork function 301, the system dup function 303, and the system read function 305, as depicted in FIG. 3. It is to be understood that references to the system accept function 205 apply to all system functions to establish a communication channel, references to the system fork function 301 apply to all system functions to generate a child process, references to the system dup function 303 apply to all system functions to copy a file or to copy a file descriptor, and references to the system read function 305 apply to all system functions to read data from a file or to read data from a communication channel.
The pointers to the above listed system functions are located in the operating system 105 interrupt vector table 123. The quality of service program 117 replaces the pointers with pointers 125 to inserted object code 121, such that when a targeted system function is called, inserted object code 121 is executed instead. In an alternative embodiment, the replacement is executed by a module linked to the operating system kernel. The embodiment of the present invention depicted in
When a call is made to an intercepted function 205, inserted object code 121 executes. This inserted object code 121 is called as a wrapper. For example, the accept wrapper is the inserted object code 121 that executes when the system accept function 205 is called.
Returning to
Where the communication channel that was established is not to one of the network addresses 201 associated with one of the virtual hosts 115, the accept wrapper 417 exits. The channel will not be used for communication to a virtual host 115, and thus no quality of service guarantees need to be made by the present invention. Where the communication channel is to one of the network addresses 201 associated with one of the virtual hosts 115, the present invention requests an appropriate quality of service guarantee for the child process 109 that will manage the communication. Because the child process 109 has not yet been generated by the server application 107, the present invention stores select information in a set of association tables 307. The information stored will allow the present invention to later identify the child process 109 managing the communication, and set appropriate quality of service for that child process 109. Preferably, the association tables 307 reside in conventional computer memory 103. In alternative embodiments, the association tables are inserted into the operating system 105.
Returning to
The present invention stores, in the application program-communication channel association table 425, the process identifier, the file descriptor (or alternatively other identifier) associated with the communication channel, and the network address 201 to which the communication channel was established. Thus, the application program-communication channel association table 425 contains, for each communication channel established to one of the network addresses 201 associated with one of the virtual hosts 115, a record that a specific process established a specific communication channel between a client 111 and a specific network address 201. Once these associations are stored, the accept wrapper 417 exits.
Recall that a virtual host server 107 that utilizes the fork after accept method will, after establishing a communication channel between a client 111 and a virtual host 115, generate a child process 109 to manage the communication. Whenever any application generates a child process 109, the fork wrapper 419 executes. The fork wrapper 419 first uses the copy of the pointer 403 to the system fork function 301 to call the system fork function 301. The system fork function 301 executes and generates a child process 109. When the system fork function 301 exits, the fork wrapper 419 continues to execute. The fork wrapper 419 stores, in the application program-child process association table 427, the process identification (or alternative identifier) for the application program that called the system fork function 301, as well as the process identification (or alternative identifier) for the generated child process 109. Thus, the application program-child process association table 427 contains associations between all application programs and all child processes 109 thereof.
Whenever any process copies a file, or a descriptor of a file, the dup wrapper 421 executes. The dup wrapper 421 utilizes the copy of the pointer 413 to the system dup function 303 to execute the system dup function 303. The system dup function 303 executes and creates a copy of a file (or a copy of a file descriptor). When the system dup function 303 exits, the dup wrapper 421 continues to execute. The dup wrapper 421 stores, in the file descriptor-file descriptor copy association table 429, the association between the file descriptor of the file copied by the system dup function 303 and the file descriptor of the copy thereof. Where only a file descriptor was copied by the system dup function 303, the dup wrapper 421 stores the association between the source file descriptor and the copy of the source file descriptor. Thus, for every copied file descriptor, the file descriptor-file descriptor copy association table 429 contains an association between the original file descriptor and the copy thereof.
Whenever a process calls the system read function 305, the read wrapper 423 executes. The read wrapper 423 checks the association tables 307 to determine whether the process that called the system read function 305 is a child process 109 of an application program that established a communication channel to a virtual host 115. To make this determination, the read wrapper 423 first checks the application program-child process association table 427 to determine if the process that called the system read function 305 is a child process 109 of another process. If the process that called the system read function 305 is a child process 109, the read wrapper 423 checks the application program-communication channel association table 425 to determine if the parent process established a communication channel to a network address 201 associated with one of the virtual hosts 115.
If the process that called the system read function 305 is a child process 109 of a parent process that established a communication channel to a virtual host 115, the read wrapper 423 determines if the child process 109 called the system read function 305 in order to read from the communication channel to the virtual host 115 established by the parent process. To make this determination, the read wrapper 423 compares the file descriptor that the system read function 305 was called to read from with the file descriptor, in the application program-communication channel association table 425, associated with the communication channel established by the parent process to the virtual host 115.
If the file descriptor of the read function 305 is not identical to the file descriptor associated with the communication channel, the read wrapper 423 checks the file descriptor-file descriptor copy association table 429 to determine whether the file descriptor is a copy of the file descriptor associated with the communication channel. Recall that the file descriptor-file descriptor copy association table 429 contains associations between all file descriptors and copies thereof. The read wrapper 423 examines the table to determine whether the file descriptor is a copy of another file descriptor, and if so whether the source file descriptor is the descriptor associated with the communication channel to the virtual host 115 established by the parent process.
If the file descriptor is the descriptor of the communication channel (or a copy thereof) the read wrapper 423 examines the application program communication channel association table 425 to determine to which network address 201 the communication channel was established by the server program 107.
If the process that called the system read function 305 is not a child process 109 of an application program that established a communication channel to a virtual host 115, or if the process is not reading from the communication channel to a virtual host 115 established by the parent process, the read wrapper 423 uses the copy of the pointer 415 to the system read function 305 to call the system read function 305, which proceeds to execute. If, on the other hand, the process that called the system read function 305 is a child process 109 of an application program that established a communication channel to a virtual host 115, and the process is reading from the communication channel to a virtual host 115 established by the parent process, the read wrapper 423 proceeds to set appropriate quality of service guarantees for the child process 109.
To set the quality of service guarantees, the read wrapper 423 reads the quality of service table 119, and locates the quality of service parameters for the virtual host 115 associated with the network address 201 to which the communication channel was established. The read wrapper 423 then calls the quality of service manager 127 to request an appropriate quality of service guarantee to the child process 109 that called the system read function 305. Once the quality of service guarantee has been requested, the read wrapper 423 utilizes the copy of the pointer 415 to the system read function 305 to call the system read function 305. The system read function 305 proceeds to read data from the communication channel. Then, the child process 109, which has been guaranteed appropriate quality of service, continues to manage communication between the client 111 and the virtual host 115 over the communication channel.
It is to be understood that in various embodiments of the present invention, the quality of service application program 117 intercepts not only the system read function 305, but other system functions that transport data through a communication channel. For example, different embodiments intercept a system write function, a system transport function, and other such functions as desired. The present invention includes in its scope intercepting any system function which transports data through a communication channel, and proceeding to set quality of service parameters for a child process in the manner detailed above in the description of intercepting the system read function 305.
In the embodiment of the present invention depicted in
The quality of service program 117 makes copies 203 of multiple internal operating system pointers to operating system functions. The program 117 makes copies 203 of pointers to the following operating system functions: the system functions to read data from a file (for example, the UNIX read function) and the system functions to close a file (for example, the UNIX close function). The copies 203 of the pointers to the system functions are preferably stored in conventional computer memory 103. Alternatively, the copies 203 of the pointers are inserted into the operating system 105. As explained above, it is to be understood that alternative embodiments of the present invention create copies 203 of pointers to other operating system functions as desired.
The pointers to the above listed system functions are located in the operating system 105 interrupt vector table 123. The quality of service program 117 (or alternatively a module linked to the operating system kernel) replaces the pointers with pointers 125 to inserted object code 121, such that when a targeted system function is called, inserted object code 121 is executed instead. The embodiment of the present invention depicted in
When a call is made to an intercepted function 205, inserted object code 121 executes. As explained earlier in this specification, this inserted object code 121 is known as a wrapper.
Returning to
To so determine, the read wrapper 423 parses a read buffer 503 returned by the system read function 305. The read buffer 503 contains the name 505 of the file (or file equivalent, such as communication channel) from which the system read function 305 read data. The read wrapper 423 isolates this name 505 and compares it to the domain names 500 of the virtual hosts 115. If the name 505 is not a domain name 500 of a virtual host 115, the read wrapper 423 exits. The system read function 305 was not called to read data across a communication channel between a client 111 and virtual host 115, so the read wrapper 423 need not set quality of service for the process that called the read function 305. However, if the name 505 from the read buffer 503 is the domain name 500 of a virtual host 115, the read wrapper 423 must set quality of service guarantees for the process that called the read function 305.
To set the quality of service guarantees, the read wrapper 423 reads the quality of service table 119, and locates the quality of service parameters for the virtual host 115 associated with the name 505 from the read buffer 503. The read wrapper 423 then calls the quality of service manager 127 to request an appropriate quality of service guarantee to the process 109 that called the system read function 305. The read wrapper 423 then exits. The process 109 which called the system read function 305, which has been guaranteed appropriate quality of service, continues to manage communication between the client 111 and the virtual host 15 over the communication channel. It is to be understood that, as explained above, various embodiments of the present invention intercept various system calls that perform identical or similar tasks.
Whenever a process calls the system close function 507, the close wrapper 605 executes. The close wrapper 605 uses the copy of the pointer 603 to the system close function 507 to call the system close function 507. The system close function 507 executes and closes the file. When the system close function 507 terminates, the close wrapper 605 resumes execution. The close wrapper 605 checks the plurality of read flags 501 for a flag concerning the combination of the process that called the close function 507 and the file descriptor of the file that the process is attempting to close. If there is no read flag 501 for the combination, the close wrapper 605 simply exits. The combination is not one pertaining to virtual host 115 communication, and the close wrapper 605 need not adjust the read flags 501. On the other hand, if a read flag 501 exists for the combination, the close wrapper 605 modifies it to indicate that quality of service has not been set for the combination. This is useful because the process that called the close function 507 may later utilize the same file descriptor to manage communication between a client 111 and a different virtual host 115, requiring a different quality of service guarantee. Thus, it is useful that the read flag 501 indicates quality of service is not set.
When utilizing the fork after accept method, the server program 107 first receives a client 111 request 113 to communicate with a virtual host 115 and then creates a child process 109 to manage communication between the virtual host 115 and the client 109. Next, the server program 107 obtains the quality of service parameters associated with the virtual host 115 from the quality of service table 119. The server application program 107 then calls the operating system quality of service manager 127 to request an appropriate quality of service guarantee for the child process 109. The child process 109 proceeds to manage the communication between the client 111 and the virtual host 115.
When utilizing the fork before accept method, the server program 107 first creates a plurality of child processes 109 to manage communication requests 113 made to virtual hosts 115 by clients 111. When the server program 107 receives a communication request 113 made to a select one of the virtual hosts 115 by a client 111, the server program 107 obtains the quality of service parameters associated with the virtual host 115 from the quality of service table 119. The server program 107 then calls the operating system quality of service manager 127 to request an appropriate quality of service guarantee for the child process 109. The child process 109 proceeds to manage the communication between the client 111 and the virtual host 115.
It is to be understood that the present invention is not limited to guaranteeing appropriate quality of service to a plurality of virtual hosts. The present invention can be utilized to make appropriate quality of service guarantees to a plurality of virtual processes of any nature.
Goyal, Pawan, Sharma, Rosen, Keshav, Srinivasan, Huang, Xun Wilson
Patent | Priority | Assignee | Title |
RE44723, | May 16 2000 | DATACLOUD TECHNOLOGIES, LLC | Regulating file access rates according to file type |
Patent | Priority | Assignee | Title |
3377624, | |||
4177510, | Nov 30 1973 | Compagnie Internationale pour l'Informatique, CII Honeywell Bull | Protection of data in an information multiprocessing system by implementing a concept of rings to represent the different levels of privileges among processes |
5189667, | Mar 01 1990 | Kabushiki Kaisha Toshiba | Method and apparatus for controlling call processing based upon load conditions |
5212793, | Sep 04 1991 | International Business Machines Corporation | Generic initiators |
5226160, | Jul 18 1989 | Visage | Method of and system for interactive video-audio-computer open architecture operation |
5249290, | Feb 22 1991 | AT&T Bell Laboratories | Method of and apparatus for operating a client/server computer network |
5263147, | Mar 01 1991 | Hughes Training, Inc. | System for providing high security for personal computers and workstations |
5325530, | Jan 29 1993 | International Business Machines Corporation | Controller for sequential programming tools executed in a parallel computing environment |
5437032, | Nov 04 1993 | International Business Machines Corporation | Task scheduler for a miltiprocessor system |
5528753, | Jun 30 1994 | International Business Machines Corporation | System and method for enabling stripped object software monitoring in a computer system |
5572680, | Dec 18 1992 | Fujitsu Limited | Method and apparatus for processing and transferring data to processor and/or respective virtual processor corresponding to destination logical processor number |
5584023, | Dec 27 1993 | OMNISECURE, INC | Computer system including a transparent and secure file transform mechanism |
5603020, | Oct 08 1993 | Fujitsu Limited | Method for detecting file names by informing the task of the identification of the directory antecedent to the file |
5623492, | Mar 24 1995 | Qwest Communications International Inc | Methods and systems for managing bandwidth resources in a fast packet switching network |
5636371, | Jun 07 1995 | Bull HN Information Systems Inc.; BULL HN INFORMATION SYSTEMS INC | Virtual network mechanism to access well known port application programs running on a single host system |
5640595, | Jun 29 1993 | International Business Machines Corporation | Multimedia resource reservation system with graphical interface for manual input of resource reservation value |
5692047, | Dec 08 1995 | Oracle America, Inc | System and method for executing verifiable programs with facility for using non-verifiable programs from trusted sources |
5706097, | Sep 13 1996 | Eastman Kodak Company | Index print with a digital recording medium containing still images, motion sequences, and sound sequences |
5706453, | Feb 06 1995 | Intelligent real-time graphic-object to database linking-actuator for enabling intuitive on-screen changes and control of system configuration | |
5708774, | Jul 23 1996 | International Business Machines Corporation | Automated testing of software application interfaces, object methods and commands |
5719854, | Nov 23 1994 | Alcatel-Lucent USA Inc | Efficiently providing multiple grades of service with protection against overloads in shared resources |
5727203, | Mar 31 1995 | Sun Microsystems, Inc. | Methods and apparatus for managing a database in a distributed object operating environment using persistent and transient cache |
5742772, | Nov 17 1995 | Alcatel Lucent | Resource management system for a broadband multipoint bridge |
5748614, | Jun 09 1995 | Siemens Aktiengesellschaft | Method for scheduling message cells leaving an ATM node |
5752003, | Jul 14 1995 | HEWLETT-PACKARD DEVELOPMENT COMPANY, L P | Architecture for managing traffic in a virtual LAN environment |
5761477, | Dec 04 1995 | Microsoft Technology Licensing, LLC | Methods for safe and efficient implementations of virtual machines |
5764889, | Sep 26 1996 | International Business Machines Corporation | Method and apparatus for creating a security environment for a user task in a client/server system |
5781550, | Feb 02 1996 | Hewlett Packard Enterprise Development LP | Transparent and secure network gateway |
5799173, | Jul 25 1994 | International Business Machines Corporation | Dynamic workload balancing |
5809527, | Dec 23 1993 | Unisys Corporation | Outboard file cache system |
5828893, | Dec 24 1992 | Freescale Semiconductor, Inc | System and method of communicating between trusted and untrusted computer systems |
5838686, | Apr 22 1994 | Thomson Consumer Electronics, Inc. | System for dynamically allocating a scarce resource |
5838916, | Mar 14 1996 | RPX CLEARINGHOUSE LLC | Systems and methods for executing application programs from a memory device linked to a server |
5842002, | Jun 01 1994 | Quantum Leap Innovations, Inc. | Computer virus trap |
5845129, | Mar 22 1996 | Philips Electronics North America Corporation; Philips Electronics North America Corp | Protection domains in a single address space |
5850399, | Mar 27 1998 | RPX Corporation | Hierarchical packet scheduling method and apparatus |
5860004, | Jul 03 1996 | Oracle America, Inc | Code generator for applications in distributed object systems |
5864683, | Oct 12 1994 | McAfee, LLC | System for providing secure internetwork by connecting type enforcing secure computers to external network for limiting access to data based on user and process access rights |
5889956, | Jul 18 1996 | FUJITSU LIMITED, A JAPANESE CORPORATION | Hierarchical resource management with maximum allowable allocation boundaries |
5889996, | Dec 16 1996 | Oracle International Corporation | Accelerator for interpretive environments |
5892968, | Oct 16 1995 | GOOGLE LLC | Multimedia data transferring method |
5905730, | Mar 27 1998 | RPX Corporation | High speed packet scheduling method and apparatus |
5905859, | Jan 09 1997 | TREND MICRO INCORPORATED | Managed network device security method and apparatus |
5913024, | Feb 09 1996 | McAfee, LLC | Secure server utilizing separate protocol stacks |
5915085, | Feb 28 1997 | International Business Machines Corporation; IBM Corporation | Multiple resource or security contexts in a multithreaded application |
5915095, | Aug 08 1995 | RPX Corporation | Method and apparatus for balancing processing requests among a plurality of servers based on measurable characteristics off network node and common application |
5918018, | Feb 09 1996 | McAfee, LLC | System and method for achieving network separation |
5920699, | Nov 07 1996 | Hewlett Packard Enterprise Development LP | Broadcast isolation and level 3 network switch |
5933603, | Oct 27 1995 | EMC Corporation | Video file server maintaining sliding windows of a video data set in random access memories of stream server computers for immediate video-on-demand service beginning at any specified location |
5937159, | Mar 28 1997 | DATA GENERAL CORP | Secure computer system |
5944795, | Jul 12 1996 | HANGER SOLUTIONS, LLC | Client-server architecture using internet and guaranteed quality of service networks for accessing distributed media sources |
5956481, | Feb 06 1997 | Microsoft Technology Licensing, LLC | Method and apparatus for protecting data files on a computer from virus infection |
5961582, | Oct 25 1994 | Xylon LLC | Distributed and portable execution environment |
5978373, | Jul 11 1997 | AG COMMUNICATION SYSTEMS CORPORATION, A CORPORATION OF DELAWARE | Wide area network system providing secure transmission |
5982748, | Oct 03 1996 | AVAYA Inc | Method and apparatus for controlling admission of connection requests |
5987524, | Apr 17 1997 | Fujitsu Limited | Local area network system and router unit |
5991812, | Jan 24 1997 | FONEWEB, INC | Methods and apparatus for fair queuing over a network |
5999963, | Nov 07 1997 | Alcatel Lucent | Move-to-rear list scheduling |
6016318, | Jul 12 1996 | NEC Corporation | Virtual private network system over public mobile data network and virtual LAN |
6018527, | Aug 13 1996 | RPX CLEARINGHOUSE LLC | Queue service interval based cell scheduler with hierarchical queuing configurations |
6023721, | May 14 1997 | Citrix Systems, Inc. | Method and system for allowing a single-user application executing in a multi-user environment to create objects having both user-global and system global visibility |
6038608, | Nov 25 1996 | NEC Corporation | Virtual LAN system |
6047325, | Oct 24 1997 | Network device for supporting construction of virtual local area networks on arbitrary local and wide area computer networks | |
6055617, | Aug 29 1997 | International Business Machines Corporation | Virtual address window for accessing physical memory in a computer system |
6061349, | Nov 03 1995 | Cisco Technology, Inc | System and method for implementing multiple IP addresses on multiple ports |
6065118, | Aug 09 1996 | Citrix Systems, Inc | Mobile code isolation cage |
6075791, | Oct 28 1997 | WSOU Investments, LLC | System for guaranteeing data transfer rates and delays in packet networks |
6075938, | Jun 10 1997 | The Board of Trustees of the Leland Stanford Junior University | Virtual machine monitors for scalable multiprocessors |
6078929, | Jun 07 1996 | DROPBOX, INC | Internet file system |
6078957, | Nov 20 1998 | CHECK POINT SOFTWARE TECHNOLOGIES INC | Method and apparatus for a TCP/IP load balancing and failover process in an internet protocol (IP) network clustering system |
6086623, | Jun 30 1997 | Oracle America, Inc | Method and implementation for intercepting and processing system calls in programmed digital computer to emulate retrograde operating system |
6092178, | Sep 03 1998 | Oracle America, Inc | System for responding to a resource request |
6094674, | May 06 1994 | Hitachi, Ltd. | Information processing system and information processing method and quality of service supplying method for use with the system |
6101543, | Oct 25 1996 | Hewlett Packard Enterprise Development LP | Pseudo network adapter for frame capture, encapsulation and encryption |
6108701, | Jul 20 1998 | THE CHASE MANHATTAN BANK, AS COLLATERAL AGENT | Soft switch extension for internet protocol applications |
6108759, | Feb 23 1995 | Veritas Technologies LLC | Manipulation of partitions holding advanced file systems |
6122673, | Jul 22 1998 | Ericsson AB | Port scheduler and method for scheduling service providing guarantees, hierarchical rate limiting with/without overbooking capability |
6154776, | Mar 20 1998 | Oracle America, Inc | Quality of service allocation on a network |
6154778, | May 19 1998 | Hewlett Packard Enterprise Development LP | Utility-based multi-category quality-of-service negotiation in distributed systems |
6161139, | Jul 10 1998 | ENTRUST, INC | Administrative roles that govern access to administrative functions |
6167520, | Nov 08 1996 | FINJAN LLC | System and method for protecting a client during runtime from hostile downloadables |
6172981, | Oct 30 1997 | International Business Machines Corporation | Method and system for distributing network routing functions to local area network stations |
6189046, | Mar 27 1997 | Hewlett Packard Enterprise Development LP | Mechanism and method for merging cached location information in a distributed object environment |
6192389, | Mar 28 1997 | International Business Machines Corporation | Method and apparatus for transferring file descriptors in a multiprocess, multithreaded client/server system |
6192512, | Sep 24 1998 | TREND MICRO INCORPORATED | Interpreter with virtualized interface |
6230203, | Oct 20 1995 | Scientific-Atlanta, LLC | System and method for providing statistics for flexible billing in a cable environment |
6240463, | Nov 24 1998 | Lucent Technologies Inc | Router placement methods and apparatus for designing IP networks with performance guarantees |
6247057, | Oct 22 1998 | Microsoft Technology Licensing, LLC | Network server supporting multiple instance of services to operate concurrently by having endpoint mapping subsystem for mapping virtual network names to virtual endpoint IDs |
6259699, | Dec 30 1997 | WSOU Investments, LLC | System architecture for and method of processing packets and/or cells in a common switch |
6266678, | Dec 31 1998 | GOOGLE LLC | System and method for dynamically viewing contents of a data file |
6269404, | Jul 14 1995 | HEWLETT-PACKARD DEVELOPMENT COMPANY, L P | Virtual network architecture for connectionless LAN backbone |
6279039, | Apr 03 1996 | NCR Voyix Corporation | Resource management method and apparatus for maximizing multimedia performance of open systems |
6279040, | Dec 06 1995 | Industrial Technology Research Institute | Scalable architecture for media-on demand servers |
6282581, | Mar 27 1997 | Hewlett-Packard Company; HEWLETT-PACKARD DEVELOPMENT COMPANY, L P ; Agilent Technologies, Inc | Mechanism for resource allocation and for dispatching incoming calls in a distributed object environment |
6282703, | Oct 29 1998 | International Business Machines Corporation | Statically linking an application process with a wrapper library |
6286047, | Sep 10 1998 | Viavi Solutions Inc | Method and system for automatic discovery of network services |
6298479, | May 29 1998 | Oracle America, Inc | Method and system for compiling and linking source files |
6308216, | Nov 14 1997 | International Business Machines Corporation | Service request routing using quality-of-service data and network resource information |
6308609, | Dec 08 1998 | STANOWSKI, DAVID | Suppressor |
6314558, | Aug 27 1996 | JPMORGAN CHASE BANK, N A , AS SUCCESSOR AGENT | Byte code instrumentation |
6327622, | Sep 03 1998 | Oracle America, Inc | Load balancing in a network environment |
6336138, | Aug 25 1998 | Hewlett Packard Enterprise Development LP | Template-driven approach for generating models on network services |
6351775, | May 30 1997 | SAP SE | Loading balancing across servers in a computer network |
6353616, | May 21 1998 | Lucent Technologies Inc | Adaptive processor schedulor and method for reservation protocol message processing |
6363053, | Feb 08 1999 | UNILOC 2017 LLC | Method and apparatus for measurement-based conformance testing of service level agreements in networks |
6370583, | Aug 17 1998 | HEWLETT-PACKARD DEVELOPMENT COMPANY, L P | Method and apparatus for portraying a cluster of computer systems as having a single internet protocol image |
6381228, | Jan 15 1999 | Northrop Grumman Systems Corporation | Onboard control of demand assigned multiple access protocol for satellite ATM networks |
6385638, | Sep 04 1997 | HANGER SOLUTIONS, LLC | Processor resource distributor and method |
6389448, | Dec 06 1999 | WARP Solutions, Inc.; WARP SOLUTIONS, INC | System and method for load balancing |
6393484, | Apr 12 1999 | International Business Machines Corp. | System and method for controlled access to shared-medium public and semi-public internet protocol (IP) networks |
6425003, | Jan 22 1999 | Cisco Technology, Inc | Method and apparatus for DNS resolution |
6430622, | Sep 22 1999 | International Business Machines Corporation | Methods, systems and computer program products for automated movement of IP addresses within a cluster |
6434631, | Oct 15 1999 | WSOU Investments, LLC | Method and system for providing computer storage access with quality of service guarantees |
6434742, | May 10 1999 | Alcatel Lucent | Symbol for automatically renaming symbols in files during the compiling of the files |
6438134, | Aug 19 1998 | Alcatel-Lucent Canada Inc | Two-component bandwidth scheduler having application in multi-class digital communications systems |
6442164, | Jun 03 1999 | Fujitsu Limited | Method and system for allocating bandwidth and buffer resources to constant bit rate (CBR) traffic |
6449647, | Aug 01 1997 | Cisco Technology, Inc | Content-aware switching of network packets |
6449652, | Jan 04 1999 | EMC IP HOLDING COMPANY LLC | Method and apparatus for providing secure access to a computer system resource |
6457008, | Aug 28 1998 | Oracle International Corporation | Pluggable resource scheduling policies |
6463454, | Jun 17 1999 | Level 3 Communications, LLC | System and method for integrated load distribution and resource management on internet environment |
6463459, | Jan 22 1999 | JPMORGAN CHASE BANK, N A , AS SUCCESSOR AGENT | System and method for executing commands associated with specific virtual desktop |
6466985, | Apr 10 1998 | AT&T Corp | Method and apparatus for providing quality of service using the internet protocol |
6470398, | Aug 21 1996 | HEWLETT-PACKARD DEVELOPMENT COMPANY, L P | Method and apparatus for supporting a select () system call and interprocess communication in a fault-tolerant, scalable distributed computer environment |
6487578, | Sep 29 1997 | Intel Corporation | Dynamic feedback costing to enable adaptive control of resource utilization |
6487663, | Oct 19 1998 | Intel Corporation | System and method for regulating the transmission of media data |
6490670, | Apr 24 1998 | International Business Machines Corporation | Method and apparatus for efficiently allocating objects in object oriented systems |
6499137, | Oct 02 1998 | Microsoft Technology Licensing, LLC | Reversible load-time dynamic linking |
6529950, | Jun 17 1999 | International Business Machines Corporation | Policy-based multivariate application-level QoS negotiation for multimedia services |
6542167, | Jan 28 2000 | WIND RIVER SYSTEMS, INC | System and method for flexible software linking |
6553413, | Jul 14 1998 | Massachusetts Institute of Technology | Content delivery network using edge-of-network servers for providing content delivery to a set of participating content providers |
6578055, | Jun 05 2000 | International Business Machines Corporation | Methods, system and computer program products for mirrored file access through assuming a privileged user level |
6578068, | Aug 31 1999 | Accenture Global Services Limited | Load balancer in environment services patterns |
6580721, | Aug 11 1998 | Apple Inc | Routing and rate control in a universal transfer mode network |
6647422, | Feb 26 1996 | Network Engineering Technologies, Inc. | Web server employing multi-homed, modular framework |
6658571, | Feb 09 1999 | JPMORGAN CHASE BANK, N A ; MORGAN STANLEY SENIOR FUNDING, INC | Security framework for dynamically wrapping software applications executing in a computing system |
6691312, | Mar 19 1999 | MASSACHUSETTS, UNIVERSITY OF | Multicasting video |
6725456, | Nov 29 1999 | Alcatel Lucent | Methods and apparatus for ensuring quality of service in an operating system |
6760775, | Mar 05 1999 | AT&T Corp | System, method and apparatus for network service load and reliability management |
6779016, | Aug 23 1999 | Oracle America, Inc | Extensible computing system |
6820117, | Oct 18 1999 | COBALT NETWORKS, INC | Bandwidth management |
6968389, | Jul 17 2001 | Cisco Technology, Inc | System and method for qualifying requests in a network |
6981029, | Jul 17 2001 | Cisco Technology, Inc | System and method for processing a request for information in a network |
20030061338, | |||
JP64002145, | |||
WO9939261, |
Executed on | Assignor | Assignee | Conveyance | Frame | Reel | Doc |
Jan 19 2000 | SHARMA, ROSEN | Ensim Corporation | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 025769 | /0563 | |
Jan 19 2000 | GOYAL, PAWAN | Ensim Corporation | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 025769 | /0563 | |
Jan 19 2000 | HUANG, XUN WILSON | Ensim Corporation | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 025769 | /0563 | |
Jan 19 2000 | KESHAV, SRINIVASAN | Ensim Corporation | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 025769 | /0563 | |
Jun 06 2000 | SHARMA, ROSEN | Ensim Corporation | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 025769 | /0687 | |
Jun 06 2000 | KESHAV, SRINIVASAN | Ensim Corporation | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 025769 | /0687 | |
Jun 06 2000 | GOYAL, PAWAN | Ensim Corporation | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 025769 | /0687 | |
Jun 06 2000 | HUANG, XUN WILSON | Ensim Corporation | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 025769 | /0687 | |
Jun 07 2007 | Ensim Corporation | DIGITAL ASSET ENTERPRISES, L L C | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 025631 | /0471 | |
Aug 12 2015 | DIGITAL ASSET ENTERPRISES, L L C | CUFER ASSET LTD L L C | MERGER SEE DOCUMENT FOR DETAILS | 037118 | /0001 | |
Nov 26 2019 | CUFER ASSET LTD L L C | INTELLECTUAL VENTURES ASSETS 161 LLC | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 051873 | /0365 | |
Dec 06 2019 | INTELLECTUAL VENTURES ASSETS 161 LLC | HANGER SOLUTIONS, LLC | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 052159 | /0509 |
Date | Maintenance Fee Events |
Mar 18 2013 | M1552: Payment of Maintenance Fee, 8th Year, Large Entity. |
May 25 2017 | M1553: Payment of Maintenance Fee, 12th Year, Large Entity. |
Date | Maintenance Schedule |
Mar 08 2014 | 4 years fee payment window open |
Sep 08 2014 | 6 months grace period start (w surcharge) |
Mar 08 2015 | patent expiry (for year 4) |
Mar 08 2017 | 2 years to revive unintentionally abandoned end. (for year 4) |
Mar 08 2018 | 8 years fee payment window open |
Sep 08 2018 | 6 months grace period start (w surcharge) |
Mar 08 2019 | patent expiry (for year 8) |
Mar 08 2021 | 2 years to revive unintentionally abandoned end. (for year 8) |
Mar 08 2022 | 12 years fee payment window open |
Sep 08 2022 | 6 months grace period start (w surcharge) |
Mar 08 2023 | patent expiry (for year 12) |
Mar 08 2025 | 2 years to revive unintentionally abandoned end. (for year 12) |