This is an old revision of the document!


Curs 04 - Planificarea execuției

  • Suport curs
    • Operating System Concepts Essentials
      • Capitolul 5 - CPU Scheduling
    • Modern Operating Systems
      • Capitolul 2 - Processes and Threads
        • Secțiunea 5 - Scheduling

Demo-uri

Pentru parcurgerea demo-urilor, folosim arhiva aferentă. Demo-urile rulează pe Linux. Descărcăm arhiva folosind comanda

wget http://elf.cs.pub.ro/so/res/cursuri/curs-04-demo.zip

și apoi decomprimăm arhiva

unzip curs-04-demo.zip

și accesăm directorul rezultat în urma decomprimării

cd curs-04-demo/

Acum putem parcurge secțiunile cu demo-uri de mai jos.

Schimbări de context

Dorim să vedem numărul de schimbări de context (voluntare sau nevoluntare) ale unei comenzi. Pentru aceasta rulăm comanda

/usr/bin/time -v find /var/log

Din output-ul comenzii de mai sus, extragem numărul de schimbări de context. Numărele de schimbări de context se găsesc, respectiv, pe liniile care încep cu Voluntary context switches, respectiv Involuntary context switches.

Rulăm din nou comanda

/usr/bin/time -v find /var/log

Observăm că acum, la a doua rulare, este semnificativ mai mic numărul schimbărilor voluntare. Aceasta se întâmplă deoarece se realizează, la prima rulare a comenzii, caching în memorie pentru date. Adică nu se mai execută operații blocante la dispozitivele de I/O, rezultând într-un număr mai mic de schimbări voluntare.

Schimbări de context pentru rulare cu redirectare

Dorim să comparăm numărul de schimbări de context pentru o comandă față de varianta acesteia cu redirectarea ieșirii standard la /dev/null. Pentru aceasta rulăm comanda

/usr/bin/time -v find /var/log > /dev/null

Ce valori sunt acum afișate pentru cele două tipuri de schimbări de context?

Întrucât nu se mai lucrează cu terminalul aferent ieșirii standard, nu se execută multe operații blocante și nu se tranferă date generate de comandă în fișier. Rezultă direct un număr și mai mic de schimbări de context (atât voluntare cât și nevoluntare) și o durată de execuție mai mică a procesului.

Alterare prioritate proces

Dorim să analizăm impactul configurării priorității statice (nice) a sistemului. Pentru aceasta vom porni același proces cu diverse valori pentru nice și vom observa durat de rulare.

Intrăm în directorul nice/ din arhiva cu demo-uri a cursului și parcurgem fișierele cpu.c și start-all. Fișierul cpu.c execută operații care țin procesorul ocupat; fișierul start-all este un script care pornește 6 procese cu diverse valori pentru nice.

Pentru a putea rula, începem prin compilarea programului cpu.c folosind comanda

make

Pentru a testa scenariul rulăm scriptul:

./start-all

Scriptul va porni 6 procese cu valori diferite pentru nice:

  • 2 procese vor fi prioritare (nice = -20);
  • 2 procese vor avea prioritate medie (nice = 0, implicit);
  • 2 procese vor fi subprioritare (nice = 19).

Pentru fiecare proces, este reținut output-ul într-un fișier. Pentru a afla timpul a fiecărui proces în fișierul rezultat, folosim comanda:

grep -H 'Elapsed' pri*

Observăm că procesele prioritare au avut cel mai scurt timp de rulare iar cele subprioritare cel mai lung timp. Planificatorul a ținut, așadar, cont de valoarea priorității statice (nice).

so/cursuri/curs-04.1394473837.txt.gz · Last modified: 2014/03/10 19:50 by razvan.deaconescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0