Sunteți pe pagina 1din 7

MINISTERUL EDUCAȚIEI, CULTURII ȘI CERCETĂRII

AL REPUBLICII MOLDOVA
Universitatea Tehnică a Moldovei
Facultatea Calculatoare, Informatică și Microelectronică
Departamentul Ingineria Software și Automatică

Raport
pentru lucrarea de laborator Nr. 5

la cursul de “Sisteme de operare: mecanisme interne și


principii de proiectare”

Efectuat: Studentul gr. SI-191 Comanac Artiom


Verificat: Gaidarji Alina

Chișinău – 2021

1
Tema: Monitorizarea proceselor
Scopul: modurile de obținere de informații despre rularea proceselor,
despre resursele utilizate de procese, prezentarea rezultatelor în diverse
forme.
Sarcinii:
Executați următorii pași:

1. Toate script-urile și fișierele pentru extragerea rezultatelor le veți crea în


subdirectorul lab5.
2. Scrieți script-uri, care vor rezolva următoarele probleme:
a. Aflaţi numărul de procese inițiaţializate de utilizatorul user și
introduceți într-un fișier perechea „PID: comanda” a proceselor
inițializate. Afișați conținutul acestui fișier şi numărul de procese.
b. Afișați PID-ul procesului, ultimul lansat (cu timpul de lansare).
c. Introduceți într-un fișier o listă cu PID-urile proceselor, pornite cu
comenzile localizate în /sbin/. Afișați conținutul acest fișier.
d. Pentru fiecare proces, calculați diferența dintre memoria totală (statm:
size) şi rezidentă (statm: resident) ale memoriei de proces (în pagini).
Introduceți într-un fișier linii de tip „PID:diferența”, sortate în
ordinea descrescătoare a acestor diferențe. Afișați conținutul acestui
fișier.
e. Pentru toate procesele înregistrate, la moment, în sistem, introduceți
într-un fişier linii de tip:
ProcessID=PID:Parent_ProcessID=PPID:
Average_Time=avg_atom
Preluați valorile PPID și PID din fișierele status, valoarea
avg_atom(avg_atom=se.sum_exec_runtime/nr_switc hes) din
fișierele sched care se află în subdirectoarele, cu nume ce corespund
PID proceselor în directorul /proc. Sortați aceste linii conform
identificatorilor proceselor părinte. Rezultatul sortării introduceți într-
un fișier și afișați-l
f. În fișierul obținut în 5, după fiecare grup de înregistrări cu același
identificator al procesului părinte, introduceți o linie de tip
Sum_switches_of_ParentID=N is M, unde N=PPID, iar M este suma
calculată voluntary_ctxt_switches+ nonvoluntary_ctxt_switches din
status pentru acest proces. Afișați conținutul acestui fișier.

2
 Sarcina 2 a

ps -u $UID \
| awk '{print $1": "$4}' \
> pids.txt
cat pids.txt
echo "Total: "$(
wc --lines pids.txt \
| awk '{print $1}'
)

Fig. 1. Sarcina 2 a

 Sarcina 2 b

ps -Af --s1ort=start_time | tail -5 | head -1

Fig. 2. Sarcina 2 b

 Sarcina 2 c

ps -Af \
| grep -E ' /sbin/' \

3
| awk '{print "PID: "$2}' \
> sbinpids.txt
cat sbinpids.txt

Fig. 3. Sarcina 2 c

 Sarcina 2 d

echo -n "" > difference.txt

for P_ID in $(find /proc/ -maxdepth 1 -type d \


| grep '[[:digit:]]' \
| awk -F'/' '{print $3}')
do
STATM_SIZE=$(awk '{print $1}' /proc/$P_ID/statm)
STATM_RESIDENT=$(awk '{print $2}' /proc/$P_ID/statm)
DIFFERENCE=$(($STATM_SIZE - $STATM_RESIDENT))
echo "$P_ID $DIFFERENCE" >> difference.txt
done
sort -k2 -r difference.txt \
| tr ' ' ':'

 Sarcina 2 e

ALL_PROCESSES=$(find /proc -maxdepth 1 -type d | grep '[0-


9]')

4
echo -n > result.txt
for PROCESS in $ALL_PROCESSES; do
[ -f $PROCESS/status ] || continue;
P_ID=$(cat "$PROCESS/status" | grep '^Pid:' | awk '{print
$2}')
PP_ID=$(cat "$PROCESS/status" | grep '^PPid:' | awk
'{print $2}')
echo "ProcessID="$P_ID":Parent_ProcessID= "$PP_ID >>
result.txt
done

sort -n -k2 -o result.txt result.txt


tr -d " " < result.txt > fisier.txt
rm result.txt
cat fisier.txt

Fig. 5. Sarcina 2 e

 Sarcina 2 f

getSum() {
VOLUNTARY=$(cat /proc/$1/status | grep '^voluntary_ctx'
| awk '{print $2}')
NONVOLUNTARY=$(cat /proc/$1/status | grep
'^nonvoluntary_ctx' | awk '{print $2}')

5
echo $((VOLUNTARY+NONVOLUNTARY))
}

printSum() {
CTX_SUM=$(getSum $1)
echo "Sum_switches_of_ParentID="$1" is "$CTX_SUM >>
ex6rezultat.txt
}
echo -n "" > ex6rezultat.txt
LAST_ID=-1
LINES=$(cat fisier.txt)

for LINE in $LINES; do


PP_ID=$(echo $LINE | awk -F'=' '{print $3}')
[ "$PP_ID" -ne "$LAST_ID" ] && [ -f
/proc/$LAST_ID/status ] && printSum $LAST_ID
echo $LINE >> ex6rezultat.txt
LAST_ID=$PP_ID
done

[ -f /proc/$LAST_ID/status ] && printSum $LAST_ID

Fig. 6. Sarcina 2 f

6
Concluzii:
Efectuând aceasta lucrarea de laborator au fost studiate bazele utilizării consolei,
structurilor de control, crearea script-urilor în bash. Au fost create, analizate si
executate scripturi bash.

S-ar putea să vă placă și

  • Pma Lab4
    Pma Lab4
    Document12 pagini
    Pma Lab4
    Artem Komanak
    Încă nu există evaluări
  • Pma Lab1
    Pma Lab1
    Document7 pagini
    Pma Lab1
    Artem Komanak
    Încă nu există evaluări
  • Pma Lab3
    Pma Lab3
    Document4 pagini
    Pma Lab3
    Artem Komanak
    Încă nu există evaluări
  • Pma Lab2
    Pma Lab2
    Document11 pagini
    Pma Lab2
    Artem Komanak
    Încă nu există evaluări
  • Somipp Lab4
    Somipp Lab4
    Document7 pagini
    Somipp Lab4
    Artem Komanak
    Încă nu există evaluări
  • Somipp Lab3
    Somipp Lab3
    Document6 pagini
    Somipp Lab3
    Artem Komanak
    Încă nu există evaluări
  • Somipp Lab1
    Somipp Lab1
    Document5 pagini
    Somipp Lab1
    Artem Komanak
    Încă nu există evaluări
  • Somipp Lab2
    Somipp Lab2
    Document8 pagini
    Somipp Lab2
    Artem Komanak
    Încă nu există evaluări
  • Model-Cerere Centralizata SSL 1
    Model-Cerere Centralizata SSL 1
    Document1 pagină
    Model-Cerere Centralizata SSL 1
    Artem Komanak
    Încă nu există evaluări