That's what he did; it's just embedded inside Rust code.
This is the easy part - capturing exceptions. Handling them, and returning control with the machine state intact, is the messy part.
(It's late to be writing an operating system with demand paging. The most paging ever accomplishes is the illusion of 2X the RAM. RAM is cheap today. The price you pay for paging is random large delays in your program. Is it worth it to save some RAM cost? Mobile devices and real-time OSs don't demand-page.)