\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{arrows,positioning,fit,shapes,calc,trees}

\usepackage{verbatim}
\usepackage[active,tightpage]{preview}
\PreviewEnvironment{tikzpicture}
\setlength\PreviewBorder{5pt}%

\begin{document}

\tikzset{
  every node/.style = {
    fill = red!30, rounded corners,
    font = \fontfamily{cmss}\Huge,
    minimum width = 0.8in, minimum height = 0.7in
  },
  edge from parent/.style = { red, -, thick, draw },
  level 1/.style = { sibling distance = 6in, level distance = 1in },
  level 2/.style = { sibling distance = 1.6in },
  level 3/.style = { sibling distance = 1.5in },
  host/.style = {
    fill=green!40
  },
  hdisk/.style = {
    cylinder, draw, aspect=0.7,
    text width = 2.2in,
  },
  hnet/.style = {
    rectangle, draw,
  },
  hdisplay/.style = {
    rectangle, draw,
  },
  hostline/.style = {
    ultra thick, dashed, green
  },
}

\begin{tikzpicture}

% Tree of emulated devices.

\begin{scope}[edge from parent fork down]

\node { emulation }
  child { node { motherboard }
    child { node { cpu }
      child { node { insns } }
      child { node { registers } }
    }
    child { node { memory } }
  }
  child { node { devices }
    child { node (disk) { disk } }
    child { node { usb } }
    child { node (net) { net } }
    child { node { timer } }
    child { node (display) { display } }
  };

\end{scope}

% Corresponding host devices.

\node [host, hdisk, below=of disk, yshift=-2in] (hdisk)
      { Host file \\ ``disk.img'' };

\node [host, hnet, below=of net, yshift=-2in] (hnet) { Host vnet0 };

\node [host, hdisplay, below=of display, yshift=-2in] (hdisplay) { VNC };

\draw [hostline] (disk.south) -- (hdisk.north);

\draw [hostline] (net.south) -- (hnet.north);

\draw [hostline] (display.south) -- (hdisplay.north);

\end{tikzpicture}
\end{document}
