Uniform address space

InterProcess Communications
1
Outline
 IPC fundamentals
 UNIX sockets
 Remote procedural call
 Shared memory and large memory spaces
 IPC in Windows NT
 Shared memory IPC
 Shared memory and large address spaces
 Windows NT IPC Mechanisms
2
IPC Fundamentals
 What is IPC?
 Mechanisms to transfer data between
processes
 Why is it needed?
 Not all important procedures can be
easily built in a single process
3
Why do processes communicate?
 To share resources
 Client/server paradigms
 Inherently distributed applications
 Reusable software components
 Other good software engineering
reasons
4
The Basic Concept of IPC
 A process needs to send data to a
receiving process
 Sender wants to avoid details of
receiver’s condition
 Receiver wants to get the data in
an organized way
5
IPC from the OS Point of View
Private
address
space
Private
address
space
OS address space
Process A
Process B
6
Fundamental IPC Problem for the OS
 Each process has a private address
space
 Normally, no process can write to
another process’s space
 How to get important data from process
A to process B?
7
OS Solutions to IPC Problem
 Fundamentally, two options
1. Support some form of shared address space

Shared memory
2. Use OS mechanisms to transport data from
one address space to another

Files, messages, pipes, RPC
8
Fundamental Differences in OS
Treatment of IPC Solutions
 Shared memory



OS has job of setting it up
And perhaps synchronizing
But not transporting data
 Messages, etc


OS involved in every IPC
OS transports data
9
Desirable IPC Characteristics
 Fast
 Easy to use
 Well defined synchronization model
 Versatile
 Easy to implement
 Works Remotely
10
IPC and Synchronization
 Synchronization is a major concern for IPC



Allowing sender to indicate when data is
transmitted
Allowing receiver to know when data is ready
Allowing both to know when more IPC is
possible
11
IPC and Connections
 IPC mechanisms can be connection less or
require connection


Connectionless IPC mechanisms require no
preliminary setup
Connection IPC mechanisms require
negotiation and setup before data flows
12
Connectionless IPC
 Data simply flows
 Typically, no permanent data structures
shared in OS by sender and receiver
+ Good for quick, short communication
+ Less long-term OS overhead
- Less efficient for large, frequent
communications
- Each communication takes more OS
resources per byte
13
Connection-Oriented IPC
 Sender and receiver pre-arrange IPC delivery
details
 OS typically saves IPC-related information for
them
 Advantages/disadvantages pretty much the
opposites of connectionless IPC
14
Basic IPC Mechanisms
 File system IPC
 Message-based IPC
 Procedure call IPC
 Shared memory IPC
15
IPC Through the File System
 Sender writes to a file
 Receiver reads from it
 But when does the receiver do the read?

Often synchronized with file locking or lock
files
 Special types of files can make file-based IPC
easier
16
File IPC Diagram
Process A
Data
Process B
17
Message-Based IPC
 Sender formats data into a formal message

With some form of address for receiver
 OS delivers message to receiver’s message
input queue (might signal too)
 Receiver (when ready) reads a message from
the queue
 Sender might or might not block
18
Message-Based IPC Diagram
OS
Process A
Data sent
from A to B
B’s message
queue
Process B
19
File IPC Diagram
main () {
.
call();
.
.
.
Data as parameters
Data as return values
.
.
.
server();
.
.
.
}
Process A
Process B
20
Shared Memory IPC
 Different processes share a common piece of
memory

Either physically or virtually
 Communications via normal reads/writes
 May need semaphores or locks

In or associated with the shared memory
21
Shared Memory IPC Diagram
main () {
.
x = 10
.
.
.
write variable x
x: 10
read variable x
.
.
.
print(x);
.
.
.
}
Process A
Process B
22
Synchronizing in IPC
 How do sending and receiving process
synchronize their communications?
 Many possibilities

Based on which process block when
 Examples that follow in message context, but
more generally applicable
23
Blocking Send, Blocking Receive
 Both sender and receiver block



Sender blocks till receiver receives
Receiver blocks until sender sends
Often called message rendezvous
24
Non-Blocking Send, Blocking Receive
 Sender issues send, can proceed without
waiting to discover fate of message
 Receiver waits for message arrival before
proceeding

Essentially, receiver is message-driven
25
Non-Blocking Send, Non-Blocking
Receive
 Neither party blocks
 Sender proceeds after sending message
 Receiver works until message arrives


Either receiver periodically checks in nonblocking fashion
Or some form of interrupt delivered
26
Addressing in IPC
 How does the sender specify where the data
