ОС2/Пројекат 2022 — разлика између измена
< ОС2
Пређи на навигацију
Пређи на претрагу
(Нова страница: {{tocright}} Пројекат 2022. године је први пројекат из Оперативних система 1 и 2 у ком се користи ''xv6''…) |
|||
| Ред 21: | Ред 21: | ||
=== Дебаговање корисничких програма === | === Дебаговање корисничких програма === | ||
=== Промена учестаности тајмерског прекида === | === Промена учестаности тајмерског прекида === | ||
У сврху тестирања на одбрани је понекад тражено да се повећа учестаност прекида ради прецизнијих мерења перформанси (помоћу системског позива <code>uptime()</code>) и видљивијег ефекта распоређивања. Интервал тајмера се може променити у фајлу ''start.c'' у функцији [https://github.com/mit-pdos/xv6-riscv/blob/riscv//kernel/start.c#L68 timerinit()]. | |||
=== Тумачење ''scause'' и ''sepc'' === | === Тумачење ''scause'' и ''sepc'' === | ||
Верзија на датум 3. фебруар 2022. у 23:36
Пројекат 2022. године је први пројекат из Оперативних система 1 и 2 у ком се користи xv6 оперативни систем на RISC-V архитектури. У овом водичу се налазе корисни савети при изради пројекта.
Додавање интерфејса распоређивача
Интерфејс дефинисан поставком за распоређивач је исти онај из школског језгра:
struct proc *get(); // Дохватање спремног процеса из реда чекања
void put(struct proc *); // Убацивање спремног процеса у ред чекања
xv6 у себи садржи Round-robin распоређивач директно имплементиран у функцији scheduler(). Неопходно је заменити овај алгоритам са траженим интерфејсом. Места од значаја су она где процес мења стање.
- get() у scheduler() након укључивања прекида - прелаз из RUNNABLE у RUNNING.
- put() у yield() - кад процес предаје контекст неком другом процесу.
- put() у userinit() - кад се креира први кориснички процес.
- put() у fork() - кад се форкује нов процес.
- put() у wakeup() - прелаз из SLEEPING у RUNNABLE.
- put() у kill() - кад процес треба да се заврши треба да га пробудимо.
Имплементирање преотимања по временском квантуму
Окружење
Makefile
Дебаговање корисничких програма
Промена учестаности тајмерског прекида
У сврху тестирања на одбрани је понекад тражено да се повећа учестаност прекида ради прецизнијих мерења перформанси (помоћу системског позива uptime()) и видљивијег ефекта распоређивања. Интервал тајмера се може променити у фајлу start.c у функцији timerinit().