25 mai 2016

Sistemul de operare UNIX

Structura  şi  arhitectura  sistemului  UNIX           
   

 S
istemul de operare UNIX este un sistem multitasking şi multiuser destinat pentru diverse tipuri de calculatoare (microcalculatoare, minicalculatoare, supercalculatoare) şi pentru reţele puternice de calculatoare, fiind cel mai vechi sistem de operare ce a rezistat şi s-a impus până azi.
La ora actuală sistemul UNIX este singurul sistem de operare care funcţionează simultan pe microcalculatoare şi supercalculatoare. Este practic singurul sistem de operare pentru minicalculatoare şi staţii de lucru. Este sistemul de operare care a stat la baza conceperii şi elaborarii altor sisteme de operare performante, cel mai recent exemplu fiind sistemul de operare Linux -primul sistem de operare free software (elaborat în 1992).
           Sistemul Unix este primul sistem care a inclus clasa de protocoale (set standard de servicii pentru transmiterea de informaţii între calculatoare) TCP/IP ( Transmission Control Protocol Internet Protocol) utilizată astăzi de cea mai mare reţea de calculatoare la nivel mondial: sistemul Internet, cu milioane de abonaţi pe toate continentele. Unii utilizatori ai sistemului Internet trebuie să fie familiarizaţi cu filosofia şi comenzile sistemului UNIX, deoarece multe servicii oferite utilizatorilor vor fi mai eficiente dacă sunt cunoscute unele comenzi UNIX

           În prezent există mai multe implementări (variante) ale sistemului UNIX:

·      System V (licenţă Unix Support Group-AT&T);
·      Solaris (licenţă Sun Microsystems);
·      AIX (licenţă IBM, pentru calculatoare RISC   RS-6000);
·      ULTRIX , OSF  ( produs de firma DEC-Digital);
·      HP-UX ( produs de firma Hewlett-Packard);
·      Linux (free software-Linus Torvalds; Finlanda ).

           Sistemul UNIX lucrează în time-sharing fiind  constituit dintr-un nucleu (Kernel) şi un număr foarte mare de utilitare accesibile prin intermediul interpretorului de comenzi Shell ce reprezintă interfaţa dintre sistemul de operare şi utilizator:


            Nucleul (Kernel) este un intermediar între interfaţa furnizată de apelurile sistem şi echipamentele fizice din sistemul de calcul. Nucleul UNIX este partea rezidentă a sistemului de operare care asigură funcţii de supervizare şi gestiune a resurselor sistemului de calcul   (memorie internă, dispozitive I/O):

·      organizarea şi gestiunea memoriei;
·      organizarea şi gestiunea fişierelor;
·      execuţia şi gestiunea proceselor;
·      planificarea unităţii centrale (UC) între procese;
·      controlul şi gestiunea perifericelor;
·      protecţia datelor şi programelor.

            Eleganţa interfeţelor sistemului UNIX  şi calitatea remarcabilă a abstracţiilor pe care le oferă utilizatorilor, au influenţat şi vor continua să influenţeze profund arhitectura sistemelor de calcul. De asemenea, în ultima perioadă s-au adus noi facilităţi pentru a lucra cu un număr mare de microprocesoare şi pentru a realiza integrarea completă a aplicaţiilor Windows NT şi Novell Netware. Sistemele UNIX comerciale sunt încă realizări impresionante, care oferă funcţionalităţi superioare sistemelor Linux şi Windows NT.


              Comentariu despre Supercomputing

           În anul 1998 a fost lansat pe piaţa de calculatoare Serverul de întreprindere HP 9000 model V2500 (produs al firmei Hewlett Packard) care se caracterizează prin următoarele:

·      oferă cele mai puternice şi flexibile platforme UNIX pe 64 biţi, ce foloseşte până la 2048 de procesoare moderne RISC  HP  PA-8500 de 440 MHz superscalare, cu 1.5 Mb memorie Chache pe cip şi cu o performanţă în execuţie de 1,76 Gigaflops;
·      oferă platformă pe 64 biţi bazată pe microprocesoare de 64 biţi, registrii şi magistralele pe 64 biţi, cu dresarea memoriei pe 64 biţi şi cu acces DMA pe 64 biţi; sistemul de operare şi Kernel-ul este în intregime pe 64 biţi;
·      lucrează sub sistemul de operare HP-UX ce este o implementare pe 64 biţi dezvoltată de firma Hewlett Packard special pentru sistemele de mainframe şi care prezintă compatibilitate totală cu versiunile precedente de 32 şi 64 biţi, putând executa fără recompilare toate produsele software de 64 şi 32 biţi;
·      oferă mediu de execuţie pentru cele mai complexe aplicaţii în timp real pentru diverse domenii ale zilelor noastre:
                                          OLTP (on-line transaction processing)
                                 ERP ( entreprise resource planning)
                                 - luarea de decizii
                                          calcule complexe de inginerie şi modelări ştiinţifice
                                 gestionarea marilor baze de date din domeniul ştiinţific, financiar-
                                      bancar, economic, militar;
·      permite execuţia aplicaţiilor Java, o integrare completă a aplicaţiilor Windows NT şi Novell Netware şi suport pentru utilizarea mediilor C/C++Fortran 90Oracle Web.
           Sistemul de operare UNIX este constituit din:

·      Nucleu (Kernel) - partea rezidentă;
·      Shell - interpretor de comenzi;
·      Utilitare servicii accesibile prin intermediul interpretorului de comenzi.

            Interfaţa utilitarelor şi a aplicaţiilor utilizatorilor cu nucleul, se face prin intermediul unui ansamblu de funcţii de sistem. Utilizatorul are trei nivele de acces la aceste funcţii :