goes?
 In some cases, the mechanism makes it
explicit (e.g., shared memory and RPC)
 In others, there are options
27
Direct Addressing
 Sender specifies name of the receiving
process
 Using some form of unique process name
 Receiver can either specify name of expected
sender

Or take stuff from anyone
28
Indirect Addressing
 Data is sent to queues, mailboxes, or some
other form of shared data structure
 Receiver performs some form of read
operations on that structure
 Much more flexible than direct addressing
29
Duality in IPC Mechanisms
 Many aspects of IPC mechanisms are duals of
each other
 Which implies that these mechanisms have the
same power
 First recognized in context of messages vs.
procedure calls
 At least, IPC mechanisms can be simulated by
30
each other
So which IPC mechanism to
build/choose/use?
 Depends on model of computation
 And on philosophy of user
 In particular cases, hardware or existing
software may make one perform better
31
Typical UNIX IPC Mechanisms
 Different versions of UNIX introduced
different IPC mechanisms






Pipes
Message queues
Semaphores
Shared memory
Sockets
RPC
32
Pipes
 Only IPC mechanism in early UNIX systems
(other than files)




Uni-directional
Unformatted
Un interpreted
Inter process byte streams
 Accessed in file-like way
33
Pipe Details
 One process feeds bytes into pipe
 A second process reads the bytes from it
 Potentially blocking communication mechanism
 Requires close cooperation between processes
to set up

Named pipes allow more flexibility
34
Pipes and Blocking
 Writing more bytes than pipe capacity blocks
the sender

Until the receiver reads some of them
 Reading bytes when none are available
blocks the receiver

Until the sender writes some
 Single pipe can’t cause deadlock
35
UNIX Message Queues
 Introduced in System V Release 3 UNIX
 Like pipes, but data organized into messages
 Message component include:



Type identifier
Length
Data
36
Semaphores
 Also introduced in System V Release 3 UNIX
 Mostly for synchronization only

Since they only communicate one bit of
information
 Often used in conjunction with shared memory
37
UNIX Shared Memory
 Also introduced in System V Release 3
 Allows two or more processes to share some
memory segments
 With some control over read/write permissions
 Often used to implement threads packages for
UNIX
38
Sockets
 Introduced in 4.3 BSD
 A socket is an IPC channel with generated
endpoints
 Great flexibility in it characteristics

Intended as building block for communication
 Endpoints established by the source and
destination processes
39
UNIX Remote Procedure Calls
 Procedure calls from one address space to
another

On the same or different machines
 Requires cooperation from both processes
 In UNIX, often built on sockets
 Often used in client/server computing
40
More on Sockets
 Created using the socket() system call
 Specifying domain, type, and protocol
 Sockets can be connected or connectionless

Each side responsible for proper setup/access
41
Socket Domains
 the socket domain describes a protocol family
used by the socket

Generally related to the address family
 Domains can be:



Internal protocols
Internet protocols
IMP link layer protocols
42
Socket Types
 The socket type describes what the socket does
 Several types are defined





SOCK_STREAM
SOCK_DGRAM
SOCK_SEQPACKET
SOCK_RAW
SOCK_RDM
43
Socket Protocols
 This parameter specifies a particular protocol
to be used by the socket
 Must match other parameters

Not all protocols usable with all domains and
types
 Generally, only one protocol per socket type
available
44
Some Examples of Sockets
 Socket streams
 Socket sequential packets
 Socket datagrams
45
Socket Streams
 Of type SOCK_STREAM
 Full-duplex reliable byte streams
 Like 2-way pipes
 Requires other side to connect
46
Socket Sequential Packets
 Similar to streams

But for fixed-sized packets
 So reads always return a fixed number of bytes

Allow easy use of buffers
47
Socket Datagrams
 Like sequential packets

But non-reliable delivery

Which implies certain simplifications

And lower overhead
 send(), rather than write(), used to send data
48
Socket Options
 Connection or connectionless
 Blocking or non-blocking
 Out-of-band information
 Broadcast
 Buffer sizes (input and output)
 Routing options
 And others
49
Binding Sockets
 Binding is the process of preparing a socket for
use by a process
 Sockets are typically bound to local names

For IPC on a single machine
 Often accessed using descriptors
 Requires clean-up when done
 Binding can be to IP addresses, as well
50
Connecting to Sockets
 Method for setting up the receiving end of a
socket
 In local domain, similar to opening file
 Multiple clients can connect to a socket

Program establishing socket can limit connections
51
Remote Procedural Call
 Method of calling procedures in other address
spaces
 Either on the same machine

