  Peterson's mutual exclusion algorithm for two processes has been generalized
to $N$ processes in various ways. As far as we know, no such generalization is
starvation free without making any fairness assumptions. In this paper, we
study the generalization of Peterson's algorithm to $N$ processes using a
tournament tree. Using the mCRL2 language and toolset we prove that it is not
starvation free unless weak fairness assumptions are incorporated. Inspired by
the counterexample for starvation freedom, we propose a fair $N$-process
generalization of Peterson's algorithm. We use model checking to show that our
new algorithm is correct for small $N$. For arbitrary $N$, model checking is
infeasible due to the state space explosion problem, and instead, we present a
general proof that, for $N \geq 4$, when a process requests access to the
critical section, other processes can enter first at most $(N-1)(N-2)$ times.
