Operating Systems {week 11a} Rensselaer Polytechnic Institute CSCI-4210 – Operating Systems David Goldschmidt, Ph.D. Operating Systems {week 11a}
Interprocess communication (IPC) 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
IPC mechanisms Message Passing Shared Memory both IPC mechanisms require a protocol and synchronization
Client-server communication 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
Remote procedure calls (i)
Remote procedure calls (ii) Using RPC, heterogeneous operating systems can interact with one another
Marshaling parameters 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 http://en.wikipedia.org/wiki/Endianness)
Remote method invocation 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
<ip-address>:<port> Sockets (i) A socket is an endpoint for communication Communication takes place over a pair of sockets <ip-address>:<port> server 128.113.2.9:80 listener socket client 128.113.2.9:9500 socket 66.195.8.34:8123 socket
Sockets (ii) 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
Transmitting objects via sockets In Java, we transmit primitive data types (e.g. int, double) using DataInputStream and DataOutputStream To transmit objects, use ObjectInputStream and ObjectOutputStream instead server client this requires object serialization
Serializing objects (i) 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
Serializing objects (ii) 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 network serialized object writeObject() readObject()
Serializing objects (iii) 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
Serializing objects (iv) 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