Or other machines
 Attempts to provide interface just like local
procedure call
 Request/reply communications model
52
Semantics of RPC
 Similar to regular procedure call
1. Calling procedure blocks
2. Set of parameters transferred to called
procedure
3. Called procedure computes till it returns
4. Return value delivered to calling procedure
5. Calling procedure continues
53
High-Level RPC Mechanics
 Hide details from applications
 Clients pass requests to stub programs
 Client-end stub sends request to server stub
 Server-end stub calls user-level server
 Results travel in reverse direction
 Network transport or OS actually moves data
54
Diagram of RPC in Action
Client (caller)
call
Server (callee)
reply
reply
Client stub
call
Server stub
OS or Network
55
What do the stubs do?
 Stubs handle complex details like:

Marshaling arguments

Message construction

Data format translation

Finding the server process
56
Setting Up RPC
 Caller must have a way to find the called
procedure
 But it can’t be found at link time

Unlike local procedure
 Potential servers must make their presence
known
57
Registering Servers
 Either register the server at a “well-known” port
 Or register it with a name server

Which in turn is at a “well-known” port
 Calling procedure “addresses” RPC to that port
58
Binding to a Service
 A client process binds to the service it wants
 Two major sub-problem:


Naming
Location
59
Binding: The Naming Problem
 How does a caller name the server program?
 Depends on the RPC mechanism

And perhaps the protocol or type within it
 Do you name the server explicitly?
 Or do you name the service and let some
other authority choose which server?
60
Binding: The Location Problem
 Where is the remote server?
 Some naming schemes make it explicit

Some don’t
 If it’s not explicit, system must convert
symbolic names to physical locations
61
Binding in Cedar RPC
 Client applications bind to a symbolic name

Composed of:


Type
Instance
 Type is which kind of service
 Instance is which particular implementer
62
Locating Cedar RPC Service
 Names do not contain physical location
 So Cedar consults a database of services
 Services register with database
 Binding call automatically looks up location in
database
63
Binding in UNIX RPC
 bind() system call used by servers

Allows servers to bind naming/location
information to particular socket
 connect() system call used by clients

Using information similar to that bound by the
server
 Automatic code generation hides details
64
UNIX Binding Information
 Like most socket operations, it’s flexible
 Fill in all or part of a socket address data
structure
 Create an appropriate socket
 Then call bind to link socket to address
information
 connect works similarly
65
UNIX Binding Example
 On server side,
struct sockaddr_un sin;
int sd;
strcpy(sin.sun_path,”./socket”);
sd = socket(AF_UNIX, SOCK_STREAM, 0);
bind(sd, &sin, sizeof(sin));
66
UNIX Binding Example, Con’t
 For client side,
struct sockaddr_un sin;
int sd;
strcpy(sin.sun_path, “./socket”);
sd = socket(AF_UNIX, SOCK_STREAM, 0);
connect(sd, &sin, sizeof(sin));
67
Locating Remove Services in UNIX
RPC
 Similar to Cedar methods
 Register services with the portmapper
 The portmapper is typically called through
automatically generated code
 the portmapper runs on each machine
 Another service (e.g., NIS) deals with
intermachine requests
68
Using RPC
 Once it’s bound, how does the client use
RPC?
 Just call the routines

As if they were local
 And the results come back
69
What’s happening under the covers?
 When a client calls a remote routine, he really
calls a local stub program
 Stub program packages up request to remote
server
 And sends it to local transport code
 When reply arrives, local transport code
returns results to stub
 Which returns to client program
70
What happens at the server side?
 A request comes in to the RPC transport
code
 It routes it to the appropriate server stub
 Which converts it into a local procedure call
 Which is made within the context of the
server
71
Conceptual Diagram of RPC
call_procedure();
client program continues
Message from client
stub to server stub
Client stub converts
message to return value
Network transport
Network transport
Message received by
server stub
Return value formatted as
message to client stub
call_procedure();
return(…);
72
Transport for RPC
 In Cedar, special-purpose RPC transport
protocol
 In UNIX RPC, can use either UDP or TCP for
transport

Typically protocol is chosen automatically by
stub generator program
73
Other RPC Issues
 Mostly related to intermachine RPC




Data format conversions
Security and authentication
Locating remote services
Multipacket RPC
74
Shared Memory
 A simple and powerful form of IPC
 Most multiprogramming OS’s use some form
of shared memory

E.g., sharing executables
 Not all OS’s make shared memory available
to applications
75
Shared Memory Diagram
a: __
z: __
b: __
x: 10
y: 20
Process A
Process B
76
Problems with Shared Memory
 Synchronization
 Protection
 Pointers
