Home - qdidactic.com
Didactica si proiecte didacticeBani si dezvoltarea cariereiStiinta  si proiecte tehniceIstorie si biografiiSanatate si medicinaDezvoltare personala
referate stiintaSa fii al doilea inseamna sa fii primul care pierde - Ayrton Senna





Aeronautica Comunicatii Drept Informatica Nutritie Sociologie
Tehnica mecanica

Windows


Qdidactic » stiinta & tehnica » informatica » windows
Sisteme de operare si sistem de calcul – un ansamblu de echipamente fizice (hardware) si programe sau date (software)



Sisteme de operare si sistem de calcul – un ansamblu de echipamente fizice (hardware) si programe sau date (software)



Obiective

lAsimilarea detaliilor de utilizare a unui sistem de operare

lFamiliarizarea cu sistemele de operare WINDOWS si LINUX

lIntelegerea modului de functionare a acestor sisteme

lIntroducere

lDefinitie

lResponsabilitati

lIstoric

lStructura unui Sistem de operare

Introducere

lSistem de calcul – un ansamblu de echipamente fizice (hardware) si programe sau date (software)



lPrograme utilitare – programe care asigura exploatarea sistemului de calcul (ex: translatoare, editoare de text, interpretoare)



lPrograme de aplicatie (aplicatii utilizator) – programe scrise de utilizator intr-un anumit limbaj

lSistemul de operare – principalul reprezentant al programelor de utilizare a resurselor unui calculator



Definitie


Un SISTEM DE OPERARE este un sistem de programe speciale care realizeaza 2 functii principale:

1. asigura gestionarea unui sistem de calcul, implementand algoritmi destinati sa maximizeze performantele

2. realizeaza o interfata intre utilizator (programator) si sistemul de calcul, extinzand dar si simplificand setul de operatii disponibile


Responsabilitatile unui S.O.

l1. Interfata cu utilizatorul – se realizeaza prin comenzi care folosesc apeluri sistem

l2. Gestionarea fisierelor :

- se ofera un mod de organizare a sistemului de fisiere

- se ofera un mod de acces la informatia din fisiere

- se asigura securitatea datelor

- se realizeaza salvarea, restaurarea informatiei

3. Gestionarea perifericelor – functii care sa permita folosirea perifericelor avand o diversitate functionala

4. Gestionarea memoriei (operative si externe)

- o parte a memoriei rezervata sistemului de operare

- frecvent se foloseste o memorie externa ca extensie a memoriei operative (swapping)

- mecanisme de accelerare (cache)

5. Gestionarea proceselor – exista simultan mai multe procese (task-uri) – activitati independente desfasurate independent (Multitasking)

- implica introducerea unor mecanisme care sa permita comunicarea intre procese, alocarea de resurse pentru procese, crearea si distrugerea de procese

  1. Tratarea erorilor

7. Gestionarea sistemului – mijloace oferite de sistemul de operare pentru configurare

- culegere de date statistice despre performante


Scurt istoric


1. Inceputul: supervizoare si sisteme de introducere/extragere la IBM 701 (IOS – Input/Output System). (gen. I de calculatoare)

- SOS (Shared Operating System) la IBM 709

- FMS (Fortran Monitor System) la IBM 709 (gen. I) (suportul era banda magnetica si hartia perforata)

2. Sisteme de prelucrare in loturi – introducerea lor generata de marirea posibilitatilor hard (diskuri magnetice de 10 Kb, apare DOS)


Utilizatorii nu mai au acces direct la calculator, isi pregatesc in avans lucrarile pe cartele perforate, stranse in loturi. Exista personal specializat care se ocupa de procesare si executie

Ex: OS/360 pentru IBM System/360

OS/MFT – Memory Fixed Tasks

OS/MVT – Memory Variable Tasks (Spooling)

3. Sisteme cu divizarea timpului – apare conceptul de multiuser – impartirea timpului si a celorlalte resurse in mod echitabil intre mai multi utilizatori (Ex. CTSS, MULTICS – MIT pe GE 35)


4. Sisteme cu memorie virtuala – ca necesitate a dezvoltarii unor programe de dimensiuni mari, ce depaseau volumul memoriei interne. Se incarca in memoria operativa de catre S.O. portiunea de program si datele strict necesare pentru desfasurarea pe un timp limitat a programelor

Ex: IBM System/370

OS/MVS – Multiple Virtual Storage

OS/VM – Virtual Machine

5. S.O. pentru minicalculatoare – PDP (1, 7, 8) realizate de firma DEC (Digital Equipment Corp.)


A urmat PDP 11 (1970), folosea RT11- S.O. monoutilizator, monoproces, o forma primitiva de multitasking (foreground/ background).

RSX 11 – multitasking, multiuser, sistem de fisiere pe 2 nivele MFD (Master File Directory) si UFD (User File Directory)

VAX 11 cu S.O. VMS (Virtual Memory System)

1969 – apare UNIX ca S.O. pentru PDP 7.


6. S.O. pentru microcalculatoare si calculatoare personale

Intel produce ISIS-2, nu se raspandeste;

Apare CP/M (Digital Research), foarte larg utilizat; monoutilizator, pentru procesoare pe 8biti, sistem de fisiere mononivel, pentru I8080 si Z80

Odata cu I8086 (I8088) apar noi S.O. pentru procesoare pe 16 biti: DOS, derivat din CP/M si OS/2.


Retele de calculatoare si sisteme distribuite

ARPANET – retea dezvoltata de DOD (Department Of Defence), predecesorul Internet-ului;

Apare conceptul de LAN (Local Area Network), protocolul Ethernet (10Mb/s)

Apare necesitatea unor S.O. distribuite, care sa utilizeze resursele unei retele fara ca utilizatorul sa ia in considerare topologia retelei.

Subiect de cercetare deschis


De retinut pentru examen

lDefinitie S.O.

lResponsabilitatile unui sistem de operare


That’s all folks!





