Table of Contents

Cvičení 10 : NOVA – Systémová volání a správa paměti

3. 12. 2019: Zveřejnili jsme testovací programy, které vám snad usnadní testování vašich implementací.

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.

Domácí příprava

Pro toto cvičení budete potřebovat následující:

Zadání úlohy

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.

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í

make hw10
.

Nápověda

Ladění

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.

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:

Užitečné příkazy gdb (většinou se dají zkrátit na první znak):

Pro ladění můžete používat i monitorovací konzoli Qemu, která umožňuje zobrazit stav emulovaného CPU.

Příklad

Materiály