·      prin utilitare ( nivel extranucleu);
·      prin funcţii de bibliotecă standard a limbajului C/C++ (nivel intermediar);
·      prin directive sistem (nivel inferior).


             Structura  sistemului  UNIX

         Din figură se poate observa că nucleul este intermediarul între interfaţa furnizată de apelurile de sistem şi echipamentele fizice. Nucleul realizează gestiunea fişierelor şi memoriei, planificarea unităţii centrale între procese. Apelurile sistem definesc interfaţa cu programatorul. Apelurile sistem pot fi grupate în trei categorii:
·      pentru prelucrarea fişierelor şi perifericelor;
·      pentru controlul execuţiei proceselor;
·      pentru prelucrarea informaţiei.
           Versiunile actuale de UNIX oferă pentru utilizator atât interfeţe de tip linie de comandă, desemnată prin Shell -cele mai utilizate fiind sh (Bourne Shell, după numele creatorului S.R. Bourne), ksh (Korn Shell), csh (Shell)-, cât şiinterfeţe grafice moderne (GUI-Graphical User Interface).
    Nucleul (Kernel) UNIX este constituit din două componente principale:

·      sistemul de gestiune a fişierelor;
·      sistemul de gestiune a proceselor.

            Funcţiile generale ale sistemului de gestiune a fişierelor sunt:

·      operatii cu fişiere (creare, citire, scriere, copiere, ştergere, concatenare,etc.);
·      alocare de spaţiu dinamic pentru fişiere pe HD sau FD;
·      accesul la fişiere;
·      administrarea spaţiului liber pe HD sau FD;
·      schimbarea structurii sistemului de fişiere.

Funcţiile generale ale sistemului de gestiune a proceselor sunt:

·      trecerea proceselor prin diverse stări (creare, aşteptare, execuţie, terminare);
·      planificarea proceselor pentru a avea acces la procesor;
·      comunicarea între procese;
·      sincronizarea proceselor.
Sistemul  de  fişiere   pentru  UNIX


            Sistemul de fişiere oferă structura modului de organizare a informaţiilor în sistem: structura arborescentă (ierarhică) de directoare şi fişiere. De fapt, această concepţie a fost preluată de celelalte sisteme de operare(DOSWindows, Netware).
            Ideea care stă la baza sistemului de fişiere este ierarhia. Se ceează astfel imaginea unui sistem de fişiere ierarhizat sub formă de arbore, în vârful căruia se află directorul radacina (root), notat “\”, la care se pot conecta un număr dedirectoare şi fişiere. Fiecare director poate conţine alte directoare şi fişiere, directoare care la rândul lor pot conţine alte directoare şi fişiere, pe un număr nelimitat de nivele. Această structură arborescentă este folosită de sistemul UNIXpentru gestionarea şi localizarea fişierelor proprii şi ale utilizatorilor. 

            Sistemul Unix utilizează patru tipuri de fişiereordinare, director, speciale, pipe.
           Fişiere ordinare

            DefiniţieUn fişier ordinar este utilizat pentru memorarea de informaţii pe un suport magnetic ( HD, FD) ce reprezintă un progam sursă (text), forma de cod executabil (binar), date necesare execuţiei programelor şi care este singurul tip de fişiere folosit pentru memorarea pe termen nelimitat a informaţiilor.

            Identificatorul de fişier (numele fişierului) care se alocă în sistemul UNIX diferă de cel utilizat în sistemele DOS şi WindowsAcesta este o secvenţă de caractere ce poate fi de lungime mare (maxim 256 caractere) pentru versiunile actuale de UNIX (în versiunile vechi se impuneau 14 caractere). Regulile ce trebuie să fie respectate sunt:

·      se face distinctie între litere mari şi litere mici (spre deosebire de DOS); exemplu: filename.txt nu este similar cu FILEname.txt;
·      caracterele / | \ ! @ # $ ^ & * ( ) nu pot fi incluse în numele fişierului;
·      este permis includerea spaţiilor în numele fişierului, dar nu se recomandă;
·      Caracterul “.” (punct) este utilizat ca pe un separator între cuvinte; sistemul UNIX nu se foloseşte de extensia numelui de fişiere în acelaşi mod în care o face sistemul DOS; exemplu: where.can.i.find.the.source.to.C.news.

            ObservaţieAnumite programe cer ca fişierele pe care le prelucrează să poarte sufixe:  .sh   pentru programe Shell,  .c  pentru programe C, etcFişierele care conţin cod executabil nu au de obicei sufix.

             Există două tipuri de fişiere ordinare :

·      text - conţin numai caractere ASCII (256 caractere);
·      binare - conţin toate cele 256 valori posibile pentru fiecare octet.

             Din punct de vedere al sistemului de operare, un fişier este constituit dintr-un şir de octeţi de lungime nedefinită, terminat cu un caracter special EOF (end of file). Din punct de vedere utilizator,  fişierele text sunt constituite din linii terminate cu NL(new line).

              Fişierele ordinare privite în structura arborescentă, sunt aflate pe ultimul nivel (noduri terminale).Drepturile de acces la acestea sunt: R (read; pentru citire), W (write; pentru scriere), (execuţie; pentru lansarea în execuţie).

             Aceste drepturi de acces la fişiere sunt definite separat pentru următoarele categorii de utilizatori:

·      u - proprietar (owner);
·      g - grup (group);
·      o - restul utilizatorilor (other).


             Fişiere director

            DefiniţieFişierele director sunt fişiere ce conţin liste de directoare şi care asigură structura arborescentă ce are un director rădăcină (root) notat prin “/”.

          Sistemul de directoare este întreţinut şi controlat de sistemul de operare. Programele utilizatorului pot citi directoarele, dar sistemul are grijă ca acestea să nu modifice directoarele, pentru a se garanta integritatea sistemului de directoareFiecare utilizator are un director propriu în care sunt salvate toate fişierele sale. La un director se pot ataşa fişiere ordinare sau alte directoare care grupează colecţii de fişiere.
            Se creează astfel un sistem de fişiere ierarhizat sub formă de arbore  având ca rădăcină directorul rădăcină, notat “/”. Principalele directoare folosite în implementările sistemului UNIX  sunt în general cele care apar în structura arborescentă de mai jos.  
                                
    Conţinutul principalelor directoare

/bin   - conţine comenzile de bază în format executabil (cd, ls, mkdir, rm, rmdir)
/dev  -  conţine fişierele speciale de comunicare cu dispozitivele HD, FD,Printer, terminale, terminal operator
/etc    -  conţine repertoarul unor utilitare speciale de întreţinere, folosite doar de administratorul de sistem ( fişierul de parole, fişierul de grupuri) 
/home pastrează toate directoarele de rezidenţă ale utilizatorilor 
/lib    - conţine bibliotecile pentru limbajele de programare (C, PASCAL,…) 
/sbin  - conţine toate programele ce trebuie lansate în execuţie de UNIX, precum şi unele comenzi folosite doar de administratorul de sistem 
/stand  - conţine nucleul (Kernel) sistemului UNIX 
/sys  -  conţine  textul sursa pentru programele sistemului UNIX 
/tmp  -  conţine fişiere temporare 
/usr   - conţine directoare şi fişiere pentru utilizatori (man-manuale, doc, … ) 
/var   - conţine fişiere pentru tipărire şi poşta electronică (E-mail)

             Sistemul de operare identifică (adresează) un fişier prin numele lui şi calea de acces (path) ce reprezintă drumul de la radacina arborelui la fişierul respectiv, aşa cum se realizează şi în sistemele DOS şi Windows. Specificarea corectă a căilor de acces este un aspect esenţial în utilizarea sistemului de operare. Regulile pentru indicarea unei căi de acces pentru un fişier sunt:

·      o cale (path) este o listă de nume, separate prin “/”, sau un singur nume; numele iniţial din lista este un nume de director, iar ultimul nume este numele fişierului desemnat;
·      când calea începe cu “/”, specificarea porneşte din directorul rădăcina (root), iar celelalte căi pornesc din directorul curent;
·      se poate utiliza o specificare absolută, când calea pleacă din root (/), indicându-se toate numele de directoare până la fişierul respectiv, fie o specificare relativă, când calea pleacă din directorul curent.

            Observaţie. Faţă de sistemul Unix, sistemul DOS utilizează caracterul “\” (backslash), şi nu “/” (slash), pentru legatura în arbore.
    

       Fişiere speciale

            În sistemul UNIX toate echipamentele periferice sunt tratate ca fişiere, fiind numite fişiere speciale. În acest fel fiecare echipament periferic fizic este identificat cu un fişier special. Din punctul de vedere al utilizatorului nu există nici o diferenţa între lucrul cu fişiere ordinare şi lucrul cu fişiere speciale. Fişierele speciale fac legatura cu funcţiile programului de comandă (driver) al echipamentelor cărora le-au fost asociate.
            Fişierelor speciale se găsesc stocate în directorul  /dev, de exemplu :
·      /dev/lp     - fişier special asociat imprimantei (printer);
·      /dev/tty2  - fişier special asociat  HD-ului.
            Tratarea perifericelor ca fişiere speciale are o serie de avantaje, şi anume:
·      fişierele speciale sunt supuse mecanismului de protecţie similar cu cel al celorlalte fişiere;
·      se pot utiliza aceleaşi comenzi (utilitare) în scopul schimbului de date cu perifericele, ca şi în cazul fişierelor obişnuite, ceea ce conferă eleganţă şi simplitate în utilizare.

             Fisiere pipe(FIFO)

             Fişierele FIFO sau pipe sunt fişiere tranzitorii, în care datele sunt citite în ordinea scrictă a scrierii lor, respectându-se regula de sincronizare producator /consumator ( “ First Input First Output” - primul intrat primul ieşit).Memorarea datelor în fişier se face ca la orice fişier ordinar, utilizând numai blocurile adresate direct. După ce au fost citite din fişier, datele nu mai pot fi recitite.

              Sistemul de protecţie a fisierelor

              Sistemul de protectie a fişierelor (directoare şi fişiere obişnuite) este destinat controlului accesului la fişiere. Sistemul UNIX realizează o bună separare a contextelor de execuţie.
              În sistemul UNIX există trei tipuri de acces la fişiere:

·      R (read)  - dreptul de citire ce permite vizualizarea conţinutului;
·      W (write) - dreptul de scriere ce permite modificarea fişierului;
·     X (execute) - dreptul de execuţie ce permite încărcarea fişierului în memorie şi lansarea lui în execuţie sau citirea şi execuţia unui fişier de comenzi Shell.

              În cazul directoarelordrepturile R, W, X sunt interpretate astfel:

·      R   permite utilizatorului să deschidă şi să citească fişierul director cu comanda ls;
·      W   permite utilizatorului să creeze şi să şteargă fişiere în directorul respectiv;
·      X    permite ca sistemul să caute în directorul respectiv în cursul prelucrării unei căi de acces.

              Pentru sistemul UNIX există trei categorii de utilizatori:
      