Sisteme de operare
Curs

Capitolul 2

Cuprins


lOrganizarea memoriei in timpul executiei

lOrganizarea codului sursa al SO

lRelatia intre componentele sistemului din punctul de vedere al executiei

lRelatia intre componentele sistemului din punct de vedere logic


2.1 Organizarea memoriei


lO parte a memoriei active e rezervata de SO (componenta rezidenta)

lComponenta rezidenta contine procedurile pentru evenimentele critice: tratarea intreruperilor, tratarea apelurilor sistem, tratarea erorilor, planificarea proceselor pentru executie

lComponentele utilizate mai rar sint pastrate pe suportul extern de memorie si sint aduse in memoria activa doar daca sint solicitate

lO zona a memoriei e pusa in corespondenta cu echipamentele periferice


Aspecte

lCare este continutul spatiului de adrese cind in executie este un program utilizator?

lCare este continultul spatiului de adrese cind in executie este o componenta a SO?

lCare este continutul memoriei fizice a sistemului?


a) Organizarea mem. la CP/M


lCP/M nu diferentiaza cele 3 aspecte de mai sus

lLa nevoie CCP poate fi acoperit de programul utilizator si apoi se reincarca

lToate programele incep la 100h

lZona de comanda este formata din vectorii de intrerupere (8 vectori) si alte informatii (tampon linie comanda)

lNu exista multe restrictii pentru programele utilizator

b) Organizarea mem. la MS-DOS


lZona de comanda este zona vectorilor de intrerupere + DTA (disk transfer area) 512B

lPartea rezidenta contine functii pentru lucrul cu discul si fisierele, drivere etc.

lMemoria video depinde de rezolutie

lSpatiul de adrese pentru un program este compus din 1 pina la 4 segmente de 64kB

c) Organizarea mem. la UNIX


lPentru UNIX nu se poate defini o anumita harta de memorie, ea depinde de arhitectura calculatorului pe care este implementat

lNu exista zone comune intre spatiul de adresa a unui program utilizator si a unui program sistem

lExista o protectie a SO fata de programele utilizator

lOrice comunicare intre programele utilizator si SO se realizeaza prin intermediul apelurilor sistem

d) Organizarea mem. la VMS (Virtual Memory System)


lVMS este construit pentru o anumita arhitectura (32 biti-4GB)

lPrimul GByte este rezervat sistemului, al doilea este folosit pentru pastrarea unor informatii de comanda pentru programul in executie, al treilea este folosit pentru programul utilizator, ultimul este nefolosit

lManagerul de memorie care e rezident (de exemplu primele 3 fisii) decide care fisii sint aduse in memoria fizica

e) Organizarea mem. la IBM OS/MVT (Memory Variable Task)


lExista un mecanism hard-soft prin care SO este protejat de taskurile aplicatii si taskurile aplicatii sint protejate intre ele

lDaca taskurile aplicatii genereaza o adresa in afara limitelor zonelor de memorie rezervata taskului respectiv SO opreste executia taskului respectiv.

That’s all folks!






Sisteme de operare
Curs

Curs 3

Cuprins


l2.3 Interactiunea componentelor

l2.4 Adaptabilitatea SO la configuratia hardware

lCapitolul 3. UNIX

l3.1 Istoric

l3.2 Structura sistemului Unix

2.3 Interactiunea componentelor

lIntr-o structura fara restrictii orice componenta a unui SO ar putea avea acces la orice alta componenta a SO sau la orice structura de date mentinuta pe sistem. Un astfel de sistem ar fi putin fiabil pentru ca nu s-ar putea determina toate consecintele unei modificari a unei componente a sistemului.

l Restrictii asupra interactiunii componentelor a unui SO se pot impune atat in procesul de proiectare cat si in structura de executie. Este mai simpla si mai usor de realizat impunerea de astfel de restrictii inca de la proiectare.

lPrimul sistem cunoscut in care s-a introdus din proiectare o structura pentru interactiunea componentelor a fost THE (Universitatea Tehnica din Eindhoven), Dijkstra 1968. Acest sistem (scris pentru minicalculatoare) este structurat pe 6 nivele:





lFiecare nivel al sistemului virtualizeaza o anumita categorie de resurse si ofera spre nivelele superioare resurse virtuale din categoria respectiva. Apelurile intre nivele se realizeaza de la nivelurile superioare spre cele inferioare.

l -nivelul 0 -virtualizeaza procesorul sistemului de calcul. Se ofera spre nivelele superioare numarul solicitat de procese virtuale sau abstracte;

l -nivelul 1-se gaseste un unic proces-administrarea memoriei virtuale. Deasupra nivelului 1, fiecare proces dispune de propria sa memorie virtuala;

l -nivelul 2-un singur proces.Deasupra lui fiecare proces are imaginea ca dispune de propria lui consola

l


l-nivelul 3- mai multe procese (cite 1 pentru fiecare echipament periferic);

l-nivelul 4- se gaseste un numar de interpretoare de comenzi, fiecare avind capacitatea sa citeasca si sa interpreteze comenzi in limbaj de comanda specific sistemului si sa controleze executia unui proces utilizator.

lAceasta structurare permite o dezvoltare sistematica a proiectului pentru un nou sistem de operare si o verificare pe nivele a corectitudinii componentelor sistemului. Alegerea functiilor care se introduc intr-un anumit nivel este pasul esential in proiectarea sistemului si depinde de experienta si inspiratia proiectantului precum si de scopul pt care e realizat sistemul. Nu exista regula care sa fixeze nr. de nivele.


2.4.Adaptabilitatea SO la configuratia hardware

lFiecare sistem are o serie de caracteristici la care SO trebuie sa fie adaptat: cantitatea de memorie, tipul si numarul perifericelor, prezenta sau absenta anumitor optiuni ale procesorului etc.