77
Synchronization
 Shared memory itself does not provide
synchronization of communications
 Except at the single-word level
 Typically, some other synchronization
mechanism is used


E.g., semaphore in UNIX
Events, semaphores, or hardware locks in
Windows NT
78
Protection
 Who can access a segment? And in what
ways?
 UNIX allows some read/write controls
 Windows NT has general security monitoring
based on the object-status of shared memory
79
Pointers in Shared Memory
 Pointers in a shared memory segment can be
troublesome
 For that matter, pointers in any IPC can be
troublesome
80
Shared Memory Containing Pointers
a: __
z: __
b: __
y: 20
x: 10
w: 5
Process A
Process B
81
A Troublesome Pointer
a: __
z: __
b: __
y: 20
x: 10
w: 5
Process A
Process B
82
So, how do you share pointers?
 Several methods are in use



Copy-time translation
Reference-time translation
Pointer swizzling
 All involve somehow translating pointers at
some point before they are used
83
Copy-Time Pointer Translation
 When a process sends data containing
pointers to another process
 Locate each pointer within old version of the
data
 Then translate pointers are required
 Requires both sides to traverse entire
structure
 Not really feasible for shared memory
84
Reference-Time Translation
 Encode pointers in shared memory segment
as pointer surrogates
 Typically as offsets into some other segment
in separate contexts
 So each sharer can have its own copy of
what is pointed to
 Slow, pointers in two formats
85
Pointer Swizzling
 Like reference-time, but cache results in the
memory location
 Only first reference is expensive
 But each sharer must have his own copy
 Must “unswizzle” pointers to transfer data
outside of local context
 Stale swizzled pointers can cause problems
86
Shared Memory in a Wide Virtual
Address Space
 When virtual memory was created, 16 or 32
bit addresses were available
 Reasonable size for one process


But maybe not for all processes on a machine
And certainly not for all processes ever on a
machine
87
Wide Address Space Architectures
 Computer architects can now give us 64-bit
virtual addresses
 A 64-bit address space, consumed at 100
MB/sec, lasts 5000 years


Orders of magnitude beyond any process’s
needs
40 bits can address a TB
88
Do we care?
 Should OS designers care about wide
address space?
 Well, what can we do with them?
 One possible answer:


Put all processes in the same address space
Maybe all processes for all time?
89
Implications of Single Shared
Address Space
 IPC is trivial

Shared memory, RPC
 Separation of concepts of address space and
protection domain
 Uniform address space
90
Address Space and Protection
Domain
 A process has a protection domain


The data that cannot be touched by other
processes
And an address space

The addresses it can generate and access
 In standard systems, these concepts are
merged
91
Separating the Concepts
 These concepts are potentially orthogonal
 Just because you can issue an address
doesn’t mean you can access it
 (Though clearly to access an address you
must be able to issue it)
 Existing hardware can support this separation
92
Context-Independent Addressing
 Addresses mean the same thing in any
execution context
 So, a given address always refers to the
same piece of data
 Key concept of uniform-address systems
 Allows many OS optimizations/improvements
93
Uniform-Addressing Allows Easy
Sharing
 Any process can issue any address

So any data can be shared
 All that’s required is changing protection to
permit desired sharing
 Suggests programming methods that make
wider use of sharing
94
To Opal System
 New OS using uniform-addressing
 Developed at University of Washington
 Not intended as slight alteration to existing
UNIX system
 Most of the rest of material specific to Opal
95
Protection Mechanisms for UniformAddressing
 Protection domains are assigned portions of
the address space
 They can allow other protection domains to
access them



Read-only
Transferable access permissions
System-enforced page-level locking
96
Program Execution in UniformAccess Memory
 Executing a program creates a new
protection domain
 The new domain is assigned an unused
portion of the address space
 But it may also get access to used portions
 E.g., a segment containing the required
executable image
97
Virtual Segments
 Global address space is divided into
segments

Each composed of variable number of
contiguous virtual pages
 Domains can only access segments they
attach to
 Attempting to access unattached segment
causes a segment fault
98
Persistent Memory in Opal
 Persistent segments exist even when
attached to no current domain
 Recoverable segments are permanently
stored

And can thus survive crashes
 All Opal segments can be persistent and
recoverable
 Pointers can thus live forever on disk
99
Code Modules in Opal
 Executable code stored in modules

Independent of protection domains
 Pure modules can be easily shared

Because they are essentially static
 Can get benefit of dynamic loading without
