Did you notice something a tad unusual in the output of Figure 7.6? The very last line there – the so-called vsyscall entry – maps a kernel page (by now, you know how we can tell: the MSB 16 bits of its start and end virtual addresses are set). Here, we just mention the fact that this is an (old) optimization for performing system calls. It works by alleviating the need to actually switch to kernel mode for a small subset of syscalls that don't really need to.
Currently, on the x86, these include the gettimeofday(2), time(2), and getcpu(2) system calls. Indeed, the vvar and vdso (aka vDSO) mappings above it are (slightly) modern variations on the same theme. If you are interested in finding out more about this, visit the Further reading section for this chapter.
So, you've now seen how to examine the user space memory map of any given process by directly reading and interpreting the output of the /proc/PID/maps (pseudo) file for the...