https://github.com/steciuk/soi_2-process-rescheduling
Process rescheduling in Minix system.
https://github.com/steciuk/soi_2-process-rescheduling
Last synced: 7 months ago
JSON representation
Process rescheduling in Minix system.
- Host: GitHub
- URL: https://github.com/steciuk/soi_2-process-rescheduling
- Owner: steciuk
- Created: 2021-03-11T15:30:56.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2021-03-11T15:54:24.000Z (over 4 years ago)
- Last Synced: 2025-01-06T20:25:21.190Z (9 months ago)
- Language: C
- Homepage:
- Size: 40 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# SOI_2-process-rescheduling
**minix_usr/a.c**
- kod programu testującego będącego procesem z grupy A
- wymuszenie należenia do grupy A poprzez changegroup()
- długa pętla zawarta między time_t(&Begin) a time_t(&end)
- wywołania _syscall(0,GETGROUP,&msg) oraz _syscall(0,CHANGEGROUP,&msg)
- wykonywalny jako ./a**minix_usr/b.c**
- kod programu testującego będącego procesem z grupy B
- wymuszenie należenia do grupy B poprzez changegroup()
- długa pętla zawarta między time_t(&Begin) a time_t(&end)
- wywołania _syscall(0,GETGROUP,&msg) oraz _syscall(0,CHANGEGROUP,&msg)
- wykonywalny jako ./b**minix_usr/c.c**
- kod programu testującego będącego procesem z grupy B
- wymuszenie należenia do grupy B poprzez changegroup()
- nieskończona pętla
- wywołania _syscall(0,GETGROUP,&msg) oraz _syscall(0,CHANGEGROUP,&msg)
- wykonywalny jako ./c**minix_usr/setscheduler.c**
- kod programu ustawiającego proporcje czasu procesora
- zwraca -1 gdy należy do gruby B
- wywołanie _syscall(0,SETSCHEDULER,&msg)
- przyjmuje jeden argument (int)**minix_usr/include/minix/callnr.h**
- edytowane linie: 1, 68-70
- NCALLS ustawione na 81
- dodane wpisy syscalli SETSCHEDULER, CHANGEGROUP, GETGROUP**minix_usr/src/fs/table.c**
- edytowane linie: 98-100
- dopisanie do tablicy wywołań modułu FS trzech wywołań pustych**minix_usr/src/mm/table.c**
- edytowane linie: 96-98
- dopisanie do tablicy wywołań modułu MM wpisów odpowiadających stworzonym syscallom**minix_usr/src/mm/main.c**
- edytowane linie: 22, 23, 72-99
- dodanie syscalli wywołujących odpowiednie taskcalle
- kontrola poprawności podanego argumentu w set_scheduler()**minix_usr/src/mm/proto.h**
- edytowane linie: 41-43
- dodanie prototypów stworzonych syscalli**minix_usr/include/minix/com.h**
- edytowane linie: 137-139
- dodane wpisy taskcalli SYS_SETSCHEDULER, SYS_CHANGEGROUP, SYS_GETGROUP**minix_usr/src/kernel/system.c**
- edytowane linie: 149-151, 187-189, 244-248, 1239-1277
- dodane prototypy taskcalli i ich decydenta
- przydzielanie procesów do odpowiednich grup na podstawie parzystości ich PID w do_fork
- dodanie definicji stworzonych taskcalli**minix_usr/src/kernel/clock.c**
- edytowane linie: 186-195
- sprawdzanie do której grupy należy następny w kolejce proces i odpowiednie ustawianie sched_ticks**minix_usr/src/kernel/main.c**
- edytowane linie: 39
- inicjalizacja zmiennej percent przechowującej ustaloną proporcję czasu procesora**minix_usr/src/kernel/proc.h**
- edytowane linie: 62, 66-69
- zadeklarowanie zmiennej group przechowywującej informacje o grupie do której należy proces
- dwa odpowiednie define’y dla grup A i B minix_usr/go.sh
- skrypt testujący działanie projektu w przypadku dwóch skończonych programów z różnych grup. Ma na celu pokazać że dwa wywołane programy z różnych grup rzeczywiście otrzymują różny przydział procesora. Nie pokazuje jednak czy proporcje są zgodne z podanym argumentem, gdyż po zakończeniu pierwszego programu – drugi już nie ma z kim „walczyć” o czas procesora.**minix_usr/go2.sh**
- skrypt wywołujący program z grupy A na tle nieskończonego procesu z grupy B. Ma na celu pokazać czy rzeczywiście procesor jest rozdzielany zgodnie z podanym argumentem.Czas wykonywania procesu dla argumentu dziewięciu podanych wartości argumentu przedstawia
wykres:

Oś pionowa to czas wykonywania się procesu A w sekundach a oś pozioma przydzielony grupie A procent czasu procesora. Z wykresu widać, że np. dla argumentu 60% proces wykonuje się około dwa razy dłużej niż dla 30% oraz fakt, że wywołując dwa skończone procesy z dwóch rożnych grup z argumentem 50% (./go.sh) potwierdza poprawność rozdystrybuowania czasu procesora pomiędzy grupy A i B (zauważmy że rozbieżność między przewidywanymi wynikami (linia szara) a rzeczywistością (pomarańczowa) jest niewielka i wynika najprawdopodobniej z rzadkich (ale mających miejsce) wyścigów między funkcjami do_clocktick oraz clock_handler w clock.c oraz czasem operacji samego shedulera)Zrzut ekranu działania dla dwóch skończonych procesów z różnych grup z argumentem 50 i czasem wykonania zgodnym z wykresem (27 s):
