Rensselaer Polytechnic Institute CSCI-4210 – Operating Systems David Goldschmidt, Ph.D.
Why is it beneficial for an operating system to enable processes to communicate with one another? Share information Cooperation Computational speed-up via parallel programming Modularity of program design Convenience
Message Passing Shared Memory both IPC mechanisms require a protocol and synchronization
Processes may communicate on the same machine or across multiple machines Use sockets for interprocess client-server communication Use remote procedure calls (RPCs) to call procedures across a network In Java, use remote method invocation (RMI) to call a method on an object in a different virtual machine
Using RPC, heterogeneous operating systems can interact with one another
RPCs can be made across a mix of machines and operating systems All parameters must be marshaled to ensure proper interpretation Consider date representations ▪ YYYY-MM-DD or MM-DD-YYYY or DD-MM-YYYY Also consider big endian versus little endian integer representations ▪ (see
RMI is a Java mechanism similar to RPCs RMI enables a running Java program to call a method on a remote object running on a separate Java Virtual Machine this requires object serialization
A socket is an endpoint for communication Communication takes place over a pair of sockets : client server :8123 socket :80 listener socket :9500 socket
Pitfalls of socket-based communication between client and server include: Once a server binds to a port, no other program may listen on that port If client and server do not obey the rules of the protocol, errors occur
In Java, we transmit primitive data types (e.g. int, double) using DataInputStream and DataOutputStream To transmit objects, use ObjectInputStream and ObjectOutputStream instead client server this requires object serialization
Objects exist in a JVM’s memory space To transmit an object over a socket, we must first serialize the object For an object to be serializable, its class definition must implement the java.io.Serializable interface Also useful for saving runtime objects to a file
The Serializable interface has no methods Simply identifies a class as being serializable And enables the use of readObject() and writeObject() methods of ObjectInputStream and ObjectOutputStream Student object Student object serialized object Student object Student object network writeObject() readObject()
Classes that are not serializable include: java.lang.Thread java.io.OutputStream java.net.Socket etc. Such classes refer to operating system resources, which are not serializable
Serialized objects are assigned a unique identifier as a means to version control If you write object X to a socket or file, then modify the source code of class X and recompile the.class file, loading object X results in an InvalidClassException runtime exception All processes must be using the same version