·      U (user) - proprietar;
·      G (group)  - grup;
·      O (other)   - alţi utilizatori;
·      A (all)  - pentru toate cele trei categorii.

               Sistemul UNIX este astfel conceput şi elaborat încât fiecare fişier are un proprietar, de obicei persoana care l-a creat. Mai mulţi utilizatori, care fac parte dintr-un compartiment de lucru (teme comune, domeniu comun, ect.) formează un grup.
               Sistemul de protecţie a accesului la un fişier se bazează pe confruntarea cererilor utilizatorului (r, w, x) cu drepturile asociate categoriei din care acesta face parte (u, g, o). Pentru precizarea completă a drepturilor de acces la un fişier sunt necesari 9 biţi, 3 biţi pentru fiecare categorie de utilizator (u, g, o).

              Tipul şi drepturile de acces la fişier sunt memorate într-un cuvânt de 16 biţi cu semnificaţii diverse:

·      biţii 0-3 (a-d) indică tipul fişierului;
·      bitul 4 (e)setează identificatorul de utilizator;
·      bitul 5  (f) setează identificatorul de grup;
·      bitul 6 (g) setează swapping (citirea în întregime, nu pe blocuri);
·      bitii 7-9 indică drepturile (r, w, x) pentru proprietar;
·      bitii 10-12 indică drepturile (r,w,x) pentru grup;
·      bitii 13-15 indică drepturile (r,w.x) pentru restul utilizatorilor.

           Informaţii despre un fişier (director sau fişier obişnuit) se pot afla folosind comanda UNIX de vizualizare, ce trebuie tastată în linia de comandă oferită de interpretor:
              $ls  -l
