Here are some possible ideas for the final project for the exam: 1) Reproduce the experiments measuring the kernel latency (http://retis.santannapisa.it/~luca/AdvancedOS/kernel_latency.pdf, slide 33) on more recent software and hardware. You can use cyclictest (https://wiki.linuxfoundation.org/realtime/documentation/howto/tools/cyclictest) to measure the latency, on: - A vanilla Linux kernel compiled as a non-preemptive kernel (Preemption Model = No Forced Preemption) - A vanilla Linux kernel compiled with Preemption Model = Voluntary Kernel Preemption - A vanilla Linux kernel compiled as preemptable (Preemption Model = Preemptible Kernel) - A preempt-RT kernel with full real-time preemption (http://cdn.kernel.org/pub/linux/kernel/projects/rt/) Some hints about generating a non-real-time workload that triggers high latencies can be found at https://wiki.linuxfoundation.org/realtime/documentation/howto/tools/worstcaselatency 2) Same as project 1), but compare a non-preemptable Linux kernel with preempt-RT and with Xenomai 3) Same as above, but use a microkernel-based system instead (for example, DROPS - http://os.inf.tu-dresden.de/drops/ - or Secure L4 - https://docs.sel4.systems/GettingStarted) 4) Reproduce the Xenomai experiment (http://retis.santannapisa.it/~luca/AdvancedOS/XenoTest) with a recent version of Xenomai. You can chose the hardware architecture you prefer 5) Run some similar experiment with a microkernel-based system (based on Fiasco - http://os.inf.tu-dresden.de/fiasco Secure L4 - https://docs.sel4.systems/GettingStarted or something different - http://www.genode.org) 6) Run some latency tests on a VM (based on Xen or KVM) using preempt-RT in the guest and / or in the host 7) Extend the "trap and emulate" kernel (http://retis.santannapisa.it/~luca/AdvancedOS/trap_and_emulate.tgz) to use VT-x (similarly to the Linux module http://retis.santannapisa.it/~luca/AdvancedOS/vmdemo.tgz) 8) Run some more advanced experiment with the kvm driver (extending http://retis.santannapisa.it/~luca/AdvancedOS/kvm-test.tgz) 9) Try some simple "trap and emulate" experiment on ARM / ARM64 10) Run some simple experiment with the ARM / ARM64 virtualization extensions 11) Run some experiments with an unikernel (for example, based on Solo5 https://github.com/Solo5/solo5), comparing boot time, latencies and throughput with some other "optimized" VM