lUn SO adaptabil este acela care permite intr-un mod simplu luarea in considerare a particularitatilor sistemului de calcul. El fie ca detecteaza automat configuratia fie ca foloseste niste fisiere de configurare care pot fi construite in mod simplu de inginerii de sistem.


Capitolul 3

UNIX

3.1 Istoric

l1969-Ken Thompson si Dennis Ritchie (Bell Laboratories) pe PDP 7 implementeaza Unix

l1973-pe PDP 11/45 si PDP 11/20, scris in C (versiunea 3) si cu facilitati de multiprogramare

l1976-apare prima versiune comerciala (versiunea 6)

l1978-apare versiunea 7; a inceput sa se implementeze si pe alte calculatoare. Aceasta versiune a fost distribuita gratuit impreuna cu sursele. Apare si 32V (pe 32 biti VAX).

l Firma AT&T fondeaza Unix Suport Group care avea responsabilitatea controlului si difuzarii UNIX.


l1982-apare System III (inspirat din V7 si 32V)

l1983-apare System V

lUSG devine Unix System Development Laboratories

l Berkley lanseaza versiunile BSD3 si BSD4, care deriva din 32V. (Berkley Software Distribution)

l -versiunea 4.1 are facilitati de gestionare a memoriei virtuale prin paginare la cerere

l -versiunea 4.2 are facilitati de lucru in retele (Ethernet si Arpanet); apare C-shell pe langa Bourne

lNoutati pe care le aduc BSD4 si System V:

l -ameliorarea gestiunii fizice a fisierelor

l -dezvoltarea bibliotecii de rutine sistem (mai ales la comunicarea interprocese)

l -dezvoltarea produselor utilitare


Tendinte de standardizare

l1985-AT&T publica standardul SVID( System V Interface Definition )

l1988-OSF( Open Software Foundation ) au vrut un standard UNIX pornind de la AIX al IBM

lIEEE: standardul POSIX (aproape identic cu SVID )

lx/open - standard pentru interfete utilizator


Caracteristici ale sistemului UNIX

lMultitasking

lMultiuser

lPortabilitate foarte mare

lSistem de fisiere ierarhizat

lSistemul de intrare/iesire e generalizat (perifericele sunt tratate ca fisiere obisnuite)


lProtectia informatiei e asigurata prin drepturi de acces si parole

lProgramele sunt reentrante


3.2 Structura sistemului UNIX:


1. Nucleul (Kernel) – partea principala (rezidenta)

2. Programe utilitare (de exemplu Shell)

Un utilizator are acces la nucleu prin:

- utilitare (nivel extranucleu)

- apeluri de functii-biblioteca C (de exemplu fopen)

- directive sistem (de exemplu open):

- pentru gestionarea fisierelor

- pentru controlul executiei proceselor

- pentru manipularea informatiei (parole, drept acces etc.)



Sistemul de fisiere

lFisier – o succesiune de octeti care nu este interpretata, interpretarea ramanand ca sarcina pentru programele utilitare.

lSistemul de fisiere este arborescent.

lExista trei tipuri de fisiere:

- obisnuite

- directoare (catalog)

- speciale



lFisierele obisnuite – pot avea numele de orice lungime (in unele versiuni exista o limitare la 14 caractere), nu poate contine spatiu si ‘/’

l Conventii pentru extensiile folosite:

.c - fisier C

.cc - fisier C++

.ps - fisier post script

.p - fisier Pascal

.o - fisier obiect

lFisierele executabile de obicei nu au extensie

lFisierele care incep cu ‘.’ (punct) sunt ascunse (nu se afiseaza de comanda ls).







lFisierele pot fi:

- fisiere text

- contin doar coduri ASCII pana la 127.

- impartite in linii terminate cu ‘n’ (LF), spre deosebire de DOS unde exista si ‘r’ (CR)

- fisiere binare

lDirectoarele se separa in cale prin ‘/’

lDirectorul radacina a sistemului de fisiere e notat prin ‘/’









lbin - director ce contine fisiere binare executabile:

- sh - shell

- csh - C shell

letc - utilitare folosite de administrator + fisiere cu informatii (parole, grupuri de utilizatori, fisiere de initializare)

llib - biblioteci uzuale (de exemplu C)

ltmp - fisiere temporare

l/usr/bin - utilitare mai putin folosite, dar furnizate impreuna cu sistemul

lusers - fisierele utilizatorilor

lspool - fisiere pentru imprimanta


Fisiere speciale


l/dev/lp - imprimanta

l/dev/hd0 - discul (HDD)

lExista doua categorii de terminale:

-terminale cu transfer caracter cu caracter

-terminale cu transfer pe blocuri (ex 512 octeti, discuri)

lLa dimensiunea fisierelor speciale intervin doua numere:

- major number - reprezinta categoria perifericului

- minor number - identifica perifericul in cadrul categoriei

Protectia fisierelor

lSe face prin: - atributele r – read, w- write, x- execute, pentru proprietar (u-user), grup (g-group) si ceilalti(o-others), in total 9 biti

lExista un bit SUID (set user ID); daca e setat, in momentul executiei programul va rula ca si cum ar fi lansat de proprietarul lui

lUn bit SGID (set group ID); daca e setat, grupul din care face parte proprietarul e 'activ'

lSticky bit- precizeaza sistemului ca fisierul e des folosit si ca e bine sa se pastreze o copie in spatiul de swapping


Montarea sistemelor de fisiere

lOperatia de montare:

-se adauga la sistemul de fisiere de pe un disc alte sisteme de fisiere (de pe alte discuri)

lExemplu: mount /dev/fd0 /pcfs

Are ca efect crearea in radacina a directorului /pcfs care corespunde sistemului de fisiere de pe discheta.

lOperatia de demontare:

- se renunta la sistemul de fisiere montat anterior

lExemplu: umount /dev/fdo

Are ca efect demontarea sistemului de fisiere de pe discheta.



Implementarea sistemului de fisiere

lConsideram un disc, blocuri de 512 octeti

lboot – pentru incarcarea sistemului

