NOVA Introduction

NOVA Introduction

NOVA introduction Michal Sojka1 Czech Technical University in Prague, Email: [email protected] December 5, 2017 1Based on exercises by Benjamin Engel from TU Dresden. M. Sojka B4B35OSY NOVA intro December 5, 2017 1 / 16 NOVA microhypervisor I Research project of TU Dresden (< 2012) and Intel Labs (≥ 2012). I http://hypervisor.org/, x86, GPL. I We will use a stripped down version (2 kLoC) of the microhypervisor (kernel). M. Sojka B4B35OSY NOVA intro December 5, 2017 2 / 16 Table of content Prerequisites System booting Program binaries ELF headers Virtual memory management Additional information M. Sojka B4B35OSY NOVA intro December 5, 2017 3 / 16 Prerequisites What you need to know? I NOVA is implemented in C++ (and assembler). I Each user “program” is represented by execution context data structure (class Ec). I The first executed program is called root task (similar to init process in Unix). M. Sojka B4B35OSY NOVA intro December 5, 2017 4 / 16 Prerequisites Getting started unzip nova.zip cd nova make # Compile everything make run # Run it in Qemu emulator Understanding qemu invocation qemu-system-i386 -serial stdio -kernel kern/build/hypervisor -initrd user/hello I Serial line of the emulated machine will go to stdout I Address of user/hello binary will be passed to the kernel via Multiboot info data structure Source code layout I user/ – user space code (hello world + other simple programs) I kern/ – stripped down NOVA kernel I you will need to modify kern/src/ec.cc M. Sojka B4B35OSY NOVA intro December 5, 2017 5 / 16 0 0x2000 3G (0xC0000000) Remap 4G page Virtual memory User space Kernel space EIP EIPEIPEIPEIP Kernel code/data ELF header EIP User code/data User stack multiboot user/hello kern/build/hypervisor info System booting NOVA booting 1. CPU reset, BIOS executes 2. Bootloader loads the kernel binary and user application into memory 3. Bootloader starts executing the kernel (kern/src/start.S) 4. Kernel initializes CPU and paging (virtual memory) (start.S, init.cc) 5. Kernel allocates and maps one page for application stack (kern/src/ec.cc, Ec::root_invoke()) 6. Kernel looks at ELF program header to see where the application wants to be loaded (Ec::root_invoke()). 7. Kernel creates page table entries according to the ELF header (Ec::root_invoke()) 8. Kernel jump to application entry point sysenter (Ec::root_invoke()) Physical memory M. Sojka B4B35OSY NOVA intro December 5, 2017 6 / 16 0 0x2000 3G (0xC0000000) Remap 4G page Virtual memory User space Kernel space EIP EIPEIPEIPEIP Kernel code/data ELF header EIP User code/data User stack multiboot user/hello kern/build/hypervisor info System booting NOVA booting 1. CPU reset, BIOS executes 2. Bootloader loads the kernel binary and user application into memory 3. Bootloader starts executing the kernel (kern/src/start.S) 4. Kernel initializes CPU and paging (virtual memory) (start.S, init.cc) 5. Kernel allocates and maps one page for application stack (kern/src/ec.cc, Ec::root_invoke()) 6. Kernel looks at ELF program header to see where the application wants to be loaded (Ec::root_invoke()). 7. Kernel creates page table entries according to the ELF header (Ec::root_invoke()) 8. Kernel jump to application entry point sysenter (Ec::root_invoke()) Physical memory M. Sojka B4B35OSY NOVA intro December 5, 2017 6 / 16 0 0x2000 3G (0xC0000000) Remap 4G page Virtual memory User space Kernel space EIP EIPEIPEIPEIP Kernel code/data ELF header EIP User code/data User stack multiboot user/hello kern/build/hypervisor info System booting NOVA booting 1. CPU reset, BIOS executes 2. Bootloader loads the kernel binary and user application into memory 3. Bootloader starts executing the kernel (kern/src/start.S) 4. Kernel initializes CPU and paging (virtual memory) (start.S, init.cc) 5. Kernel allocates and maps one page for application stack (kern/src/ec.cc, Ec::root_invoke()) 6. Kernel looks at ELF program header to see where the application wants to be loaded (Ec::root_invoke()). 7. Kernel creates page table entries according to the ELF header (Ec::root_invoke()) 8. Kernel jump to application entry point sysenter (Ec::root_invoke()) Physical memory M. Sojka B4B35OSY NOVA intro December 5, 2017 6 / 16 0 0x2000 3G (0xC0000000) Remap 4G page Virtual memory User space Kernel space EIP EIPEIPEIPEIP Kernel code/data ELF header EIP User code/data User stack multiboot user/hello kern/build/hypervisor info System booting NOVA booting 1. CPU reset, BIOS executes 2. Bootloader loads the kernel binary and user application into memory 3. Bootloader starts executing the kernel (kern/src/start.S) 4. Kernel initializes CPU and paging (virtual memory) (start.S, init.cc) 5. Kernel allocates and maps one page for application stack (kern/src/ec.cc, Ec::root_invoke()) 6. Kernel looks at ELF program header to see where the application wants to be loaded (Ec::root_invoke()). 7. Kernel creates page table entries according to the ELF header (Ec::root_invoke()) 8. Kernel jump to application entry point sysenter (Ec::root_invoke()) Physical memory M. Sojka B4B35OSY NOVA intro December 5, 2017 6 / 16 0 0x2000 3G (0xC0000000) Remap 4G page Virtual memory User space Kernel space EIP EIPEIPEIPEIP Kernel code/data ELF header EIP User code/data User stack multiboot user/hello kern/build/hypervisor info System booting NOVA booting 1. CPU reset, BIOS executes 2. Bootloader loads the kernel binary and user application into memory 3. Bootloader starts executing the kernel (kern/src/start.S) 4. Kernel initializes CPU and paging (virtual memory) (start.S, init.cc) 5. Kernel allocates and maps one page for application stack (kern/src/ec.cc, Ec::root_invoke()) 6. Kernel looks at ELF program header to see where the application wants to be loaded (Ec::root_invoke()). 7. Kernel creates page table entries according to the ELF header (Ec::root_invoke()) 8. Kernel jump to application entry point sysenter (Ec::root_invoke()) Physical memory M. Sojka B4B35OSY NOVA intro December 5, 2017 6 / 16 0 0x2000 3G (0xC0000000) Remap 4G page Virtual memory User space Kernel space EIP EIPEIPEIPEIP Kernel code/data ELF header EIP User code/data User stack multiboot user/hello kern/build/hypervisor info System booting NOVA booting 1. CPU reset, BIOS executes 2. Bootloader loads the kernel binary and user application into memory 3. Bootloader starts executing the kernel (kern/src/start.S) 4. Kernel initializes CPU and paging (virtual memory) (start.S, init.cc) 5. Kernel allocates and maps one page for application stack (kern/src/ec.cc, Ec::root_invoke()) 6. Kernel looks at ELF program header to see where the application wants to be loaded (Ec::root_invoke()). 7. Kernel creates page table entries according to the ELF header (Ec::root_invoke()) 8. Kernel jump to application entry point sysenter (Ec::root_invoke()) Physical memory M. Sojka B4B35OSY NOVA intro December 5, 2017 6 / 16 0 0x2000 3G (0xC0000000) Remap 4G page Virtual memory User space Kernel space EIP EIPEIPEIPEIP Kernel code/data ELF header EIP User code/data User stack multiboot user/hello kern/build/hypervisor info System booting NOVA booting 1. CPU reset, BIOS executes 2. Bootloader loads the kernel binary and user application into memory 3. Bootloader starts executing the kernel (kern/src/start.S) 4. Kernel initializes CPU and paging (virtual memory) (start.S, init.cc) 5. Kernel allocates and maps one page for application stack (kern/src/ec.cc, Ec::root_invoke()) 6. Kernel looks at ELF program header to see where the application wants to be loaded (Ec::root_invoke()). 7. Kernel creates page table entries according to the ELF header (Ec::root_invoke()) 8. Kernel jump to application entry point sysenter (Ec::root_invoke()) Physical memory M. Sojka B4B35OSY NOVA intro December 5, 2017 6 / 16 0 0x2000 3G (0xC0000000) Remap 4G page Virtual memory User space Kernel space EIP EIPEIPEIPEIP Kernel code/data ELF header EIP User code/data User stack multiboot user/hello kern/build/hypervisor info System booting NOVA booting 1. CPU reset, BIOS executes 2. Bootloader loads the kernel binary and user application into memory 3. Bootloader starts executing the kernel (kern/src/start.S) 4. Kernel initializes CPU and paging (virtual memory) (start.S, init.cc) 5. Kernel allocates and maps one page for application stack (kern/src/ec.cc, Ec::root_invoke()) 6. Kernel looks at ELF program header to see where the application wants to be loaded (Ec::root_invoke()). 7. Kernel creates page table entries according to the ELF header (Ec::root_invoke()) 8. Kernel jump to application entry point sysenter (Ec::root_invoke()) Physical memory M. Sojka B4B35OSY NOVA intro December 5, 2017 6 / 16 Program binaries Program binaries Executable and Linkable Format (ELF) http://www.sco.com/developers/devspecs/gabi41.pdf, chapter 4 Linking view Execution view I Composed of headers, ELF header ELF header segments and sections Program header Program header table (optional) table I One segment contains one or more sections Section 1 Segment 1 I A section may or may ... (e.g. code) not belong to a segment Section n Segment 2 I All of this is controlled ... (e.g. data) by “linker scripts” – ... ... they tell the linker how Section header Section header to link the program table table (optional) (more info later). M. Sojka B4B35OSY NOVA intro December 5, 2017 7 / 16 Program binaries ELF header elf.h, class Eh magic: 7f ’E’ ’L’ ’F’ I Each binary starts with this class data version padd. header padding I Can be shown by padding readelf -h type machine I Your code should: version I Check magic, data == 1 entry and type == 2 ph_offset I Read entry, i.e. user EIP I Read information about sh_offset program headers flags I ph_count: number of eh_size ph_size program headers ph_count sh_size I ph_offset: where within the file the sh_count strtab program header table starts M.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    23 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us