Instrumente și tehnici de bază în Informatică - Curs 4 - Vlad Olaru
Document Details
Uploaded by Deleted User
2024
Vlad Olaru
Tags
Summary
Aceste note de curs acoperă instrumente și tehnici de bază în informatică, inclusiv lucrul cu fisiere și directoare, procese, comunicare inter-proces și semnale. Sunt utile studenților de informatică.
Full Transcript
Instrumente si Tehnici de Baza in Informatica Semestrul I 2024-2025 Vlad Olaru 10/21/2024 Curs 4 - outline fisiere si directoare (epilog) procese inter-process communication semnale 2 ...
Instrumente si Tehnici de Baza in Informatica Semestrul I 2024-2025 Vlad Olaru 10/21/2024 Curs 4 - outline fisiere si directoare (epilog) procese inter-process communication semnale 2 10/21/2024 Sumar comenzi utile pt. lucrul cu fisiere mkdir – creeaza directoare rmdir – sterge directoare (cu conditia sa fie goale) touch – creeaza un fisier gol daca nu exista deja mv – muta directoare sau fisiere redenumeste, nu se face copiere fizica decat daca datele se muta de pe un disc pe altul cp – copiaza (fizic, duplica) directoare (cu –r) sau fisiere se pot copia directoare/fisiere multiple intr-un director destinatie $ cp …. rm – sterge directoare (cu –r) sau fisiere ln – creeaza linkuri hard sau simbolice mknod – creeaza fisiere speciale tip caracter, bloc sau FIFO $ mknod /dev/sda3 b 8 3 3 10/21/2024 Wildcards caractere speciale interpretate de shell ^ – simbolizeaza inceputul liniei $ – simbolizeaza sfarsitul liniei atom = caracter sau set de caractere grupat cu [ ] sau ( ) * – 0 sau mai multe aparitii ale atomului precedent + – cel putin 1 aparitie a atomului precedent, posibil mai multe ? – cel mult o aparitie a atomului precedent (0 sau 1 aparitii) 4 10/21/2024 Cautarea in fisiere comanda uzuala: grep foloseste tipare si expresii regulate synopsis $ grep optiuni utile -R / -r cautare recursiva (cu/fara dereferentiere linkuri simbolice) -i case insensitive -n tipareste nr liniei pe care s-a gasit expresia -w cauta cu exactitate tiparul furnizat (cuvant, word) -v inverseaza sensul matching-ului (afiseaza liniile care nu se potrivesc) ex: $ grep printf *.c $ grep –v –w printf *.[ch] $ ls –l | grep ^d 5 10/21/2024 Cautarea in directoare comanda uzuala: find synopsis: $ find -name optiuni utile -exec executa comanda specificata asupra elementelor gasite -type limiteaza rezultatele afisate la un anumit tip (eg, fisiere) -iname similar cu –name dar case insensitive -maxdepth limiteaza nivelul de recursivitate ex: $ find / -name hello $ find. –iname \*.o –exec rm {} \; 6 Procese proces = abstractia executiei unui program (instr + date) in fapt, este programul + starea executiei sale la un moment dat (reflectata de registrele CPU si valorile variabilelor din program) identificat prin Process ID (PID) comanda ps afiseaza PID-urilor proceselor aflate in rulare momentan mai multe instante in rulare ale aceluiasi program sunt procese diferite, cu PID-uri diferite executia proceselor este secventiala, nu exista executie paralela a instructiunilor intr- un singur proces mai multe parti codul program, cunoscut si ca sectiunea de text starea curenta reflectata de registrele CPU stiva contine date temporare parametrii functiilor, adrese de retur, variabile locale sectiunile de date initializate/neinitializate contin datele globale heap-ul contine memoria alocata dinamic de catre program in timpul executiei Imaginea unui program C in memorie variabile de mediu -> program break -> Comunicare inter-procese (IPC) procesele pot fi independente sau cooperante procesele cooperante pot afecta sau pot fi afectate de alte procese, inclusiv prin partajarea datelor motive de cooperare partajarea informatiei accelerarea calculului modularitate confort procesele cooperante necesite mijloace de comunicare inter-proces (IPC) modele IPC memorie partajata schimb de mesaje (message passing) Modele de comunicare (a) Memorie partajata. (b) Message passing. IPC – Message Passing procesele comunica intre ele fara variabile partajate operatii: send(message) receive(message) dimensiunea mesajului este fixa sau variabila Tipuri de comunicare directa: procesele isi folosesc identitatea explicit send (P, message) – trimite un mesaj procesului P receive(Q, message) – primeste un mesaj de la procesul Q ex: sockets (canale de comunicatie TCP/IP) indirecta: mesajele sunt trimise si receptionate in/din casute postale (numite si porturi) fiecare casuta are un ID unic procesele pot comunica doar daca partajeaza o casuta operatii creeaza casuta (port) trimite si primeste mesaje prin intermediul casutei postale sterge casuta primitive de comunicare send(A, message) – trimite mesaj in casuta postala A receive(A, message) – primeste mesaj din casuta postala A Sincronizare schimbul de mesaje poate fi blocant sau neblocant modul blocant este considerat sincron send blocant – transmitatorul e blocat pana cand se primeste mesajul receive blocant – receptorul e blocat pana cand un mesaj e disponibil modul neblocant este considerat asincron send neblocant – transmitatorul trimite mesajul si continua receive neblocant – receptorul primeste: un mesaj valid, sau mesaj vid (null) sunt posibile diferite combinatii daca send si receive sunt ambele blocante, avem un rendezvous Comunicare FIFO in Unix prin pipe-uri anonime sau cu nume pipe-uri anonime combinatie de comunicare directa/indirecta procesele cooperante isi cunosc implicit identitatea comunicare unidirectionala $ cat hello.c| grep printf pipe-uri cu nume (FIFOs) fisiere speciale cu nume comunicare indirecta, procesele cooperante nu isi cunosc identitatea create cu comenzile mknod/mkfifo odata create, folosite la fel ca fisierele, dar cu politica de acces FIFO $ mknod myfifo p # mkfifo myfifo $ cat < myfifo & # trebuie sa existe mai intai un # receptor care asteapta date $ echo “write some message in myfifo” > myfifo 10/21/2024 Semnale notificari asincrone ale procesului referitoare la producerea anumitor evenimente echivalentul software al exceptiilor (HW sau SW) se trimit fie intre procese, fie de catre kernel catre un proces generate din mai multe surse: apel sistem kill(pid, semnal) comanda kill: kill –TERM tastatura: DEL, Ctrl-C, Ctrl-Z, etc anumite evenimente soft si hard generate de kernel ex: terminarea unui proces notificata asincron parintelui cu SIGCHLD procesul care executa o impartire la zero primeste un semnal SIGFPE accesul ilegal la memorie (eg, memorie nealocata) genereaza SIGSEGV reactia procesului la primirea unui semnal depinde de tipul semnalului decizia programului de a trata sau nu evenimentul semnalat 15 10/21/2024 Posibilitati de tratare a semnalelor 1) semnalul e ignorat - specific pt. evenimente care nu rezulta in erori/consecinte majore 2) terminarea programului (semnalul “ucide” procesul) - valabil pt. restul evenimentelor 3) tratarea semnalului cf. indicatiei/dispozitiei programului, despre care se spune ca “prinde” semnalul - se face cu ajutorul unei rutine de tratare a semnalului (handler) Obs: nu orice semnal poate fi “prins” ! Ex: SIGKILL/SIGSTOP nu pot fi prinse, KILL termina invariabil programul $ kill -KILL # kill -9 16 10/21/2024 Exemple utilizare semnale comanda kill foloseste un PID identificat in prealabil cu comanda ps $ kill – $ kill –TERM 4899 # kill 4899 sau kill -15 4899 Obs: numele semnalului poate fi complet, eg, SIGTERM sau prescurtat, eg TERM $ kill –l # afiseaza toate semnalele disponibile $ kill –l 15 # mapeaza nr de semnal in nume semnalele pot fi generate voluntar de catre utilizator ex: Ctrl-c genereaza SIGINT uzual termina procesul rulat de shell daca procesul prinde SIGINT, la apasarea Ctrl-c se executa signal handlerul asociat SIGINT de catre proces (i.e., procesul nu moare automat) $ kill –SIGINT 4899 # kill -2 4899 Ctrl-z genereaza SIGTSTP suspenda executia procesului curent (poate fi continuat cu comenzi tip job control, fg/bg) $ kill –SIGTSTP 4899 # kill -20 4899 17