Skills:-Programming languages: *ARMv7 assembly *C *Java *Standard ML, Haskell and OCaml-Systems programming: *ARMv7 *Hypervisor *Linux kernel: #Memory management #Device drivers: DMA and NIC *GNU tools-Formal methods/verification: *Formalization *Higher-order Logic *Temporal logic *Interactive theorem proving *Model checking *Modeling hardware (MMU and DMA controllers). *Memory isolationInterests:*Hardware: CPUs, I/O devices and interconnects.*Software: Hypervisors and operating systems.*Formal methods.I am interested in knowing how computers work (physics, electronics, VLSI, digital design, micro-architecture/RTL, ISA, compilers, hypervisors, operating systems) and how they can be constructed with ultimate reliability (formal methods/verification).During my PhD I realized the difficulty of manually modeling hardware, and how easy it is to do mistakes that makes the logical model (e.g., in HOL4) differ from the implementation model (written in Verilog or VHDL), due to human errors and errors and ambiguities in the hardware specification. As a long-term goal to address this issue, I thought it would be necessary to have a formal relationship between the logical model and the synthezised model (maybe synthesize VHDL/Verilog code from a HOL4 model). Therefore, I started reading about RTL design, VLSI, electronics and physics as a side project, which are topics I still read up on.In the future I am interested in extending my previous work. Interests include (but not limited to):-Micro-architecture of CPUs, caches, MMU, buses and NoCs (e.g., AMBA, PCIe), peripherals (e.g., Ethernet, USB, graphics).-Low-level software: Device drivers, boot code, firmware, memory management, and synchronization and parallel code.-Emulation: For example, modeling hardware at a higher abstraction-level than RTL to enable easier development of low-level software (e.g., device drivers).-Synthesis: Modeling hardware and/or software in a theorem prover, verifying it, and then synthesizing it to compilable (e.g., C code) and/or synthesizable (e.g., VHDL or Verilog) code.-Functional verification: For instance a DMAC performs data transfers.These are all topics I am interested in reading up and work on (but not limited to). I also think that these ideas coudl help in both hardware and software development for critical applications (security and safety).