l superbloc – contine:

1.eticheta de volum

2. informatia de identificare a discului

3.numarul de i-noduri

4. dimensiunea discului

5. data ultimei actualizari

6. numarul primului i-nod liber


Structuri interne ale proceselor


Operatiile facute de P1 (modificari de deplasament) sunt vazute si de P2.

Putem avea si cazul procesului P3 (avem deplasamente diferite).




Structura unui proces in memorie



Lansarea in executie a proceselor

Modalitati de lansare a comenzilor

l1. comanda <CR> (shell face fork si apoi wait)


l 2. comanda &<CR> (shell face fork si apoi un altfel de wait, astfel incat comanda sa fie preluata in background)

Comenzi Unix



Listarea continutului unui director

lls [-alis]

a-afiseaza toate fisierele (all)

l-afiseaza toate detaliile (long)

i-afiseaza numarul modului index al fisierului


Afisarea si concatenarea fisierelor

lcat <lista_fisiere>

-afiseaza continutul fisierelor specificate in <lista_fisiere>

lcat f1 f2 > f3

-concateneaza continutul fisierelor f1 si f2 in fisierul f3


Schimbarea modului de acces
la un fisier

lchmod [u|g|o] [+|-] [r|w|x] <nume_fisier>

- se precizeaza daca vrem sa acordam (+) sau sa revocam un drept (-), pentru ce categorie (u-user, g-group, o-others), cat si dreptul acordat sau revocat (r-read, w-write, x-execute)

Ex: chmod g+wx fisier1

- acorda dreptul de scriere si executie utilizatorilor din acelasi grup cu proprietarul

Redirectarea iesirii unei comenzi

l > nume_fisier

- se creaza fisierul specificat, iar daca el exista, se goleste mai intai

Ex: ls > continut

l>> nume_fisier

- daca fisierul exista,se adauga iesirea comenzii la sfarsitul fisierului

Ex: ls >> continut

That’s all folks!



Sisteme de operare
Curs

Comenzi Unix
(continuare)



Obtinerea sintaxei unei comenzi

man <nume_comanda>

- va afisa sintaxa exacta a comenzii, modul de folosire, argumentele comenzii, eventualele valori returnate

- revenirea se face cu combinatia Ctrl+C sau Ctrl+Z

Comenzi pentru gestionarea proceselor

ps - afiseaza lista proceselor care sunt active, impreuna cu diferite date (identificatorul de proces – PID, terminal asociat etc.)

kill [-arg] <PID_proces>

- termina executia procesului precizat prin identificatorul de proces

Ex: kill -9 2245

sh <fisier>

- lanseaza in executie un fisier de comenzi Shell

Utilitar pentru gestionarea fisierelor si directoarelor

mc

- Midnight Commander, asemanator cu Norton Commander de sub DOS.

- permite parcurgerea ierarhiei de directoare, operatii cu directoare si fisiere

- ferestrele se pot activa / dezactiva cu combinatia Ctrl+O

- iesirea se face cu F10

Comenzi pentru gestiunea directoarelor


lpwd

- tipareste numele directorului curent

lcd <director>

- schimba directorul curent de lucru

lls [-adgilrst] <fisier>

- afiseaza continutul unui director





lmkdir <director>

- creeaza directorul cu numele precizat

lrmdir <director>

- sterge directorul precizat, daca este gol.


Comenzi pentru gestiunea fisierelor


lfind <director> <conditie>

- se cauta in directoarele specificate si in toate subdirectoarele lor, fisierele care satisfac <conditie>


lrm [optiuni] <fisier>

- sterge fisierele indicate




lmv <fisier1> <fisier2>

lmv <fisier> <director>

- schimba numele <fisier1> in <fisier2> sau muta <fisier> in <director>


lcp <fisier1> <fisier2>

lcp <fisier><director>

- copiaza <fisier1> in <fisier2> sau <fisier> in <director>

Comenzi pentru fisiere text


lcat <lista_de_fisiere>

- afiseaza la fisierul standard de iesire continutul fisierelor date in lista (se pot astfel concatena mai multe fisiere)


llpr [optiuni] <fisier>

- tipareste la imprimanta fisierele date ca argument


lwc [optiuni] [<fisiere>]

- numara caractere, cuvinte si linii in fisierele date ca argumente




lgrep [optiuni] [sir_caractere] <fisier>

- filtreaza liniile unui fisier, cautand sabloane (sir_caractere)


Comenzi pentru gestiunea volumelor

l df [<fisier_sistem>]

- afiseaza spatiul liber pe disc


ldu [optiune] [<director>]

- afiseaza sumarul privind utilizarea discului

Alte comenzi

ltest <expresie>

- se evalueaza <expresie>, iar daca valoarea ei este “Adevarat” se returneaza 0

- conditiile se refera la fisiere, directoare, siruri etc.


ldate

- afiseaza data si ora


lwho [am I]

- afiseaza numele utilizatorului


lecho [-n] <argumente>

- afiseaza argumentele date


llogin [utilizator]

- intrarea in sesiunea de lucru


llogout

- iesirea din sesiunea de lucru


That’s all folks!



Sisteme de operare
Curs

Interpretoare de comenzi UNIX ( Shell )

l Interpretorul de comenzi functioneaza in acelasi timp atat ca limbaj de comanda cat si ca limbaj de programare ( lucreaza atat in regim interactiv cat si in regim de interpretor ).

l Functionarea ca limbaj de comanda ( regim interactiv ) inseamna ca intrarea interpretorului este preluata direct de la tastatura, fiecare comanda fiind imediat executata.



lFunctionarea ca limbaj de programare ( regim interpretativ ) inseamna ca intrarea interpretorului consta intr-un fisier de comenzi introdus in prealabil de utilizator.

