EXERCISE: GETTING STARTED - TU Dresdenos.inf.tu-dresden.de/Studium/KMB/WS2012/Exercise1.pdf ·...
Transcript of EXERCISE: GETTING STARTED - TU Dresdenos.inf.tu-dresden.de/Studium/KMB/WS2012/Exercise1.pdf ·...
![Page 1: EXERCISE: GETTING STARTED - TU Dresdenos.inf.tu-dresden.de/Studium/KMB/WS2012/Exercise1.pdf · EXERCISE: GETTING STARTED. TU Dresden Getting Started ... SRC_C = hello.c include $](https://reader030.fdocuments.us/reader030/viewer/2022020315/5ace1bb47f8b9a56098b5e2f/html5/thumbnails/1.jpg)
Faculty of Computer Science Institute of System Architecture, Operating Systems Group
MICHAEL ROITZSCH
EXERCISE:GETTING STARTED
![Page 2: EXERCISE: GETTING STARTED - TU Dresdenos.inf.tu-dresden.de/Studium/KMB/WS2012/Exercise1.pdf · EXERCISE: GETTING STARTED. TU Dresden Getting Started ... SRC_C = hello.c include $](https://reader030.fdocuments.us/reader030/viewer/2022020315/5ace1bb47f8b9a56098b5e2f/html5/thumbnails/2.jpg)
TU Dresden Getting Started
AGENDA
2
■ first contact with a microkernel OS
■ getting to know QEMU
■ compile Fiasco
■ compile minimal system environment
■ talk about system booting
■ the usual „Hello World“
■ review some stuff and play with the system
![Page 3: EXERCISE: GETTING STARTED - TU Dresdenos.inf.tu-dresden.de/Studium/KMB/WS2012/Exercise1.pdf · EXERCISE: GETTING STARTED. TU Dresden Getting Started ... SRC_C = hello.c include $](https://reader030.fdocuments.us/reader030/viewer/2022020315/5ace1bb47f8b9a56098b5e2f/html5/thumbnails/3.jpg)
TU Dresden Getting Started
QEMU■ developing your own kernel usually
requires a dedicated machine
■ we will use a virtual machine
■ QEMU is open-source software providing a virtual machine by binary translation
■ it emulates a complete x86 PC
■ available for other architectures as well
■ our QEMU will boot from an ISO image3
![Page 4: EXERCISE: GETTING STARTED - TU Dresdenos.inf.tu-dresden.de/Studium/KMB/WS2012/Exercise1.pdf · EXERCISE: GETTING STARTED. TU Dresden Getting Started ... SRC_C = hello.c include $](https://reader030.fdocuments.us/reader030/viewer/2022020315/5ace1bb47f8b9a56098b5e2f/html5/thumbnails/4.jpg)
TU Dresden Getting Started
BOOTING
4
![Page 5: EXERCISE: GETTING STARTED - TU Dresdenos.inf.tu-dresden.de/Studium/KMB/WS2012/Exercise1.pdf · EXERCISE: GETTING STARTED. TU Dresden Getting Started ... SRC_C = hello.c include $](https://reader030.fdocuments.us/reader030/viewer/2022020315/5ace1bb47f8b9a56098b5e2f/html5/thumbnails/5.jpg)
TU Dresden Getting Started
BIOS
5
■ Basic Input Output System
■ fixed entry point after „power on“ and „reset“
■ initializes the CPU in 16-bit real-mode
■ detects, checks and initializes some platform hardware (like RAM, PCI, ATA)
■ finds the boot device BIOS
![Page 6: EXERCISE: GETTING STARTED - TU Dresdenos.inf.tu-dresden.de/Studium/KMB/WS2012/Exercise1.pdf · EXERCISE: GETTING STARTED. TU Dresden Getting Started ... SRC_C = hello.c include $](https://reader030.fdocuments.us/reader030/viewer/2022020315/5ace1bb47f8b9a56098b5e2f/html5/thumbnails/6.jpg)
TU Dresden Getting Started
BOOT SECTOR■ first sector on boot disk
■ 512 bytes
■ contains first boot loader stage and partition table
■ BIOS loads code into RAM and executes it
■ problem: How to find and boot an OS in 512 bytes?
6
BIOS
![Page 7: EXERCISE: GETTING STARTED - TU Dresdenos.inf.tu-dresden.de/Studium/KMB/WS2012/Exercise1.pdf · EXERCISE: GETTING STARTED. TU Dresden Getting Started ... SRC_C = hello.c include $](https://reader030.fdocuments.us/reader030/viewer/2022020315/5ace1bb47f8b9a56098b5e2f/html5/thumbnails/7.jpg)
TU Dresden Getting Started
EFI■ Extensible Firmware
Interface
■ plug-ins for new hardware
■ no legacy PC-AT boot(no A20 gate)
■ built-in boot manager
■ more than four partitions,no 2TB limit
■ boot from peripherals (USB)7
EFI
![Page 8: EXERCISE: GETTING STARTED - TU Dresdenos.inf.tu-dresden.de/Studium/KMB/WS2012/Exercise1.pdf · EXERCISE: GETTING STARTED. TU Dresden Getting Started ... SRC_C = hello.c include $](https://reader030.fdocuments.us/reader030/viewer/2022020315/5ace1bb47f8b9a56098b5e2f/html5/thumbnails/8.jpg)
TU Dresden Getting Started
MEMORY LAYOUT
8
BIOSPhysical Memory
Boot Code
BIOS, Video RAM
![Page 9: EXERCISE: GETTING STARTED - TU Dresdenos.inf.tu-dresden.de/Studium/KMB/WS2012/Exercise1.pdf · EXERCISE: GETTING STARTED. TU Dresden Getting Started ... SRC_C = hello.c include $](https://reader030.fdocuments.us/reader030/viewer/2022020315/5ace1bb47f8b9a56098b5e2f/html5/thumbnails/9.jpg)
TU Dresden Getting Started
GRUB■ popular boot loader
■ used by most (all?) Linux distributions
■ uses a two-stage-approach
■ first stage fits in one sector
■ has hard-wired sectors of second stage files
■ second stage can read common file systems
9
BIOS
Boot Loader
![Page 10: EXERCISE: GETTING STARTED - TU Dresdenos.inf.tu-dresden.de/Studium/KMB/WS2012/Exercise1.pdf · EXERCISE: GETTING STARTED. TU Dresden Getting Started ... SRC_C = hello.c include $](https://reader030.fdocuments.us/reader030/viewer/2022020315/5ace1bb47f8b9a56098b5e2f/html5/thumbnails/10.jpg)
TU Dresden Getting Started
GRUB■ second stage loads a
menu.lst config file to present a boot menu
■ from there, you can load your kernel
■ supports loading multiple modules
■ files can also be retrieved from network
10
BIOS
Boot Loader
![Page 11: EXERCISE: GETTING STARTED - TU Dresdenos.inf.tu-dresden.de/Studium/KMB/WS2012/Exercise1.pdf · EXERCISE: GETTING STARTED. TU Dresden Getting Started ... SRC_C = hello.c include $](https://reader030.fdocuments.us/reader030/viewer/2022020315/5ace1bb47f8b9a56098b5e2f/html5/thumbnails/11.jpg)
TU Dresden Getting Started
GRUB■ switches CPU to 32-bit
protected mode
■ loads and interprets the „kernel“ binary
■ loads additional modules into memory
■ sets up multiboot info structure
■ starts the kernel11
BIOS
Boot Loader
![Page 12: EXERCISE: GETTING STARTED - TU Dresdenos.inf.tu-dresden.de/Studium/KMB/WS2012/Exercise1.pdf · EXERCISE: GETTING STARTED. TU Dresden Getting Started ... SRC_C = hello.c include $](https://reader030.fdocuments.us/reader030/viewer/2022020315/5ace1bb47f8b9a56098b5e2f/html5/thumbnails/12.jpg)
TU Dresden Getting Started
MEMORY LAYOUT
12
BIOS
Boot Loader
Physical Memory
Grub
Multiboot Info
BIOS, Video RAMKernel Binary
ModuleModuleModuleModule
![Page 13: EXERCISE: GETTING STARTED - TU Dresdenos.inf.tu-dresden.de/Studium/KMB/WS2012/Exercise1.pdf · EXERCISE: GETTING STARTED. TU Dresden Getting Started ... SRC_C = hello.c include $](https://reader030.fdocuments.us/reader030/viewer/2022020315/5ace1bb47f8b9a56098b5e2f/html5/thumbnails/13.jpg)
TU Dresden Getting Started
BOOTSTRAP
13
■ our modules are ELF files: executable and linkable format
■ contain multiple sections
■ code, data, BSS
■ bootstrap interprets the ELF modules
■ copies sections to final location in physical memory BIOS
Boot Loader
Bootstrap
![Page 14: EXERCISE: GETTING STARTED - TU Dresdenos.inf.tu-dresden.de/Studium/KMB/WS2012/Exercise1.pdf · EXERCISE: GETTING STARTED. TU Dresden Getting Started ... SRC_C = hello.c include $](https://reader030.fdocuments.us/reader030/viewer/2022020315/5ace1bb47f8b9a56098b5e2f/html5/thumbnails/14.jpg)
TU Dresden Getting Started
BOOTSTRAP■ actual kernel is the first of the
modules
■ must know about the other modules
■ bootstrap sets up a kernel info page
■ contains entry point and stack pointer of sigma0 and moe
■ passes control to the kernel14
BIOS
Boot Loader
Bootstrap
![Page 15: EXERCISE: GETTING STARTED - TU Dresdenos.inf.tu-dresden.de/Studium/KMB/WS2012/Exercise1.pdf · EXERCISE: GETTING STARTED. TU Dresden Getting Started ... SRC_C = hello.c include $](https://reader030.fdocuments.us/reader030/viewer/2022020315/5ace1bb47f8b9a56098b5e2f/html5/thumbnails/15.jpg)
TU Dresden Getting Started
MEMORY LAYOUT
15
BIOS
Boot Loader
Physical Memory
Bootstrap
Kernel
Multiboot Info
BIOS, Video RAM
Module
CodeData
CodeData
![Page 16: EXERCISE: GETTING STARTED - TU Dresdenos.inf.tu-dresden.de/Studium/KMB/WS2012/Exercise1.pdf · EXERCISE: GETTING STARTED. TU Dresden Getting Started ... SRC_C = hello.c include $](https://reader030.fdocuments.us/reader030/viewer/2022020315/5ace1bb47f8b9a56098b5e2f/html5/thumbnails/16.jpg)
TU Dresden Getting Started
KERNEL LOADER■ initial kernel code
■ basic CPU setup
■ detecting CPU features
■ setup various CPU-tables
■ sets up basic page table
■ enables virtual memory mode
■ runs the actual kernel code16
BIOS
Boot Loader
Bootstrap
Kernel Loader
![Page 17: EXERCISE: GETTING STARTED - TU Dresdenos.inf.tu-dresden.de/Studium/KMB/WS2012/Exercise1.pdf · EXERCISE: GETTING STARTED. TU Dresden Getting Started ... SRC_C = hello.c include $](https://reader030.fdocuments.us/reader030/viewer/2022020315/5ace1bb47f8b9a56098b5e2f/html5/thumbnails/17.jpg)
TU Dresden Getting Started
MEMORY LAYOUT
17
BIOS
Boot Loader
Virtual Memory
Kernel
Kernel Memory
Bootstrap
Kernel Loader
Physical Memory1:1 mapped
![Page 18: EXERCISE: GETTING STARTED - TU Dresdenos.inf.tu-dresden.de/Studium/KMB/WS2012/Exercise1.pdf · EXERCISE: GETTING STARTED. TU Dresden Getting Started ... SRC_C = hello.c include $](https://reader030.fdocuments.us/reader030/viewer/2022020315/5ace1bb47f8b9a56098b5e2f/html5/thumbnails/18.jpg)
TU Dresden Getting Started
FIASCO
■ sets up kernel structures
■ sets up scheduling timer
■ starts first pager
■ starts first task
■ starts scheduling
■ scheduler hands control to userland for the first time
18
BIOS
Boot Loader
Bootstrap
Kernel Loader
Kernel
![Page 19: EXERCISE: GETTING STARTED - TU Dresdenos.inf.tu-dresden.de/Studium/KMB/WS2012/Exercise1.pdf · EXERCISE: GETTING STARTED. TU Dresden Getting Started ... SRC_C = hello.c include $](https://reader030.fdocuments.us/reader030/viewer/2022020315/5ace1bb47f8b9a56098b5e2f/html5/thumbnails/19.jpg)
TU Dresden Getting Started
SIGMA0■ is the first pager in the
system
■ initially receives a 1:1 mapping of physical memory
■ … and other platform-level resources (IO ports)
■ sigma0 is the root of the pager hierarchy
■ pager for moe19
BIOS
Boot Loader
Bootstrap
Kernel Loader
Kernel
σ0
![Page 20: EXERCISE: GETTING STARTED - TU Dresdenos.inf.tu-dresden.de/Studium/KMB/WS2012/Exercise1.pdf · EXERCISE: GETTING STARTED. TU Dresden Getting Started ... SRC_C = hello.c include $](https://reader030.fdocuments.us/reader030/viewer/2022020315/5ace1bb47f8b9a56098b5e2f/html5/thumbnails/20.jpg)
TU Dresden Getting Started
MOE
■ manages initial resources
■ namespace
■ memory
■ VESA framebuffer
■ provides logging facility
■ mini-filesystem for read-only access to boot-modules
20
BIOS
Boot Loader
Bootstrap
Kernel Loader
Kernel
Moeσ0
![Page 21: EXERCISE: GETTING STARTED - TU Dresdenos.inf.tu-dresden.de/Studium/KMB/WS2012/Exercise1.pdf · EXERCISE: GETTING STARTED. TU Dresden Getting Started ... SRC_C = hello.c include $](https://reader030.fdocuments.us/reader030/viewer/2022020315/5ace1bb47f8b9a56098b5e2f/html5/thumbnails/21.jpg)
TU Dresden Getting Started
NED■ script-driven loader for
further programs
■ startup-scripts written in Lua
■ additional software can be loaded by retrieving binaries via disk or network drivers
■ ned injects a common service kernel into every task
21
BIOS
Boot Loader
Bootstrap
Kernel Loader
Kernel
Ned
Moeσ0
![Page 22: EXERCISE: GETTING STARTED - TU Dresdenos.inf.tu-dresden.de/Studium/KMB/WS2012/Exercise1.pdf · EXERCISE: GETTING STARTED. TU Dresden Getting Started ... SRC_C = hello.c include $](https://reader030.fdocuments.us/reader030/viewer/2022020315/5ace1bb47f8b9a56098b5e2f/html5/thumbnails/22.jpg)
Setup
• download the source tarball fromhttps://os.inf.tu-dresden.de/Studium/KMB/WS2012/Exercise1.tar.bz2
• unpack the tarball• it comes with a working directory• cd in there and have a look around
• initialize the environment with make setup in the toplevel directory you unpacked
![Page 23: EXERCISE: GETTING STARTED - TU Dresdenos.inf.tu-dresden.de/Studium/KMB/WS2012/Exercise1.pdf · EXERCISE: GETTING STARTED. TU Dresden Getting Started ... SRC_C = hello.c include $](https://reader030.fdocuments.us/reader030/viewer/2022020315/5ace1bb47f8b9a56098b5e2f/html5/thumbnails/23.jpg)
Test-Driving QEMU
• create a bootable ISO image• the iso subdirectory is for the ISO’s content• run isocreator from src/l4/tool/bin on
this directory• your ISO will contain a minimal grub installation• launch QEMU with the resulting ISO:qemu-system-i386 -cdrom boot.iso
![Page 24: EXERCISE: GETTING STARTED - TU Dresdenos.inf.tu-dresden.de/Studium/KMB/WS2012/Exercise1.pdf · EXERCISE: GETTING STARTED. TU Dresden Getting Started ... SRC_C = hello.c include $](https://reader030.fdocuments.us/reader030/viewer/2022020315/5ace1bb47f8b9a56098b5e2f/html5/thumbnails/24.jpg)
Compiling the System
• run make within the toplevel directory
![Page 25: EXERCISE: GETTING STARTED - TU Dresdenos.inf.tu-dresden.de/Studium/KMB/WS2012/Exercise1.pdf · EXERCISE: GETTING STARTED. TU Dresden Getting Started ... SRC_C = hello.c include $](https://reader030.fdocuments.us/reader030/viewer/2022020315/5ace1bb47f8b9a56098b5e2f/html5/thumbnails/25.jpg)
Booting Fiasco
• copy some files to the ISO directory• fiasco from the Fiasco build directoryobj/fiasco/ia32/
• bootstrap fromobj/l4/x86/bin/x86_586/
• sigma0, moe , l4re and ned fromobj/l4/x86/bin/x86_586/l4f/
![Page 26: EXERCISE: GETTING STARTED - TU Dresdenos.inf.tu-dresden.de/Studium/KMB/WS2012/Exercise1.pdf · EXERCISE: GETTING STARTED. TU Dresden Getting Started ... SRC_C = hello.c include $](https://reader030.fdocuments.us/reader030/viewer/2022020315/5ace1bb47f8b9a56098b5e2f/html5/thumbnails/26.jpg)
Booting Fiasco
• edit iso/boot/grub/menu.lst:title Getting Startedkernel /bootstrap -modaddr 0x01100000module /fiascomodule /sigma0module /moemodule /l4remodule /ned
• rebuild the ISO and run qemu
![Page 27: EXERCISE: GETTING STARTED - TU Dresdenos.inf.tu-dresden.de/Studium/KMB/WS2012/Exercise1.pdf · EXERCISE: GETTING STARTED. TU Dresden Getting Started ... SRC_C = hello.c include $](https://reader030.fdocuments.us/reader030/viewer/2022020315/5ace1bb47f8b9a56098b5e2f/html5/thumbnails/27.jpg)
Preparing for Hello
• create the file hello.lua in the iso directory with this content:L4.default_loader:start({},"rom/hello");
• pass ned this new startup script
• add this line to menu.lst:module /hello.lua
• pass rom/hello.lua as parameter to moe• load the future hello module in menu.lst
![Page 28: EXERCISE: GETTING STARTED - TU Dresdenos.inf.tu-dresden.de/Studium/KMB/WS2012/Exercise1.pdf · EXERCISE: GETTING STARTED. TU Dresden Getting Started ... SRC_C = hello.c include $](https://reader030.fdocuments.us/reader030/viewer/2022020315/5ace1bb47f8b9a56098b5e2f/html5/thumbnails/28.jpg)
Exercise 1: Hello World
• create a directory for your hello-project• create a Makefile with the following content:PKGDIR ?= .L4DIR ?= path to L4 source treeOBJ_BASE = absolute path to L4 build treeTARGET = helloSRC_C = hello.cinclude $(L4DIR)/mk/prog.mk
• fill in hello.c and compile with make
• run in qemu
![Page 29: EXERCISE: GETTING STARTED - TU Dresdenos.inf.tu-dresden.de/Studium/KMB/WS2012/Exercise1.pdf · EXERCISE: GETTING STARTED. TU Dresden Getting Started ... SRC_C = hello.c include $](https://reader030.fdocuments.us/reader030/viewer/2022020315/5ace1bb47f8b9a56098b5e2f/html5/thumbnails/29.jpg)
Exercise 2: Ackermann Function
• write a program that spawns six threads• you can use pthreads in our system• add the lineREQUIRES_LIBS = libpthreadto your Makefile
• each thread should calculate one valuea(3,0..5) of the Ackermann function:
• a(0,m) = m+1• a(n,0) = a(n-1,1)• a(n,m) = a(n-1,a(n,m-1))