comandă ce are ca efect listarea pentru directorul curent a informaţiilor despre fiecare fişier ce este conţinut în acesta. Informaţiile sunt vizualizate pe o linie ţi printre altele reprezintă:
·      o secvenţă de 10 caractere, primul caracter fiind d sau ”-“, d pentru director, iar “-” pentru fişier obişnuit, caracter urmat de trei grupe de caractere ce pot fi r, wx sau “-” pentru cele trei drepturi de acces, respectiv lipsa acestora; cele trei grupe de caractere corespund celor trei tipuri de utilizatori;
·      numele proprietaruluidimensiunea (size), data şi ora creării, numele fişierului.

                Sesiunea de lucru sub sistemul UNIX


          La pornirea sistemului de calcul (calculatorului), primul program lansat în execuţie este un încărcător rapid (bootstrap loader) ce verifică starea componentelor hardware şi lansează un program ce iniţializează şi încarcă sistemul de operare. În timpul unei sesiuni de lucru, utilizatorul are posibilitatea de reîncărcare (reboot) a sistemului de operare prin combinaţia de taste <Ctrl>+<Alt>+<Del>.
   sesiune de lucru sub sistemul de operare UNIX  începe cu acţiunea de conectare (login) prin recunoaşterea de către sistem a numelui utilizatorului (nume de recunoaştere) şi recunoaşterea pentru utilizatorul respectiv a parolei(passwordde acces la resursele sistemului. După recunoaşterea parolei de acces, automat este lansat interpretorul de comenzi (shell) ce invită utilizatorul să ceară servicii sistemului de calcul, invitaţia fiind reprezentată printr-unprompter:

·      $  - când shell-ul este sh ( Bourne Shell) (pentru utilizatori neprivilegiati şi * pentru utilizatori privilegiaţi (superuser; administrator));
·      % - când shell-ul este csh ( C Shell);
·      :  - când shell-ul este ksh (Korn Shell).

           Sfârşitul unei sesiuni de lucru se face prin comenzile exit , bye sau <Ctrl>+<D>. 
            Asociat procedurii de conectare (iniţializare), există un director rezident (ce păstrează unele fişiere) şi informaţii de configurare (sau profil - fişier de comenzi de iniţializare) conţinute în fişiere de tip .profil sau login care pot lansa proceduri pentru regimul de lucru (culori, stil de lucru, rezoluţie terminal, speed, etc.).
            Versiunile actuale de UNIX oferă pentru utilizator atât interfţe de tip linie de comandă, desemnată prin Shell, cele mai utilizate fiind sh (Bourne Shell), ksh (Korn Shell), csh (Shell), căt şi interfeţe grafice moderne (GUI-Graphical User Interface).

Comenzi  Shell  pentru  sistemul UNIX


            Interpretorul de comenzi (Shell) al sistemului de operare UNIX este un program executabil aflat pe HD în directorul /bin şi care are numele de cale(path) /bin/shEste tratat de către nucleul (Kernel) sistemului de operare ca oriceproces utilizator neprivilegiat. La deschiderea sesiunii de lucru, se lansează un proces shell la terminalul (staţia de lucru) la care lucrează utilizatorul, aşteptând comenzi.
          Din punct de vedere al utilizatorului, Shell oferă o interfaţă complexă cu sistemul, pe două nivele:

·      prelucrarea şi execuţia comenzilor ce sunt programe independente de interpretor, prezente ca fişiere executabile în directoarele /bin, /usr/bin sau /etc;
·      dezvoltarea de programe structurate, într-un limbaj de programare oferit de Shell şi care sunt fişiere de comenzi (profil; scenarii) destinate unor aplicaţii ce necesită înlănţuirea de acţiuni diverse conform unor algoritmi.

           O comandă shell are următoarea formă sintactică generală:

                        $ <comanda>  [<optiuni>]   [<parametri>]    ,unde:

·      <comanda> reprezintă numele comenzii (fişier executabil = procedură, funcţie, program);
·      <optiuni> reprezintă opţiuni desemnate printr-o literă, precedata de semnul ”-“ sau “+”; dacă sunt mai multe opţiuni, acestea se scriu una după alta, fără spaţiere, dar precedate de semnul “-“ sau “+”;
·      <parametri> reprezintă nume de fişiere sau şiruri de caractere ce constituie parametrii comenzii.


             Observaţie. Cele trei construcţii lexicale  <comanda>,  <optiuni>,  <parametri>, trebuie să fie separate prin spaţii.

             Numele comenzii <comanda> este numele fişierului executabil ce urmează a fi executat şi este căutat în următoarea secvenţă:

·      în directorul curent; dacă nu este găsit;
·      în directorul /bin ; dacă nu este găsit;
·      în directorul /usr/bin ; dacă nu este găsit;
·      în caz contrar se dă mesaj de eroare afişat de Shell.

            Construcţia lexicală <parametri> reprezintă de multe ori nume de fişiere a cărui sintaxă a fost precizată. Interpretorul Shell permite specificarea fişierelor şi prin utilizarea următoarelor metacaractere:

·      “*”       ce semnifică orice şir de caractere, inclusiv şirul vid;
·      ‘?”        ce semnifică orice caracter;
·      “[…]”   ce semnifică o mulţime de caractere;
·      “-“        ce semnifică o secvenţă lexicografică.

            Pe baza acestor metacaractere, interpretorul Shell va genera nume de fişiere utilizate în cadrul comenzilor.

            Exemple.

1.   *.c                - indică toate fişierele având sufixul c;
2.   def[0-9]        - indică fişierele def0def1, …, def9;
3.   prog[09]       - indică fişierele def0def9;
4.   cap?              - indică fişierele existente cap1cap2cap3;
5.   cap*              - indică fişierele existente cap1cap2cap3cap1.c, cap2.c;
6.   prog[*?]        - indică atât varianta prog*, cât şi varianta prog?.


             Procese paralele

           În mod normal, interpretorul de comenzi Shell execută comenzile secvenţial, dar are facilităţi pentru lansarea de procese în paralel pe care să le controleze. Un proces este creat de un alt proces prin execuţia funcţiei (apelului) de sistem fork.
           După iniţierea (deschiderea) unei sesiuni de lucru la un terminal (staţie de lucru), sistemul Unix lansează un proces Shell pentru terminalul respectiv. În mod normal, sistemul Unix consideră că un proces poate să treacă prin următoarele stări:

·      crearea procesului ( funcţia de sistem fork);
·      aşteptarea (repaus) pentru execuţie (funcţia de sistem wait);
·      execuţia procesului ( funcţia de sistem exec);
·      terminarea (anularea) execuţiei procesului ( funcţia de sistem kill);

          După crearea unui proces, acesta este trecut în starea Ready (gata de execuţie) pentru a trece în starea Run (execuţie) potrivit principiului de time-sharing, care constă în partiţionarea timpului unităţii centrale între procese dupăpriorităţiPriorităţile proceselor utilizator sunt evaluate dinamic la intervale fizice (de exemplu la zecimi de secundă):
         
                      Pp   =  TUC / TM ,   unde

·      Pp  reprezintă prioritatea procesului;
·      TUC reprezintă timpul unităţii centrale acordat procesului;
·      TM  reprezintă timpul în memoria internă  pentru proces.



           Ordinea de prelucrare a proceselor este dată de ordinea crescătoare a priorităţilor, procesele de sistem fiind prioritare celor utilizator. Algoritmul de planificare corespunde unui algoritm de tip round-robin ce asigură eliberarea unităţii centrale de către procesul curent într-un timp finit. Prelucrarea proceselor necesită comunicarea între ele. Există două metode de realizare a comunicării intre procese:

·      tehnica redirectării  - caz în care se foloseşte un fişier ce va fi INPUT pentru un proces şi OUTPUT pentru un alt proces;
·      tehnica pipe  - caz în care conectarea se face direct între procese, fără fişier intermediar; mecanism de tip server/client;
          
          În timpul prelucrărilor are loc sincronizarea proceselor ce se referă la următoarele:

·      sincronizarea procesului tată în raport cu procesul fiu şi care este controlată de utilizator prin utilizarea funcţiei de sistem wait care blochează procesul tată până la terminarea procesului fiu;
·      sincronizarea prin mesaje ce este controlată de sistem şi se referă la comunicarea între procese prin pipe;
·      sincronizarea prin evenimente şi care este controlată de utilizator prin semnale recunoscute de sistem: pausekillallarm.

          Pentru gestionarea proceselor, nucleul (Kernel) foloseşte două zone:

·      tabela de procese în care se introduc mai multe informaţii, şi anume:
n    identificatorul procesului (PID);
n    identificatorul utilizatorului;
n    lungimea procesului;
n    locul în memorie unde este rezident în mod curent;
·      structura utilizator în care se află mai multe informaţii:
n    zona de salvare a registrilor generali;
n    informaţii pentru acces la fişiere;
n    informaţii despre directorul curent.

          Fiecare proces  are propriul spaţiu de adrese. Procesul poate adresa orice locaţie în spaţiul său de adrese fără să aibă acces la spaţiile altor procese. Spaţiul de adrese al unui proces este constituit din trei segmente (imaginea procesului, supus swapping-ului):

·      segmentul de text  - conţine instrucţiunile programului (codul);
·      segmentul de date  - conţine o zona iniţializată (constantele programului şi tablourile iniţializate) şi o zonă neiniţializată (iniţializată cu zerouri);
·      segmentul de stivă  - utilizat pentru stiva de execţie a procesului în mod utilizator;
·      segmentul de sistem - conţine o parte din informaţiile de comandă ale procesului şi stiva nucleului.


                          Principalele comenzi Shell


            Comenzile Shell în sistemul Unix pot fi grupate din punct de vedere al functionalităţii în mai multe categorii:

·      comenzi pentru informare ( cal, date, time, who, echo, passwd, login, mailelmwrite, tty, stty, man); 
·      comenzi pentru gestiunea directoarelor ( pwd, cd, mkdir, rmdir, ls); 
·      comenzi pentru gestiunea fişierelor ( cat, pr, lpr,lp, file, find, rm, cp, mount, umount, mvcmp, chmod, chown, chgrp, diff, sort, tsort, tail, wc); 
·      comenzi pentru gestiunea proceselor ( ps, nice, kill, sleep, time, sh, at ); 
·      comenzi pentru gestiunea volumelor ( df, dn ).

            Multe din comenzile Shell sunt de fapt utilitare cu foarte multe facilităţi. Pentru descrierea lor vom folosi, conform obişnuinţei, câmpuri opţionale delimitate de paranteze drepte [ şi ],  precum şi construcţii lexicale pentru entităţi(director, fişier, etc. ) delimitate de paranteze ascuţite < şi >. Vom conveni ca pentru repetarea unui element să utilizăm imediat după el scrierea “”.


Comenzi  pentru informare

1.     $cal   [<luna>] [<an>]   
- afişează calendarul (gregorian) al lunii curente dacă lipsesc parametri

2.     $date
- afişează data curentă

3.     $time
- afişează timpul curent

4.     $who
- afişează numele utilizatorilor conectaţi la sistem în momentul respectiv
5    $echo  [<text>]
afişează (un ecou) la ieşirea standard textul  <text>

6    $passwd
modifică parola existentă pentru utilizatorul respectiv

       7.   $login
- deschide o sesiune de lucru Unix care va cere numele utilizatorului şi parola

       8.   $mail
emitere/recepţie pentru poşta electronică
a) expedierea :    $mail  <adresa> …
           - mesajul (de regulă mai scurt) se tastează imediat după comandă şi se va termina cu o linie ce va conţine “.”; mesajul se va transmite la destinaţie în directorul /usr/mail;
