This is an old revision of the document!
Scopul acestei teme este realizarea unui planificator de procese. Acesta trebui sa foloseasca trei algoritmi de planificare:
Tema se rezolva individual. Orice tentativa de copiere va rezulta in 0p pentru tema respectiva. Vom utiliza si sisteme automate de detectare a copierii. Daca avem dubii, va vom adresa intrebari suplimentare legate de tema.
Daca aveti intrebari legate de tema, va rugam sa scrieti un issue pe repository-ul de github repository cu titlul de forma [scheduler] <titlul intrebarii voastre>. Aveti nevoie de un cont de github pentru a scrie intrebari.
Daca doriti sa primiti un email cand se pun intrebari noi sau cand apar raspunsuri, accesati github repository si faceti click pe Watch.
Rularea se va face cu urmatorii parametrii:
python3 main.py algorithm quantum first_process
Planificatorul este parte a sistemului de operare. Deoarece scrierea de cod in sistemul de operare este dificila, s-a implementat un simulator de procese in spatiul utilizator.
Fiecare process are la baza un fisier cu extensia pse (Process Executable). Acesta este o insiruire de instructiuni pe care fiecare process le va executa in ordine. Instructiunile sunt de doua tipuri:
Instructiunea de procesare este reprezentata de un p urmat de numarul de intervale de timp in care procesul va procesa. Spre exemplu,
p 5
inseamna ca acest proces va avea nevoie de 5 intervale de timp de procesare.
Fiecare process are la dispozitie trei apeluri de sistem:
Procesul va informa planificatorul ca doreste sa doarma pentru un numar de intervale de timp. Pana acest interval nu este depasit, procesul nu poate fi planificat din nou.
s 3
Procesul informeaza sistemul de operare ca doreste sa creeze un alt process folosind un fisier drept fisier executabil. Planificatorul va crea un nou process si il va lua in considerare pentru planificare.
In exemplul de mai jos, procesul doreste sa execute un nou proces avand fisierul fisier.pse drept fisier executabil.
f fisier.pse
Procesul informeaza sistemul de operare ca a terminat de executat. Planificatorul trebuie sa dealoce resursele procesului si sa nu mai ia in considerare procesul pentru planificari ulterioare.
Apelul de sistem este executat cand procesul ajunge la sfarsitul fisierului executabil.
Simulatorul de procese (process.py) expune clasa Process
care are urmatoarele metode:
#Constructorul, creeaza un nou proces __init__ (pid, filename) # Ruleaza procesul pe care este apelata metoda si il preemteaza dupa //quantum// intervale de procesare sau pentru un apel de sistem. run (quantum) # Incheie executia procesului pe care este apelata metoda. Este datoria voastra sa anulati toate referintele la acel proces (in fisierul main.py) end ()
Constructorul creeaza un process nou.
Planificatorul apeleaza functia acesta in urma unui apel de sistem PROCESS_SYSCALL_FORK.
Daca procesul nou nu poate fi creat, planificatorul va afisa o eroare.
Aceasta functie simuleaza executia unui process. Ea primeste urmatorii parametrii:
La iesire, functia intoarce una din urmatoarele valori:
In caz de eroare, planificatorul va afisa eroare si va inchide procesul.
Acesta functie opreste un process.
Planificatorul apeleaza functia acesta in urma unui apel de sistem PROCESS_SYSCALL_EXIT.
Clasa Process contine definitiile unor constante declarate sub forma unor variabile statice si urmatoarele proprietati ale instantei:
Se recomanda sa adaugati proprietati extra, ca va pot ajuta in rezolvarea temei.
Acesta structura simuleaza structura PCB folosita de un sistem de operare real.
La fiecare oprire a unui proces, proprietatile vor fi setate astfel:
Procesul gol, numit sheduler, are ca scop executarea instructiunii hlt (halt) in cazul in care nu exista niciun alt proces de planificat. Acest tip de proces exista si in realitate si opreste procesorul pentru un timp scurt. In acesta simulare, procesul va executa instructiunile:
p 1 s 1
<node info> Pentru procesul gol, apelul de sistem sleep nu este luat in considerare, procesul va fi planificat ori de cate ori nu exista alt process ce poate fi planificat. </note>
Alocarea PID-ului se va face dupa urmatorul algoritm:
De exemplu, daca MAX_PID este 5:
Pentru acest algoritm, toate procesele au aceeasi prioritate si sunt planificate unul dupa altul. Dupa ce un process a fost planificat, acesta va fi plasat in capatul cozii.
Procesele noi vor fi plasate in capatul cozii.
Se va pastra o coada cu procesele care sunt in asteptare (sleep). Acestea vor fi puse in coada in ordinea in care au dat sleep. Inainte de fiecare planificare, se por extrage din coada de asteptare procesele ce pot fi rulate si vor fi adaugate in capatul cozii.
Procesul care tocmai a rulat va fi adaugat ultimul in coada.
Acest algoritm este identic cu cel precedent, cu urmatoarea modificare: toate procesele pornesc cu prioritatea 5. De fiecare data cand un process isi depaseste quanta de timp, acest este penalizat cu 1. De fiecare data cand procesul iese inainte de a-si depasi quanta acesta este rasplatit cu 1.
Prioritatea nu poate fi mai mica decat 0 sau mai mare decat 5.
La planificare, se iau in considerare doar procesele cu prioritatea cea mai mare. Daca nici unul din ele nu poate fi planificat (sunt in sleep), se iau in considerarea procesele cu prioritatea mai mica. Daca nici aici nu este nici unul care poate fi planificat, se iau in considerarea urmatoarele si tot asa mai departe.
Acest algoritm este folosit de Linux. Mai multe detalii puteti gasi la adresa CFS: Completely fair process scheduling in Linux. Varianta implementata aici va tine seama de:
process.py
si main.py
, unde in anumite locuri este apelata functia print
. In verificarea temei se va compara textul afisat de tema voastra cu fisiere de referinta. Din acest motiv sa recomandam sa nu modificati/stergeti apelurile functiei print
.
===== Trimiterea temei ===== Tema se va incarca pe vmchecker. Logati-va pe site cu utilizatorul de pe moodle, selectati cursul Systemes d'Explotation (FILS) si incarcati arhiva temei.
==== Readme ==== Fisierul readme are urmatorul format:
Numele vostru intreg Grupa Descrierea rezolvarii temei, de ce ati ales anumite solutii, etc.
==== Arhiva temei ==== Pentru a incarca tema, urmariti pasii:
Dupa ce incarcati arhiva, vmchecker va rula:
unzip archive.zip homework cd homework make -f Makefile.check