We have developed a stack of semantics for a high-level C-like language and low-level assembly code, which has been carefully
crafted to support the pervasive verification of system software. It can handle mixed-language implementations and concurrently
operating devices, and permits the transferral of properties to the target architecture while obeying its resource restrictions.
We demonstrate the applicability of our framework by proving the correct virtualization of user memory in our microkernel,
which implements demand paging. This verification target is of particular interest because it has a relatively simple top-level
specification and it exercises all parts of our semantics stack. At the bottom level a disk driver written in assembly implements
page transfers via a swap disk. A page-fault handler written in C uses the driver to implement the paging algorithm. It guarantees
that a step of the currently executing user can be simulated at the architecture level. Besides the mere theoretical and technical
difficulties the project also bore the social challenge to manage the large verification effort, spread over many sites and
people, concurrently contributing to and maintaining a common theory corpus. We share our experiences and elaborate on lessons
learned.
Keywords Pervasive formal verification - Systems verification - Software verification
Work supported by the German Federal Ministry of Education and Research (BMBF) under grant 01 IS C38. Work of the first and
the third author supported by DFG Graduiertenkolleg “Leistungsgarantien für Rechnersysteme”. Work of the fifth author supported
by the International Max Planck Research School for Computer Science (IMPRS-CS).