Documente Academic
Documente Profesional
Documente Cultură
Probleme:
1. Scrieti un program care afiseaza al 100-lea (daca exista) caracter din toate fisierele obisnuite
din subarborele de directoare incepand cu directorul radacina.
2. Scrieti un program care citeste dintr-un fisier linii continand cate 50 de numere intregi . Pentru
fiecare linie, intr-un thread separat, programul determina minimul si maximul. In final, programul
va determina cel mai mare minim si cel mai mic maxim si le va afisa impreuna cu numarul liniei
pe care au aparut.
Randul 2:
Teorie:
1. Enumerati si descrieti succint 8 directoare din radacina UNIX (asa ceva)
2. Comenzile shell break si continue
3. Apelul sistem exec.
4. Scrieti o procedura shell care citeste din fisierul standard de intrare cate un sir de caractere
considerat nume de cale. Se cauta daca in sistemul de fisiere exista acel nume de cale, si daca
acesta reprezinta un director, se afiseaza numele si numarul de legaturi simbolice din director.
Altfel se afiseaza numele de cale citit si tipul fisierului reprezentat. Executia procedurii se termina
la sfarsitul fisierului standard de intrare sau prin intrerupere (CTRL+C).
1) sa sa scrie folosind functi unix si apeluri de sistem un program C care numara toate link-urile
din subarborele unui director dat in linia de comanda.
2) Se da un fisier text cu numere (de ex. pe fiecare linie un numar), numere cuprinse intre 1 si
255 inclusiv.
Unde fisier e numele fisierului, si N este o constanta reprezentand numarul de procese fiu care
vor fi folosite in paralel pentru a determina numarul maxim din fisier, dupa cum urmeaza:
Procesul parinte porneste N copii, in fisier totdeauna vor fi mai mult de N numere. Citeste primul
numar, il trimite fiului 1, citeste al doilea, fiului 2, citeste pana la al N-lea numar, il da fiului N,
citeste N+1, il da fiului 1 (deci e circular). Comunicatie parinte-fiu se face prin pipes.
Fiecare fiu citeste din pipe numerele, si determina maximul. La final, va returna parintelui (prin
valoarea de iesire din proces) maximul numerelor pe care el le-a primit. Parintele asteapta dupa
fiecare fiu sa se termine, si determina maximul din valorile maxime partiale returnate de fiu. Il
afiseaza si ceau. Cu alte cuvinte, fiecare fiu returneaza un maxim partial, prin exit, si parintele cu
wait/waitpid il capteaza, si determina cel mai mare din maximele partiale si il afiseaza.
Ora 12
Teorie:
Probleme:
1. sa se numere (recursiv) toate fisierele din directorul curent care au sufixul .sh,(si sa se
calculeze dimensiunea totala a acestora), din directorul dat ca argument la apelarea programului.
29.01.2006
Randul 1.
Teorie:
Probleme:
Subiectul 1
Subiectul 2
Probleme
1. [1.5 p]
Sa se scrie un program C care parcurge recursive un director (dat ca singurul paramentru al
progr; daca nu avem param atunci se parcurge dir curent) contorizand numarul de fisiere care se
term cu sufixul .c si calculand dimensiunea totala a acestor fisiere. La terminarea progr se
afiseaza aceste informatii la iesirea standard.
2. [2.5 p]
Sa se scrie un progr C care simuleaza o retea simplificata de calculatoare conectate in inel.
Adresa 0
Statie (proces)
Adresa 1 Adresa 3
Statie (proces) Statie (proces)
Adresa 2
Statie (proces)
Conexiune
unidirectionala
(pipe)
Reteaua contine un numar de N>1 statii, unde N este dat ca param la lansarea in executie a
progr. Fiecare statie este simulate printr-un process si are o adresa unica (ex. 0,1,2..N-1). Statiile
(procesele) sunt conectate intre ele prin pipe-eri, ca in fig. (pt. N=4)
In retea circula in mod continuu un singur pachet de dimens fixa cu urm struct:
- stare: poate avea 2 val
o liber = pachetul nu contine nici un mesaj, situatie in care celelalte campuri nu au
semnificatie (mai putin S)
o ocupat = pachetul contine un mesaj
- adresa statiei care a emis mesajul
- adresa statiei destinatie a mesajulului
- continutul mesajului (20 char)
- S numarul de starii care mai au mesaje de transmis
Fiecare statie I transmite un numar Mi de mesaje (Mi este stabilit aleator pt. fiecare statie in parte
si numai statia i cunoaste Mi ) catre o destinatie aleatoare (se accepta trimierea unui mesaj chiar
spre ea insasi; obligatoriu, acea statie trebuie sa existe ). In momentul in care statia i trimite
ultimul sau mesaj, va avea griza sa decrementeze campul S din pachet.
(*) = daca statia i a trimis deja toate cele Mi mesaje, ea nu va mai transmite mesaje. Faptul ca o
statie I nu a trimis inca cele Mi mesaje proprii, nu inseamna ca ca ea va trimite unul chiar in acel
moment; se stabileste aleator daca vrea sau nu sa transmita exact la acel moment. Evident se
considera ca o statie nu amana la infinit transmiterea unui mesaj.
Daca este posibil, sa se scrie simulatorul in asa fel incat progamul sa se termine doar cand
nimeni nu mai vrea sa transmita mesaje, stiind canumai statia cu adresa 0 poate sa si termine
executia testand valoarea campului S al pachetului si este interzisa utilizarea altor forme de
comunicare intre procese (semnale, mem partajata, etc) cu exceptia pipe-urilor. Nu se accepta
nici trimiterea de mesaje suplimentare speciale pt terminare. Sa se argumenteze in 2-3 randuri de
ce e posibila/nu o astfel de implementare.
Obs. Se poate consid ca exista o functie int getRandom() care returneaza un intreg aleator >= 0
Teorie:
1. Sa se calculeze numarul de blocuri necesar pentru stocarea unui isier de 6 MB, stiind ca
dimensiunea unei adrese din I-Node este de 4 B, iar dimensiunea blocului este de 4 KB.
2. Controlul intreruperilor (semnalelor) in shell.
3. Apelurile sistem wait si exit
4. Sa se scrie un shell-script care citeste de la intrarea standard 2 valori (Val1, Val2). Daca
Val1 nu e director afiseaza eroare si se termina scriptul. Daca Val1 e director, se cauta in
directorul Val1 toate fisierele cu sufixul ".txt". Dintre ele se numara cele care contin textul Val2,
iar rezultatul se afiseaza.
Probleme:
Nota: toate problemele vor fi scrise in limbajul C si se vor folosi functii si apeluri system UNIX
1.(1.5p) Scrieti un program care sa afiseze numele fisierelor din directorul current sau din
directorul dat ca parametru, in cazul in care programul primeste parametru. Pe langa nume
pentru fisierele obisnuite va fi afisata dimensiunea lor in octeti, iar pentru legaturile simbolice va fi
afisata calea catre fisierul care arata legatura.
2.(2.0p) Scrieti un program care citeste de la intrarea standard linii (de maximum 80 caractere) ce
contin fiecare o cale catre un fisier. Programul va efectua pentru fiecare fisier, o suma de control
a octetilor incepand cu octetul 1000 lea din fisier prin operatia de sau-exclusiv. In final
programul va afisa cea mai mica sic ea mai mare dintre sumele de control calculate. Se
considera ca toate linile citite de la intrrarea standard contine cai valide si ca toate fisierele au cel
putin 1000 de octeti.
Programul va fi astfel conceput incat operatile de intrare/iesire cu fisiere diferite sa se efectueze
in parallel
03.02.2005
Teorie :
Probleme:
teorie:
randul 1:
1. harti de memorie in sisteme de operare OSMVT, OSMVS (doar astea!)
2. alocarea nodurilor index in sisteme de fisiere UNIX
3. sincronizarea cu variabile de conditie pentru fire de executie
4. scrieti o procedura shell care determina si afiseaza numarul de directoare cu numele incepand
cu majuscula din fiecare director dat ca argument obs: introduceti comenzi pt tratarea erorilor
randul 2:
1. interactiunea elementelor la executie
2. alocarea blocurilor in UNIX
3. apelurile sitem fork si vfork (tot despre ele!)
4. o procedura shell pt stergerea fisierelor cu sufixul .o din subarborele directorului dat
probleme:
varianta 1:
2. consideram un sistem software modular de acces la o baza de date alcatuit dintr-un modul
server si N module client (N este un parametru setat in momentul executiei). modulul server
primeste cereri de interogare de la modulele client sub forma unor siruri de caractere de lungime
arbitrara. la primirea unei astfel de cereri, modulul server lanseaza in executie programul extern
"query", transmitandu-i acestuia ca si parametru sirul de interogare primit; iesirea (output-ul)
executiei acestui program va fi rezultatul interogarii, care va fi transmis inapoi catre modulul
client corespunzator. pe de alta parte, clientii genereaza astfel de cereri de interogare la intervale
aleatoare de timp.
punctaj:
1. sa se scrie un program C care foloseste apeluri sistem si functii de biblioteca UNIX care se
apeleaza din linia de comanda astfel:
programul parcurge recursiv directorul al carui nume este dat ca al doilea argument si, pentru
fiecare fisier obisnuit al carui nume se termina in sufixul dat, adauga la continutul acestuia textul
specificat in linia de comanda.
va returna un tablou de siruri de caractere continand sirurile: "program", "arg1", "arg2", "arg3",
NULL de asemenea se considera ca exista o functie
care, avand parametrul pozitie initializat cu adresa unei variabile intregi egala cu 0, va returna pe
rand fiecare comanda (de tip "program 1 arg1 arg2..."...) aflata in sirul sursa, presupunand ca
acesta este o inlantuire de comenzi separate prin "|". la sfarsitul linie date ca sursa, functia va
returna NULL. in plus, daca in sirul de caractere dat ca sursa nu exista "|", functia returneaza
imediat NULL.
obs: in implementare este interzisa folosirea functiei popen() si a comenzilor puse la dispozitie de
mediul UNIX
======================================
Nu s-a dat pe randuri!!! (poate si din cauza faptului ca era un spatiu enorm intre noi!!)
Probleme:
1.Sa se scrie in C un prg care foloseste apeluri sistem si functii de biblioteca UNIX si se apeleaza
din linia de comanda astfel:
filecat director text
Prg parcurge la primul nivel directorul primit ca argument si afiseaza la iesirea standard
continutul tuturor fisierelor obisnuite al caror nume contine sirul de caractere text. Este interzisa
folosirea
comenzilor externe UNIX.
2.Se considera un sistem de programe in C si ruland in mediul UNIX care simuleaza o fabrica de
asamblat biciclete,astfel:
-un program numit generator care primeste in linia de comanda un parametru numar intreg intre
1 si 3 si se comporta diferit in functie de acesta,astfel:
a)daca a primit numarul 1, genereaza continuu la iesirea standard cuvantul "roata". dupa fiecare
cuvant generat, programul se suspenda un nr. oarecare de secunde.
b)idem pt 2,doar ca se tipareste "pedale"
c)idem pt 3,doar ca se tipareste "cadru"
- un program numit asamblor care trebuie sa asambleze biciclete folosind componetele generate
de cel putin linii de fabricatie de tipul celor de mai sus. O bicicleta se considera asamblata cand
are 2 roti, un cadru si un sistem de pedale. La fiecare bicicleta, programul afiseaza la iesirea
standard un mesaj care anunta acest eveniment.
Sistemul de programe se termina dupa asamblarea a N bicilete, N fiind un parametru primti de
asamblor in linia de comanda.
===============================
1 (1.5p) Sa se scrie un program C care foloseste apeluri sistem si functii de biblioteca UNIX care
se apeleaza din linia de comanda astfel:
smalllinks <catalog>
Programul parcurge recursiv catalogul primit ca argument si numara aparitiile tuturor legaturilor
simbolice intalnite a caror dimensiune nu depaseste 10 octeti.
2 (2.5p) Sa se scrie urmatorul sistem de programe C independente care ruleaza intr-un mediu
UNIX:
a) Un program care se apeleaza din linia de comanda astfel:
sterge <nume fisier> <cuvant>
Programul citeste continutul fisierului text primit ca argument si il afiseaza la iesirea standard
eliminand liniile care incep cu sirul de caractere <cuvant>.
b) Un program care se apeleaza din linia de comanda astfel: creeaza_fisier <fisier> care creeaza
fisierul cu numele dat, continutul acestuia fiind preluat de la intrarea standard.
c) Un program numit "cenzor" care primeste in linia de comanda numele unui fisier de
configurare care contine linii de forma:
MUTA <fisier_sursa> IN <fisier_destinatie> ELIMINAND <cuvant>
==================================================================
so - 05.02.2005
Teorie:
1. Sa se calculeze numarul de blocuri necesar pentru stocarea unui fisier de 6 MB, stiind ca
dimensiunea unei adrese din I-Node este de 4B, iar dimensiunea blocului este de 4 KB.
2. Controlul intreruperilor (semnalelor) in shell.
3. Apelurile sistem wait si exit
4. Sa se scrie un shell-script care citeste de la intrarea standard 2 valori (Val1, Val2). Daca
Val1 nu e director afiseaza eroare si se termina scriptul. Daca Val1 e director, se cauta in
directorul Val1 toate fisierele cu sufixul ".txt". Dintre ele se numara cele care contin textul Val2,
iar rezultatul se afiseaza.
Probleme:
Vezi fisierul atasat probleme.jpg
1 (1.5p) Sa se scrie un program C care foloseste apeluri sistem si functii de biblioteca UNIX care
se apeleaza din linia de comanda astfel:
smalllinks <catalog>
Programul parcurge recursiv catalogul primit ca argument si numara aparitiile tuturor legaturilor
simbolice intalnite a caror dimensiune nu depaseste 10 octeti.
2 (2.5p) Sa se scrie urmatorul sistem de programe C independente care ruleaza intr-un mediu
UNIX:
a) Un program care se apeleaza din linia de comanda astfel:
sterge <nume fisier> <cuvant>
Programul citeste continutul fisierului text primit ca argument si il afiseaza la iesirea standard
eliminand liniile care incep cu sirul de caractere <cuvant>.
c) Un program numit "cenzor" care primeste in linia de comanda numele unui fisier de
configurare care contine linii de forma:
MUTA <fisier_sursa> IN <fisier_destinatie> ELIMINAND <cuvant>