Here is something to start with. Major steps:
- neglecting the
postaction, drawing the "semicircle" and the filled circles is easy enough
- using
polar coorinates makes it easy, remembering the 3 coordinates A, B and C
- the
arc takes 3 parameters after moving to its start position: (startAngle:endAngle:radius)
- decoration is finally added using the
decorations.markings lib
- do some fine tuning on positioning them
Certainly, some code parts can further be refactored into some foreach loops.
Unfortunately I didn't succeed to move the whole drawing into a \pic. Once that works, it's easy to:
- placing 5 of them in a row
- accessing coordinates from inside the
\pic or specifying them explicitely
- drawing the missing few connectors

\documentclass[10pt,border=3mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{decorations.markings}
\begin{document}
\begin{tikzpicture}
[decoration={
markings,
mark=between positions 0.06 and 1 step 5.3mm with {\arrow{stealth}}
}]
% ~~~ "semicircle" ~~~~~~~~~~
\draw [postaction={decorate}] (150:1) arc(150:30:1) -- (0:.5) coordinate (B) -- (0:-.5) coordinate (A) -- (150:1) (A) -- (90:.5) coordinate (C) -- (B) ;
% ~~~ filled circles ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
\draw [fill=white] (150:1) circle [radius=1pt];
\draw [fill=white] (120:1) circle [radius=1pt];
\draw [fill=white] (90:1) circle [radius=1pt];
\draw [fill=white] (60:1) circle [radius=1pt];
\draw [fill=white] (30:1) circle [radius=1pt];
\draw [fill=white] (A) circle [radius=1pt];
\draw [fill=white] (B) circle [radius=1pt];
\draw [fill=white] (C) circle [radius=1pt];
\end{tikzpicture}
\end{document}
Finally, here's the code refactoring the placement of filled circles:
\documentclass[10pt,border=3mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{decorations.markings}
\begin{document}
\begin{tikzpicture}
[decoration={
markings,
mark=between positions 0.06 and 1 step 5.3mm with {\arrow{stealth}}
}]
% ~~~ "semicircle" ~~~~~~~~~~
\draw [postaction={decorate}] (150:1) arc(150:30:1) -- (0:.5) coordinate (B) -- (0:-.5) coordinate (A) -- (150:1) (A) -- (90:.5) coordinate (C) -- (B) ;
% ~~~ filled circles ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
% refactored
\foreach \p in {(150:1),(120:1),(90:1),(60:1),(30:1),(A),(B),(C)}{
\draw [fill=white] \p circle [radius=1pt];
}
\end{tikzpicture}
\end{document}
As Jasper commented, the path for the semicircles should be split at least here:
... coordinate (A) -- (150:1) (A) -- (90:.5) coordinate (C) ...
where I continued with the last 3 points for pure lazyness. Defining a second decoration style to better place the arrows there may be an option, too. It also may be a good choice to start the "semicircle" one point earlier, i.e. before the arc, i.e. at the lower left corner. Might have some beneficial consequences.
Turns out, you can split the decoration style, too; the lower left point is critical, as two pathes run through it:

\documentclass[10pt,border=3mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{decorations.markings}
\begin{document}
\begin{tikzpicture}
[decoration={
markings,
mark=between positions 0.06 and .5 step 5.3mm with {\arrow{stealth}} ,
mark=between positions 0.6 and .8 step 6mm with {\arrow{stealth}} ,% new
mark=between positions 0.835 and 1 step 6mm with {\arrow{stealth}}% new
}]
% ~~~ "semicircle" ~~~~~~~~~~
\draw [postaction={decorate}] (150:1) arc(150:30:1) -- (0:.5) coordinate (B) -- (0:-.5) coordinate (A) -- (150:1) (A) -- (90:.5) coordinate (C) -- (B) ;
% ~~~ filled circles ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
% refactored
\foreach \p in {(150:1),(120:1),(90:1),(60:1),(30:1),(A),(B),(C)}{
\draw [fill=white] \p circle [radius=1pt];
}
\end{tikzpicture}
\end{document}