lecture notes

Download Report

Transcript lecture notes

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 http://en.wikipedia.org/wiki/Endianness)

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
<ip-address>:<port>
listener socket
128.113.2.9:80
socket
socket
66.195.8.34:8123
128.113.2.9:9500

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
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
serialized object
writeObject()
network
readObject()
Student
object

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