summaryrefslogtreecommitdiff
path: root/misc/pres_ipc_en.tex
blob: d5f93f09be706c6c732515a69863d4776b30bdd3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
\input{configpres}

\section{Inter-Process Communication (IPC)}

\title{Inter-Process Communication (IPC)}
\maketitle

\begin{frame}
\frametitle{half-duplex unix pipes}
\begin{itemize}
\item file descriptor based
\item read()/write()
\item byte stream
\item private
\end{itemize}
\end{frame}

\begin{frame}
\frametitle{named pipes}
\begin{itemize}
\item file descriptor based
\item read()/write()
\item byte stream
\item named in filesystem
\item protected by filesystem permissions
\end{itemize}
\end{frame}

\begin{frame}
\frametitle{unix domain sockets}
\begin{itemize}
\item file descriptor based
\item read()/write() or recvmsg()/sendmsg()
\item byte stream or packets
\item named in filesystem
\item protected by filesystem permissions
\end{itemize}
\end{frame}

\begin{frame}
\frametitle{netlink}
\begin{itemize}
\item file descriptor based
\item recvmsg()/sendmsg()
\item packets
\item protected by CAP\_NET\_ADMIN capability
\end{itemize}
\end{frame}

\begin{frame}
\frametitle{message queues}
\begin{itemize}
\item uses special message queue descriptors
\item mq\_receive()/mq\_send() or msgrcv()/msgsnd()
\item packets
\item named in filesystem
\item protected by user/group/other permissions
\end{itemize}
\end{frame}

\begin{frame}
\frametitle{shared memory}
\begin{itemize}
\item mmap()
\item shared raw data (no copies)
\item named in filesystem
\item protected by filesystem permissions
\item requires "manual" queue implementation (if queues needed)
\item efficient notification/synchronization with condvar/mutex
\end{itemize}
\end{frame}

\begin{frame}
\frametitle{d-bus}
\begin{itemize}
\item uses special handles (object/bus model)
\item remote procedure calls (rpc)
\begin{itemize}
\item request/response (calls)
\item publish/subscribe (events)
\end{itemize}
\item rpc-function data parameters
\item protected by interface configurations
\end{itemize}
\end{frame}

\begin{frame}
\frametitle{semaphores}
\begin{itemize}
\item uses special semaphore identifiers
\item semop()
\item no data
\item named in filesystem
\item protected by filesystem permissions
\end{itemize}
\end{frame}

\begin{frame}
\frametitle{signals}
\begin{itemize}
\item no data
\item protected by user permissions
\item runs in userspace interrupt context
\item complicated to implement correctly
\end{itemize}
\end{frame}

\begin{frame}
\frametitle{inotify}
\begin{itemize}
\item file descriptor based
\item no data
\item named in filesystem
\item protected by filesystem permissions
\item like signals but no interrupt context
\item events missed if not listening
\end{itemize}
\end{frame}

\input{tailpres}