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/Slides/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 above, but use a microkernel-based system instead (for example,
   L4RE, genode, DROPS - http://os.inf.tu-dresden.de/drops, or
   Secure L4 - https://docs.sel4.systems/GettingStarted)
3) Run some experiments with an unikernel (for example, based on Solo5
    https://github.com/Solo5/solo5 or includeOS www.includeos.org),
    comparing boot time, latencies and throughput with some other
    "optimized" VM. For measuring latencies, you can use cyclictest 
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 experiments similar to http://retis.santannapisa.it/luca/VMLatencies
   using a different hypervisor (ACRN, or some real-time hypervisor), VMM
   (Intel's cloud hypervisor, Firecracker, ...) or a different hardware
   architecture (ARM or ARM64, ...)
6) Run some more advanced experiment with the kvm driver
   (extending http://retis.santannapisa.it/~luca/AdvancedOS/Src/kvm-test.tgz)
7) Try some simple "trap and emulate" experiment on ARM / ARM64 and/or
   run some simple experiment with the ARM / ARM64 virtualization extensions
8) 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)