Search
Na tomto cvičení se seznámíte s jádrem miniaturního OS NOVA a implementujete do něj systémové volání brk. NOVA je mikrohypervizor původně vyvíjený na Drážďanské univerzitě, později ve firmě Intel a nyní firmami GENODE labs a Cyberus Technology. Na cvičeních však nebudete pracovat s kompletní verzí jádra NOVA, ale se zjednodušenou verzí pro výuku, která má pouze 2 tisíce řádek kódu.
brk
Pro toto cvičení budete potřebovat následující:
libc6-dev-i386, qemu-system-i386
Ec::syscall_handler
Ptab::insert_mapping
Kalloc
ssh -X «login»@postel.felk.cvut.cz
Implementujte systémové volání brk s prototypem:
void *brk(void *address)
Toto systémové volání nastaví konec datového segmentu v adresním prostoru procesu (tzv. program break nebo jen break) na adresu danou parametrem address. Tím se zvětší nebo zmenší množství alokované paměti, které může program využívat ke svému běhu. Break je první adresa za koncem namapovaného datového segmentu.
address
Vaše řešení by mělo splňovat následující požadavky:
Odevzdává se archiv se souborem ec_syscall.cc obsahující vaši implementaci, ideálně vytvořený pomocí
ec_syscall.cc
make hw10
user/hello.c
make run
Ec::root_invoke()
readelf –program-headers hello
Ec::break_min
Ec::break_current
readelf –sections hello
Při vývoji operačního systému nelze používat debugger tak jednoduše, jak jste zvyklí při vývoji aplikací. Ladit váš kód můžete přidáváním příkazů printf() na potřebná místa v kódu. Pokud vám to nestačí můžete použít parametr -gdb (případně zkratku -s) emulátoru Qemu.
printf()
-gdb
-s
Abychom vám ladění usnadnili, v hlavním Makefile jsou připravena pravidla jak pro spouštění Qemu se zmiňovanými parametry, tak pro spouštění debuggeru gdb tak, aby šel ladit kód běžící v Qemu:
Makefile
gdb
make rd
make du
make dk
break
Užitečné příkazy gdb (většinou se dají zkrátit na první znak):
next
step
continue
print
p initialized_var
p/x initialized_var
x
x/16 0x2000
x/16 &initialized_var
info registers
info locals
layout src
tui disable
Pro ladění můžete používat i monitorovací konzoli Qemu, která umožňuje zobrazit stav emulovaného CPU.
Ctrl-Alt-2
Ctrl-a c
-nographic
info mem
info tlb