l Interpretorul de comenzi considerat standard in primele versiuni UNIX este cel realizat de Bourne. Pentru UNIX BSD ( varianta Berkeley ), interpretorul se numeste C-Shell, si difera de cel al lui Bourne prin sintaxa (mai apropiata de cea a limbajului C ), facilitati suplimentare, detalii semantice. Pentru domeniul public exista printre altele interpretoarele ZSH si BASH; acesta din urma porneste de la Bourne shell si este interpretorul de comenzi preferat de LINUX.

Lansarea in executie a unui fisier de comenzi

Daca fisierul de comenzi este fiscom, lansarea in executie se poate face sub forma :

$ sh fiscom

- prompterul sistemului )

Din copia curenta a interpretorului de comenzi se lanseaza o noua copie careia i se specifica drept parametru un nume de fisier ( fisier de intrare, din care isi ia comenzile si le executa ).


Lansarea in executie ca si fisier executabil

O a doua modalitate de lansare a unui fisier de comenzi este ca si fisier executabil.

Practic, orice fisier dintr-un sistem de fisiere UNIX poate fi considerat daca este cazul, un fisier executabil. Pentru a face un fisier sa fie executabil va trebui sa setam unul sau mai multi biti de executie ai sai (x, pentru utilizator, grup, sau ceilalti)

Ex: chmod +x fiscom va adauga bitul de executie pentru toate clasele de utilizatori



Ex. 2: chmod u+x fiscom va adauga bitul de executie pentru utilizatorul fisierului de comenzi fiscom

Ex. 3: chmod 755 fiscom va acorda dreptul de executie pentru toti utilizatorii

-111 101 101

drwx rwx rwx

u g o

Se precizeaza valoarea fiecarui bit de executie si se citeste valoarea zecimala rezultata separat pentru utilizator, grup si ceilalti.


Lansarea efectiva in executie

Dupa setarea bitului de executie, lansarea in executie se poate face direct, folosind numele fisierului de comenzi:

$ fiscom unde $ este prompterul (cursorul), iar fiscom este numele fisierului de comenzi

In aceasta situatie, nu se lanseaza un nou Shell (o copie a interpretorului de comenzi) ci fisierul de comenzi este interpretat de Shell-ul curent.


Structuri de comanda in Shell


Structura de comanda for

for nume [ in w1, w2 ]

do lista_comenzi

done

Se executa in mod repetat lista_comenzi, pentru fiecare valoare posibila a variabilei shell nume.

Valorile variabilelor speciale se interpreteaza ca siruri de caractere. Daca lipseste partea optionala, nume va primi ca valori argumentele specificate in linia prin care s-a lansat in executie fisierul de comenzi respectiv.



Exemplu: Fisier de comenzi pentru consultarea unei baze de date cu numere de telefon

Vom creea un fisier text cu numerele de telefon, numit telefon

andrei 234271

bianca 219453

costel 0216312481

radu 0723364982

Vom creea o procedura shell care ne furnizeaza numarul de telefon al numelui specificat de noi, numit tel

for i do

grep $i /home/student/nume/telefon

done


Utilizare: $ tel costel

Va returna numarul de telefon care corespunde numelui precizat, daca acesta este gasit, impreuna cu numele.

Comanda grep cauta un tipar intr-un fisier specificat si tipareste linia in care l-a gasit.

Observatii

i - nume variabila

$i - valoarea variabilei

Trebuie sa se precizeze calea exacta la fisierul telefon, altfel datele nu vor fi gasite



Structura de comanda case

case cuvant in

sablon1) lista_comenzi_ ;

sablon2) lista_comenzi_ ;



esac

Se compara cuvant cu sablon in ordinea in care sunt specificate sabloanele si daca se gaseste o potrivire se executa lista_comenzi asociata, dupa care se paraseste structura.



Exemplu: procedura Shell care se apeleaza cu un nume de fisier, sau cu doua nume de fisiere ca si argumente. In caz ca exista un argument, se adauga in el de la tastatura, daca exista doua, se adauga continutul primului fisier la cel de-al doilea. Fisierul va avea numele append

case $# in

1) cat >> $1 ;;

2) cat < $1 >> $2 ;;

*) echo 'utilizare: append [from] to '

esac

variabila Shell ce are ca voaloare numarul parametrilor propriu-zisi din linia de comanda


That’s all folks!




Sisteme de operare
Curs

Structuri de comanda in Shell

(continuare)


Structura de comanda while


while lista_comenzi_1

do lista_comenzi_2

done


Se executa lista de comenzi 1 si se testeaza starea de iesire a ultimei comenzi din aceasta lista. Daca starea de iesire este 0 ( zero ), se executa si lista de comenzi 2 si se reia ciclul. In caz contrar, ciclul se incheie.


Exemplu pentru while

