The two participants in pair programming are called the driver and the navigator. The driver is working the keyboard and thinking about the immediate task: "Ok, open this file, scroll down to that method, rename this variable." The navigator is, in general, thinking about the bigger picture: "All right, we're applying the bridge pattern, so we're going to have to create this class, and it's going to be responsible for such and such."
One thing I've noticed is that after a day of 6 or 7 hours of focused, concentrated pair programming I feel totally drained, as if I'd worked for 10 hours or so on my own. But you really feel like you've acheived something: quality software, and you know it won't break. You have unit tests for it and your pair kept you honest.
Contrary to popular opinion, the pair is not passive at all, both people working at their full capacity, not being slowed down by getting stuck, since if one of them starts to get stuck, the other may already have the answer and if not, they can switch positions and try to each gain a fresh perspective.