\begin{tikzpicture} \begin{pgfonlayer}{nodelayer} \node [style=none] (0) at (0, -2.5) {Multithreaded Application}; \node [style=none] (1) at (-2, -1.75) {}; \node [style=none] (2) at (-2, -3.25) {}; \node [style=none] (3) at (2, -3.25) {}; \node [style=none] (4) at (2, -1.75) {}; \node [style=none] (5) at (-6, -1.75) {}; \node [style=none] (6) at (6, -1.75) {}; \node [style=none] (7) at (6, -3.25) {}; \node [style=none] (8) at (-6, -3.25) {}; \node [style=none] (9) at (-8.5, -5) {}; \node [style=none] (10) at (9.75, -5) {}; \node [style=none] (11) at (9.75, -13.5) {}; \node [style=none] (12) at (-8.5, -13.5) {}; \node [style=align text] (13) at (-7.25, -9.25) {Kernel-meditated\\Control Transfers}; \node [style=os] (14) at (0, -15.5) {Operating System}; \node [style=hardware] (15) at (0, -16.5) {Hardware}; \node [style=dispatch] (16) at (0, -6.75) {Dispatch}; \node [style=bb builder] (17) at (6, -6.75) {Basic Block\\Builder}; \node [style=code cache] (19) at (0, -11.75) {Code Cache}; \node [style=none] (20) at (2.25, -6.5) {}; \node [style=none] (21) at (2.25, -7) {}; \node [style=none] (22) at (3.75, -6.5) {}; \node [style=none] (23) at (3.75, -7) {}; \node [style=none] (24) at (-0.25, -8) {}; \node [style=none] (25) at (0.25, -8) {}; \node [style=none] (26) at (-0.25, -10.5) {}; \node [style=none] (27) at (0.25, -10.5) {}; \node [style=none] (28) at (-3, -8.75) {}; \node [style=none] (29) at (9, -8.75) {}; \node [style=none] (30) at (9, -9.75) {}; \node [style=none] (31) at (-3, -9.75) {}; \node [style=none] (32) at (3, -9.25) {Context Switch}; \node [style=none] (33) at (-4, -3.25) {}; \node [style=none] (34) at (0, -3.25) {}; \node [style=none] (35) at (4, -3.25) {}; \node [style=none] (36) at (0, -5.5) {}; \node [style=none] (37) at (0.5, -5.5) {}; \node [style=none] (38) at (-0.5, -5.5) {}; \node [style=none] (39) at (-0.25, -13) {}; \node [style=none] (40) at (0.25, -13) {}; \node [style=none] (41) at (-0.25, -15) {}; \node [style=none] (42) at (0.25, -15) {}; \node [style=none] (43) at (-2.25, -6.75) {}; \node [style=none] (44) at (-2.25, -7.25) {}; \node [style=none] (45) at (-2.25, -6.25) {}; \node [style=none] (46) at (-4.25, -7.25) {}; \node [style=none] (47) at (-4.75, -6.75) {}; \node [style=none] (48) at (-5.25, -6.25) {}; \node [style=none] (49) at (-5.25, -15) {}; \node [style=none] (50) at (-4.75, -15) {}; \node [style=none] (51) at (-4.25, -15) {}; \node [style=none] (52) at (-5, -3.25) {}; \node [style=none] (53) at (-1, -3.25) {}; \node [style=none] (54) at (3, -3.25) {}; \node [style=none] (55) at (-2.25, -11.5) {}; \node [style=none] (56) at (-2.25, -12) {}; \node [style=none] (57) at (-3, -11.5) {}; \node [style=none] (58) at (-3, -12) {}; \node [style=none] (59) at (2.75, -14.25) {System Calls}; \end{pgfonlayer} \begin{pgfonlayer}{edgelayer} \draw [style=block] (6.center) to (7.center) to (3.center) to (2.center) to (8.center) to (5.center) to (1.center) to (4.center) to cycle; \draw [style=dashed line] (1.center) to (2.center); \draw [style=dashed line] (4.center) to (3.center); \draw [style=kernel] (11.center) to (10.center) to (9.center) to (12.center) to cycle; \draw [style=latex arrow] (20.center) to (22.center); \draw [style=latex arrow] (23.center) to (21.center); \draw [style=context switch] (30.center) to (31.center) to (28.center) to (29.center) to cycle; \draw [style=latex arrow] (24.center) to (26.center); \draw [style=latex arrow] (27.center) to (25.center); \draw [style=latex arrow] (33.center) to (38.center); \draw [style=latex arrow] (34.center) to (36.center); \draw [style=latex arrow] (35.center) to (37.center); \draw [style=latex arrow] (39.center) to (41.center); \draw [style=latex arrow] (42.center) to (40.center); \draw [style=latex arrow] (48.center) to (45.center); \draw [style=latex arrow] (47.center) to (43.center); \draw [style=latex arrow] (46.center) to (44.center); \draw (48.center) to (49.center); \draw (47.center) to (50.center); \draw (46.center) to (51.center); \draw [style=latex arrow dashed] (48.center) to (52.center); \draw [style=latex arrow dashed] (47.center) to (53.center); \draw [style=latex arrow dashed] (46.center) to (54.center); \draw (56.center) to (58.center); \draw (58.center) to (57.center); \draw [style=latex arrow] (57.center) to (55.center); \end{pgfonlayer} \end{tikzpicture}