Atata vreme cat mai exista parametri in linia de comanda, se executa operatiile ce vor urma dupa do (' “), apoi se elimina parametrul din linia de comanda (se trece la urmatorul parametru din linia de comanda) cu shift. Comanda test testeaza in acest caz daca mai exista parametri in linia de comanda.


while test $1

do

shift

done




Observatie:

Secventa de comenzi de mai sus (exemplul pentru while) este echivalenta, ca si functionare cu urmatoarea secventa de comenzi, care foloseste for:


for i

do .

done



Structura de comanda until

until lista_comenzi_1

do lista_comenzi_2

done


Se executa lista de comenzi 1 si cat timp iesirea ultimei comenzi este diferita de 0 (zero), adica pana la prima executie cu succes, se executa si lista de comenzi 2 si se reia bucla de la inceput. Practic se fac iteratii pana la prima executie cu succes a ultimei comenzi din lista_comenzi_1. Observatie:

Conventia folosita la valorile returnate la aceste comenzi este: 0 = True (Adevarat)

1 = False (Fals)


Exemplu pentru until


until test -f fisier

do sleep 300

done


Se verifica existenta fisierului cu numele fisier cu comanda test. Daca nu exista fisierul, se asteapta 300 milisecunde si se reia testarea. Se iese din bucla daca fisierul a fost gasit.


Structura de comanda if

if lista_comenzi_1

then lista_comenzi_2

else lista_comenzi_3

fi


Se executa lista de comenzi 1, daca ultima sa comanda returneaza 0 (True), se executa lista de comenzi 2, iar daca returneaza 1 (False), se executa lista de comenzi 3.


Imbricarea structurii if

if

then

else if then fi

fi


Gruparea comenzilor

sau     


( lista_comenzi )


Gruparea intre este executata de shell-ul curent; gruparea intre ( ) este executata de un nou shell ( dupa terminarea executiei, noul shell ' moare ' ). Separarea comenzilor se face cu caracterul “;”


Ex. ( cd x; rm fis )

Comanda test

test [ -o ] arg

o – este o litera care indica optiunea dorita

arg - este fie un sir, fie un nume de fisier


Instructiunea Rezultatul

test sir .T. daca sir este diferit de sirul vid

test -f fis .T. daca fis exista ca fisier (nu catalog)

test -r fis .T. daca fis poate fi citit

test -w fis .T. daca fis poate fi scris

test -d fis .T. daca fis este de fapt catalog

O forma echivalenta pentru test –f fis este:

if [ -f fis ]

Variabile Shell

$# numarul de parametri pozitionali dintr-o comanda ( argc )

$? starea de iesire a ultimei comenzi executate

$0 numele comenzii

identificatorul de proces al shell-ului curent ( se foloseste adesea pentru generarea de fisiere temporare )

identificatorul de proces al celui mai recent proces ce lucreaza in background

$HOME rezulta catalogul gazda al fiecarui utilizator ( este initializat la valori specifice tot in fisierul de valori )

$PATH            lista cataloagelor in care se cauta pentru a gasi comenzile

Ex. PATH : . / bin : $HOME / bin : / usr / bin


That’s all folks!



lExista in Shell posibilitatea ca datele pentru executarea unei comenzi sa fie specificate chiar in cadrul procedurii. Portiunea respectiva se va numi document HERE.

l for i __________________

l do grep $i | >> ! |

l ___________| | datele necesare pentru

l | alex 342171 | executie sunt specificate

l | jim 190453 | direct in procedura

l | vetuta 0163424851 |

l | ! |

l |_____ _______ ______ _____________|

l done


lObs.               << - redirectarea intrarii ! - delimiteaza datele


l La sfarsitul datelor, ' ! ' este singurul caracter de pe linie.

lIntr-un document here are loc substituirea parametrilor inainte ca documentul sa fie utilizat.

That’s all folks!

Sisteme de operare
Curs

Variabile Shell
(continuare)


Substitutia parametrilor

Variabilele shell pot primi valori fie prin atribuire directa sau in linia de comanda prin care se lanseaza o procedura shell.

Ex: $ user = fred comanda

Lanseaza o procedura shell numita comanda; inainte de aceasta, variabilei user i se atribuie valoarea fred; aceasta valoare va fi utilizata in procedura shell comanda.


Ambianta unui proces este formata dintr-o lista de perechi nume = valoare ce se transmit programului ca si cand ar fi o lista de argumente.

La apelarea unei proceduri, shell-ul activ in momentul respectiv baleiaza ambianta procedurii si creaza cate o variabila cu valoarea corespunzatoare pe care o transmite comenzii. Orice modificari efectuate in interiorul unei proceduri shell ( crearea unor variabile noi, modificarea valorilor variabilelor vechi ) nu este vizibila in afara procedurii decat daca apare explicit o specificare export in fata numelui variabilei.


Este posibil sa specificam faptul ca unele variabile nu pot fi modificate :

readonly nume_variabila

Daca un parametru shell nu are specificata valoarea, el primeste implicit ca valoare sirul vid:

echo $d - daca d nu are valoare => sir vid.

Este posibila specificarea valorii implicite:

echo $ - daca d este initializat, pastreaza valoarea ce i s-a atribuit; altfel d primeste valoarea '.'

echo $ -daca d nu are valoare, nu primeste ca valoare sirul vid, ci este afisat un mesaj, apoi executia procedurii este abandonata.



: $ $ $

Poate fi prima linie dintr-o procedura shell (fisier de comenzi, script). Efectul ei va fi ca procedura nu se executa decat daca variabilele user, acct, bin au valori specificate. In caz contrar, daca variabilele respective nu au fost initializate se paraseste procedura fara a se executa.

: este o comanda interna a shell-ului ( nume de comanda ), care doar evalueaza parametrii fara a face altceva.


Substitutia comenzilor

Iesirea standard a unei comenzi poate substitui parametrii de intrare standard ai altei comenzi.

Ex 1: d = 'pwd' - se executa comanda pwd, iar iesirea ei (numele catalogului curent) i se atribuie variabilei d.

Ex 2: ls ‘echo '$1' ' - este echivalent cu: ls $1

Intre ghilimele este permisa substitutia parametrilor (de exemplu se substituie $1).

Substitutia comenzilor apare in toate contextele in care este permisa si substitutia parametrilor.

Evaluare si citare

Shell-ul se comporta ca un macroprocesor ce permite substitutia parametrilor, a comenzilor si generarea de nume de fisiere pentru argumentele comenzii.

Inainte ca o comanda sa fie executata apar in ordine urmatoarele etape :

1.) substitutia parametrilor;

2.) substitutia comenzilor;

3.) interpretarea blank-urilor;

4.) generarea numelor de fisiere.



Ex : fie o variabila x cu valoarea momentana $y:

echo $x => echo $y => $y

Practic se inlocuieste $x (reprezentand valoarea lui x) cu valoarea lui x, adica $y


Ex 2: HOME = 'pwd' - astfel, oriunde se lanseaza comanda, HOME va fi catalogul curent.

Dupa ce se realizeaza substitutia parametrilor si a comenzilor, sirul de caractere rezultat este divizat in cuvinte, separate prin generic blank (orice caracter de separare specificat). Sirul vid nu este considerat ca si cuvant decat daca este citat:

echo ''


echo $null - apare substitutia parametrilor; null sau este initializat pe sirul vid, sau nu e initializat si atunci se initializeaza ca fiind un sir vid, deci in final va fi un sir vid.

Citarea unor caractere sau siruri apare din necesitatea de a da caracterelor sau sirurilor respective o interpretare diferita de cea normala.

Exista o serie de caractere cu functie speciala × $ . Acestea sunt numite metacaractere.

Ex: x - pentru specificarea caracterului x; este mecanismul de citare a caracterului x prin

- pentru specificarea caracterului


Sirurile se pot cita in intregime prin includerea lor intre apostroafe ' ).

Mecanismul de citare prin ghilimele ' ) este tot pentru siruri. Intre ghilimele este executata substitutia parametrilor si comenzilor, nu si generarea de nume de fisiere.


FUNCTII SISTEM

TIPURI DE DATE PRIMITIVE

Header-ul <sys/types.h> defineste citeva tipuri de date dependente de implementare, numite tipuri de date sistem. Multe din aceste tipuri sunt definite si in alte header-e. Modul de definire este folosind typedef. Cateva tipuri de date primitive (sistem):

caddr_t = adresa

clock_t = contor de impuls de ceas

comp_t = impulsuri de ceas comprimate dev_t = numere de dispozitiv (major/minor)

fd_set = seturi de descriptori de fisiere

fpos_t = pozitie in fisier


gid_t = ID-uri de grup (numeric)

ino_t = numere de noduri index

mode_t = tip de fisier, mod de creare fisier

nlink_t = contor de legaturi pentru intrari de director

off_t = dimensiunea fisierului si deplasamentul in fisier (cu semn)

pid_t = ID de proces si ID de grup pt procese ( cu semn)

ptrdiff_t = rezultat diferenta a doi pointeri (cu semn)

rlim_t = limite de resurse

sig_atomic_t = tip de date care pot fi accesate atomic

sigset_t = set de semnale

size_t = dimensiuni de obiecte (de ex siruri) (fara semn)


ssize_t = functii care returneaza contor de octeti (cu semn)

time_t = contor de secunde

uid_t = ID de utilizare, numeric

wchar_t = poate reprezenta toate codurile distincte de caractere

Definind aceste tipuri de date, programele nu vor contine detalii de implementare care pot sa difere de la un sistem la altul.


Functii sistem de intrare / iesire

1. Descriptori

Pentru nucleu, toate fisierele deschise sunt referite prin descriptori de fisiere. Un descriptor de fisier este un intreg nenegativ. La deschiderea unui fisier existent sau la crearea unuia nou, nucleul returneaza procesului apelant un descriptor de fisier. La citirea sau scrierea in fisier, identificam fisierul prin descriptorul returnat de functia open sau creat .

Prin conventie, descriptorul 0 corespunde intrarii standard, 1 iesirii standard, 2 iesirea pentru mesaje de eroare.


2. Functia open

int open (const char * cale, int oflag, /*,mode_t mode */);

returneaza -1 pentru eroare, descriptorul in caz de succes Trebuie incluse <sys/types.h>, <sys/stat.h>, <fcntl.h>.

Al treilea argument este utilizat numai la crearea unui fisier nou.

oflag consta dintr-o expresie care contine o serie de constante, definite in <fcntl.h>, combinate prin OR binar, care precizeaza felul in care va fi deschis fisierul:

O_RDONLY| O_WRONLY| O_RDWR - se exclude reciproc. Prez obligatorie O_APPEND

O_CREAT - creeaza fisierul, daca acesta nu exista.

O_EXCL - genereaza eroare daca se da impreuna cu O_CREAT si fisierul precizat exista.


O_TRUNC - daca fisierul exista si daca e deschis cu succes pt W sau RW, il trunchiaza la lungimea 0.

O_SYNC - fiecare Write asteapta scrierea efectiva la dispozitiv.



That’s all folks!





Sisteme de operare
Curs

Functii sistem de intrare/iesire
(continuare)


3. Functia creat

int creat (const char *cale, mode_t mode);

Returneaza -1 in caz de eroare, sau descriptorul.

Trebuie incluse aceleasi header-e ca la open. Este echivalent cu:

open(cale, O_WRONLY | O_CREAT | O_TRUNC, mode);

Un dezavantaj este ca fisierul este deschis doar pentru scriere. La crearea unui fisier temporar, in care se va scrie si din care se va citi, ar trebui creat/close/open. O varianta ar fi:

open(cale, O_RDWR | O_CREAT | O_TRUNC, mode);


4. Functia close

int close (int descfis);

Trebuie inclus fisierul antet <unistd.h>. Returneaza -1 pt eroare.

La terminarea unui program, toate fisierele sunt inchise automat de catre nucleu. Multe programe apeleaza la aceasta facilitate si nu inchid explicit fisierele deschise.



5. Functia lseek

Fiecare fisier are asociat un deplasament curent. Acesta este un intreg nenegativ care precizeaza numarul de octeti de la inceputul fisierului pana in pozitia respectiva. Operatiile de citire sau scriere actioneaza de la acest deplasament si determina incrementarea sau decrementarea lui cu numarul de octeti scrisi sau cititi. Implicit, deplasamentul este initializat cu 0 la deschiderea fisierului, cu exceptia deschiderii cu O_APPEND, cand este pozitionat la sfarsitul fisierului.

Pentru pozitionare explicita in fisier:

off_t lseek (int desfis, off_t offset, int from);

Returneaza -1 pentru eroare.


Trebuie incluse <sys/types.h>, <unistd.h>.

Interpretarea lui offset depinde de valoarea lui from :

SEEK_SET - noua pozitie va fi la offset octeti de la inceputul fisierului;

SEEK_CUR - se numara offset de la pozitia curenta;

SEEK_END - se numara offset octeti relativ la sfirsitul fisierului.