b) recepţia  : $mail
            - consultarea cutiei poştale proprie utilizatorului, numită mbox, şi care oferă proprietarului acţiuni de vizualizare, ştergeresalvare pentru  fiecare mesaj din cutia poştală;


              Observaţie.Se poate utiliza comanda $ELM pentru listarea tuturor mesajelor,  şi care oferă un meniu cu următoarele funcţii:Delete, Undelete, Mail a message, Replay mail, Forward mail, Quit, Read a message.

 9.   $write  <utilizator> [<terminal>]
transmite un mesaj pe terminalul unui utilizator ce este conectat în sistem;
   mesajul se tastează imediat după comandă şi se termină cu <Ctrl>+<Z>

10.  $tty
    - afişează numele terminalului (fişierul ataşat)
      Exemplu:
      /dev/pty/ttys3

11. $stty
     -afişează caracteristicile terminalului la care se lucrează (viteza de transmisie (speed), paritatea (even/odd), caracteristici de control);  pentru setarea caracteristicilor se utilizează comanda $stty  <optiuni> ;

12. $man   [<comanda>]   
         -  afişează pe ecran un help despre comenzi; pentru afişarea structurii   manualelor UNIX şi modul lor de consultare, se utilizează comanda  $man  man
            

                    Comenzi pentru gestiunea directoarelor


1.     $pwd
        - afişează calea(path) directorului curent; numele comenzii reprezintă  prescurtarea Path Write Directory;
              Exemplu:  /users/vlada

2.     $cd  [<director>]
- realizează schimbarea directorului curent (change directory), noul   director va fi cel specificat; pentru verificare se pot utiliza două  comenzi pe aceeaşi linie : $cd [<director>]  ;  pwd  
- se utilizează şi următoarele variante ale comenzii:
       $cd        - directorul curent devine home aflat în /etc/passwd
       $cd  ..    - directorul curent devine nodul superior(tată)
       $cd /      - directorul curent devine directorul radacina(root)
                
3.     $mkdir  <director>
       - se creează un nou director cu numele specificat, ca subdirector al  directorului curent; sistemul va seta pentru directorul creat toate drepturile (R,W,X) la toate categoriile de utilizatori;

4.     $rmdir  <director>
     -  se şterge directorul specificat numai dacă nu conţine fişiere

5.     $ls  [<optiuni>] [<specificator>] …
         - se listează conţinutul directorului specificat(altfel, curent) sau informaţii   despre fişierele specificate în cazul în care se specifică;
                         - opţiunile permit precizarea informaţiilor ce vor fi afişate, eventual ordinea afişării; opţiunile sunt precedate de semnul “-“ şi pot fi combinate
                         - cele mai importante opţiuni sunt:      
                                      -l   -afişează mai multe informaţii despre director/fiţier (drepturile proprietarului, drepturile grupului, proprietar, dimensiune,data, timpul, nume);
                                         -r  -afişeaza numele fişierelor în ordinea invers alfabetică;
                                         -t   -afişează numele sortate după data ultimei modificari;
                                         -R  -afişează rezumatul directorului specificat şi al tuturor subdirectoerelor sale.
                      Exemple.
                            $ls              -listează numele subdirectoarelor directorului curent
                            $ls -lt          -listează conţinutul directorului curent, sortat după timp
                           $ls -l *.c      -listează informaţii despre toate fişierele directorului curent
                                                 ce au sufixul .c


                                      Comenzi pentru gestiunea fişierelor