run-time linking
100
Address Space Reclamation
 Trivial in non-uniform-address systems
 Tricky in uniform-address systems
 Problem akin to reclaiming i_nodes in the
presence of hard links
 But even if segments improperly reclaimed,
only trusting domains can be hurt
101
Windows NT IPC
 Inter-thread communications

Within a single process
 Local procedure calls

Between processes on same machine
 Shared memory
102
Windows NT and Threads
 Windows NT support multiple threads of
control in a single process address space
 Threads share address space

So communication among them is through
memory
103
Windows NT and Client/Server
Computing
 Windows NT strongly supports the
client/server model of computing
 Various OS services are built as servers,
rather than part of the kernel
 Windows NT needs facilities to support
client/server operations
 Which guide users to building client/server
solution
104
Client/Server Computing and RPC
 In client/server computing, clients request
services from servers
 Service can be requested in many ways

But RPC is a typical way
 Windows NT uses a specialized service for
single machine RPC
105
Local Procedure Call (LPC)
 Similar in many ways to RPC
 But optimized to only work on a single
machine
 Primarily used to communicate with protected
subsystems
 Windows NT also provides a true RPC facility
for genuinely distributed computing
106
Basic Flow of Control in Windows
NT LPC
 Application calls routine in an application
programming interface
 Which is usually in a dynamically linked
library
 Which sends a message to the server
through a messaging mechanism
107
Windows NT LPC Messaging
Mechanisms
 Messages between port objects
 Message pointers into shared memory
 Using dedicated shared memory segments
108
Port Objects
 Windows NT is generally object-oriented
 Port objects support communications
 Two types:


Connection ports
Communication ports
109
Connection Ports
 Used to establish connections between
clients and servers
 Named, so they can be located
 Only used to set up communication ports
110
Communication Ports
 Used to actually pass data
 Created in pairs, between given client and
given server
 Private to those two processes
 Destroyed when communications end
111
Windows NT Port Example
Connection port
Client process
Server process
112
Windows NT Port Example
Connection port
Client process
Server process
113
Windows NT Port Example
Connection port
Communication ports
Client process
Server process
114
Windows NT Port Example
Connection port
Send request
Communication ports
Client process
Server process
115
Message Passing through Port
Object Message Queues
 One of three methods in Windows NT to pass
messages
1. Client submits message to OS
2. OS copies to receiver’s queue
3. Receiver copies from queue to its own
address space
116
Characteristics of Message Passing
via Queues
 Two message copies required
 Fixed-sized, fairly short message

~256 bytes
 Port objects stored in system memory

So always accessible to OS
 Fixed number of entries in message queue
117
Message Passing Through Shared
Memory
 Used for messages larger than 256 bytes
 Client must create section object


Shared memory segment
Of arbitrary size
 Message goes into the section
 Pointer to message sent to receiver’s queue
118
Setting up Section Objects
 Pre-arranged through OS calls
 Using virtual memory to map segment into
both sender and receiver’s address space
 If replies are large, need another segment for
the receiver to store responses
 OS doesn’t format section objects
119
Characteristics of Message Passing
via Shared Memory
 Capable of handling arbitrarily large transfers
 Sender and receiver can share a single copy
of data

i.e., data copied only once
 Requires pre-arrangement for section object
120
Server Handling of Requests
 Windows NT servers expect requests from
multiple clients
 Typically, they have multiple threads to
handle requests
 Must be sufficiently general to handle many
different ports and section objects
121
Message Passing Through Quick
LPC
 Third way to pass messages in Windows NT
 Used exclusively with Win32 subsystem
 Like shared memory, but with a key
difference

Dedicated resources
122
Use of Dedicated Resources in
Quick LPC
 To avoid overhead of copying


Notification messages to port queue
And thread switching overhead
 Client sets up dedicated server thread only
for its use
 Also dedicated 64KB section object
 And event pair object for synchronization
123
Characteristics of Message Passing
via Quick LPC
 Transfers of limited size
 Very quick
 Minimal copying of anything
 Wasteful of OS resources
124
Shared Memory in Windows NT
 Similar in most ways to other shared memory
services
 Windows NT runs on multiprocessors, which
complicates things
 Done through virtual memory
125
Shared Memory Sections
 Block of memory shared by two or more
processes

Created with unique name
 Can be very, very large
126
Section Views
 Given process might not want to waste lots of
its address space on big sections
 So a process can have a view into a shared
memory section
 Different processes can have different views
of same section
 Or multiple views for single process
127
Shared Memory View Diagram
view 1
view 2
Section
view 3
Process B
Process A
Physical memory
128