Pentru obtinerea pozitiei curente:

off_t pozitie_curenta;

pozitia_curenta=lseek(fd,0,SEEK_CUR);

Aceeasi tehnica poate fi utilizata pentru a testa daca descriptorul respectiv suporta sau nu pozitionarea.

6. Functiile read si write

ssize_t read (int fd, void *buff, size_t nbytes);

Returneaza: - numarul de octeti cititi (poate fi mai mic sau egal cu nbytes)

- 0 pt EOF (End Of File- sfarsit de fisier)

- -1 pentru eroare

ssize_t write (int fd, void *buff, size_t nbytes);

Returneaza : - numarul de octeti scrisi (de obicei nbytes)

- -1 pentru eroare (umplerea discului sau depasirea lungimii permise a fisierului)

Trebuie inclus fisierul antet <unistd.h>.

7. Functiile dup si dup2

int dup (int fd);

int dup2 (int fd, int fd2);

Trebuie inclus fisierul antet <unistd.h>.

Returneaza noul descriptor sau -1 pentru eroare .

fd2 precizeaza valoarea noului descriptor care se asociaza.

Daca fd2 este deschis, acesta este mai intai inchis.

Daca fd este egal cu fd2, dup2 returneaza fd2 fara a-l inchide.

Ambii descriptori, cel vechi si cel nou, indica aceiasi intrare in tabela de fisiere (aceleasi flag-uri de stare si acelasi offset).

8. Functia fcntl

int fcntl (int fd, int cmd,,/* int arg */);

Trebuie incluse <sys/types.h>,<unistd.h>,<fcntl.h>.

Returneaza -1 pentru eroare. Utilizari:

- duplicare descriptor existent;

- obtinere/setare flag-uri descriptori;

- obtinere/setare flag-uri de stare fisier;

- obtinere/setare caracteristica I/E asincrona;

- obtinere/setare blocare acces la inregistrare;

- inchidere sau nu la o functie exec;

- modul in care a fost deschis fisierul.

Utilitate: Programul poate opera asupra descriptorilor (mai ales 0 ), fara sa cunoasca numele fisierului asociat de shell.


Exemplu: program care primeste ca argument un descriptor si afiseaza flag-urile fisierului asociat:

# include <sys/types.h>

# include <fcntl.h>

# include <unistd.h>

# include <stdio.h>

int main (int argc,char *argv[])


if ((val=fcntl(atoi(argv[1]), F_FGETFL,0))< 0 )


accmode=val & O_ACCMODE;

if ( accmode==O_RDONLY) printf (' read only ');

else if ( accmode==O_WRONLY) printf (' write only ');

else if ( accmode==O_RDWR) printf (' read write ');

else printf (' mod acces necunoscut ');

if (val & O_APPEND) printf (' append ');

if (val & O_NONBLOCK) printf ('nonblocking ');

# ifdefine (O_SYNC)

if (val & O_SYNC) printf(' scriere sincrona');

# endif

putchar('n') ;

return (0);

}



Fie a.out numele fisierului executabil obtinut in urma compilarii programului. Exemple de utilizare:

$a.out 0 </dev/tty

va afisa: read only

$a.out 1 >temp.temp

$cat temp.temp

va afisa: write only

$a.out 2 >>temp.temp

$cat temp.temp

va afisa write only, append


8. Functia ioctl

Este functia esentiala pentru operatiile de intrare/iesire. Foarte multe operatii nu pot fi exprimate prin una din functiile prezentate pana in prezent. Un exemplu ar fi operatiile de intrare/iesire cu terminalele.

int ioctl (int fd, int cerere,);

Trebuie incluse <unistd.h>, <sys/types.h>.

Returneaza -1 pentru eroare.


9. /dev/fd

Sistemele noi ofera directorul /dev/fd, cu intrarile numite 0 . Deschiderea fisierului /dev/fd/n este echivalenta cu duplicarea descriptorului n.

fd= open('/dev/fd/0',mode); <=> fd=dup(0);

Unele sisteme ofera /dev/stdin, /dev/stdout , /dev/stderr care sunt echivalente cu celelalte 3.

Utilizarea principala e in shell unde se permite programelor - care necesita un nume de cale ca argument - sa primeasca date de la intrarea standard ( tastatura ). Exemplu:

cat f1 /dev/fd/0 f2


GESTIONAREA DIRECTOARELOR


1.Functiile stat, fstat, lstat

int stat (const char *cale,struct stat *buf);

int fstat (int fd,struct stat *buf);

int lstat (const char *cale,struct stat *buf);

Returneaza -1 pt eroare, 0 in caz de succes.

Trebuie incluse <sys/types.h>,<sys/stat.h>.

Cele trei functii completeaza o structura de informatii despre fisier.

stat primeste un nume de cale, fstat un descriptor, lstat este echivalent cu stat, dar daca fisierul este o legatura simbolica, returneaza informatii despre legatura simbolica, nu despre fisierul indicat de legatura.

Structura stat este definita in <sys/stat.h>

Cel mai important utilizator al functiei stat este probabil comanda ls -l.


2.Tipuri de fisiere

In <sys/stat.h> sunt definite o serie de macrouri, care pot testa valoarea lui st_mode care apartine structurii stat:

S_ISREG() - fisier obisnuit

S_ISDIR( ) - director

S_ISCHR( ) - f. special in mod caracter

S_ISBLK( ) - f. special in mod bloc

S_ISFIFO( )- canale (pipe) sau FIFO - tip special pentru intercomunicare intre procese

S_ISLNK ( legatura simbolica

S_ISSOCK ( ) –prize (sockets) - pt comunicarea in retea


That’s all folks!





Contact |- ia legatura cu noi -| contact
Adauga document |- pune-ti documente online -| adauga-document
Termeni & conditii de utilizare |- politica de cookies si de confidentialitate -| termeni
Copyright © |- 2024 - Toate drepturile rezervate -| copyright