1.     $cat [<optiuni>]  [<specificator>]  [<redirectare>]
    afişarea/concatenarea/crearea de fişiere text
    Exemple.
       $cat  fisier1     -se afişează la terminal conţinutul fişierului ‘fisier1
       $cat  fisier1  fisier2  >f3     -se concatenează cele două fişiere şi  rezultatul se memorează în fişierul ‘f3

           Observaţie. Comanda este echivalentă cu $cat fisier[12]  >f3

       $cat  >fisier    -se creează un fişier text de la terminal, prin tastarea de la terminal a liniilor, după care se tastează <Ctrl>+<Z>, iar fişierul se va salva în ‘fisier’                          

2.     $pr   [<optiuni>] <specificator> [<redirectare>
listează  prin paginare (antet şi linii) fişiere text
Exemplu.
     $pr f1 f2 >f3.pr   -se paginează cele două fişiere, iar rezultatul se salvează in fisierul ‘f3.pr’

3.     $lpr  [<optiuni>] <specificator>
       - tipărirea la imprimantă a conţinutului de fiţiere text
       Exemple.
     a) $lpr  >fisier.pr     -tipăreşte la imprimantă conţinutul fişierului ‘fisier.pr’
b)  $ls -l  /bin/usr/bin  >fisier            -secventa de comenzi realizează
$pr fisier  >fisier.pr                       pe rând crearea fişierului ‘fisier
$lpr fisier.pr                                  cu conţinutul mai multor directoare,
$rm fisier fisier.pr                         paginarea lui în ‘fisier.pr’, tipărirea
                                                       acestuia la imprimantă, şi în final
                                                                  ştergerea celor două fişiere create

4. $lp [<optiuni>] <specificator>
tipărirea la imprimantă prin paginare a conţinutului unor fişiere
                     
                      Observaţie.Pentru utilizarea corectă a opţiunilor pentru fiecare comandă, utilizatorul este invitat să consulte help-ul oferit  de sistemul  Unix prin comanda:     $man  <comanda>


          5. $file <fisier> …
-         determină tipul (sursă, obiect, executabil, text, etc.) unui fişier

6.   $find <director> … <conditie>
      se caută în directoarele specificate şi în toate subdirectoarele lor, pentru
         a se localiza toate fişierele ce satisfac <conditie>

7.   $rm  [<optiuni>] <fisier> …
           - şterge fişierele specificate din directorul curent
- principalele opţiuni sunt :
    -i   -consultarea utilizatorului înainte de ştergere
    -r   -ştergerea  subdirectoarelor
    -f   -ştergerea  fişierelor protejate la scriere
Exemple.
   $rm -i *      -se şterg toate fişierele din directorul curent prin confirmare
   $rm -r prog  -se şterge tot subarborele legat de directorul prog
  
8.   $cp <fisier> … [<director>]
     - realizează copierea de fişiere în următoarele variante:
              a) $cp f1 f2                 - copiază fişierul f1 în fişierul f2
              b) $cp f1 [f2…]  dir    -copiază fişierele f1 f2  în directorul dir
     Exemplu.    
       $cp chem/*.doc  /esr/user1/john  -copiază toate fişierele cu sufixul .doc
                                                            subdirectorul john

9.     $mount  <fisier_special>  <director>
     montarea (legarea) unui sistem de fişiere la un director;arborele general    al sistemului de fişiere este unic şi are rădăcina root(/); există fişiere pe  alte suporturi (FD, CD) ce trebuie  introduse în sistem prin operaţia de montare; fiecare suport (volum) conţine  un sistem propriu de fişiere al cărui director  rădacina  se  poate  ataşa  la  orice  director din sistemul  general de fişiere; operaţia poate fi utilizată doar de administratorul de sistem;
      Exemplu.
               $mount /dev/dk00   /usr/vlada
                     -leagă sistemul de fişiere de pe discheta indicată de driver-ul
                     dk00 ca subdirector al directorului  vlada

10. $umount  <fisier_special>
       operaţia inversă montării(legării) unui sistem de fişiere       

11. $mv
       - mutarea(redenumirea) de fişiere în două variante:
          a) $mv <fisier_sursa>   <fisier_dest>
              -fişierul  <fisier_sursa> se redenumeşte <fisier_dest> 
b)  $mv <fisier> … <director>
 -fişierele specificate sunt introduse în directorul specificat


12. $cmp  [<optiuni>]  <fisier1>  <fisier2>
      se compara cele două fişiere specificate ţinând seama de opţiunile:
              -l    -compară şi tipăreşte octeţii diferiţi
              -s    -întoarce codul de retur (0=fişiere identice,1=diferite, 2=erori)            

13. $chmod  <categ_util>  <operator> <drept>  <fisier> …
      schimbarea drepturilor de acces la fişiere ordinare sau director
      comanda poate fi utilizată doar de proprietarul fişierelor
      <categ_util> reprezintă categorii de utilizatori, adică
                        U=proprietar
                        G=grup
                        O=restul utilizatorilor
                        A=cele trei categorii
- <operator> reprezintă unul dintre caracterele
                       pentru adăugare
                - pentru ştergere
                        pentru asignare
      <drept> reprezintă drepturile oferite de sistemul de operare
                        r =citire
                        w =scriere
                        x = execuţie
      Exemple.
         $chmod a+r  fisier1    - se dă drept de citire tuturor utilizatorilor  fişierului fisier1
         $chmod go -rw  fisier  -se ridică privilegiile de citire şi scriere pentru grup şi proprietar

14. $chown  <proprietar>  <fisier>
   - schimbă proprietarul unui fişier sau director
        - numele proprietarului se găseşte în fişierul  /etc/passwd

15. $chgrp   <grup>  <fisier>
          schimbă grupul unui fişier sau director
- numele grupului se află în fişierul  /etc/group

16. $diff  <optiuni>  <fisier1>  <fisier2>
          compară două fişiere de tip ASCII folosind opţiunile:
                       -b  ignoră spaţiile şi <tab>
                      -e  crearea comenzilor de editor (a=adăugare, c=înlocuire,d=ştergere)        

17. $sort  [<optiuni>] [+|- poz] … [-o <f_sortat>]  <fisier> …
       - sortează fişierele specificate la un loc şi rezutatul este dat în
         fişierul f_sortat ţinând seama de opţiunile:
                   -b    ignoră spaţiile şi  <tab>
                   -n    sortare numerică(implicit este alfabetică) 
                    -r    sortare descrescătoare
                    -f   translantează literele mari în litere mic
         <poz>  este de forma m.n, unde m este deplasamentul în număr de    câmpuri (începând cu 1), iar n este numărul de caractere  faţă de începutul câmpului(numerotat cu 0); semnul + va   însemna începutul cheii de sortare, iar - sfârşitul cheii;


18. $tsort  <fisier>
        - sortează topologic fişierul specificat

19. $tail  [<optiuni>]  <fisier>
         - afişează un fragment de la începutul sau de la sfârşitul fişierului
           specificat folosind opţiunile:
                       - +n / -n     n  linii/blocuri/caracter  de la început/sfârşit
                        -l   afişează linii
                        -b  afişează blocuri
                        -c  afişează caractere

20. $wc  [<optiuni>]  <fisier>
               afişează numărul liniilor, cuvintelor, caracterelor din fişierul  specificat  folosind opţiunile :
                                           -l   afişează număr de linii
                                           -w  afişează număr de cuvinte
                                           -e   afişează numărul caracterelor 


                               Comenzi pentru gestiunea proceselor


1.   $ps  [<optiuni>]  [<proces> …]
       - afişează stările unor procese din sistem ţinând seama de opţiunile:
                                                -a    toate procesele active din sistem
                                                -l     informaţii complete
                                                -n    toate procesele ce nu sunt asociate utilizatorului
       - informaţiile referitoare la procese sunt:
               - flag-urile(F) procesului (00=proces terminat,
                                                       01=proces sistem,
                                                       04=proces suspendat de părinte,
                                                       10=proces în memorie, dar blocat)

               - starea procesului(S) (r =proces în coada de aşteptare,
                                                  s=proces suspendat,
                                                  t=proces terminat,
                                                  d=proces evacuat temporar pe disc,
                                                  o=proces aflat în execuţie)
           - identificatorul utilizatorului (uid)
           - identificatorul procesului (pid)
           - identificatorul procesului părinte (ppid)
           - prioritatea procesului (pri)
           - terminalul de unde a fost lansat (tty)
           - timpul oferit de UC (time)                                 
           prioritate modificata prin nice
           - adresa din memorie la care se află (addr)
           - lungimea procesului (size)
           - momentul de start al procesului (stime)


2.   $kill  [<pid_proces>]
        - terminarea unui proces în execuţie ţinând seama de identificatorul   procesului(pid)


3.   $sleep  <nr_secunde>
         suspendă temporar execuţia unui proces


4.   $time  <comanda>
              - furnizează timpul de execuţie şi timpul UC  la sfârşitul terminării unei               
                comenzi lansate în execuţie


5.   $sh   <fisier>
        - lansarea în execuţie a unui fişier de comenzi Shell


6.   $at  <timp>  [<zi>]  [+ <increment>]  <fisier>
        - lansarea în execuţie la termen a unui program ţinând seama de
                    - <timp>  ce reprezintă  h:m (ora şi minutul)
<zi>   ce reprezintă numele lunii urmat de numărul zilei
                                      - <increment> este unul din cuvintele: minutes, hours, days,  weeks, months, precedat de un număr
               Exemplu.
                  $at  08:05  jan 24  +2 days  prog

7.   $nice  [-n]  <comanda> [<argumente>]
         - lansează un proces în paralel cu prioritate redusă, unde
                 -n   este un număr fixat care este adunat la ordinul de prioritate
                       implicit şi rezultă prioritatea cu care se execută <comanda>


Observaţie.
 Există un număr de 20 de ordine de prioritate, numerotate da la 1 la 20.
 Prioritatea maximă este 1, iar cea minimă este 20. În general, dacă nu se
 modifică explicit priorităţile, un proces se execută cu prioritatea 10 sau cu
 o prioritate implicită fixată printr-un apel de sistem.


          Exemplu.
           $nice -8  sort  <a  >b &



                                Comenzi pentru gestiunea volumelor


1.     $df  [<fisier_sistem>]
       indică spaţiul liber pe un anumit volum unde este montat un sistem  de fişiere; dacă fişierul sistem nu este specificat, se afişează spaţiul  liber pentru toate sistemele de fişiere montate

2.     $du  [<optiuni>]   <fisier>
              - afişează numărul blocurilor alocate pe un volum(disc), unde  <fisier> este numele unui volum montat sau numele unui  director; opţiunile sunt:
                                                -a   generează o lista ce conţine numele fiecărui fişier şi
                                                      numărul de blocuri alocate
                                                 -r  scrie mesaje despre directoare ce nu pot fi citite, 
                                                      fişiere ce nu pot fi deschise, etc.
                                                 -s  afişează numai numărul de blocuri alocate
                            
                                 Exemplu.
                                  $du  -a  /usr/user1/teme


sursa: http://ebooks.unibuc.ro/informatica

Niciun comentariu: