Tribal gear-XAH


www.tribalgear.com


a.Apel sis.open

Apelul sistem open este primul pas ce trebuie efectuat de ctre un proces pentru a putea accesa datele unui fi?ier. Sintaxa apelului sistem open este:
fd = open (nume_cale, flaguri, moduri);
unde nume_cale este un nume de fi?ier, flaguri indic tipul de deschidere (pentru scriere sau citire), iar moduri specific permisiunile de acces n cazul crerii fi?ierului.
Apelul sistem returneaz un ntreg numit descriptor de fi?ier (fd). Toate celelalte operaii cu fi?ierul, cum ar fi citirea, scrierea, poziionarea offsetului fi?ierului, duplicarea descriptorului de fi?ier, modificarea parametrilor de I/O ai fi?ierului, determinarea strii fi?ierului ?i nchiderea fi?ierului, folosesc descriptorul de fi?ier pe care l returneaz apelul sistem open.
**algoritm open
^intrări: numele fişierului
^tipul de deschidere
^permisiuni de acces /*precizate doar la creare*/
^ieşire:descriptorul de fişier
{
^determinarea inodului folosind numele fişierului (algoritm namei);
^if (fişierul nu există sau accesul nu este permis)
^return (eroare); /* uzual -1 */
^alocă o intrare în GFT pentru inod, iniŢializează contorul şi offsetul;
^alocă o intrare în UFDT, setează pointerul către intrarea corespunzătoare din GFT;
^if (tipul de deschidere presupune rescrierea fişierului)
^eliberează toate blocurile fişierului (algoritm free);
^deblochează (inodul); /* blocat în namei */
^return (descriptorul de fişier);
}


b.Apel sis.open

Nucleul caut fi?ierul n cadrul sistemului de fi?iere folosind algoritmul namei (vezi figura 5.2). Dup ce gse?te inodul din memoria intern, se verific permisiunile de acces la fi?ier, iar dac acestea sunt corespunztoare, se aloc o intrare n GFT pentru fi?ierul ce este deschis. O intrare n GFT conine: un pointer ctre inodul fi?ierului deschis, tipul deschiderii fi?ierului (citire ?i/sau scriere), deplasamentul (offsetul) de la care nucleul urmeaz s execute urmtoarea citire sau scriere. Nucleul iniializeaz aceast valoare cu 0 pe durata aplelului open, ceea ce nseamn c prima citire sau scriere se va face, implicit, de la nceputul fi?ierului. De asemenea, un proces poate deschide un fi?ier pentru adugare, caz n care nucleul va iniializa offsetul cu valoarea lungimii fi?ierului. Nucleul aloc o intrare n UFDT, iar valoarea indexului din tabel corespunztor acestei intrri este descriptorul de fi?ier returnat utilizatorului. Intrarea din UFDT conine un pointer ctre intrarea corespunztoare din GFT.S presupunem c un proces execut urmtorul cod: deschide fi?ierul "/etc/passwd" de dou ori, odat doar pentru citire, iar a doua oar pentru citire-scriere, ?i fi?ierul "local" odat, pentru scriere.
^fd1 = open("/etc/passwd", O_RDONLY);
^fd2 = open("local", O_WRONLY);
^fd3 = open("/etc/passwd", O_RDWR);
Fiecare open returnează procesului un descriptor de fişier, iar intrarea corespunzătoare din UFDT pointează către o intrare proprie din GFT, chiar dacă un fişier ("/etc/passwd") este deschis de două ori. Intrările din GFT corespunzătoare aceluiaşi fişier pointează către o singură intrare din IT.
Să presupunem că un al doilea proces execută următorul cod:
fd1=open("/etc/passwd",O_RDONLY);
fd2=open("private",O_RDONLY);


c.Apel sis.open

. Structurile de date dup deschiderea fi?ierelor de ctre cele dou procese
S-ar putea concepe sistemul astfel ca intrarea din UFDT s conin offsetul din fi?ier ce d poziia urmtoarei operaii de I/O ?i pointerul direct ctre intrarea corespunztoare din IT, eliminndu-se folosirea GFT. Implementarea GFT ca structur separat s-a fcut pentru a se putea permite folosirea n comun a pointerului de offset de ctre mai muli descriptori de fi?ier. Astfel, mai multe procese ?i mai muli utilizatori pot efectua operaii pe un acela?i fi?ier utiliznd un pointer de offset comun.
Primii trei descriptori de fi?ier din UFDT sunt :
? descriptorul fi?ierului standard de intrare ('standard input') ;
? descriptorul fi?ierului standard de ie?ire ('standard output');
? descriptorul fi?ierului standard de eroare ('standard error').
Procesele din UNIX folosesc n mod convenional descriptorul standard de intrare pentru a citi datele de intrare, standard de ie?ire pentru a transmite la ie?ire rezultatele, ?i standard de eroare pentru a transmite mesajele de eroare. Utilizarea acestei convenii nu este obligatorie, ns adoptarea ei de ctre toi utilizatorii face mai simpl comunicarea prin pipes-uri


d.Apel.sis.close

Un proces închide un fişier atunci când nu mai doreşte să îl acceseze. Sintaxa aplelui sistem close este: close(fd);
unde fd este descriptorul fişierului returnat de open.Apelul modifică intrările din GFT şi IT corespunzătoare descriptorului fd. Aceste intrări nu sunt şterse, ci doar eliberate (când contoarele ajung la 0 se invalidează legăturile între tabele). Ele pot fi utilizate de acelaşi fişier (dacă se redeschide imediat) sau realocate altui fişier ce va fi deschis.
Dacă contorul de referinŢă din GFT este mai mare ca 1 (datorită apelurilor sistem dup sau fork), înseamnă că alŢi descriptori de fişier referă intrarea din GFT. ïn acest caz nucleul va decrementa contorul din GFT şi cu aceasta operaŢia de închidere ia sfârşit. Dacă contorul din GFT este egal cu 1, nucleul eliberează intrarea şi decrementează contorul de referinŢă corespunzător intrării din IT. Dacă contorul este egal cu 0 (nici un proces nu mai referă inodul), nucleul eliberează inodul din memoria internă (algoritmul iput) pentru a putea fi realocat. ïnaintea încheierii apelului close, nucleul eliberează intrarea corespunzătoare descriptorului din UFDT. Dacă procesul va încerca să acceseze descriptorul înainte ca acesta să fie reasociat unui fişier, nucleul va returna o eroare. Când un proces se încheie (exit) nucleul închide fişierele corespunzătoare descriptorilor activi din UFDT.
după încheierea procesului B. Astfel, sunt eliberate intrările pentru descriptorii de fişier 3 şi 4 din UFDT, şi intrările corespunzătoare din GFT (contoarele fiind 0). Sunt decrementate şi contoarele referinŢă din IT corespunzătoare fişierelor ?/etc/passwd? şi ?private?. Cum contorul pentru ?private? este 0, inodul său este pus în lista inodurilor libere, însă intrarea sa din IT nu este ştearsă. Dacă un alt proces accesează fişierul ?private? cât timp inodul se mai află în lista liberă, el va fi utilizat de către nucleu.


a.Apel:sist,read

Sintaxa apelului sistem read este:
numr = read(fd, buffer, contor);
unde fd este descriptorul de fi?ier returnat de ctre open, buffer este adresa de memorie din spaiul procesului utilizator care va conine datele n caz de reu?it a apelului, contor este numrul de octei pe care utilizatorul dore?te s-i citeasc, iar numr este numrul de octei citii n urma apelului.
^mode-indic tipul operaiei (citire sau scriere)
^count-numrul de octei ce urmeaz a fi citii sau scri?i.
^offset-offsetul din fi?ier.
^address-adresa din spaiul nucleu sau utilizator n care se vor copia datele.
^flag-indic tipul adresei (utilizator sau nucleu).
Astfel, este setat modul de I/O pentru a indica c se execut o citire, un flag care indic faptul c datele vor fi transferate n spaiul de adrese utilizator, un contor cu numrul de octei ce vor fi citii, adresa bufferului din spaiul utilizator, ?i un cmp de offset (copiat din GFT) care precizeaz de unde va ncepe citirea datelor. Dup stabilirea parametrilor de I/O n u area, folosind pointerul din GFT ctre intrarea din IT, nucleul blocheaz inodul naintea de a ncepe citirea fi?ierului. Algoritmul intr apoi ntr-un ciclu pn la citirea numrului dorit de octei. Nucleul determin pe baza offsetului numrul blocului din cadrul fi?ierului care va fi citit, memoreaz offsetul din cadrul blocului ?i numrul de octei din bloc ce vor fi copiai n spaiul utilizator. Dup citirea unui bloc n memorie, folosind algoritmul bread sau breada, nucleul copiaz datele din bloc n spaiul de adrese al procesului utilizator. Sunt modificai parametrii din u area corespunztor numrului de octei citii incrementnd offsetul fi?ierului ?i adresa din spaiul utilizator la care va avea loc urmtorul transfer, ?i decrementnd contorul cu numrul de octei ce mai trebuie citii.


b.Apel.sist,read

^algoritm read
^intrri: descriptorul de fi?ier
adresa bufferului din spaiul de memorie al ^procesului utilizator
numrul de octei ce se dore?te a fi citit
^ie?ire: numrul de octei copiai n spaiul utilizator
{
^gse?te intrarea din GFT corespunztoare descriptorului de fi?ier;
^verific drepturile de acces la fi?ier;
^stabile?te parametrii din u area implicai n operaia de I/O; /* adresa din spaiul utilizator, contorul cu numrul de octei ce trebuie R/W, modul de I/O */
^gse?te inodul corespunztor din intrii din GFT;
^blocheaz inodul;
^stabile?te offsetul din u area la valoarea existent n intrarea din GFT
^while (nu s-a ajuns la numrul dorit de octei citii)
{
^converte?te offsetul n fi?ier n numr de bloc disc ( algoritm bmap);
^calculeaz offsetul n bloc, numrul de octei ce vor fi citii;
^if (numrul de octei ce vor fi citii este 0)
/* ncercare de a citi sfr?itul fi?ierului */
^break; /* se iese din ciclu */
^cite?te blocul;/* algoritmul breada sau bread */
^copiaz datele din bufferul sistem la adresa din spaiul utilizator;
^reactualizeaz cmpurile din u area; /* offsetul n fi?ier, contorul, adresa utilizator */
^deblocheaz bufferul; /* blocat n bread */
}
^deblocheaz inodul;
^actualizeaz offsetul din GFT pentru urmtoarea operaie de citire;
^return (numrul total de octei citii);
}


c.Apel,sist,read

Algoritmul pentru citirea unui fi?ier:
^#include <fcntl.h>
^main()
{
^int fd;
^char lilbuf[20], bigbuf[1024];
^fd= open("/etc/passwd", O_RDONLY);
^ read(fd, lilbuf, 20);
^ read(fd, bigbuf, 1024);
^ read(fd, lilbuf, 20);
--Ordinea execuiei apelurilor poate fi: read1, read2, write1, write2 sau read1, write1, read2, write2, etc. Pentru a evita aceast situaie se folose?te facilitatea de blocare pe fi?ier ?i nregistrare (vezi paragraful 5.4) ceea ce permite unui proces s blocheze inodul unui fi?ier de la deschiderea pn la nchiderea sa, nemaidnd posibilitatea altui proces de a accesa fi?ierul n acest timp.
^#include <fcntl.h>
^/* process A */
^main()
{
^int fd;
^char buf[512];
^fd = open("/etc/passwd",O_RDONLY);
^read (fd,buf,sizeof(buf));/* read 1 */
^read (fd,buf,sizeof(buf));/* read 2 */
}
^/* process B */
^main();
{
^int fd[512];
^char buf[512];
^for (i=0; i<sizeof(buf); i++)
^ buf[i] ='a';
^fd = open("/etc/passwd", O_WRONLY);
^write (fd, buf, sizeof(buf)); /* write 1 */
^write (fd, buf, sizeof(buf)); /* write 2 */
}


d.Apel,sis.write

Sintaxa apelului sistem write este:
^număr= write(fd, buffer, contor);
unde semnificaŢia variabilelor număr, fd, buffer, contor este cea prezentată în descrierea apelului read.^Algoritmul pentru scrierea unui fişier regulat este similar celui de citire. Dacă fişierul nu conŢine un bloc corespunzător offsetului la care trebuie efectuată scrierea, atunci nucleul alocă un nou bloc folosind algoritmul alloc şi înscrie numărul blocului în poziŢia corespunzătoare a tabelei de conŢinut din inod. Dacă offsetul corespunde unui bloc de indirectare, nucleul va trebui să aloce un număr corespunzător de blocuri ce vor fi utilizate ca blocuri de indirectare şi blocuri de date. Pe durata operaŢiei de scriere inodul este blocat, deoarece nucleul poate schimba inodul când alocă blocuri noi. PermiŢându-se altor procese accesul la fişier s-ar putea corupe inodul dacă mai multe procese ar aloca simultan blocuri pentru acelaşi offset. Dacă câmpul din inod ce conŢine dimensiunea fişierului a fost modificat, la încheierea operaŢiei de scriere nucleul îl actualizează. ^Să presupunem că un proces scrie într-un fişier octetul cu numărul 10.240, care este totodată octetul cu cel mai mare număr de ordine. Când accesează octetul (folosind algoritmul bmap), nucleul determină că lipseşte blocul de date şi cel de indirectare corespunzătoare acelui octet. Astfel, el alocă un bloc disc ce va fi utilizat ca bloc de indirectare şi scrie numărul blocului în inodul din memorie. Apoi, alocă un bloc disc ce va fi utilizat ca bloc de date şi scrie numărul blocului în prima poziŢie a blocului de indirectare anterior alocat.
Scrierea se face întru-un ciclu intern, asemănător algoritmului read. Pe durata unei iteraŢii nucleul va scrie un singur bloc disc. ïn acest sens, va determina dacă va scrie înteg blocul sau numai o parte din el. Dacă scie doar o parte, va trebui mai întâi să citească blocul de pe disc, pentru a conserva datele ce nu se vor modifica. Citirea nu mai este necesară în cazul scrierii întregului bloc, deoarece se va modifica tot conŢinutul său. Nucleul utilizează scrierea întârziată a blocurilor pe disc (delayed write, vezi 3.4), păstrându-le în cache cât mai mult timp posibil, pentru a oferi şi altor procese posibilitatea de a le scrie sau citi fără a mai executa operaŢii de I/O cu discul.


a.Apel,sis:Iseek

Apelurile read ?i write descrise anterior asigur un acces secvenial la un fi?ier. Prin utilizarea apelului sistem lseek procesele pot modifica valoarea offsetului din GFT, asigurndu-se astfel un acces aleator la fi?ier, utilizatorul avnd posibilitatea s scrie sau s citeasc de la orice offset.
^#include <fcntl.h>
^main(argc,argv)
^int argc;
^char *argv[];
{
^int fd, skval;
^char c;
^if (argc != 2)
^exit();
^fd = open(argv[1], O_RDONLY);
^if (fd == -1)
^exit();
^while((skval = read(fd, &c, 1)) == 1)
{
^printf("char %c
", c);
^skval = lseek(fd, 1023L, 1);
^printf("new seek val %d
", skval);
}
^ }


a.Crearea fisier.

Dacă open asigură accesul la un fişier existent, apelul sistem creat permite crearea unui nou fişier în sistem. Sintaxa apelului sistem creat este:fd = creat (nume?_cale, moduri);
unde variabilele nume_?cale, moduri şi fd au semnificaŢia precizată la descrierea apelului open. Dacă nu există nici un fişier cu numele specificat, atunci nucleul crează un nou fişier cu numele şi permisiunile de acces (modurile) precizate. Dacă fişierul deja există, şi permisiunile de acces sunt corespunzătoare, nucleul trunchiază fişierul (eliberează toate blocurile sale şi setează dimensiunea fişierului la 0). ïn acest caz nucleul nu modifică atributele de proprietate, iar permisiunile de acces furnizate ca parametru sunt ignorate, păstrându-se cele ale vechiului fişier.
În figura 5.12 este prezentat algoritmul pentru crearea unui fişier. Folosind algoritmul namei, nucleul analizează numele fişierului, salvează offsetul primului slot liber din director în u area. Dacă nucleul nu găseşte componenta corespunzătoare din cale în director, o va scrie în slotul determinat anterior. De asemenea, memorează în u area şi Ţine blocat inodul directorului în care se caută. Pentru continuarea execuŢiei algoritmului, se verifică dacă procesul apelant are dreptul de a scrie în director (acela unde va fi creat noul fişier).
În caz că nu exista anterior un fişier cu acelaşi nume, nucleul asignează un inod pentru noul fişier (folosind algoritmul ialloc). Apoi scrie numele fişierului şi numărul inodului alocat în directorul tată la offsetul salvat în u area. După aceea eliberează inodul directorului tată. Nucleul scrie noul inod alocat pe disc (algoritm bwrite), iar apoi directorul în noua configuraŢie. Scrierea pe disc are loc în această ordine deoarece în cazul unei prăbuşiri a sistemului între cele două scrieri vom avea un inod care nu este referit de nici o nume de fişier, dar sistemul va funcŢiona normal. Dacă ordinea de sriere e inversată şi sistemul se prăbuşeşte între cele două scrieri, sistemul de fişiere ar conŢine o cale care referă un inod incorect.


b.Crearea fisier

algoritm creat
^intrări: numele fişierului
^permisiunile de acces
^ieşire: descriptorul de fişier
{
^determină inodul pentru fişier (algoritm namei);
^if (fişierul deja există)
{
^if (accesul nu este permis)
{
^eliberează inodul (algoritmul iput);
^return (eroare);
}
^ }
^else /* fişierul nu există încă */
{
^asignează un inod liber din sistemul de fişiere (algoritm ialloc);
^crează o nouă intrare în directorul tată în care se însciu numele noului fişier şi numărul inodului aneterior asignat;
}
^alocă o intrare în GFT pentru inod, iniŢializează contorul;
^if (fişierul exista în momentul creerii)
^eliberează toate blocurile fişierului (de date şi de indirectare) (algoritmul free);
^deblochează inodul;
^return (descriptorul de fişier);
}.
Dacă fişierul deja exista înaintea apelului creat, nucleul găseşte inodul său în timp ce caută fişierul. Vechiul fişier trebuie să ofere permisiunea de scriere procesului ce doreşte să creeze un ?nou? fişier cu acelaşi nume, deoarece conŢinutul fişierului va fi modificat (se eliberează toate blocurile fişierului, acesta arătând ca un fişier nou creat). ïntrucât conŢinutul directorului tată nu va fi modificat, nucleul nu va mai verifica dacă este permisă scrierea directorului.


a.Crear fis speci,alg mknode

Apelul sistem mknod creaz fi?iere speciale n sistem cum ar fi directoarele, fi?ierele dispozitiv ?i pipe-urile numite. El este similar lui creat din punctul de vedere al alocrii de ctre nucleu a unui inod pentru un fi?ier. Sintaxa apelului sistem mknod este:
mknod (nume_cale, tip ?i permisiuni, dev)
unde nume_cale este numele nodului care va fi creat, tip ?i permisiuni dau tipul nodului (de exemplu, director) ?i permisiunile de acces pentru noul fi?ier ce va fi creat, iar dev specific numerele major ?i minor ale dispozitivului - pentru fi?ierele speciale bloc ?i caracter.
^algoritm make new node
^intrri:^ numele fi?ierului
^ tipul fi?ierului
^ permisiunile de acces
numr major ?i minor al dispozitivului (pentru fi?ierele speciale bloc ?i caracter)
^ie?ire: niciuna
{
^if (noul nod nu este pipe numit ?i utilizatorul nu este super user )
^return(eroare);
^determin inodul tatlui noului nod (algoritmul namei);
^if (noul nod deja exist)
{
elibereaz inodul tatlui (algoritmul iput);
^return (eroare);
}
^aloc un nod liber din sistemul de fi?iere pentru noul nod (algoritmul ialloc);
^creaz o nou intrare n directorul tat ?i o completeaz cu numele nodului ?i numrul de inod anterior asignat;
^elibereaz inodul directorului tat (algoritmul iput);
^if (noul nod este fi?ier special bloc sau caracter)
^scrie numrul major ?i minor al dispozitivului n structura inodului;
^elibereaz inodul noului nod (algoritmul iput);
}


b.alg.mknode.txt

Algoritmul mknod este prezentat n figura 5.13. Nucleul caut n sistemul de fi?iere fi?ierul cu numele ce urmeaz s fie creat. Dac fi?ierul nu exist nc, nucleul aloc un nou inod pe disc ?i scrie nume noului fi?ier ?i numrul inodului alocat n directorul tat. Iniializeaz cmpul din inod care specific tipul fi?ierului (pipe, director sau fi?ier special). Dac fi?ierul este de tip dispozitiv special caracter sau bloc, atunci se scriu n inod numerele major ?i minor de dispozitiv. Algoritmul prezentat mai trebuie completat n cazul crerii directoarelor, deoarece nu sunt create ?i iniializate intrrile director pentru "." si ".."


a.Algoritmul chdir

Algoritmul chdir (modific directorul curent al unui proces).
^Sintaxa apelului sistem chdir este:
^chdir (nume?_cale);
^unde nume_cale este numele noului director curent al procesului.
^algoritm change directory
^intrare:
^ numele noului director
^ie?ire: niciuna
{ determin inodul corespunztor noului director (algoritm namei);
^if (inodul nu este al unui director sau accesul nu este permis)
{ elibereaz inodul (algoritm iput);
^return (eroare);
}
^deblocheaz inodul;
^elibereaz inodul corespunztor directorului curent anterior (algoritm iput);
^plaseaz informaiile corespunztoare noului inod n slotul corespunztor directorului curent din u area;
} .--Nucleul analizeaz numele noului director folosind algoritmul namei ?i verific dac directorul specificat este ntr-adevr director, precum ?i permisiunile de acces. Noul nod este deblocat, dar rmne alocat ?i cu valoarea contorului incrementat. Se elibereaz inodul vechiului director curent memorat n u area (algoritm iput), iar noul inod este salvat n u area. Dup schimbarea directorului curent algoritmul namei va utiliza inodul din u area ca director de nceput pentru cutarea cilor ce nu ncep din rdcin. Dup execuia chdir, contorul inodului noului director este cel puin 1, pe cnd cel al directorului anterior este decrementat cu 1. Inodul alocat n timpul unui apel chdir este eliberat numai cnd procesul execut un alt chdir sau exit (se ncheie).
Pentru ficare utilizator se psteaz n nucleu o variabil global pentru rdcin (root). O copie a acestei variabile este n u area. Procesele pot schimba rdcina curent (cea din u area) prin intermediul apelului sistem chroot. Sintaxa este:chroot (nume_cale);
unde nume_cale este numele noii rdcini. Algoritmul pentru chroot este similar cu chdir.


b.Alg.chr...,stat.

Schimbarea proprietarului si a permisiunilor
Apelurile sistem corespunztoare sunt:
^ chown (nume_cale, proprietar, grup);
^ chmod (nume_cale, mod);
^Ele pot fi apelate doar de proprietar sau superutilizator.^Apelul chown stabile?te noul proprietar ?i grup cu drepturi de acces asupra fi?ierului nume_cale, ?i nscrie noii indicatori. Pentru evitarea tranzitivitii, pe durata apelului se pun pe zero biii set uid ?i set gid. Dup ce se efectueaz modificrile, vechiul proprietar pierde dreptul de proprietate asupra fi?ierului.
^n mod asemntor fucioneaz ?i funcia chmod, ea fiind folosit pentru a modifica permisiunile de acces la fi?ier.
^Apelurile stat ?i fstat permit proceselor s obin unele informaii de stare referitoare la un anumit fi?ier cum ar fi: tipul fi?ierului, permisiunile de acces, dimensiunea fi?ierului, numrul de legturi, numrul inodului, timpii ultimelor accese. Pentru stat se utilizeaz informaiile din inodul de pe disc, iar pentru fstat cele din inodul din memoria intern.
Sintaxa apelurilor:
^ stat (nume_cale, buffer_stare);
^ fstat (fd, buffer_stare);
unde nume_cale este numele fi?ierului, fd este descriptorul de fi?ier ntors de un open anterior, iar buffer_stare este adresa unei structuri de date din procesul utilizatorului care va conine informaiile dup apelul funciei.


a.Apel.sis.pipe,alg

Sintaxa pentru crearea unui pipe este:
pipe (fdptr) ; unde fdptr este un pointer ctre un ?ir de doi ntregi ce va conine descriptorii de fi?ier pentru citirea ?i scriere pipe-ului. Deoarece nucleul implementeaz pipe-urile n sistemul de fi?iere, acestea neexistnd naintea utilizrii lor, nucleul va asigna un inod ?i va aloca doi descriptori n UFDT (un descriptor pentru citirea din pipe ?i altul pentru scrierea n pipe) ?i intrrile corespunztoare n GFT. Utilizarea GFT face ca interfaa apelurilor sistem de scriere, citire a pipe-urilor s fie aceea?i cu cea pentru fi?ierele regulate. Astfel, procesele nu trebuie s ?tie dac citesc/scriu un pipe sau un fi?ier regulat.
--algoritm pipe
^intrare: nici una
^ie?iri:^ descriptorul pentru citire
^ descriptorul pentru scriere
{
asigneaz un nou inod din dispozitivul pentru pipe (algoritmul ialloc);
^aloc 2 intrri n GFT (una pentru citire, una pentru scriere, care vor pointa ctre inodul anterior asignat);
^aloc 2 descriptori de fi?ier (unul pentru scriere, unul pentru citire) ?i iniializeaz pointerii ctre intrrile corespunztoare din GFT;
^valoarea contorului de referin corespunztor inodului este stabilit 2 ;
} .
Algoritmul pentru crearea pipe-urilor obi?nuite. Folosind algoritmul ialloc, nucleul asigneaz un inod pentru un pipe dintr-un sistem de fi?iere folosit ca dispozitiv pipe (pipe device). Un dispozitiv pipe e un sistem de fi?iere din care nucleul aloc inoduri ?i blocuri de date pentru pipe-uri. Specificarea dispozitivului pipe se face de ctre administratori la configurarea sistemului, ?i poate fi identic cu un alt sistem de fi?iere. Atunci cnd un pipe este activ, nucleul nu poate reasigna inodul ?i blocurile sale de date unui alt fi?ier.


b.Apel,sist.pipe

Nucleul alocă apoi două intrări în GFT şi actualizează informaŢiile din inodul aflat în memoria internă. Fiecare intrarea în GFT conŢine numărul de instanŢe ale pipe-ului deschise pentru citire sau scriere (iniŢial 1 pentru fiecare intrare în GFT), iar contorul de referinŢă al inodului din memoria internă indică de câte ori pipe-ul a fost deschis (iniŢial are valoarea 2).Offseturile de citire şi scriere din pipe sunt păstrate în inod, fapt ce permite accesul în mod FIFO la pipe. ïn cazul fişierelor regulate offsetul se păstrează în GFT. Utilizarea comenzii lseek nu este permisă, ceea ce face imposibil accesul aleator la un pipe.
Deschiderea unui pipe numit Un pipe numit este un fişier a cărui semantică este asemănătoare cu cea a unui pipe obişnuit. DiferenŢa între ele este că cel numit are o intrare în director şi este accesat prin nume. Deschiderea unui pipe numit este la fel cu cea a fişierelor regulate, fiind astfel permisă comunicarea între procese ce nu sunt înrudite. Pipe-urile numite există în sistemul de fişiere şi după încheierea utilizării lor, pe când cele obişnuite sunt tranzitorii (când nu mai sunt procese ce utilizează pipe-ul, nucleul va elibera inodul alocat pipe-ului).
Algoritmul pentru deschiderea unui pipe numit este identic cu cel de deschidere al unui fişier obişnuit. Totuşi, înaintea încheierii apelului sistem, nucleul incrementează contorul de citire sau cel de scriere din inod, ce indică numărul proceselor ce au deschis pipe-ul numit pentru citire sau scriere. Un proces care deschide un pipe numit pentru citire va aştepta pâna când un alt proces va deschide acest pipe pentru scriere, şi reciproc. La deschiderea unui pipe numit (pentru citire sau scriere), nucleul trezeşte toate procesele ce aşteptau acest lucru. Dacă un proces deschide un pipe numit pentru citire şi există un proces care să scrie în acesta, atunci apelul open se încheie. Dacă un proces deschide un pipe numit cu opŢiunea 'no delay', apelul se va încheia fără ca procesul să se pună în aşteptare chiar dacă nu există un proces care să scrie în acest pipe. ïn caz contrar procesul este blocat până când apare şi procesul care să scrie în pipe. Regulile sunt similare pentru un proces ce deschide un pipe pentru scriere.


a.Citire/scrie.pipe

Scrierea ntr-un pipe se face ntr-unul din capete, iar citirea n cellalt capt. Dup cum s-a menionat anterior, procesele acceseaz datele din pipe n maniera FIFO, ceea ce nsemn c ordinea n care datele sunt scrise ntr-un pipe este ?i ordinea n care vor fi citite din pipe.
Numrul de procese care scriu n pipe nu trebuie s fie egal cu numrul de procese care citesc din acesta. Dac numrul proceselor care scriu sau citesc este mai mare dect 1, coordonarea utilizrii pipe-ului va trebui realizat prin alte mecanisme. Nucleul acceseaz datele unui pipe n acela?i fel cum acceseaz datele unui fi?ier regulat, cu diferena c pipe-urile utilizeaz pentru o mai mare eficien doar blocuri directe, de?i aceasta limiteaz cantitatea datelelor ce pot fi stocate la un moment dat n pipe. Nucleul manipuleaz blocurile directe ale inodului ca o coad circular ?i pstreaz intern pointerii de citire ?i scriere pentru a conserva modul de lucru FIFO (vezi figura 5.17). Nucleul nu scrie niciodat n pipe peste date care nu au fost citite.
Din punct de vedere utilizator pipe-ul este vzut ca o succesiune de octei, ?i nu de blocuri.
Considerm n continuare patru situaii n care se poate executa citirea sau scrierea pipe-urilor:
^ scrierea ntr-un pipe n care este spaiu suficient pentru datele ce vor scrise;
^ citirea dintr-un pipe n care sunt date suficiente;
^ scrierea ntr-un pipe n care nu este spaiu suficient pentru datele ce vor scrise;
^ citirea dintr-un pipe care nu are date suficiente;
Notm:
^ Np = numrul de octei ce se afl deja n pipe;
^ Nw= numrul de octei ce vor fi scri?i n pipe;
^ Nr = numrul de octei ce vor fi citii din pipe;
^ Cp = capacitatea pipe-ului;


b.Citire/scrie.pipe

ïn primul caz (Np+Nw)  Cp. Nucleul execută algoritmul de scriere pentru un fişier regulat, cu diferenŢa că incrementează automat dimensiunea pipe-ului, deoarece cantitatea de date din pipe se măreşte odată cu fiecare scriere. ïn cazul fişierelor regulate procesele incrementează dimensiunea fişierului numai când se scriu date după sfârşitul fişierului de la acel moment. Dacă următorul offset din pipe iese din zona blocurilor directe, nucleul stabileşte valoarea offsetului de fişier din u area la valoarea 0 (începutul pipe-ului). Când un proces termină de scris date în pipe, actualizează pointerul de scriere din inodul fişierului pipe, astfel încât următorul proces ce va scrie în pipe să o facă de unde a rămas ultimul. Apoi nucleul trezeşte toate procesele care aşteptau să citească date din pipe.
Când un proces citeşte dintr-un pipe, el verifică dacă pipe-ul este sau nu gol. Dacă pipe-ul conŢine date (Nr  Np), nucleul citeşte date din pipe folosind algoritmul read pentru fişiere regulate. După citirea fiecărui bloc, nucleul decrementează dimensiunea pipe-ului conform numărului de octeŢi citiŢi, şi actualizează valoarea offsetului din u area (dacă e necesar să fie readusă la 0). Apoi sunt trezite toate procesele care sunt în aşteptare şi care doresc să srie în pipe şi reactualizează offsetul curent de citire în inod.--Studiind implementarea pipe-urilor reiese că interfaŢa este consecventă celei pentru fişiere regulate, dar implementarea diferă deoarece nucleul păstrează offseturile de citire şi scriere în inod şi nu în GFT. Offseturile trebuie păstrate în inod pentru pipe-urile numite astfel pentru ca procesele să poată folosi în comun valorile lor. Ele nu pot fi păstrate în GFT pentru că la fiecare deschidere se alocă o nouă intrare în tabelă. SoluŢia adoptată nu ar fi neapărat necesară în cazul pipe-urilor obişnuite (procesele utilizează în comun pipe-ul folosind intrări comune în GFT), însă s-a optat pentru ea deoarece codul e mai simplu.


c.Inchiderea pipe

La nchiderea unui pipe, un proces urmeaz accea?i procedur ca ?i la nchiderea unui fi?ier regulat, exceptnd faptul c nucleul execut unele prelucrri speciale nainte de a elibera inodul pipe-ului. Astfel, el decrementeaz contorul corespunztor numrului de procese ce scriu ?i respectiv, citesc din pipe. Dac numrul proceselor redactor (ce scriu n pipe) este 0 ?i sunt procese cititor (ce citesc date din pipe) blocate, nucleul le treze?te, iar ele vor ncheia operaia de citire fr a citi date. Dac numrul proceselor cititor este 0 ?i sunt procese redactor blocate, nucleul le treze?te ?i le trimite un semnal ce indic o condiie de eroare.
De?i n cazul pipe-urilor numite care au doar un cititor/redactor blocat exist posibilitatea de a apare noi procese redactor sau cititor, nucleul le trateaz n aceea?i manier ca pe cele obi?nuite. Cnd nici un proces cititor sau redactor nu mai acceseaz pipe-ul, nucleul elibereaz toate blocurile sale de date ?i actualizeaz inodul pentru a indica c pipe-ul este gol. Cnd elibereaz inodul unui pipe obi?nuit, el elibereaz ?i copia disc pentru a fi reasignat.
--Exemplu
char string[ ]= "hello";
^main()
{
^ char buf[1024];
^ char *cp1, *cp2;
^ int fds[2];
^ cp1= string;
^ cp2= buf;
^ while (*cp1)
^ *cp2++= *cp1++;
^ pipe(fds);
^ for(;;)
{
^write(fds[1], buf, 6);
^read(fds[0], buf, 6);
^ }
^}


a.Apel sist dup

Apelul sistem dup copiaz un descriptor de fi?ier n primul slot (intrare) liber din UFDT, returnnd utilizatorului noul descriptor. Apelul poate fi folosit pentru toate tipurile de fi?iere. Este utilizat n construcia programelor complexe pornind de la programe mai simple (vezi capitolul 7, construirea pipeline-urilor shell ). Sintaxa apelului este:
fd_nou = dup(fd);
unde fd este descriptorul de fi?ier corespunztor ce va fi duplicat, iar fd_nou este noul descriptor care va referi fi?ierul. Contorul intrrii din GFT corespunztoare lui fd va fi incrementat, deoarece ?i intrarea din UFDT a lui fd_nou va pointa ctre aceea?i intrare n GFT.--Examinnd, de exemplu, stucturile de date prezentate n figura 5.20 reies urmtoarele: un proces a deschis fi?ierul "/etc/passwd" (descriptor 3), apoi fi?ierul "local" (descriptor 4), ?i nc odat fi?ierul "/etc/passwd" (descriptor 5). n final a fost duplicat descriptorul 5 apelnd dup care a returnat descriptorul 6.

#include <fcntl.h>
^main()
{
^ int i,j;
^ char buf1[512], buf2[512];
^ i = open("/etc/passwd", O_RDONLY);
^ j = dup(i);
^ read(i, buf1, sizeof(buf1));
^ read(j, buf2, sizeof(buf2));
^close(i);
^read(j, buf2, sizeof(buf2));
}


a.Montarea.sis.de.fis

Dup cum se cunoa?te, un disc fizic poate conine mai multe partiii logice, realizate de ctre driverul de disc. Fiecare partiie are un nume de fi?ier dispozitiv. Un proces poate accesa datele unei partiii deschiznd fi?ierului asociat acesteia, fi?ier tratat ca o succesiune de blocuri disc n care se poate scrie sau citi (pentru detalii vezi capitolul 10). O astfel de partiie disc poate conine un sistem logic de fi?iere ce const din: un bloc de boot, superblocul, lista de inoduri, blocuri de date. Prezentarea acestor structuri s-a fcut n capitolul 2. Un sistem de fi?iere (FS) poate fi conectat logic (montat) ntr-unul din nodurile arborelui unui alt sistem de fi?iere prin intermediul apelului sistem mount. Demontarea se face folosind apelul sistem umount.
Sintaxa apelului sistem mount este:
^ mount (cale_ special, cale_director, opiuni);
unde cale_special este numele fi?ierului dispozitiv special corespunztor partiiei disc ce conine sistemul de fi?iere ce va fi montat, cale?_director este directorul din ierarhia existent n care se va efectua montarea numit ?i punct de montare (mount point), iar opiuni indic dac sistemul de fi?iere ar trebui montat ?read-only? (sistemul de fi?iere va putea fi accesat doar pentru citire, iar apeluri sistem cum ar fi write ?i creat care modific sistemul de fi?iere vor e?ua). Dac un proces execut apelul sistem mount "/dev/dsk1","/usr",0), nucleul ata?eaz sistemul de fi?iere coninut n partiia disc numit "/dev/dsk1" n directorul "/usr" din arborele existent al unui sistem de fi?iere. Fi?ierul "/dev/dsk1" este un fi?ier special bloc, adic el este numele unui dispozitiv bloc, uzual o partiie disc. Nucleul consider c partiia disc indicat conine un sistem de fi?iere. Dup conectare, rdcina sistemului de fi?iere montat este accesat prin numele ?/usr?, iar procesele pot accesa fi?ierele partiiei n mod normal.Nucleul dispune de o tabel de montare (Mount Table - MT) cu intrri pentru fiecare sistem de fi?iere montat.


b.Mont.Alg.mount

Fiecare intrare conine:
^un numr de dispozitiv care identific sistemul de fi?iere conectat (acesta este numrul logic al sistemului de fi?iere);
^un pointer la un buffer ce conine superblocul sistemului de fi?iere (orice sistem de fi?iere activ are superblocul n memoria intern);
^un pointer la inodul rdcinii sistemului de fi?iere ce va fi montat ("/" al sistemului de fi?iere "/dev/dsk1";
^un pointer la inodul directorului n care se va monta sistemul de fi?iere ("usr" din sistemului de fi?iere rdcin)
Asocierea ce se realizeaz pe durata apelului sistem mount ntre inodul punctului de montare ?i inodul rdcin al sistemului de fi?iere montat permite nucleului s traverseze cu u?urin noua structur de directoare creat.
--algoritm mount
^intrri: numele fi?ierului bloc special
^numele directorului n care se face montarea
^opiuni de montare (read only)
^ie?ire: niciuna
{
^if (apelantul nu este superuser)
^return (eroare);
^determin inodul pentru fi?ierul bloc special (algoritm namei);
^execut verificri;
^determin inodul corespunztor directorului din arbore n care se face montarea (algoritm namei);
^if (nu este director sau contorul de referin>1)
{
^elibereaz inodul (algoritm iput);
^return (eroare);
}
^gse?te o intrare liber n MT;
^apeleaz rutina de deschidere a fi?ierului ^special /*pentru citirea superblocului */;
^obine un buffer liber din bufferul cache (variant algoritm getblk);
^iniializeaz cmpurile superblocului;
^aloc inod pentru rdcina dispozitivului montat (algoritm iget) ?i-l salveaz n MT;
^marcheaz inodul directorul n care se face montarea ca punct de montare;
^elibereaz inodul fi?ierului special (algoritm iput);
^deblocheaz inodul directorului punct de montare;
}


a.Stari.si.tranzit

timpul de via al unui proces poate fi conceptual divizat ntr-un set de stri ce descriu procesul. Urmtoarea list conine setul complet de stri ale procesului:
1.Procesul este n execuie n modul utilizator.
2.Procesul este n execuie n modul nucleu.
3.Procesul nu este n execuie dar este gata pentru execuie ndat ce nucleul l programeaz.
4.Procesul este n a?teptare ?i se gse?te n memoria principal.
5.Procesul este gata de execuie, dar ncrctorul(swapper=procesul 0) trebuie s ncarce procesul n memoria principal nainte ca nucleul s-l poat programa pentru execuie.
6.Procesul este n a?teptare ?i ncrctorul a transferat procesul la un dispozitiv de memorare secundar fcnd loc pentru alte procese n memoria principal.
7.Procesul se ntoarce din modul nucleu n modul utilizator, dar nucleul l ntrerupe ?i face o comutare de context pentru a planifica alt proces. Diferena ntre aceast stare ?i starea 3 ("gata de execuie") va fi descris n curnd.
8. Procesul este de curnd creat ?i se afl ntr-o stare de tranziie; procesul exist dar nu este gata de execuie ?i nici n a?teptare. Aceasta este o stare de nceput pentru toate procesele, cu excepia procesului 0.
9.Procesul a executat apelul sistem exit ?i este n starea zombie. Procesul nu va mai exista mult, dar el las o nregistrare ce conine codul de ie?ire ?i cteva statistici de timp pentru a fi colectate de procesul printe. Starea zombie reprezint o stare final a procesului.
--Evenimentele descrise sunt artificiale întrucât proceselor nu li se întâmplă întotdeauna aşa, dar ele ilustrează diferitele tranziţii de stare. Procesul intră în starea "creat" când procesul părinte execută apelul sistem fork şi trece eventual într-o stare în care este gata de execuţie (3 sau 5). Pentru simplificare, presupunem că procesul intră în starea "gata de executie în memorie". Planificatorul de procese va alege eventual procesul pentru execuţie şi va intra în starea "execuţie în mod nucleu", când partea sa a apelului sistem fork este încheiată.


b.Stari.si.Tranz

Cnd un proces termin de executat un apel sistem, el poate trece n starea "execuie n mod utilizator". Dup o perioad de timp, ceasul sistem poate ntrerupe procesorul ?i procesul intr iar n starea "execuie n mod nucleu". Cnd rutina de tratare a ntreruperii de ceas termin de tratat ntreruperea de ceas, nucleul poate decide s planifice un alt proces pentru execuie, astfel primul proces intr n starea "ntrerupt" ?i cellalt se va executa. Starea "ntrerupt" este ntr-adevr aceea?i ca ?i starea,"gata de execuie n memorie", dar ele sunt descrise separat pentru a accentua c procesul care se execut n modul nucleu poate fi ntrerupt numai cnd este pe punctul de a se ntoarce la modul utilizator. n consecin, nucleul ar putea ncrca un proces din starea "ntrerupt" dac este necesar. n cele din urm, planificatorul va alege procesul pentru execuie ?i acesta se va ntoarce la starea "execuie utilizator" executndu-se din nou n modul utilizator. Cnd un proces execut un apel sistem, el prse?te starea "execuie utilizator" ?i intr n starea "execuie nucleu". Presupunem c apelul sistem necesit o operaie de I/O de pe disc ?i procesul trebuie s a?tepte pentru ca I/O s se termine. El intr n starea "a?teptare n memorie", punndu-se singur n a?teptare pn cnd este anunat c operaia I/O s-a terminat. Ulterior cnd operaia I/O se termin, hardware-ul ntrerupe UCP ?i rutina de ntrerupere treze?te procesul, determinnd trecerea lui n starea "gata de execuie n memorie".Presupunem c sistemul execut mai multe procese care nu au loc simultan n memoria principal ?i swapper-ul evacueaz procesul pentru a face loc altui proces care este n starea ?gate de execuie pe disc?. Cnd este evacuat din memoria principal procesul intr n starea ?gata de execuie pe disc?.Eventual, swapper-ul alege procesul care este cel mai potrivit s se ncarce n memoria principal ?i procesul reintr n starea "gata de execuie n memorie".


a.Structuri.de date.ale.proces

Procesul are controlul asupra ctorva tranziii de stare la nivelul utilizator. n primul rnd, procesul poate crea alte procese. Totu?i, tranziia de stare pe care o ia procesul dup starea ?creat? (la starea ?gata de execuie n memorie? sau ?gata de execuie pe disc?) depinde de nucleu: procesul nu are controlul asupra acestor tranziii de stare. n al doilea rnd, un proces poate face apeluri sistem pentru trecerea din starea ?execuie utilizator? n starea ?execuie nucleu? ?i intr n nucleu la dorina sa. Totu?i, procesul nu va avea controlul mai trziu cnd va fi ntors din nucleu; evenimentele pot dicta ca acesta s nu se mai ntoarc niciodat dar poate intra n starea ?zombie? (vezi seciunea 7.2 la semnale). n sfr?it procesul poate ie?i la cererea sa, dar indicnd aceasta nainte, evenimentele externe pot dicta ie?irea unui proces fr invocarea explicit a apelului sistem exit. -Toate celelalte tranziii de stare urmresc un model rigid codificat n nucleu, reacionnd la evenimente n mod previzibil conform regulilor formulate n acest capitol ?i n urmtoarele. Cteva reguli au fost deja citate: nici un proces nu poate ntrerupe alt proces care se execut n nucleu, de exemplu.
Dou structuri de date ale nucleului descriu starea unui proces: intrarea n tabela proceselor ?i u area. Tabela proceselor conine cmpuri care trebuie s fie ntotdeauna accesibile nucleului, dar u area conine cmpuri care trebuie s fie accesibile numai la execuia procesului. Deci nucleul aloc spaiu pentru u area numai cnd creaz un proces: el nu are nevoie de structuri u area pentru intrrile din tabela proceselor care nu au procese.


b.Structuri.de

Cmpurile din tabela proceselor sunt urmtoarele: ^Cmpul de stare care identific starea procesului. ^Intrarea n tabela proceselor conine cmpuri care permite nucleului s localizeze procesul ?i u area sa n memoria principal sau pe un dispozitiv extern. Nucleul folose?te informaia pentru a face schimbarea de context a procesului, cnd acesta trece din starea "gata de execuie n memorie" n starea "execuie nucleu" sau din starea "ntrerupt" n starea "execuie utilizator". n plus, el folose?te informaia cnd ncarc procese n ( din ) memoria principal (ntre cele dou stri "n memorie" ?i cele dou stri "de ncrcare" (swapped)). Intrarea n tabela proceselor conine un cmp care d mrimea procesului, astfel nct nucleul ?tie ct spaiu trebuie s aloce procesului.
^Mai muli identificatori ai utilizatorului determin diferite drepturi pentru proces. De exemplu, cmpurile utilizator ID descriu strile proceselor care pot transmite semnale ntre ele a?a cum va fi explicat n capitolul urmtor.
^ Identificatorii procesului specific relaia dintre procese. Aceste cmpuri ID sunt setate cnd procesul intr n starea de "creat" n urma apelului sistem fork.
^Intrarea n tabela proceselor conine un descriptor de evenimente cnd procesul este n starea sleep. Acest capitol i va examina folosirea n algoritmii pentru sleep ?i wake-up.
^Parametri planificatorului permit nucleului s determine ordinea n care procesele trec din starea "execuie nucleu" n starea "execuie utilizator".
^Cmpul pentru semnale numr semnalele trimise unui proces dar care nu sunt nc tratate.
^Diferite contoare de timp dau timpul de execuie al procesului ?i utilizarea resursei nucleului, folosii pentru numrarea ?i calcularea prioritii procesului de ctre planificatorul de procese. Cmpul contor de timp setat de utilizator este folosit pentru a transmite un semnal de alarm unui proces


c.Structuri,.de

U area conine urmtoarele cmpuri ce caracterizeaz strile procesului. Capitolele anterioare au descris ultimele ?apte cmpuri, care sunt descrise pe scurt pentru o mai bun nelegere.
^Un pointer la tabela proceselor identific intrarea ce corespunde u area.
^Identificatorii de utilizator real ?i efectiv determin diferite privilegii permise procesului cum ar fi drepturile de acces la fi?ier.
^Cmpurile contor de timp nregistreaz timpul pe care procesul (?i descendenii lui) l petrece n execuie n modul utilizator ?i n modul nucleu.
^Un vector indic cum dore?te procesul s reacioneze la semnale.
^Cmpul de control al terminalului indic "terminalul de intrare" asociat procesului, dac exist.
^Un cmp de eroare nregistreaz erorile ntlnite n timpul apelului sistem.
^Cmpul valorii de retur conine rezultatul apelurilor sistem.
^Parametrii I/O descriu cantitatea de date transferate, adresa sursei zonei de date din spaiul utilizatorului, deplasamentul n fi?ier ?i altele.
^Directorul curent ?i rdcina curent descriu sistemul de fi?iere n care se afl procesul.
^Tabela descriptorilor de fi?iere folosite nregistreaz fi?ierele pe care procesul le-a deschis.
^Cmpurile de limitare restricioneaz mrimea procesului ?i mrimea fi?ierului pe care l poate scrie.
^Cmpul permisiunilor de acces marcheaz modul de setare a fi?ierelor create de proces.
Aceast seciune a descris tranziiile de stare ale proceselor la un nivel logic. Fiecare stare are caracteristici fizice gestionate de nucleu, n special spaiul de adrese virtual al procesului. Seciunea urmtoare descrie un model de gestiune a memoriei; seciunile urmtoare descriu strile ?i tranziiile de stare la un nivel fizic cu accent pe strile "execuie utilizator", "execuie nucleu", "ntrerupt" ?i "a?teptare (n memorie)".


a.Plasarea.in Mem.a.proces

Memoria fizic a ma?inii este adresabil ncepnd de la octetul cu deplasamentul 0 ?i mergnd pn la un deplasament egal cu cantitatea de memorie a ma?inii.
Procesele n sistemul UNIX sunt formate din trei seciuni logice: text, date ?i stiv.
Seciunea de text conine un set de instruciuni executate de ma?in; adresele din seciunea de text includ :
- adresele codului n cazul instruciunilor de ramificare (sau apel de subrutine),
- adresele de date (pentru accesul la variabilele de date globale) sau
- adresele de stiv (pentru accesul la structurile de date locale ale subrutinelor)
Compilatorul genereaz adrese pentru un spaiu virtual de adrese cu un domeniu de adrese, iar unitatea de gestiune a memoriei ma?inii translateaz adresele virtuale generate de compilator n adrese de locaii n memoria fizic.
Toate procesele se vor executa folosind acelea?i adrese virtuale, dar vor referi diferite adrese fizice. Subsistemele nucleului ?i hardware-ul ce coopereaz la translatarea adresei virtuale n adres fizic formeaz sistemul de gestiune a memoriei.
--Nucleul mparte spaiul virtual de adrese al procesului n regiuni logice.
O regiune este o zon contigu a spaiului virtual de adrese al procesului care poate fi tratat ca un obiect distinct ?i poate fi partajat sau protejat. Astfel textul, datele ?i stiva, de obicei formeaz regiuni separate ale procesului. Mai multe procese pot folosi n comun aceea?i regiune.


b.Plasarea.in Mem.

Nucleul conine o tabel a regiunilor ?i aloc cte o intrare din tabel pentru fiecare regiune activ n sistem. In mod analog fiecare proces conine o tabel privat de regiuni per proces (per process region table), numit pe scurt pregion. Intrrile acesteia pot exista n tabela de procese, u area sau ntr-o zon de memorie alocat separat depinznd de implementare. Fiecare intrare a tabelei private de regiuni pointeaz ctre o intrare a tabelei globale de regiuni ?i conine adresa virtual de start a regiunii n proces. Intrarea tabelei private de regiuni mai conine cmpul permisiunilor ce indic tipul de acces permis procesului: numai citire, citire-scriere sau citire-execuie. Fiecare proces acceseaz regiunea printr-o intrare proprie n tabela privat de regiuni la fel cum acceseaz inodul printr-o intrare proprie n tabela descriptorilor de fi?iere a utilizatorului ?i n tabela de fi?iere din nucleu.Conceptul de regiune este independent de politicile de gestiune a memoriei implementate de sistemul de operare. Politica de gestiune a memoriei se refer la aciunile nucleului ce asigur mprirea corect a memoriei principale de ctre procese. De exemplu, dou politici de gestiune a memoriei sunt: swapping-ul ?i paginarea la cerere. Conceptul de regiune este deasemenea independent de implementarea gestiunii memoriei:dac memoria este mprit n pagini sau segmente.Hardware-ul de gestiune a memoriei mparte memoria fizic ntr-un set de blocuri de dimensiuni egale numite pagini. Mrimea fizic a paginilor este cuprins ntre 512 octei ?i 4Ko ?i este definit de hardware. Fiecare locaie adresabil din memorie este coninut ntr-o pagin ?i fiecare locaie de memorie poate fi adresat de perechea:


c.Plasarea.in Mem.

Dac ma?ina are 232 octei de memorie fizic ?i dimensiunea paginii de 1Ko, ma?ina poate avea 222 pagini de memorie fizic; fiecare 32 de bii de adres pot fi tratai ca o pereche format din 22 de bii ai numrului de pagin ?i 10 bii ai deplasamentului n pagin.
Adresa virtuala Hexazecimala: 4C 1F 5A 3E
32 biti adresa virtuala: 0100 1100 0001 1111 0101 1010 0011 1110
^Numarul de pagina & Deplasamentul:
0100 1100 0001 1111 0101 10 & 10 0011 1110


a.Plasarea.in.mem a Nucleului

Nucleul se execut n contextul unui proces, nsa translatarea memoriei virtuale asociat nucleului este independent de toate procesele. Codul ?i datele pentru nucleu rezid permanent n sistem, ?i toate procesele l partajeaz. Cnd sistemul este pus la lucru (la ncrcare), el ncarc codul nucleului n memorie ?i seteaz tabelele necesare ?i regi?trii pentru maparea adreselor lui virtuale n adrese fizice de memorie.
Tabelele de pagini ale nucleului sunt analoage cu tabelele de pagini asociate fiecrui proces, iar mecanismele folosite la maparea adreselor virtuale ale nucleului sunt similare cu cele folosite pentru adresele utilizator.
Spaiul virtual de adrese al procesului este mprit n cteva clase, cum ar fi sistem ?i utilizator, iar fiecare clas are o tabel proprie de pagini. Cnd execuia este n modul nucleu, sistemul permite accesul la adresele nucleului, dar nterzice un astfel de acces cnd execuia este n modul utilizator.


a.Zona uArea

Fiecare proces are o zon u area proprie, totu?i nucleul o acceseaz ca ?i cum numai o singur zon u area ar fi n sistem, aceea a procesului care ruleaz. Nucleul schimb harta de translatare a adreselor virtuale n funcie de procesul care se execut pentru a accesa zona u area corespunztoare. Cnd compileaz sistemul de operare, ncrctorul atribuie variabilei u, numele zonei u area, o adres virtual. Kernel-ul poate schimba dinamic adresa mapat a zonei u area cu alt adres fizic.
Procesul poate accesa zona sa u area sa cnd se execut n modul nucleu darnu atunci cnd se execut n modul utilizator. Cnd nucleul planific un proces pentru execuie, el gse?te zona u area corespunztoare n memorie ?i o face accesibila prin intermediul adresei virtuale.(!!este tabel !!)
OBSERVATII :
1. Procesul poate accesa zona sa u area sa cnd se execut n modul nucleu dar nu atunci
cnd se execut n modul utilizator.
2. Pentru c nucleul poate accesa doar o zon u area la un moment dat de timp prin adresa sa
virtual, u area define?te parial contextul procesului ce ruleaz n sistem.
3. Cnd nucleul planific un proces pentru execuie, el gse?te zona u area corespunztoare
n memorie ?i o face accesibil prin intermediul adresei sale virtuale.


a.Contextul.proces

Contextul procesului reprezint coninutul spaiului su de adrese (al utilizatorului), coninutul regi?trilor hardware ?i structurile de date ale nucleului care au legtur cu procesul. Formal, contextul procesului este format din contextul de nivel utilizator (user-level context), contextul registru (register context), ?i contextul de nivel sistem (system-level context). Contextul de nivel utilizator cuprinde zonele de text, date, stiv utilizator ?i memorie partajat care ocup spaiul virtual de adrese al procesului.
Contextul registru cuprinde urmtoarele componente.
^Numrtorul de program specific adresa instruciunii urmtoare pe care o va executa
UCP; aceasta este o adres virtual n nucleu sau n spaiul de memorie al utilizatorului.
^Registrul de stare al procesorului (PS) specific starea hardware a ma?inii pe care
ruleaz procesul.
^Pointerul stivei conine adresa curent a urmtoarei intrri n stiva nucleu sau n stiva utilizator, determinat de modul de execuie.
^Regi?trii generali conin date generate de proces n timpul execuiei. Pentru a simplifica
discuia, s difereniem doi regi?tri generali, registrul 0 ?i 1, folosii pentru transmiterea
informaiilor ntre proces ?i nucleu. Contextul de nivel sistem al procesului are o "parte static" ?i o "parte dinamic".
Procesul are o parte static a contextului de nivel sistem pe toat durata existenei sale, dar poate avea un numr variabil de pri dinamice. Partea dinamic a contextului de nivel sistem trebuie s fie vzut ca o stiv de cadre context pe care nucleul le introduce ?i le extrage la apariia diferitelor evenimente.


b.Contextul.proces

Partea static conine urmtoarele componente.
^Intrarea procesului n tabela de procese define?te starea procesului ?i conine informaii de control care sunt permanent accesibile nucleului. ^Zona u area a procesorului conine informaii de control care trebuie s fie accesate numai n contextul procesului.
^Intrrile tabelei private de regiuni, tabelele de regiuni ?i tabelele de pagini, definesc maparea adreselor virtuale n adrese fizice ?i deci definesc regiunile de text, date ?i stiv precum ?i alte regiuni ale procesului. Dac unele procese partajeaz regiuni comune, regiunile sunt considerate pri ale contextului fiecrui proces, pentru c fiecare proces manipuleaz regiunile independent.
Partea dinamic conine urmtoarele componente:
^Stiva nucleului conine cadrele de stiv ale procedurilor nucleului cnd un proces se execut n modul kernel. De?i procesele execut un cod nucleu identic, ele au copii proprii ale stivei nucleului ce specific apelurile proprii ale funciilor nucleului. De exemplu, un proces poate invoc apelul sistem creat ?i apoi trece n a?teptare pn cnd nucleul i asigneaz un nou inod, iar alt proces poate invoca apelul sistem read ?i trece n a?teptare pn cnd se va face transferul de date de pe disc n memorie. Ambele procese execut funcii nucleu, dar ele au stive separate ce conin propriile secvene de apeluri de funcii.
^Un set de cadre, vizualizate ca o stiv LIFO (last-in-first-out). Fiecare cadru al contextului de nivel sistem conine informaiile necesare pentru refacerea cadrului precedent, ncluznd contextul registru al nivelului precedent.


c.Contextul.proces

Nucleul introduce un strat context n stiv cnd apare o ntrerupere, cnd procesul execut un apel sistem, sau cnd procesul face o schimbare de context. Nucleul scoate un strat context din stiv cnd revine din tratarea handler-ului unei ntreruperi, cnd procesul revine la modul utilizator dup ce nucleul a executat complet un apel sistem, sau cnd procesul face o schimbare de context. Astfel schimbarea de context determin introducerea ?i scoaterea straturilor contextului de nivel sistem: nucleul introduce un strat context al vechiului proces ?i scoate stratul context al noului proces. Intrarea n tabela proceselor memoreaz informaiile necesare pentru refacerea stratului context curent. Un proces ruleaz n cadrul contextului su curent. Numrul de cadre context este limitat de numrul de nivele de ntrerupere suportat de ma?in. --figura. com. n partea stng a figurii din slide-ultrecut este prezentat partea static a procesului.
Aceasta conine contextul de nivel utilizator, care conine zona de text a procesului (instruciunile), zona de date, zona de stiv ?i zona de memorie partajat (dac exist), ?i partea static a contextului de nivel sistem, care conine intrarea n tabela proceselor, zona u area, ?i intrrile tabelei private de regiuni(informaii de mapare a adreselor virtuale ale contextului de nivel utilizator).


a.Salvarea contextului

Nucleul salveaz contextul unui proces ori de cte ori el introduce n stiv un nou cadru context de nivel sistem. n particular, aceasta se ntmpl cnd sistemul recepioneaz o ntrerupere, cnd execut un apel sistem, sau cnd nucleul face o schimbare de context.
Sistemul rspunde de tratarea ntreruperilor, indiferent dac ele sunt ntreruperi hardware (cum ar fi de la ceas sau de la dispozitivele periferice), ntreruperi programabile (execuia instruciunilor proiectate pentru a genera , sau excepii (cum ar fi erori de pagin).Dac UCP lucreaz la un nivel de execuie procesor mai sczut dect nivelul ntreruperii, el accept ntreruperea naintea decodificrii instruciunii urmtoare ?i ridic nivelul de execuie al procesorului, astfel nct nici o alt ntrerupere a acelui nivel nu se poate produce ct timp trateaz ntreruperea curent pstrnd integritatea structurilor de date ale nucleului. Nucleul trateaz ntreruperea cu urmtoarea secven de operaii: 1. Salveaz contextul registru curent al procesului n execuie ?i creeaz un nou cadru context.
2. Determin "sursa" sau cauza ntreruperii, identific tipul ntreruperii (de ceas sau de disc) ?i numrul unitii care a produs ntreruperea, dac este cazul(cum ar fi driverul de disc). Cnd sistemul recepioneaz o ntrerupere, aceasta prime?te un numr de la ma?in pe care l folose?te ca deplasament ntr-o tabel, numit de obicei vector de ntrerupere. De obicei conine adresa rutinei de tratare a ntreruperii corespunztoare sursei de ntrerupere ?i calea de gsire a parametrilor pentru rutin. 3. Nucleul invoc rutina de tratare a ntreruperii. Stiva nucleu pentru noul cadru context este din punct de vedere logic distinct de stiva nucleu pentru cadrul context anterior.
4. Dup terminarea execuiei rutinei de tratare a ntreruperii se reia execuia proceslui curent.
Nucleul execut o secven de instruciuni specifice ma?inii ?i reface context registrul ?i stiva nucleu a cadrului context anterior a?a cum erau n momentul apariiei ntreruperii ?i apoi reia execuia cadrului restaurat.


b.Salvarea context

^algoritmul inthand /* rutina detratare a ^ntreruperii */
^intrare: niciuna
^ie?ire: niciuna
{
^salveaz (introduce) stratul context curent;
^determin sursa de ntrerupere;
^gse?te vectorul de ntrerupere;
^apeleaz rutina de tratare a ntreruperii;
^reface (scoate din stiv) stratul context anterior;
}
Interfaa de apel sistem a nucleului a fost descris ca un apel normal de funcie. Compilatorul C folose?te o bibliotec de funcii predefinite (biblioteca C) care conine denumirile apelurilor sistem.
Funciile de bibliotec invoc o instruciune care schimb modul de execuie al procesului n modul nucleu ?i determin nucleul s nceap execuia codului pentru apelurile sistem.Aceast instruciune este numit "trap" ?i este vzut ca o excepie. Rutinele de bibliotec sunt executate n modul utilizator, dar interfaa de apel sistem este un caz special de rutina de tratare a ntreruperii.
^algoritmul syscal /* algoritmul pentru invocarea unui apel sistem */
^ intrare: numrul apelului sistem
^ ie?ire: rezultatul apelului sistem
{
gse?te intrarea n tabela de apeluri sistem corespunztoare numrului de apel sistem;
^determin numrul de parametri pentru apelul sistem;
^copie parametrii din spaiul de adrese utilizator n u area;
^salveaz contextul curent pentru ntoarcerea forat );
^invoc codul apelului sistem in nucleu;
^if (apare eroare n timpul execuiei apelului sistem)
{
seteaz registrul 0 din registrul context salvat utilizator cu numrul erorii;
^ntoarce bitul de transport n registrul PS din contextul registrului salvat utilizator;
}
^else
^seteaz registrul 0, 1 din registrul context salvat utilizator ca valori de retur din apelul sistem;
}


c.Salvarea context

Nucleul permite o schimbare a contextului doar n patru situaii: 1. cnd un proces se pune singur n a?teptare; 2. cnd acesta se termin;
3. cnd revine dintr-un apel sistem n modul utilizator dar nu este procesul cel mai potrivit
pentru execuie; 4. cnd acesta revine n modul utilizator dup ce nucleul termin tratarea unei ntreruperi dar nu este cel mai potrivit proces pentru execuie. Nucleul asigur integritatea ?i consistena structurilor de date interne prin interzicerea schimbrilor de context arbitrare. Acesta se asigur c starea structurilor sale de date este consistent nainte de a realiza schimbarea contextului: dac toate actualizrile au fost fcute, dac toate listele sunt nlnuite corect, dac anumite structuri de date sunt blocate pentru a mpiedica accesarea lor de ctre alte procese, dac nu exist structuri de date rmase blocate cnd nu este necesar, ?i altele. Nucleul trebuie s execute o schimbare a contextului la terminarea apelului sistem exit, deoarece nu mai are nimic de fcut. n mod similar nucleul permite o schimbare de context cnd un proces se pune n a?teptare deoarece poate trece o perioad considerabil de timp pn cnd procesul va fi trezit, ?i alte procese pot fi executate ntre timp. Nucleul permite o schimbare de context cnd un proces nu este cel mai potrivit pentru a fi rulat, pentru a permite planificarea proceselor adecvate: dac un proces termin un apel sistem sau revine dintr-o ntrerupere ?i exist un alt proces cu prioritate mai mare care a?teapt s ruleze, ar fi incorect s meninem n a?teptare procesul cu prioritate mai mare.Pa?i pentru schimbarea contextului: 10.Decide dac se face schimbarea de context ?i dac schimbarea de context este permis acum. 11.Salveaz contextul "vechiului" proces. 12.Gse?te "cel mai bun" peoces pentru planificarea la execuie.


a.Crearea proceselor

Singurul mod prin care un utilizator poate crea un nou proces n UNIX este folosirea apelului sistem fork. Procesul care apeleaz fork este numit proces printe, iar noul proces creat este numit proces fiu. Sintaxa pentru apelul sistem fork este: pid=fork();
La revenirea din apelul sistem fork, dou procese au copii identice ale contextului la nivel utilizator, excepie fcnd valoarea de retur a pid-ului. n procesul printe, pid-ul are valoarea identificatorului procesului fiu; n procesul fiu, pid-ul are valoarea zero.
Procesul 0, creat intern de ctre kernel cnd sistemul este iniializat este singurul proces care nu este creat prin intermediul apelului sitem fork. Nucleul execut urmtoarea secven de operaii la apelul sistem fork:
1)Aloc o intrare n tabela proceselor penrtru noul proces.
2)Atribuie un identificator unic procesului fiu.
3)Face o copie logic a contextului procesului printe.
4)Incrementez contorii tabelei de inoduri ?i fi?iere asociate procesului.
5)ntoarce n procesul printe numrul identificatorului atribuit procesului fiu ?i valoarea zero n procesul fiu. Descrierea algoritmului:
-Nucleul se asigur mai nti dac are resurse disponibile pentru a termina cu succes apelul sistem fork. (Dac nu sunt resurse disponibile, apelul sistem fork d gre?.)
-Nucleul gse?te o intrare n tabela proceselor pentru a ncepe construcia contextului procesului fiu ?i se asigur c utilizatorul care a apelat fork nu are deja prea multe procese n curs de execuie. De asemenea selecteaz un unic identificator pentru noul proces. -Mai departe nucleul iniializeaz intrarea din tabela proceselor pentru procesul fiul creat prin copierea diferitelor cmpuri din intrarea procesului printe. Starea iniial a procesului este "n curs de creare".


b.Crearea.proc

-Nucleul ajusteaz acum contoarele de referin pentru fi?ierele cu care procesul fiu este automat asociat. Procesul fiu se afl n directorul curent al procesului printe. Numrul proceselor care au acces la director va fi incrementat cu 1 ?i, n consecin, nucleul incrementeaz contorul de referin al inodului. Apoi, dac procesul printe sau unul din strmo?i executase apelul sistem chroot pentru a schimba rdcina, procesul fiu mo?tene?te schimbarea rdcinii ?i incrementeaz contorul de referin al inodului respectiv.
-Apoi, nucleul caut n tabela cu descriptori fi?ier ai utilizatorului (UFDT) specific procesului printe, gse?te intrrile pentru fi?ierele deschise, cunoscute de ctre proces ?i incrementeaz contoarele de referine al tabelei globale de fi?ire (FT) asociate fi?ierelor deschise. Procesul fiu nu numai c mo?tene?te drepturile de acces la fi?ierele deschise, dar ?i mparte accesul la fi?iere cu procesul printe deoarece ambele procese manipuleaz acelea?i intrri din tabela fi?ierelor.
-Nucleul este acum gata pentru a crea contextul nivelului utilizator al procesului fiu. Nucleul aloc memorie pentru u area, regiunile ?i tabelele de pagini (PT) auxiliare ale procesului fiu, duplic fiecare regiune din procesul printe folosind algoritmul dupreg ?i ata?eaz fiecare regiune la procesul fiu folosind algoritmul attachreg.
-Pn n prezent, nucleul a creat poriunea static a contextului procesului fiu; acum acesta creaz poriunea dinamic a acestuia. Nucleul copiaz nivelul 1 al contextului printelui, coninnd contextul regi?trilor salvai ?i structura stivei nucleului ale apelului sistem fork.
-Nucleul creaz apoi un context pe nivel dummy (2) pentru procesul fiu, coninnd contextul regi?trilor salvai pentru nivelul context (1). Acesta seteaz contorul de program (PC) ?i ali regi?tri n contextul regi?trilor salvai astfel nct s poat reface contextul fiului, de?i acesta nu a fost executat nainte ?i de aceea procesul fiu se poate recunoa?te singur ca fiind un proces fiu cnd acesta ruleaz.


c.Crearea.proc

-Cnd contextul fiului este gata, printele termin partea sa a apelului fork prin schimbarea strii fiului n "gata de rulare (n memorie)" ?i prin ntoarcerea spre utilizator a identificatorului de proces al fiului. Nucleul programeaz mai trziu procesul fiu pentru execuie cu ajutorul algoritmului normal de planificare ?i procesul fiu ?i termin astfel partea sa de fork. Contextul procesului fiu a fost completat de ctre procesul tat; n nucleu, procesul fiu pare a fi trezit dup a?teptarea unei resurse. Procesul fiu execut poriunea de cod din apelului sistem fork, n acord cu contorul programului, pe care nucleul l-a refcut din contextul regi?trilor salvai aflat n nivelul context 2 ?i ntoarce un 0 din apelul sistem.
--^algoritm fork
^intrri: niciuna
^ie?iri: la procesul printe, identificatorul fiului (PID)la procesul fiu, 0
{
verific resursele disponibile ale nucleului;
^obine o intrare liber n tabela proceselor, un unic numr pentru PID;
^verific ca utilizatorul s nu ruleze prea multe procese;
^marcheaz starea procesului ca "fiind creat";
^copiaz datele din intrarea tabela procese corespunztoare procesului printe n noua intrare a fiului;
^incrementeaz contorul i-nodului directorului curent ?i a rdcinii schimbate(dac este necesar);
^face o copie a contextului printelui (u area, text, date, stiv) n memorie;
^depune contextul dummy al nivelului sistem n contextul nivelului sistem al fiului;
^contextul dummy conine date care permit procesului fiu s se recunoasc singur ?i s nceap s ruleze de aici atunci cnd este programat;
^if (procesul n execuie este procesul printe)
{
chimb starea procesului n "gata de rulare";
^ntoarce (idetificatorul fiului); /* dinspre sistem ctre utilizator */
^else /* procesul care se execut este procesul fiu */
{
iniializeaz cmpurile de timp ale u area;
return (0);
}
^ }


a.Comunicare intre proc prin.pipe,dup

#include <string.h>
^char string[]=" hello word";
^ main ()
^ {
^ int count,i;
^ int to_par[2], to_chil[2]; /* pentru pipe-urile printelui ?i fiului */
^ char buff[256];
^ pipe(to_par);
^ pipe(to_chil);
^ if(fork() ==0)
{
/* procesul fiu se execut aici */
^close(0);/* nchide vechea intrare standard */
^dup(to_chil[0]);/* duplic descriptorul de citire al pipe-lui la /* intrarea standard */
^close(1);/* nchide vechea intrare standard */
^dup(to_par[1]); /* duplic descriptorul de scriere al pipe la ie?irea standard */
^close(to_par[1]); /* nchide descriptorii pipe-lui nefolosii */
^close(to_chil[0]);
^close(to_par 0]);
^close(to_chil[1]);
^for(;;)
{
^if (count=read(0, buf, sizeof(buf)))==0)
^exit ();
^write(1, buf, count);
}
^ } /* procesul printe se execut aici */
close(1);/* rearanjeaz intrrile ?i ie?irile standard */ ^dup(to_chil [1]);
^close(0);
^dup(to_par [0]);
^close(to_chil [1]);
^close(to_par [0]);
^close(to_chil [0]);
^close(to_par [1]);
^for(i=0; i<15; i++)
{
^write(1, string, strlen(string));
^read(0, buf, sizeof(buf));
}
^ }
Programul mo?tene?te descriptorii de fi?iere 0 ?i 1 (intrarea ?i ie?irea standard) de la printele su. Execuia fiecrui apel sistem pipe aloc n plus 2 descriptori de fi?iere n ?irurile to_par ?i to_child. Procesul execut fork ?i face o copie a contextului su. Procesul printe nchide fi?ierul su standard de ie?ire (descriptorul de fi?ier 1) ?i duplic (dup) descriptorul de scriere ntors de pipe pentru to_child. Deoarece primul slot liber din UFDT-ul printelui este chiar acela eliberat prin apelul sistem close, nucleul copiaz descriptorul de scriere rezultat n urma executrii apelului sistem pipe n slotul 1 al UFDT-lui ?i astfel descriptorul fi?ierului standard de ie?ire devine descriptorul de scriere al pipe-lui pentru to_child.


b.Comunic.intre

Procesul printe face operaii similare astfel nct descriptorul intrrii standard s devin descriptorul de citire al pipe-lui pentru to_par. Analog, procesul fiu ?i nchide fi?ierul standard de ie?ire (descriptor 0) ?i duplic descriptorul de citire al pipe-lui pentru to_child. ntruct primul slot liber n UFDT este slotul fostuului fi?ier standard de intare, intrarea standard a fiului devine descriptorul de citire al pipe-lui pentru to_child. Fiul face operaii similare astfel nct descriptorul ie?irii standard s devin descriptorul de scriere al pipe-lui pentru to_par. Ambele procese nchid descriptorii de fi?iere ntor?i de apelarea lui pipe. Ca rezultat, cnd printele scrie la ie?irea standard, acesta scrie n pipe-ul to_child ?i trimite date procesului fiu, care cite?te pipe-ul ca pe propria intrare standard. Cnd procesul fiu scrie la ie?irea standard, acesta scrie n pipe-ul to_par ?i trimite datele procesului printe care cite?te pipe-ul ca pe propria intrare standard. Procesele astfel schimb mesaje prin intermediul pipe-urilor.
Rezulatele programului sunt acelea?i, indiferent de ordinea n care procesele ?i execut apelurile sistem respective. Adic nu este nici o diferen, dac printele se ntoarce din fork naintea fiului sau dup el. Similar, nu este nici o diferen fa de ordinea relativ n care procesele ?i esxecut apelurile sistem pn cnd acestea intr n ciclu: structurile nucleului sunt identice. Dac procesul fiu execut apelul sistem read nainte ca procesul printe s fac write, procesul fiu va intra n a?teptare pn cnd procesul printe scrie pipe-ul ?i este trezit. Dac procesul printe scrie pipe-ul nainte ca procesul fiu s citeasc pipe-ul, printele nu va citi de la intrarea sa standard pn cnd fiul nu de la cite?te intrarea sa standard ?i nu scrie la ie?irea sa standard. Din acest motiv, ordinea de execuie este fixat: fiecare proces termin un apel sistem read ?i write ?i nu poate termina urmtorul apel sistem read pn cnd cellalt proces nu termin un apel sistem read ?i write.
Printele face exit dup cele 15 iteraii aflate n ciclu; apoi fiul cite?te "sfr?it de fi?ier" (EOF), deoarece pipe-ul nu are procese care s scrie, ?i termin.


a.Gestiunea semnal

Semnalele informeaz procesele despre apariia evenimentelor asincrone. Procesele ?i pot trimite semnale prin intermediul apelului sistem kill, sau nucleul poate trimite intern semnale.
Exist 19 semnale n versiunea de UNIX System V care pot fi clasificate dup cum urmeaz:
1)Semnale pentru terminarea proceselor, trimise atunci cnd un proces execut exit sau cnd un proces execut apelul sistem signal cu parametrul "terminare fii";
2)Semnale pentru de atenionare n cazul excepiilor provocate n procese, de exemplu cnd acesta acceseaz o adres n afara spaiului su virtual de adrese, cnd acesta ncearc s scrie n zonele de memorie protejate la scriere (cum ar fi codul programului), cnd acesta execut o instruciune privilegiat, sau pentru diferite erori hardware;
3)Semnale pentru situaii fr ie?ire aprute n timpul apelurilor sistem, cum ar fi lipsa resurselor n timpul execuiei apelului sistem exec dup ce spaiul iniial de adrese fusese eliberat ;
4)Semnale determinate de condiii de eroare nea?teptate aprute n timpul unui apel sistem, cum ar fi executarea unui apel sistem inexistent, scrierea unui pipe care nu are proces cititor, sau folosirea unei valori de "referin" ilegale pentru apelul sistem lseek;
5)Semnale provenite de la procesele n modul utilizator, de exemplu cnd un proces dore?te s recepioneze un semnal alarm dup un anumit timp, sau cnd procesele trimit unul altuia semnale n mod arbitrar, prin intermediul apelului sistem kill;
6)Semnale provenite de la interaciunea cu un terminal, atunci cnd un utilizator nchide un terminal (sau semnalul "purttor" cade din anumite motive), sau cnd un utilizator apas tastele "break" sau "delete";
7)Semnale de urmrire a execuiei unui proces.
Tratarea semnalelor este diferit dup cum nucleul trimite un semnal unui proces, cum trateaz procesul un semnal ?i cum un proces ?i controleaz reacia la apariia unui semnal. Pentru a trimte un semnal unui proces, nucleul seteaz un bit n cmpul signal din intrarea tabelei proceselor, corespunztor tipului semnalului recepionat. Dac procesul este n a?teptare la o prioritate ntreruptibil, nucleul l treze?te. Sarcina celui care trimite (proces sau nucleu) ia sfr?it.


b.Gestiun semn

Nucleul verific recepionarea unui semnal cnd un proces este gata s se ntoarc din modul nucleu n modul utilizator ?i cnd acesta intr sau prse?te starea de sleep la o prioritate sczut programat. Nucleul trateaz semnalele doar cnd un proces se ntoarce din modul nucleu n modul utilizator. Astfel, un semnal nu are un efect imediat ntr-un proces care ruleaz n modul nucleu. Dac un proces ruleaz n modul utilizator ?i nucleul trateaz o ntrerupere care presupune trimiterea unui semnal ctre proces, nucleul va recunoa?te ?i trata semnalul cnd se va ntoarce din ntrerupere. Astfel, un proces niciodat nu se va executa n modul utilizator nainte de tratarea semnalelor importante. Algoritm pentru recunoa?terea semnalelor:
^algoritmul issig /* test pentru recepia semnalelor */
^intrri: niciuna
^ie?iri: adevrat, dac procesul recepioneaz semnale pe care nu le ignor;
^fals, n celelalte cazuri
{
^while( cmpul semalului recepionat n intrarea din tabela proceselor nu este 0)
{
^gse?te numrul semnalului trimis ctre proces;
^if( semnalul este de "terminare fiu")
{
^if( se ignor semnalul de "terminare fiu")
elibereaz intrrile din tabela proceselor corespunztoare fiilor aflai n strile zombie;
^else if( intercepteaz semnale de "terminare proces fiu")
^return (adevrat);
}
^else if(dac nu este ignorat semnalul)
^return (adevrat);
^?terge bitul semnalului recepionat din cmpul
semnalului aflat n tabela proceselor;
}
^return (fals);
}
n algoritmul issig, nucleul ?terge indicatorii care marcheaz apariia semnalelor pe care procesul vrea s le ignore dar noteaz existena semnalelor pe care acesta nu le ignor.
Nucleul trateaz semnalele n contextul procesului care le recepioneaz, deci un proces trebuie s ruleze pentru a putea trata semnalele. Exist trei cazuri n tratarea semnalelor: procesul apeleaz exit la recepionarea semnalului, acesta ignor semnalul, sau execut o funcie particular (definit de utilizator).


c.Gestiun semn

Aciunea implicit este de a apela exit n modul nucleu, dar un proces poate specifica o aciune special, pe care s-o execute la recepionarea unui anumit semnal cu ajutorul apelul sistem signal. Sintaxa apelului este :
oldfunction=signal (signum, function);
unde:
-signum este numrul semnalului pentru care procesul specific aciunea;
-function este adresa funciei (utilizatorului) pe care procesul dore?te s-o apeleze la recepia semnalului. Apelul ntoarce valoarea oldfunction care a fost valoarea lui function n cel mai recent apel al lui signal cu parametrul signum.
Procesul poate apela signal cu valoarea 1 sau 0 n loc de adresa funciei: procesul va ignora viitoarele apariii ale semnalului dac valoarea parametrului este 1 ?i se ntoarce n nucleu dac valoarea lui este 0 (valoarea implicit).
^algoritmul psig /* Algoritm pentru tratarea semnalelor */
^intrri: niciuna
^ie?iri: niciuna
{
^obine numrul semnalului setat n intrarea din tabela proceselor;
^?terge numrul semnalului din intrarea tabelei proceselor;
^if( utilizatorul apelase funcia sistemsignal pentru ignorarea acestui semnal)return;
^if( utilizatorul a specificat funcia care s trateze semnalul)
{
^obine adresa virtual utilizator a interceptorului de semnale pstrat n u area;
^?terge intrarea din u area care a coninut adresa interceptorului de semnal;
^modific contextul nivelului utilizator:
artificial creaz structura stivei utilizator pentru a mima apelarea funciei de interceptare a semnalului;
^modific contextul nivelului sistem: scrie adresa interceptorului de semnal n cmpul PC al ^contextului regi?trilor salvai;
^return;
}
^if (semnalul este de tipul care face ca sistemul s creeze o imagine intern unui proces)
{
^creaz fi?ierul numit "core" n directorul curent;
^scrie coninutul contextului nivelului utilizator n fi?ierul "core";
}
^apeleaz imediat algoritmul exit;
}
^Cnd trateaz un semnal nucleul determin tipul semnalului ?i ?terge bitul semnalului tratat din intrarea corespunztoare tabelei proceselor, setat cnd procesul a recepionat semnalul. Dac funcia de tratare a semnalului are valoarea implicit, nucleul va descrca imaginea din memorie a procesului pentru anumite tipuri de semnale nainte de a face exit.


d.Gestiun semn

Nucleul descarc imaginea procesului din memorie pentru semnalele care sugereaz c ceva este gre?it n proces, cum ar fi faptul c procesul execut o instruciune ilegal sau cnd acesta acceseaz o adres n afara spaiului su virtual de adrese. Dar nucleul nu descarc core-ul pentru semnale care nu implic o eroare program. Cnd un proces recepioneaz un semnal pe care anterior a decis s-l ignore, acesta continu ca ?i cnd semnalul nu ar fi aprut. Deoarece nucleul nu reseteaz cmpul din u area care arat c semnalul este ignorat, procesul va ignora semnalul ?i la apariia ulterioar a acestuia. Dac un proces recepioneaz un semnal pe care acesta se decisese anterior s-l intercepteze, acesta execut funcia de tratare a semnalului specificat de utilizator imediat cum se ntoarce n modul utilizator, dup ce nucleul parcurge urmtorii pa?i:
1.Nucleul acceseaz contextul regi?trilor salvai al utilizatorului, gsind numrtorul programului (PC) ?i pointerul stivei (SP) pe care acesta i salvase pentru ntoarcerea n procesul utilizator.
2.Acesta ?terge cmpul semnalului tratat din u area, setndu-l la starea implicit.
3.Nucleul creaz un nivel de stivei n stiva utilizator, scriind n aceasta valorile pentru PC ?i SP pe care acesta le restabile?te din contextul regi?trilor salvai al utilizatorului ?i aloc spaiu nou, dac este necesar. Stiva utilizator art ca ?i cum procesul apelase o funcie la nivel utilizator (interceptorul de semnale) n punctul unde acesta fcuse apelul sistem sau nucleul l ntrerupsese (nainte de recunoa?terea semnalului).
4.Nucleul schimb contextul regi?trilor salvai al utilizatorului: acesta reseteaz valorile pentru PC la adresa funciei de interceptare a semnalului ?i seteaz valoarea pentru SP pentru a ine evidena cre?terii stivei utilizatorului.
Dup ntoarcerea din nucleu n modul user, procesul va executa funcia de tratare a semnalului; cnd acesta termin funcia de tratare a semnalului, se ntoarce n locul din codul utilizator unde a fost gsit apelul sistem sau s-a produs ntreruperea, imitnd o ntoarcere din apelul sistem sau ntrerupere.


a.Grupuri de proces

De?i procesele ntr-un sistem UNIX sunt identificate printr-un numr unic (PID), sistemul trebuie s identifice uneori procesele dup "grup". De exemplu, procesele cu un strmo? comun care este un login shell sunt n general nrudite ?i de aceea toate aceste procese primesc semnale cnd un utilizator apas tastele "Delete" sau "Break" sau cnd linia ctre terminal este ntrerupt. Nucleul utilizeaz identificatorul de grup al proceselor pentru a identifica grupurile de procese nrudite care trebuie s primesac un semnal comun pentru evenimente sigure. Acesta salveaz identificatorul de grup n tabela proceselor; procesele aflate n acela?i grup au acela?i ID de grup. Apelul sistem setpgrp iniialiazeaz numrul de grup pentru un proces ?i-l seteaz ca fiind egal cu valoarea ID de proces propriu. Sintaxa apelului sistem este:
^grp=setpgrp();
unde grp este noul numr al grupului de procese.
Un fiu reine numrul de grup de proces al printelui n timpul apelului sistem fork.
Setpgrp are, de asemenea, importan n setarea terminalului de control al unui proces.
#include <signal.h>
^main()
{
^register int i;
^setpgrp();
^for(i=0;i<10;i++)
{
^if(fork()==0)
{
/* procesul fiu */
^if(i[and]1)
^setpgrp();
^printf("pid=[procent]d pgrp=[procent]d pgrp=[procent]d
", getpid(), getpgrp());
^pause();/*se suspendă execuţa apelului sistem */
}
}
^kill(0,SIGINT);
}
În programul de mai sus, procesul anulează numărul său de grup şi crează 10 procese fii. Când sunt creaţi, fiecare proces fiu are acelaşi număr de grup cu al procesului părinte, dar procesele create în timpul iteraţiilor impare din ciclu resetează numărul de grup. Apelurile sistem getpid şi getpgrp întorc PID-ul şi ID-ul grupului (GID) ale procesului care se execută, iar apelului sistem pause suspendă execuţia procesului până când acesta recepţionează un semnal. La sfârşit, procesul părinte execută apelului sistem kill şi trimite un semnal de întrerupere tuturor proceselor din grupul său de procese. Nucleul trimite semnalul către 5 procese "pare" care nu şi-au schimbat propriu grup de procese în timp ce, cele 5 procese "impare" continuă ciclul.


a.Trimiterea de.semnal de catre.procs

Procesele trimit semnale folosind apelului sistem kill. Sintaxa este:
kill (pid, signum)
unde pid identific setul de procese care primesc semnalul ?i signum este numrul semnalului trimis.
n lista care urmeaz se arat corespondena dintre valorile pid-urilor ?i setul de procese.
-Dac pid-ul este un ntreg pozitiv, nucleul trimite un semnal proesului care are identificatorul de proces pid.
-Dac pid-ul este 0, nucleul trimite semnal tuturor proceselor din grupul procesului care a trimis semnalul.
-Dac pid-ul este -1, nucleul trimite semnal tuturor proceselor al cror UID (U-utilizator, ID-identificator) real este egal cu UID-ul efectiv al procesului care a trimis semnalul. Da procesul care trimite semnalul are UID-ul efectiv al superutilizatorului, nucleul trimite semnalul tuturor proceselor cu excepia proceselor 0 ?i 1.
-Dac pid-ul este un ntreg negativ diferit de -1, nucleul trimite semnalul tuturor proceselor din grupul de procese avnd valoarea absolut a pid-lui.
n toate cazurile, dac procesul care trimite semnalul nu are UID efectiv al superutilizatorului, sau UID-ul su efeciv sau real este diferit de UID-ul procesului destinatar, kill e?ueaz.


a.Terminarea proces

ntr-un sistem UNIX procesele se termin prin execuia apelului sistem exit. Un proces care a executat exit intr n starea zombie, ?i abandoneaz resursele ?i ?i distruge contextul mai puin intrarea din tabela de procese. Sintaxa apelului este:
^exit (status)
unde valoarea status este ntoars printelui pentru examinare.
^algoritm exit
^intrri: codul de retur pentru procesul printe
^ie?iri: niciuna
{
^ignor toate semnalele;
^if( conductorul grupului de procese este asociat cu terminalul de control)
{
^trimite semnalul de suspendare a tuturor membrilor grului de procese;
^iniializeaz grupul proceselor pentru toi membrii la 9;
}
^nchide toate fi?ierele (versiunea intern a algoritmului close);
^elibereaz directorul curent (algoritmul iput);
^elibereaz rdcina curent (schimbat) dac exist (alg. iput);
^elibereaz regiunile de memorie asociate procesului (alg. freereg);
^scrie nregistrarea cu informaii de contabilitate;
^trece procesul n starea zombie;
^atribuie PID-ului printe al tuturor fiilor ca fiind procesul init (1);
^dac vreun proces fiu era n starea zombie trimite semnalul de "terminare proces fiu" ctre init;
^trimite semnal de "terminare proces fiu" procesului printe;
^comut contextul;
}
^Nucleul dezactiveaz tratarea semnalelor de ctre proces deoarece nu mai are nici un sens tratarea semnalelor. Dac procesul care execut exit este un conductor de grup de procese asociat cu un terminal de control, nucleul presupune c utlizatorul nu mai face nimic util ?i trimite semnalul de suspendare ctre toate procesele aflate n grupul de procese.
Astfel, dac un utilizator tasteaz "sfr?it de fi?ier" din shell-ul login-ului n timp ce mai exist procese n execuie asociate terminalului, procesul care face exit le va trimite un semnal de suspendare. Nucleul iniializeaz, de asemenea, numrul de grup la 0 pentru procesele din grup, deoarece este posibil ca un alt proces s ia identificatorul procesului care tocmai a executat exit ?i s fie un conductor de grup.


b.Terminarea proces

Procesele care au aparinut vechiului grup nu vor aparine ?i grupului urmtor. Nucleul parcurge descriptorii fi?ierelor deschise, nchizndu-le pe fiecare prin algoritmul intern close ?i elibereraz inodurile care au fost folosite pentru directorul curent ?i rdcina schimbat (dac exist) prin algoritmul iput.
Nucleul elibereaz apoi toat memoria utilizatorului prin ?tererea regiunilor corespunztoare cu algoritmul detachreg ?i schimb starea procesului n zombie. El salveaz codul de stare al lui exit ?i timpii de execuie utilizator ?i nucleu acumulai de proces ?i descendenii lui n tabela de procese
Nucleul mai scrie, de asemenea, o nregistrare de contabilitate ntr-un fi?ier global de cont ce conine diferite statistici de rulare cum ar fi identificatorul utilizatorului, utilizarea CPU-lui ?i a memoriei precum ?i cantitatea de operaii de intrare/ie?ire pentru un proces.
La sfr?it, nucleul deconecteaz procesul de la arborele de procese fcnd ca procesul 1 (init) s adopte toate procesele sale fii. Aceasta presupune c procesul 1 devine printe legal al tuturor proceselor fii n execuie pe care procesul care a executat exit le-a creat.
Dac vreunul din procesele de tip fiu este n starea zombie, procesul ce execut exit trimite ctre init semnalul de "terminare proces fiu" pentru ca init s-l ?tearg din tabela proceselor; procesul care execut exit trimite ?i printelui su un semnal de terminare proces fiu.n programul de mai jos un proces ?i creaz un fiu care ?i tipre?te propriul PID ?i execut apelul sistem pause suspendndu-?i execuia pn cnd prime?te un semnal. Procesul printe tipre?te PID-ul fiului ?i execut exit ntorcnd PID-ul fiului drept cod de stare. Dac apelul exit nu ar fi prezent, rutina de lansare procese ar apela exit la ntoarcerea programului din funcia main. Procesul fiu creat de printe continu s existe pn cnd prime?te un semnal, chiar dac procesul printe s-a terminat.
^main()
{
^int child;
^if((chil=fork())==0)
{
^printf({child PID %d
", getpid());
^pause()/* suspend execuia pn la recepionarea unui semnal*/
}
/* printe */
^printf("child PID %d
", child);
^exit(child);
}


c.Terminarea proces

Un proces ?i poate sincroniza execuia cu terminarea unui proces fiu prin execuia apelului sistem wait. Sintaxa pentru acest apel sistem este:pid=wait (stat_addr);
unde pid este identificatorul de proces al fiului din starea zombie, iar stat_addr este adresa unui ntreg din spaiul utilizator ce va conine codul de ie?ire al fiului.
--algoritm wait
^intrri: adresa unei variabile de pstrare a strii procesului ce execut exit
^ie?iri: identificatorul fiului, codul de ie?ire al fiului
{
^if(procesul n a?teptare nu are procese fii)
^return(eroare);
^for(;;)/* cicleaz pn la instruciunea return din interiorul buclei */
{
^if(procesul n a?teptare are un fiu n starea zombie)
{
^alege un fiu aflat n starea zombie;
^adaug timpul de folosire a CPU la printe;
^elibereaz intrarea fiului din tabela de procese;
^return(ID-ul fiului, codul de ie?ire al fiului);
}
^if(procesul nu are fii)
^return eroare;
^a?teapt cu o prioritate ntreruptibit pe ^evenimentul :(se iese din procesul fiu);
}
^ }
Nucleul caut un fiu al procesului n starea zombie ?i dac nu gse?te nici unul ntoarce o eroare. Dac gse?te un fiu n starea zombie, extrage PID-ul ?i parametrul furnizat apelului sistem exit al fiului ?i ntoarce aceste valori la terminarea apelului sistem. Un proces ce execut exit poate astfel preciza diferite coduri de retur pentru a da sens execuiei apelului exit, dar multe programe nu le stabilesc n mod explicit n practic. Nucleul adaug timpul acumulat de execuia procesului fiu n modurile utilizator ?i nucleu la cmpurile corespunztoare din u area a procesului printe ?i n final elibereaz poziia din tabela proceselor ce fusese ocupat de procesul n stare zombie. Aceast poziie devine disponibil pentru noi procese.
Dac procesul ce execut wait are procese de tip fiu, dar niciunul dintre acestea nu se afl n starea zombie, el trece n a?teptare la o prioritate ntreruptibil pn la sosirea unui semnal.


d.Terminarea proces

Nucleul nu are un apel explicit de reluare a unui proces n a?teptare prin wait: astfel de procese sunt reluate numai la primirea unor semnale. Pentru orice semnal, cu excepia celui de "terminare proces fiu" procesul va reaciona dup cum s-a descris anterior.
Cu toate acestea, dac semnalul este de "terminare proces fiu", procesul ar putea rspunde n mod diferit.
--n cazul implicit el va fi reluat din wait iar sleep va invoca algoritmului issig pentru a cuta semnalele. Issig recunoa?te cazul special al semnalului "terminare proces fiu" ?i ntoarce "fals". Ca urmare nucleul nu execut un longjmp din sleep ci se ntoarce n wait. Nucleul va relua bucla wait, gse?te un fiu n starea zombie -cel puin unul exist, elibereaz poziia slotul fiului din tabela proceselor ?i se ntoarce din apelului sistem wait.
--Dac procesul intercepteaz semnalul "terminare proces fiu", nucleul apelezeazdin partea procesului rutina utilizator de tratare a semnalului, a?a cum face pentru alte semnale.
--Dac procesul ignor semnalele de "terminare proces fiu", nucleul reia bucla wait, elibereaz sloturile din tabela proceselor corespunztoare proceselor fii aflai n starea zombie ?i caut ali fii.


a.Lansarea altor.prog

Apelul sistem exec apeleaz un alt program suprapunnd pe spaiul de memorie al unui proces o copie a unui fi?ier executabil. Coninutul contextului la nivel utilizator care a existat naintea apelului exec nu mai este apoi accesibil cu excepia parametrilor lui exec pe care nucleul i copiaz din vechiul spaiu de adres n cel nou.
Sintaxa apelului este:execve(filename, argv, envp)
Unde:
-filename este numele fi?ierului executabil care a fost apelat;
-argv este un pointer ctre un vector de pointeri la ?iruri care sunt parametrii programului executabil;
-envp este un pointer ctre un vector de pointeri la ?iruri care reprezint mediul programului executat.
Exist mai multe funcii de bibliotec care apeleaz exec cum ar fi execl, execv, execle, etc. Toate acestea apeleaz eventual pe execve, din acest motiv acesta este folosit aici pentru a specifica apelul sistem exec.
--algoritm exec
^intrri: ^ (1) nume de fi?ier
^ (2) lista de parametri
^ (3) lista de variabile de mediu
^ie?iri: nimic
{ obine inodul fi?ierului (algoritmul namei);
verific dac fi?ierul e executabil, dac utilizatorul are drept de execuie;
^cite?te header-ele de fi?ier, verific dac sunt module ncrcabile;
^copiaz parametrii lui exec din spaiul vechi de adrese n spaiul sistemului;
^for(fiecare regiune specificat n modului ncrcat)
{
^aloc regiuni noi (algoritm allocreg);
^ata?eaz regiunile (algoritmul attachreg);
^ncarc regiunea n memorie dac este cazul (algoritmul loadreg);
}
copiaz parametrii lui exec n noua regiune de stiv a utilizatorului;
^procesare special pentru programele setuid, opiunu de execuie pas cu pas;
elibereaz inodul fi?ierului (algoritmul iput);
}
n primul rnd exec acceseaz fi?ierul prin algoritmul namei pentru a determina dac este executabil, obi?nuit (nu e director) ?i pentru a determina dac utilizatorul are drept de execuie asupra programului. Nucleul cite?te apoi header-ul fi?ierului pentru a determina mrimea fi?ierului executabil.


b.Lansarea altor.prog

Figura de mai jos prezint formatul logic al unui fi?ier executabil, a?a cum exist n sistemul de fi?iere, n mod tipic generat de asamblor sau ncrctor. Acesta conine 4 pri:
1.Header-ul primar care precizeaz cte seciuni sunt n fi?ier, adresa de start pentru execuia procesului ?i "numrul magic" care d tipul fi?ierului executabil.
2.Header-ele de seciune descriu fiecare seciune din fi?ier, dnd mrimea seciunii, adresele virtuale pe care ar trebui s le ocupe seciunea atunci cnd ruleaz n sistem ?i alte informaii.
3.Seciunile conin att zon de "date",ct ?i zon de "text", care sunt iniial ncrcate n spaiul de adrese al procesului.
4.Diferite seciuni ar putea conine tabele de simboluri ?i alte date utile n depanare.
Formatele specifice au evoluat de-a lungul anilor dar toate fi?ierele executabile au coninut un header primar cu un "numr magic".
Numrul magic este un ntreg scurt care identific fi?ierul ca un modul ncrcabil ?i d nucleului posibilitatea s disting diferite caracteristici de rulare ale sale. De exemplu, folosirea unui numr magic pe un PDP 11/70 informeaz nucleul c procesul poate utiliza pn la 128 ko de memorie n loc de 64 ko; numrul magic joac, de asemenea, un rol important n sistemele de paginare.
n acest moment, nucleul a accesat inodul fi?ierului executabil ?i a verificat dac-l poate executa. Nucleul este pe punctul de a elibera resursele de memorie care formeaz contextul procesului la nivel utilizator. Dar, deoarece parametrii pentru noul program sunt coninui n spaiul de memorie care trebuie eliberat, nucleul copiaz parametrii din vechiul spaiu de memorie care trebuie eliberat ntr-un buffer temporar, pn cnd vor fi ata?ate regiunile noului spaiu de memorie.


a.UID-ul unui proces

Nucleul asociaz doi identificatori pentru un proces, indenpendent de ID-ul procesului: identificatorul utilizator real (real user ID) ?i identificatorul utilizator efectiv sau setuid (effective user ID). Identificatorul utilizator real identific utilizatorul care este responsabil pentru rularea procesului. Identificatorul utilizator efectiv este folosit pentru a asigna dreptul de proprietate ultimelor fi?iere create, pentru a verifica dreptul de acces la fi?ier ?i dreptul de a trimite semnale la procese prin intermediul apelului sistem kill.
Nucleul permite unui proces s-?i schimbe propriul UID efectiv execut un program (exec) setuid sau cnd se face apelul explicit al apelului sistem setuid.
Un program setuid este un fi?ier executabil care are setat bitul corespunztor lui setuid n cmpul drepturilor de acces. Cnd un proces execut (exec) un program setuid, nucleul seteaz cmpurile identificatorului utilizator efectiv din tabela proceselor ?i u area, la identificatorul proprietarului fi?ierului.
Sintaxa apelului sistem setuid este:
setuid(uid)unde uid este noul identificator utilizator ?i rezultatul su depinde de valoarea curent a identificatorului utilizator efectiv.
Dac identificatorul utilizator efectiv al procesului apelant este acela al superutilizatorului, nucleul reseteaz cei doi identificatori (cmpurile lor) din tabela proceselor ?i u area, la uid. Dac UID-ul efectiv nu este acela al superutilizatorului, nucleul reseteaz identificatorul utilizator efectiv n u area la uid dac uid-ul are valoarea identificatorului utilizator real sau dac are valoarea identificatorului utilizator salvat. n celelalte cazuri, apelul sistem se ntoarce cu eroare. n general, procesul mo?tene?te identificatorii si (real ?i efectiv) de la printe n timpul apelului sistem fork ?i pstreaz aceste valori pe tot parcursul execuiei apelului sistem exec.


b.UID-ul unui proces

Programul de mai jos demonstreaz apelul sistem setuid. Presupunem c fi?ierul executabil produs prin compilarea programului are propietar pe "mauny" (identificatorul utilizator 8319), bitul su pentru setuid este activat ?i toi utilizatorii au permisiunea s-l execute. n plus, presupunem c utilizatorii "mjb" (identificatorul utilizator 5088) ?i "maury" au n proprietate fi?iere cu acelea?i nume ?i ambele fi?iere au setat dreptul de acces read-only.Apelurile sistem getuid ?i geteuid ntorc identificatorii real ?i efectiv ai procesului, 5088 ?i respectiv 8319 pentru tilizatorul "mjb". De aceea, procesul nu poate deschide fi?ierul "mjb", pentru c utlizatorul efectiv (8319) nu are drept de citire a fi?ierului, dar poate deschide fi?ierul "maury".
^#include<fnctl.h>
^main()
{
^int uid, euid, fdmjb, fdmaury;
^ uid=getuid();
^ euid=geteuid();
^ printf("uid [procent]d euid [procent]d
", uid, euid);
^ fdmjb=open("mjb", O_RDONLY);
^ fdmaury=open("maury", O_RDONLY);
^printf("fdmjb [procent]D fdmaury [procent]d
", fdmjb, fdmaury);
^setuid(uid);
^printf("dup setuid ([procent]d): uid [procent]d euid [procent]d
", uid, getuid(), geteuid());
^fdmjb=open("mjb", O_RDONLY);
^fdmaury=open("maury", O_RDONLY);
^printf("fdmjb [procent]d fdmaury [procent]d
", fdmjb, fdmaury);
^setuid(euid);
^printf("dupq setuid([procent]d):uid [procent]d euid [procent]d
", eiuid, getuid(), geteuid());
}
Dup apelarea lui setuid pentru a schimba identificatorul efectiv al procesului n identificatorul utilizator real ("mjb') a doua instruciune printf tipre?te valorile 5088 ?i 5088, identificatorul utilizator al lui "mjb". Acum procesul poate deshide fi?ierul "mjb", pentru c identificatorul su utilizator are acces de citire pentru fi?ier, dar procesul nu poate deschide fi?ierul "maury". n final, dup apelarea lui setuid, pentru a schimba identificatorul utilizator efectiv n valoarea salvat de programi (8319), al treilea printf va tipri din nou valorile 5088 ?i 8319.
Ultimul caz arat c procesul poate executa un program setuid ?i modifica identificatorul su utilizator efectiv cu identificatorul su utilizator real sau cel executat de setuid.


c.UID-ul unui proces

Identificatorii utilizator real ?i efectiv sunt ntotdeauna 8319: procesul nu poate deschide fi?ierul "mjb" dar poate deschide fi?ierul "maury". Identificatorul utilizator efectiv pstrat n u area este rezultatul celui mai recent apel sistem setuid sau a execuiei unui program setuid; el este singur responsabil pentru determinarea dreptului de acces la fi?ier. Identificatorul utilizator salvat n tabela proceselor permite unui proces s-?i schimbs propriul identificator utilizator efectiv n el prin execuia apelului sistem setuid, astfel reapelnd identificatorul utilizator efectiv original.
Programul login executat de utilizator cnd dore?te s intre n sistem este un program tipic care apeleaz setuid. Login-ul are setuid-ul rdcinii (superutilizator) ?i de aceea ruleaz cu identificatorul utilizator efectiv al rdcinii.
Comanda mkdir este un program setuid tipic. Cnd se execut mkdir, procesul ruleaz cu drept de acces de superutilizator, creaz directorul pentru utilizator cu mkdir ?i apoi schimb proprietarul ?i dreptul de acces al directorului la acela al utilizatorului real.


a.Shell-ul

Figura de mai jos arat ciclul principal al shell-lui ?i demonstreaz execuia asincron, redirectarea ie?irii ?i conductele de tip pipe.
/* cite?te linia de comand pn la "sfr?itul fi?ierului" */
--^while (read(tdin, buffer, numchars))
{
/* analizeaz linia de comand */
^if(/* linia de comand conine [and] */
^amper=1;
^else
^amper=0;
/* pentru comenzi ce nu aparin limbajului de comand shell */
^if(fork()==0)
{
/* redirectare a I/O */
^if(/* redorectare ie/ire */
{
^fd=creat(newfile, fmask);
^close (stdout);
^dup(fd);
^close(fd);
^/* stdout este acum redirectat */
}
^if(/* cerere de redirectare ctre o conduct */
{
^pipe(fildes);
^if(fork()==0)
{
/* prima component a liniei de comand */
^close(stdout);
^dup(fildes[1]);
^close(fildes[1]);
^close(fildes[0]);
/* stdout este redirectat acum ctre o conduct */ , /* procesul fiu execut comanda */
^execlp(command1, command2, 0);
}
/* a doua component a liniei de comand */]
^close(stdin);
^close(fildes[0]);
^close(fildes[1]);
/* intrarea standard este acum o conduct */
}
^execv(command2, command2, 0);
}
/* printele continu de aici...
* a?teap terminarea fiului dac este nevoie*/
^if(amper==0)
^redit=wait([and]status);
Shell-ul cite?te o linie de la intrarea sa standard ?i o interpreteaz dup un set fixat de reguli. Descriptorii de intrare ?i ie?ire standard ai fi?ierelor pentru shell-ul login sunt uzual terminalul pe care utilizatorul i folose?te a?a cum se va vedea n capitolul 10. Dac shell-ul recunoa?te ?irul de intrare ca o comand intern (de exemplu, comenzile cd, for, while ?i altele), se execut comanda intern dar fr a mai crea procese; altfel, presupune comanda ca fiind numele unui fi?ier executabil.


b.Shell-ul

Cea mai simpl linie de comand conine un nume de program ?i civa parametri cum ar fi:
^ who
^ grep -n include *.c
^ ls -1
--Shell-ul face un apel fork ?i creaz un proces fiu care execut programul pe care utilizatorul l specific n linia de comand. Procesul printe, shell-ul care este folosit de utilizator, a?teapt pn cnd procesul fiu iese din comanda dat ?i atunci revine pentru a citi comanda urmtoare. Pentru a rula un proces asincron (n fundal), ca de exemplu:
^ nroff -mm big document [and] shell-ul seteaz o variabil intern amper cnd analizeaz caracterul [and]. Dac gse?te variabila setat la sfr?itul buclei, nu se execut wait dar imediat rencepe ciclul ?i cite?te urmtoarea linie de comand.
Poza arat c procesul fiu are acces la copia liniei de comand dup fork. Pentru a putea redirecta ie?irea standard a fi?ierului, ca de exemplu
^nroff -mm bigdocument>output
--procesul fiu creaz fi?ierul de ie?ire specificat n linia de comand; dac apelul creat nu se ncheie cu succes (de exemplu, la crearea fi?ierului n director fr drept de acces ), procesul fiu ar trebui s apeleze imediat exit. Dc apelul creat se ncheie cu succes, procesul fiu nchide fi?ierul de ie?ire standard anterior ?i duplic descriptorul de fi?ier al noului fi?ier de ie?ire. Descriptorul fi?ierului de ie?ire standard refer acum fi?ierul de ie?ire redirectat. Procesul fiu nchide descriptorul de fi?ier obinut prin apelul creat pentru a conserva descriptorii de fi?ier pentru programul executat. Shell-ul redirecteaz fi?ierele de intrare ?i eroare standard ntr-un mod similar.


c.Shell-ul

Codul arat cum shell-ul ar trata o linie de comand cu o singur conduct (pipe), ca de exemplu:
^ls -l|wc
--Dup ce procesul printe apeleaz fork ?i creaz un proces fiu, fiul creaz o conduct de tip pipe. Procesul fiu execut fork; el ?i fiecare fiu al su trateaz fiecare cte o component a liniei de comand. Procesul fiu (mai mare) creat prin al doilea fork execut prima component a comenzii (ls): scrie n conduct, a?a c nchide descriptorul de fi?ier de ie?ire standard, duplic descriptorul de scriere al conductei ?i nchide descriptorul original de scriere al conductei n momentul cnd nu mai este necesar. Printele (wc) ultimului proces fiu (ls) este fiul procesului shell original. Acest proces (wc) nchide propriul fi?ier de intrare standard ?i duplic descriptorul de citire al conductei fcndu-l s devin propriul descriptor de fi?ier de intrare standard. Apoi nchide descriptorul de citire al conductei originale pentru c nu mai are nevoie de el ?i execut a doua component a comenzii din linia de comand original. Cele dou procese care execut linia de comand, o execut asincron ?i ie?irea unui proces este intrare pentru cellalt proces. Procesul shell ntre timp a?teapt pentru ca procesul su fiu (wc) s ias (exit), apoi procedeaz n mod uzual: ntreaga linie de comand este apelat atunci cnd procesul wc iese. Shell-ul face o bucl ?i cite?te urmtoarea comand.


a.Incarcarea sist.si procesul.init

Pentru a iniializa un sistem dintr-o stare inactiv, un administrator trece printr-o secven "bootstrap": administratorul boot-eaz sistemul. Procedura pentru boot variaz n funcie de tipul ma?inii, dar scopul este comun la toate: de a face o copie a sistemului de operare n memorie ?i de a ncepe execuia lui. Aceasta este fcut ntr-o serie de stadii; de aici ?i numele de "bootstrap". Administratorul trebuie s seteze switch-urile la consola calculatorului pentru a specifica adresa special hard a codului programului bootstrap sau doar s apese un singur buton destinat s fac ma?ina s ncarce programul bootstrap din microcodul su. Acest program poate s conin doar cteva instruciuni care coordoneaz ma?ina s execute alt program. Pe sistemele UNIX, procedurile bootstrap citesc eventual blocul boot (blocul 0) al discului ?i l ncarc n memorie. Programul coninut n blocul boot ncarc nucleul din fi?ierul sistem (din fi?ierul "/unix" de exemplu, sau alt nume specificat de administrator). Dup ce nucleul este ncrcat n memorie, programul boot transfer controlul la adresa de start a nucleului care porne?te rularea (algoritmul start).Nucleul ?i iniializeaz structurile sale de date interne. De exemplu, construie?te liste link-editate de buffer-e ?i inoduri libere, construie?te cozile de hash pentru buffere ?i inoduri, iniializeaz structurile de regiune, intrrile n tabela de pagini ?i a?a mai departe. Dup terminarea fazei de iniializare, monteaz sistemul de fi?iere rdcin ("/") ?i pregte?te mediul pentru procesul 0, creaz u area, iniializeaz slotul 0 n tabela proceselor ?i creaz rdcina directorului curent al procesului 0, printre altele.
Cnd mediul procesului 0 este setat, sistemul este n rulare ca proces 0. Procesul 0 apeleaz fork direct din nucleu pentru c el este executat n modul nucleu. Noul proces, procesul 1, care ruleaz n modul nucleu, ?i creaz contextul la nivel de utilizator prin alocarea unei regiuni de date ?i ata?area ei la propriul spaiu de adrese.


b.Incarc,sist si.proc

Mre?te regiunea la mrimea potrivit ?i copiaz codul (cea mai scurt descriere) din spaiul de adrese al nucleului n noua regiune: acest cod formeaz acum contextul la nivel de utilizator al procesului 1. Procesul 1 seteaz apoi contextul registrului utilizator salvat, se ntoarce din modul nucleu n modul utilizator ?i execut codul care fusese copiat din nucleu. Procesul 1 este un proces la nivel utilizator care este n opoziie cu procesul 0, care este un proces la nivel nucleu ?i care se execut n modul nucleu. Codul pentru procesul 1, copiat din nucleu, const din apelul funciei sistem exec pentru execuia programului "/etc/init". Procesul 1 apeleaz exec ?i execut programul n mod normal. Procesul 1 este n mod normal numit init, pentru c el este rspunztor pentru iniializarea noilor procese.
De ce nucleul copiaz codul apelului sistem exec n spaiul de adrese utilizator al procesului 1? Ar putea s invoce versiunea intern a exec-lui direct din nucleu, dar asta ar fi mai complicat dect implementarea deja descris.
--algoritmul start /* algoritm pentru boot-area sistemului */
^intrri: niciuna
^ie?iri: niciuna
{
^iniializarea tuturor structurilor de date ale sistemului;
^pseudo-montarea rdcinii;
^pregtirea mediului pentru procesul 0;
^apel fork pentru procesul 1:
{
/* procesul 1 */
^aloc regiune;
^ata?eaz regiunea la spaiul iniial de adrese;
^cre?te mrimea regiunii n concordan cu codul ^care va fi copiat n ea;
^copiaz codul din spaiul nucleu pentru a iniializa spaiul utilizator pentru a executa init;
^schimb modul din modul nucleu n modul utilizator;
/* init niciodat nu va fi aici... ca rezultat al modului schimbat nainte, init execut /etc/init ?i devine un proces utilizator "normal" care respect apelurile sistem */
}
/* procesul 0 continu aici */
^apel fork pentru procesele nucleu;
/* procesul 0 invoc swapper-ul pentru a face management-ul alocrii spaiului de adrese pentru proces n memoria proncipal ?i a dispozitivelor de swap. Acesta este un ciclu infinit; procesul 0 este n mod obo?nuit n a?teptare n bucl, dac nu este ceva de fcut pentru el */
^execut codul pentru algoritmul swapper;
}


c.Incarc,sist si.proc

Procesul init este un proces distribuitor, care creeaz procesele ce permit utilizatorului s intre n sistem, printre altele. Init cite?te fi?ierul "/etc/inittab" pentru a avea informaii referitoare la ce procese trebuiesc create (spawn). Fi?ierul "/etc/inittab": conine linii care au un "id", un identificator de stare (unic utilizator, multiutilizator, etc), o "aciune" ?i o specificaie de program.
Init cite?te fi?ierul ?i, dac starea n care a fost apelat se potrive?te cu identificatorul de stare a liniei, creaz un proces care execut specificaia de program dat. De exemplu, cnd se apeleaz init pentru starea de multiuser (starea 2), init n mod obi?nuit lanseaz procesul getty pentru a supraveghea liniile terminale configurate ntr-un sistem.
--algoritmul init /* procesul de iniializare, ^procesul 1 al sistemului */
^ intrri: niciuna
^ ie?iri: niciuna
{
^fd=open("/etc/inittab",O_RDONLY);
^while(linia cititq(fd, buffer))
{
/* cite?te fiecare linie a fi?ierului */
^if(starea invocat!=starea citit n buffer)
continu; /* sare napoi la while */
/* starea se potrive?te */
^if( fork()==0)
{
^execl("procesul specificat n buffer");
^exit();
}
/* procesul init nu a?teapt */
/* sare la while */
}
while((id=wait((init *)0))!=-1)
{
/* ^aici verific dac procesul fiu lansat s-a terminat;
^* consider relansarea lui */
/* n caz contrar, doar continu */
}
} .
--Cnd intr un utilizator cu succes, getty trece prin procedura login ?i execut shell-ul login. ntre timp, init execut apelul sistem wait, controlnd terminarea propriilor procese fiu ?i terminarea proceselor fiu rmase "orfane" prin terminarea proceselor printe (exit).
Procesele n sistemul UNIX sunt fie procese utilizator, fie procese de tip "daemon", sau procese nucleu. Cele mai multe procese de pe sistemele obi?nuite sunt procese utilizator asociate utilizatorilor de la un terminal.


a.Planificarea proces

Anumite procese utilizator au nevoie s cunoasc valoarea timpului. De exemplu, comanda time afi?eaz timpul necesar unei alte comenzi pentru execuie, iar comanda date afi?eaz data ?i timpul curent. Diverse apeluri sistem legate de timp permit proceselor s seteze sau restaureze valorile de timp ale nucleului sau s stabileasc cantitatea de folosire a UCP de ctre proces.Planificatorul din sistemul UNIX aparine clasei generale de planificatoare din sistemele de operare cunoscute sub numele list circular a proceselor cu mai multe nivele de reacie invers, ceea ce nseamn c nucleul aloc UCP unui proces pentru o coant de timp, ntrerupe procesul ce dep?e?te cuanta sa de timp ?i l depune ntr-una din listele de prioriti.Atunci cnd nucleul execut o comutare de context ?i restaureaz contextul unui proces, procesul continu execuia din punctul n care a fost suspendat.
La ncheierea comutrii contextului, nucleul execut algoritmul de planificare a unui proces, selectnd procesul cu cea mai mare prioritate din cele care se afl n strile "gata de execuie ?i ncrcat n memorie" ?i "ntrerupt". Dac mai multe procese au fixat cea mai mare prioritate, nucleul alege acel proces care a fost pentru cea mai lung perioad de timp n starea "gata de execuie", conform politocii de planificare a listei circulare. Dac nu exist nici un proces gata de execuie, procesorul trece n starea idle (inactiv) pn la urmtoarea ntrerupere de ceas; dup tratarea ntreruperii, nucleul ncearc din nou s planifice un proces.
--^algoritm planificare_proces
^intrare: niciuna
^ie?ire: niciuna
{
^while (nu este ales proces la execuie)
{
^for (fiecare proces din coada de rulare)
^alege procesul cu prioritatea cea mai mare care estencrcat n memorie;
^if (nici un proces eligibil de executat)
pune ma?ina n starea idle (no operating);
/* ntreruperile o pot scoate din starea idle "*/
}
^scoate procesul ales din coada de rulare;
^schimb contextul n cel al procesului care a fost ales, preia execuia acestuia;
}


b.Planific proc

Parametri de planificare
Fiecare intrare n tabela proceselor (PT) conine un cmp de prioritate pentru planificare. Prioritatea unui proces n modul utilizator este funcie de folosirea UCP, n care procesul obine o prioritate sczut dac a folosit recent UCP. Domeniul prioritilor procesului poate fi partiionat n dou clase: prioriti utilizator ?i prioriti nucleu. Fiecare clas conine cteva valori de prioriti, ?i fiecare prioritate are o list de procese asociat logic cu ea.
Prioritile de nivel utilizator sunt dispuse sub o valoare de prag, iar prioritile de nivel nucleu peste valoarea de prag. Prioritile de nivel nucleu se subdivid la rndul lor: procesele cu prioritate nucleu sczut se pot trezi la recepionarea unui semnal, dar procesele cu prioritate nucleu ridicat continu s rmn n starea de a?teptare (sleep).
Prioritile denumite "swapper" (ncrctor), "a?teptare pentru operaie I/O cu discul", "a?teptare pentru eliberarea unui buffer", ?i "a?teptare pentru eliberarea unui inode" sunt prioriti sistem de valoare nalt, nentreruptibile.
Nucleul calculeaz prioritatea unui proces funcie de strile specifice ale procesului.
El atribuie prioritatea unui proces care trebuie s treac n starea de a?teptare prin corelarea unei valori de prioritate fix cu motivul trecerii n starea de a?teptare. Prioritatea nu depinde de caracteristicile runtime ale procesului, ci este o valoare constant stabilit hardware pentru fiecare apel de trecere n starea de a?teptare, dependent de motivul pentru care procesul trece n aceast stare.Nucleul ajusteaz prioritatea unui proces care revine din modul nucleu n modul utilizator. Este posibil ca procesul s fi intrat anterior n starea sleep, schimbndu-?i la una de nivel nucleu, iar la ntoarcerea n modul utilizator ea trebuie s fie sczut la o prioritate de mod utilizator.Rutina de tratare a ceasului ajusteaz prioritilor tuturor proceselor din mod utilizator la intervale de o secund ?i determin ca nucleul s execute algoritmul de planificare pentru a preveni ca un proces s acapareze folosirea UCP.


c.Planific proc

Ceasul poate ntrerupe un proces de mai multe ori pe durata cuantei sale de timp; la fiecare ntrerupere de ceas, rutina de tratare a ceasului incrementeaz un cmp din tabela proceselor ce nregistreaz valoarea de folosire curent a UCP de ctre proces. De asemenea, o dat pe secund, rutina de tratare a ceasului ajusteaz valoarea de folosire a UCP de ctre fiecare proces n concordan cu o funcie de reducere (decay):
^decay(UCP)=UCP/2.
^Cnd ea recalculeaz folosirea recent a UCP, rutina de tratare a ceasului recalculeaz ?i prioritatea fiecrui proces aflat n starea "ntrerupt dar gata de execuie" n concordan cu formula:
^prioritatea=("valoarea de folosire a CPU" / 2)+(prioritatea utilizator a nivelului de baz)
unde "prioritatea utilizator a nivelului de baz" este prioritatea de prag dintre modul nucleu ?i cel utilizator descris anterior.
--Efectul recalculrii prioritilor o dat pe secund este acela c procesele cu prioriti de nivel utilizator sunt mutate ntre listele de prioriti.Controlul prioritilor proceselor
Procesele pot exercita un control al prioritii lor de planificare prin folosirea apelului sistem nice:
^nice(valoare);
unde valoare este adugat n calculul prioritii procesului:
^prioritatea = ("valoarea de folosire a CPU" / 2 ) + ( prioritatea utilizator a nivelului de baz) + (valoare nice)
--Apelul sistem nice incrementeaz sau decrementeaz cmpul nice din tabela proceselor cu valoarea parametrului, de?i doar administratorul de sistem poate asigura valori nice astfel nct s mreasc prioritatea proceselor. Similar, doar administratorul de sistem poate asigura valori nice sub un prag anume. Utilizatorii care invoc apelul sistem nice pentru a scdea prioritatea proceselor lor cnd execut sarcini de calcul intensiv sunt amabili (nice) fa de ali utilizatori din sistem (de unde ?i numele apelului sistem). Procesele mo?tenesc valoarea nice a printelui pe durata apelului sistem fork. Apelul sistem nice funcioneaz doar pentru procesul n care ruleaz; un proces nu poate schimba valoarea nice a altui proces.


a.Apel.sistem p-ru.timp

Apelurile sistem legate de timp sunt: stime, time, times ?i alarm. Primele dou se ocup cu timpul global al sistemului iar ultimele dou cu timpul proceselor individuale.
Stime permite administratorului de sistem s seteze o variabil nucleu global cu o valoare ce d timpul curent:
stime(pvalue);unde pvalue indic un ntreg lung ce conine timpul msurat n secunde. Rutina de tratare a ntreruperii de ceas incrementeaz variabila o dat pe secund.
Time furnizeaz timpul setat de ctre stime:
time(tloc);unde tloc indic o locaie n procesul utilizator pentru valoarea obinut.
De asemenea, time obine aceast valoare pritr-un apel sistem. Comenzile cum sunt date utilizeaz time pentru a determina timpul curent.
Times furnizeaz timpi cumulai pe care procesul apelant a rulat n modul ?i nucleu ?i timpii cumulat ai tuturor fiilor zombie care au rulat n modul utilizator ?i nucleu. Sintaxa apelului este:
^times(tbuffer)
^struct tms *tbuffer;
unde structura tms conine timpi obinui ?i este definit prin:
^struct tms {
/* time_t este structura pentru timp */
^time_t tms_utime; /* timpul cumulat n modul utilizator de ctre proces */
time_t tms_stime; /* timpul cumulat n modul nucleu de ctre proces*/
^time_t tms_ctime; /* timpul cumulat n modul utilizator de ctre fii */
^time_t tms_cstime; /* timpul cumulat n modul nucleu de ctre fii */
};
--Times returmeaz timpul scurs "de la un moment arbitrar de timp din trecut", n mod obi?nuit din momentul cnd calculatorul a fost pornit .
Procesele utlizator pot planifica semnale de alarm folosind apelul sistem alarm.
Factorul comun n toate apelurile sistem de timp prezentate este ceasul sistemului: nucleul manipuleaz variate numrtoare de timp cnd trateaz ntreruperile de ceas ?i iniiaz aciuni corespunztoare.--n programul de mai jos, un proces creaz 10 procese fii ?i fiecare din ace?tia cicleaz 10000 perioade de timp. Procesul printe apeleaz times nainte de a crea procesele fii ?i dup ce ace?ti fii au fcut exit ?i procesele fiu apeleaz times nainte ?i dup ce cicleaz.


b.Apel.sistem p-ru.timp

#include<sys/types.h>
#include<sys/times.h>
^extern long times();
^main()
{
^int i;
/* tms este o structur de date coninnd 4 ^elemente de timp */
^struct tms pb1, pb2;
^long pt1, pt2;
^pt1=times([and]pb1);
^for(i=0;i<10;i++)
^if(fork()==0)
^child(i);
^for(i=0;i<10;i++)
^wait((int*) 0);
^pt2=times([and]pb2);
^printf("printe real [procent]u utilizator [procent]u sistem [procent]u c_utlizator [procent]u c_sistem [procent]u
", pt2-pt1, pb2.tms_utime-pb1.tms_utime, pb2.tms_stime-pb1.tms_stime, pb2.tms_ctime-pb1.tms_ctime, pb2.tms_cstime-pb1.tms_cstime);
}
^child(n)
^int n;
{
^int i;
^struct tms cb1, cb2;
^long t1, t2;
^t1=times([and]cb1);
^for(i=0; i<10000; i++);
;
^t2=times([and]cb2);
^printf("fiu [procent]u: real [procent]u utilizator [procent]u sistem [procent]u
", n, t2-t1,cb2.tms_utime - cb1.tms_utime, cb2.tms_stime -cb1.tms_stime);
^exit();
}


a.Gestiune clock

Funciile rutinei de tratare a ntreruperilor de ceas sunt:
-reporne?te ceasul;
-planific apelurile funciilor interne ale nucleului pe baza timerelor interne;
-furnizeaz posibilitatea schirii execuiei proceselor n modul nucleu ?i utilizator;
-calculeaz timpii statistici pentru proces ?i sistem;
-urmre?te timpul;
-trimite semnale de alarm la procesele care solicit acest lucru;
-treze?te periodic procesul ncrctor (trimite periodic semnale de wake up la procesele depuse n memorie);
-controleaz planificarea proceselor;
Unele operaii sunt fcute la fiecare ntrerupere de ceas, pe cnd altele sunt fcute dup cteva impulsuri de ceas. Rutina de tratare a ntreruperii de ceas ruleaz cu nivelul de executie al procesului setat high, previne apariia altor evenimente (cum ar fi ntreruperile de la dispozitivele periferice) atunci cnd el este activ.Program care utlizeaz ^apelul alarm:
^#include <sys/types.h>
^ #include<sys/stat.h>
^ #include<sys/signal.h>
^ main( argc, argv)
^ int argc;
^ char *argv[];
{
^extern unsigned alarm();
^extern wakeup();
^struct stat statbuf;
^time_t axtime;
^if(argc!=2)
{
^printf(" doar un argument
");
^exit(); }
^axtime=(time_t) 0;
^for(;;)
{
/* gse?te timpul de acces la fi?ier */
^if(stat(argv[1], [and]statbuf)==-1)
{
^printf(" fi?ierul [procent]s nu este acolo
", argv[1]);
^exit(); }
^if(axtime!=statbuf.st_atime)
{
^printf("fi?ierul [procent]s a fost accesat
", argv[1]);
axtime=statbuf.st_atime;
}
^signal(SIGALRM, wakeup); /* reset pentru alarm */
^alarm(60);
^pause(); /* st n sleep pn apare un semnal */
}
^}
^wakeup() { }


b.Gestiune clock

Algoritm pentru tratarea ceasului:
--^algoritmul clock
^intrri: niciuna
^ie?iri: niciuna
{
^reporne?te ceasul (astfel nct ntreruperea de ceas s apar n continuare)
^if (tabela de timeout nu este goal)
{
^ajusteaz timpii de timeout;
^planific funcia de timeout dac timpul a expirat;
}
^if (nucleul prezint facilit de profiling)
reine numrtorul de program la momentul ntreruperii;
^if (utilizatorul prezint faciliti de profiling)
reine numrtorul de program la momentul ntreruperii;
^calculeaz statisticile per sistem;
^caculeaz statisticile per proces;
^ajusteaz mrimea valorii de utilizare a UCP
^if ( a trecut o secund sau mai mult de cnd s-a aflat aici iar ntreruperea nu se afl ntr-o regiune critic)
{
^for (toate procesele din sistem)
{
^ajusteaz timpul n cazul alarmei active;
^ajusteaz mrimea valorii de utilizare a UCP;
^if (procesul se execut n modul utilizator)
^ajusteaz prioritatea procesului;
}
^treze?te procesul swapper dac e necesar;
^ }
^}


a.Alocarea spaю.de.swap

Algoritmul de planificare al UCP este puternic influenat de politicile de gestiune a memoriei. UCP nu poate executa un proces care exist n ntregime in memoria secundar; cel puin o parte a procesului trebuie s fie coninut n memoria primar pentru ca procesul s poat fi executat.Exist trei etape n descrierea algoritmului de swapping: gestiunea spaiului pe dispozitivul de swap (zona de swapping), evacuarea proceselor din memoria principal ?i ncrcarea proceselor n memoria principal. Alocarea spaiului de swap:
-Dispozitivul de swap este un dispozitiv de tip bloc ntr-o seciune configurabil a discului. Pe ct vreme nucleul aloc spaiu pentru fi?iere bloc cu bloc, n zona de swap spaiul este alocat n grupuri de blocuri contigue (swapping-ul se face pe blocuri de 1K). Alocarea spaiului pe dispozitivul de swap este tranzitorie, depinznd de modul de planificare a proceselor. Un proces care rezid pe dispozitivul de swap va migra, n cele din urm, napoi n memoria principal, elibernd spaiul pe care l-a ocupat n zona de swap.
Nucleul pstreaz evidena spaiului liber pentru sistemele de fi?ier.e ntr-o list nlnuit de blocuri libere, accesibil din superblocul sistemului de fi?iere, iar spaiul liber pentru dispozitivul de swap este reinut ntr-o tabel n memoria intern denumit map. Map-urile permit o alocare tip first-fit (prima potrivire) a blocurilor contigue de resurs.
-Map este o tabel n care fiecare intrare const ntr-o adres a unei resurse alocabile ?i numrul corespunztor de uniti de resurs disponibile; nucleul interpreteaz adresa ?i unitile n concordan cu tipul tabelei map. Iniial, map conine o intrare care indic adresa ?i numrul total de resurse. Map-ul reine numai entitile libere (evidena golurilor).Deoarece nucleul aloc ?i elibereaz resurse, acesta actualizeaz ?i tabela map astfel nct aceasta continu s conin informaii corecte despre resursele libere.


b.Alocarea spaю.de.swap

--algoritm malloc / * algoritm pentru alocarea spaiului din tabela map * /
^intrri :^ ( 1 ) adresa map / * indic ce tabel map se folose?te * /
^ ( 2 ) numrul necesitat de uniti
^ie?iri : adresa ,n caz de succes
0 ,altfel
^for ( fiecare intrare a map )
^if ( intrarea curent din map se potrive?te cu numrul necesitat de uniti )
^if ( numrul necesitat de uniti = = numrul de uniti al intrrii )
?terge intrarea din map ;
^else
^ ajusteaz adresa de nceput a intrrii ;
^ return ( 0 ) ;
--Nucleul caut n tabela map prima intrare care conine spaiu suficient pentru cererea fcut. Dac cererea consum toate resursele intrrii din map, nucleul ?terge intrarea din tabel ?i comprim tabela n mod corespunztor. Dac cererea este mai mic dect numrul de uniti al intrrii din tabel, nucleul ajusteaz cmpurile de adres ?i numr de uniti ale intrrii n concordan cu cantitatea de resurse alocate. Cnd elibereaz resursele, nucleul gse?te poziia corect in tabel prin intermediul adresei. Exist trei cazuri posibile : 1.Resursele eliberate acoper complet un gol n tabel: ele sunt contigue cu intrrile ale cror adrese le-ar precede ?i le-ar urma imediat n tabel. n acest caz nucleul combin noile resurse eliberate ?i intrrile existente ( dou ) ntr-o singur intrare n tabel. 2.Resursele eliberate acoper parial un gol n tabela map. Dac adresele resurselor eliberate sunt contigue cu intrarea care le-ar precede sau cu intrarea care le-ar urma imediat n tabel (dar nu cu amndou) , atunci nucleul ajusteaz cmpurile de adres ?i numr de uniti pentru intrarea respectiv , innd cont de cantitatea de resurse eliberat. Numrul intrrilor din tabela map rmne acela?i. 3.Resursele eliberate acoper parial un gol din map dar nu sunt contigue cu nici o resurs din map. Nucleul creaz o nou intrare n map ?i o insereaz n poziia corespunztoare.


a.Evacuarea proces

Nucleul evacueaz un proces dac are nevoie de spaiu n memorie, aceast necesitate aprnd n unul din urmtoarele cazuri :
1. Apelul sistem fork trebuie s aloce spaiu pentru un proces fiu;
2. Apelul sistem brk mreste dimensiunea unui proces;
3. Un proces se mre?te prin cre?terea natural a stivei sale;
4. Kernel-ul dore?te s elibereze spaiu n memorie pentru procese pe care le-a scos anterior din memorie n spaiul de swap ?i pe care acum trebuie s le readuc n memorie.
Cazul lui fork iese din discuie deoarece este singurul caz n care memoria intern ocupat anterior de ctre proces nu este abandonat.
Cnd nucleul decide c un proces poate fi ales pentru evacuarea din memoria principal, el decrementeaz contorul de referin al fiecarei regiuni a procesului ?i evacueaz regiunea dac contorul a ajuns la 0. Nucleul aloc spaiu pe un dispozitiv (zona) de evacuare ?i blocheaz procesul n memorie (pentru cazurile 1-3), mpiedicnd swapper-ul de a-l evacua ct timp se deruleaz operaia curent de evacuare. Nucleul salveaz adresa de evacuare a regiunii n intrarea din Region Table.
Nucleul transfer maximum de date posibile n fiecare operaie I/O direct ntre zona de swap ?i spaiul de adrese al utilizatorului evitnd memoria cache. Dac hardware-ul nu poate transfera mai multe pagini ntr-o operaie, software-ul nucleului trebuie s transfere succesiv cte o pagin. Rata de transfer a datelor ?i mecanismul su depind, printre ali factori, ?i de capacitatea controlerului de disc si de implementarea gestiunii memoriei. De exemplu, dac memoria este organizat pe pagini, datele care trebuiesc evacuate este posibil s nu fie contigue n memoria fizic. Nucleul trebuie s obin adresele de pagin ale datelor de evacuat iar driverul de disc poate folosi mulimea adreselor de pagin pentru a seta I/O. Swapper-ul a?teapt terminarea fiecarei operaii de I/O nainte de a evacua alte date.


b.Evacuarea proces

Nu este necesar ca nucleul s scrie ntreg spaiul virtual de adrese al unui proces n zona de evacuare. n schimb, el copiaz memoria fizic asigurat unui proces n spaiul alocat pe dispozitivul de swap, ignornd adresele virtuale neasigurate. Cnd nucleul ncarc napoi n memorie procesul, el cunoa?te tabela adreselor virtuale a procesului, astfel nct reasigur procesul la adresele virtuale corespunztoare. Teoretic, tot spaiul de memorie ocupat de un proces, inclusiv uarea ?i stiva nucleului, poate fi ales s fie evacuat, de?i nucleul poate s blocheze temporar o zon de memorie ct timp o operaie este n desf?urare. Totu?i, n mod practic, implementrile nucleului nu evacueaz uarea dac aceasta conine tabelele de translatare a adreselor pentru proces. Implementarea stabile?te de asemenea, dac un proces se poate autoevalua sau dac el trebuie s cear altui proces s l evacueze.
Dac un proces necesit mai mult memorie fizic dect i este alocat n mod curent, ori ca rezultat al cre?terii stivei utilizatorului, ori ca rezultat al invocrii apelului sistem brk, nucleul execut un swap extins al procesului. El rezerv spaiu suficient n zona de swap pentru a include spaiul de memorie al procesului, inclusiv noul spaiu necesitat.


a.reincarcarea proceselor

Procesul 0, swapper-ul, este singurul proces care ncarc procese n memorie din zonele de swap. La sfr?itul iniializarii sistemului, swapper-ul intr ntr-o bucl infinit, n care singura sa sarcin este s fac ncrcarea/evacuarea proceselor. El ncearc s ncarce procese din zona de swap ?i evacueaz procese dac este nevoie de spaiu n memoria principal. Dac nu are nici o sarcin de rezolvat, swapper-ul se pune n a?teptare(de exemplu, dac nu exist procese care pot fi alese pentru a fi ncrcate) sau dac este incapabil s fac altceva (nu exist procese care pot fi alese pentru a fi evacuate); nucleul l treze?te periodic, a?a cum vom vedea n continuare.Nucleul planific execuia; swapper-ul se execut numai n modul kernel. Swapper-ul nu face apeluri de funcii sistem dar utilizeaz funcii interne nucleului pentru a executa transferul.Handler-ul (rutina de tratare) de ceas msoar timpul ct fiecare proces a stat n memoria intern sau a fost evacuat. Cnd swapper-ul este trezit pentru a ncrca procese, el verific toate procesele care sunt n starea "ready-to-run" evacuate ?i selecteaz pe acela care a stat cel mai mult timp evacuat.
Dac este destul memorie liber disponibil, swapper-ul ncarc procesul n memorie, executnd operaiile inverse evacurii: aloc memorie fizic, cite?te procesul din zona de swap ?i elibereaz spaiul de swap.
Dac swapper-ul a terminat cu succes ncrcarea unui proces, el caut un alt proces n starea "ready to run" pentru a-l ncrca n memorie si repet procedura descris mai nainte. Poate aprea, n final, una din urmtoarele situaii:
-nu exist procese n starea "ready to run" pe dispozitivul de swap: swapper-ul trece n starea de a?teptare pn cnd l treze?te un proces din zona de swap sau pn cnd nucleul evacueaz un proces care este n starea "ready to run".
-swapper-ul gse?te un proces potrivit pentru a fi ncrcat, dar sistemul nu contine memorie suficient: swapper-ul ncearc s evacueze un alt proces, ?i, dac reu?e?te, restarteaz algoritmul de ncrcare, cutnd un proces pentru a-l ncrca n memorie.


b.reincarcarea proces

Dac swapper-ul nu gse?te nici un proces de evacuat ?i dac nici unul dintre procesele care trebuiesc ncrcate nu au stat evacuate cel puin 2 secunde, atunci swapper-ul se pune n a?teptare pe evenimentul: dore?te s ncarce un proces n memorie dar nu are loc suficient. Ceasul va trezi swapper-ul la fiecare o secund. Nucleul treze?te de asemenea swapper-ul dac un alt proces intr n starea de a?teptare, devenind astfel mai potrivit de a fi evacuat dect procesele examinate anterior de ctre swapp-er. Dac swapper-ul evacueaz un proces sau dac se pune n a?teptare pentru c nu poate evacua un proces, el ?i va relua execuia cu nceputul algoritmului, ncercnd s ncarce un proces.
--Algoritmul swapper:
^algoritm swapper /*ncarc procesele executate, evacueaz alte procese pentru a face loc*/
^intrare: nici una;
^ie?ire: nici una;
{
bucl:
^for (toate procesele evacuate care sunt "ready to run")
^alege procesul care a stat cel mai mult evacuat;
^if (nu exist asemenea proces)
{
^sleep(eveniment: trebuie s ncarce);
^salt la bucl;
}
^if (este loc suficient pentru proces n memoria principal)
{
^ncarc procesul;
^salt la bucl;
}
/*bucla2 */
^for (toate procesele ncrcate n memoria principal, care nu sunt zombie ?i nu sunt
blocate n memorie)
{
^if (exist un proces n a?teptare )
alege procesul pentru care valoarea prioritate+timp de reziden este cea mai
mare;
^else (nu sunt procese care a?teapt )
^alege procesul pentru care valoarea timp de reziden+nice este cea mai mare:
}
^if (procesul ales nu este n a?teptare sau cerinele de reziden nu sunt satisfcute )
^sleep(eveniment : trebuie s incarce un proces);
^else
^evacueaz procesul;
^salt la bucl; /*goto bucl 2 */


c.reincarcarea proces

Algoritmul pentru alegerea unui proces de a fi evacuat pentru a face loc n memorie are, totu?i, serioase neajunsuri. Mai nti swapper-ul evacueaz un proces bazndu-se pe prioritatea acestuia, pe timpul de reziden n memorie ?i pe valoarea nice. n al doilea rnd, dac swapper-ul se pune n a?teptare deoarece nu poate gsi memorie suficient pentru a ncrca un proces, el caut din nou un proces de ncrcat, de?i alesese unul anterior. n al treilea rnd, dac swapper-ul alege pentru evacuare un proces n starea "ready to run", este posibil ca procesul s nu se fi executat deoarece el a fost ncrcat mai nainte. Un ultim inconvenient este demn de menionat: dac swapper-ul ncearc s evacueze un proces dar nu gse?te spaiu n zona de swap, poate rezulta o blocare a sistemului dac sunt ndeplinite urmtoarele patru condiii:
-toate procesele din memoria principal sunt inactive (sunt n stare de a?teptare);
-toate procesele n starea "ready to run" sunt evacuate;
-nu exist loc n zona de swap pentru noi procese;
-nu exist loc n memoria principal pentru procesele de ncrcat.


a.Structuri de date p-ru demand paging

Pentru execuie nu trebuie ca ntregul proces s fie rezident n memorie, ci nucleul ncarc pagini la cerere cnd procesul refer paginile respective. Avantajul politicii de paginare la cerere este acela c permite o mai mare flexibilitate n maparea spaiului de adrese virtuale al procesului n memoria fizic a ma?inii, de obicei permind ca mrimea procesului s fie mai mare dect memoria fizic disponibil; de asemenea, permite accesarea simultan a mai multor procese n memoria principal. Avantajul swapping-ului este acela c este mai u?or de implementat.
Sistemele cu paginare la cerere elimin limitarea mrimii proceselor impuse de mrimea memoriei fizice disponibile din sistem.
Procesele au tendina s execute instruciuni n pri mici ale spaiului destinat textului, astfel nct programul blocheaz si apeleaz substantive n mod frecvent. Acest principiu este cunoscut sub denumirea de principiul "localitii". Denning a formalizat noiunea de set de lucru al unui proces, care reprezint setul de pagini pe care procesul le-a referit n ultimele sale referiri de memorie numrul n este denumit fereastra setului de lucru. Cnd un proces adreseaz o pagin care nu este n setul de lucru apare o ntrerupere de pagin; pentru tratarea ntreruperii, nucleul actualizeaz setul de lucru, ncrcnd n acesta alte pagini de pe un dispozitiv secundar dac este necesar. Se merge pe principiul c paginile cele mai vechi se elimin ?i se aduc pagini noi. Principiul LRU (Last Recently Used) se transform n NRU (Not Recently Used).
Cnd un proces acceseaz o pagin care nu este n setul de lucru, apare o ntrerupere de pagin (validity page fault). Nucleul suspend execuia procesului pn cnd cite?te pagina n memorie ?i o face accesibil pentru proces. Cnd pagina este ncrcat n memorie, procesul restarteaz instruciunea pe care o execut atunci cnd a aprut ntreruperea de pagin. Astfel, implementarea unui subsistem de paginare are dou pri: evacuarea paginilor folosite mai puin pe un dispozitiv de swap (ntr-o zon de swap) ?i tratarea ntreruperilor de pagin.


b.Structuri de date p-ru demand paging

Nucleul conine 4 structuri de date majore pentru a asigura funciile de gestiune a memoriei la nivel sczut ?i paginarea la cerere: intrrile din tabela de pagin (page table entries), descriptorii de bloc disc, tabela pfdata (page frame data table) ?i tabela de folosire a spaiului de swap (swap use table). Nucleul aloc spaiu pentru tabela pfdata o singur dat pe durata de via a sistemului, dar pentru celelalte structuri aloc pagini de memorie dinamic. O regiune conine tabele de pagin pentru a accesa memoria fizic. Fiecare intrare a unei tabele de pagin conine adresa fizic a paginii, biii de protecie care indic dac procesul poate citi, scrie sau executa pagina ?i urmtoarele cmpuri de bii pentru asigurarea paginrii la cerere:
*valid ? validare (Nucleul modific bitul valid pentru a indica legalitatea coninutului unei pagini, dar aceasta nu nseamn c, atunci cnd acest bit indic ilegalitatea coninutului unei pagini, este ilegal ?i referirea paginii respective);
*reference - referin (indic dac un proces a referit recent o pagin);
*modify ? modificare (indic dac un proces a modificat recent coninutul unei pagini);
*copy on write - copie la cerere (utilizat n apelul sistem fork, indic faptul c nucleul
trebuie s creeze o nou copie a paginii atunci cnd procesul i modific coninutul);
*age ? timp (nucleul manipuleaz setul de bii age pentru a indica ct timp o pagin a
fcut parte din setul de lucru al unui proces).
Fiecare intrare n tabela de pagin este asociat cu un descriptor de bloc disc, care descrie copia pe disc a paginii virtuale. Coninutul unei pagini virtuale se poate gsi ntr-un anumit bloc din zona de swap, ntr-un fi?ier executabil sau nu se poate gsi pe un dispozitiv de swap. Dac pagina se gse?te ntr-o zon de swap, descriptorul de bloc disc conine numrul dispozitivului logic ?i numrul blocului care conine pagina respectiv. Dac pagina este coninut ntr-un fi?ier executabil, descriptorul de bloc disc conine numrul blocului logic din fi?ier care conine pagina;


a.Fork оntr-un sist.de paginare

Nucleul duplic fiecare regiune a procesului-printe pe timpul apelului sistem fork ?i le ata?eaz procesului-fiu. De obicei, nucleul sistemului face o copie fizic a spaiului de adres al printelui, ceea ce reprezint o operaie greoaie n majoritatea cazurilor, deoarece procesele apeleaz adesea exec imediat dup apelul lui fork ?i elibereaz imediat memoria pe care tocmai a copiat-o.
La sistemul de paginare al System V, nucleul evit copierea paginii prin manipularea tabelelor de regiuni, intrrilor din tabelele de pagin ?i intrrilor din pfdata: pur ?i simplu este incrementat contorul de referin al regiunilor folosite n comun.
Pentru regiunile private, ca cele de date ?i stiva, acesta aloc totu?i o nou intrare n tabela de regiuni ?i o nou tabel de pagin iar apoi examineaz fiecare intrare din tabela de pagin a printelui: dac este o pagin valid, incrementeaz contorul de referin n intrarea din pfdata, indicnd numrul de procese care folosesc n comun pagina prin intermediul unor regiuni diferite. Dac pagina exist pe dispozitivul de swap, incrementeaz contorul de referin al tabelei swap-use pentru pagina respectiv.
Pagina poate fi acum referit din ambele regiuni care folosesc n comun pagina pn ce un proces scrie n ea. Nucleul copiaz apoi pagina astfel inct fiecare regiune are propria versiune. Pentru aceasta, nucleul seteaz bitul "copy on write" pentru fiecare intrare din tabela de pagin din regiunile private ale procesului-printe ?i procesului-fiu pe parcursul apelului sistem fork.
Pagin ntr-un proces care face fork:
--Implementarea apelului sistem fork n sistemul BSD face o copie fizic a paginilor procesului-printe. Admind mbuntirea performanelor prin faptul c nu s-ar realiza, totu?i, sistemul BSD conine ?i apelul sistem vfork, care presupune c orice proces-fiu va invoca imediat apelul sistem exec la ntoarcerea din apelul sistem vfork nu copiaz tabele de pagin, deci este mai rapid dect apelul sistem fork din implementarea System V.


b.Fork оntr-un sist.de paginare

^int global;
^main ( )
{
^int local;
^local=1;
^if ( v fork ( ) ==0 )
{
/*copi/*/
^global=2; /*scrie n zona de date a printelui*/
^local=3; /*scrie n stiva printelui*/
^exit ( );
}
^print f ("global [procent]d local [procent]d/n", global, local );
} .
Dup apelul sistem vfork, procesul-fiu nu face exec, dar reseteaz variabilele global ?i local ?i iese. Sistemul garanteaz c procesul printe este suspendat pn cnd procesul fiu apeleaz exec sau rese. Cnd procesul printe reia n final execuia, gse?te valorile celor dou variabile diferite de cele dinainte de vfork. Pot aprea efecte mai spectaculoase dac procesul-fiu revine din funcia care a apelat vfork.


a.Exec оntr-un sis cu paginare

Cnd un proces apeleaz funcia sistem exec, nucleul cite?te fi?ierul executabil n memorie din sistemul de fi?iere. ntr-un sistem cu paginare la cerere, fi?ierul executabil poate fi totu?i prea mare ca s ncap n memoria principal. De aceea, nucleul nu preasigneaz memorie fi?ierului executabil, dar l ntrerupe,asignndu-i ct memorie are nevoie.Acesta asigneaz mai nti tabele de pagin ?i descriptori de bloc disc pentru fi?ierul executabil, marcnd intrrile n tabela de pagin "demand fill" (pentru date non-BSS) sau "demand zero" (pentru date BSS ). Urmnd o variant a algoritmului read pentru citirea fi?ierului n memorie, procesul creaz o ntrerupere de validare la citirea fiecrei pagini.
Rutina de tratare a ntreruperii reine dac pagina este "demand fill", nsemnnd c imediat va fi rescris coninutul su cu coninutul fi?ierului executabil, astfel nct nu este necesar ?tergerea sa, sau dac este "demand zero", situaie n care coninutul su va fi ?ters.
Aceast schem prezint ?i unele dificulti. n primul rnd, un proces produce o ntrerupere de pagin cnd cite?te fiecare pagin a fi?ierului executabil, chiar dac nu va trebui s acceseze niciodat pagina respectiv. n al doilea rnd, swapper-ul trebuie s evacueze pagini din memorie nainte de terminarea apelului sistem exec, rezultnd n plus dou operaii de swap per pagin dac procesul necesit rapid pagina respectiv. Pentru a face exec mai eficient, nucleul poate solicita pagini direct din fi?ierul executabil. Totu?i, folosirea algoritmilor standard pentru accesarea unui fi?ier ar face prea costisitoare paginarea la cerere prin blocurile de indirectare din cauza acceselor multiple la bufferele cache necesare pentru citirea unui bloc. Nucleul seteaz diferiii parametri de I/O in uarea pe timpul apelului sistem read. Dac un proces provoac o ntrerupere de pagin pe timpul unui apel sistem read, cnd ncearc s copieze datele n spaiul user, acesta dore?te s rescrie aceste cmpuri n uarea pentru a citi pagina din sistemul de fi?iere.


b.Exec intr-un sis cu paginare

De aici, nucleul nu poate folosi algoritmii obi?nuii pentru ntreruperile de pagin. Algoritmii sunt reentrani n cazurile obi?nuite deoarece fiecare proces are uarea proprie iar sistemul nu poate executa simultan mai multe apeluri sistem.
Pentru a ncrca o pagin direct din fi?ierul excutabil, nucleul gse?te toate numerele blocurilor disc ale fi?ierului executabil cnd face exec ?i ata?eaz lista lor la inod-ul fi?ierului. Cnd seteaz tabelele de pagin pentru un astfel de fi?ier executabil, nucleul marcheaz descriptorul de bloc disc cu numrul blocului logic (pornind de la blocul 0 din fi?ier ) care conine pagina; rutina de tratare a ntreruperii de validare folose?te aceast informaie mai trziu pentru a ncrca pagina din fi?ier.
Figura de mai jos prezint un aranjament tipic, n care descriptorul de bloc disc indic faptul c pagina se gse?te la offsetul 84 al blocurilor logice din fi?ier. Nucleul urmre?te pointerul de la regiune ctre inode ?i gse?te numrul blocului disc corespunztor (279).


a.Procesul page stealer

Procesul page stealer este un proces al nucleului care evacueaz din memorie paginile care nu fac parte mult timp din setul de lucru al unui proces. Nucleul creaz procesul page stealer pe timpul initializrii sistemului ?i-l apeleaz pe toat durata de via a sistemului, la nevoie. El examineaz fiecare regiune activ, care nu este blocat, trecnd peste regiunile blocate, deoarece se a?teapt verificarea lor n urmtorul pas ?i incrementeaz apoi cmpul age al tuturor paginilor valide. Nucleul blocheaz o regiune cnd un proces produce o ntrerupere a unei pagini din regiune, astfel nct procesul page stealer nu poate evacua pagina care a generat ntreruperea.
Pentru o pagin din memorie exist dou stri: pagina a fost ncrcat recent ?i nu este nc potrivit pentru swapping, sau pagina este posibil a fi evacuat ?i este disponibil pentru reasigurarea la alte apgini virtuale. Prima stare arat c un proces a referit recent pagina, ea fiind deci n setul su de lucru. Unele ma?ini seteaz bitul reference cnd se refer o pagin, ns metodele software pot suplini lipsa acestei faciliti hardware. Procesul page stealer pune pe 0 bitul reference al paginilkor referite ?i reine cte examinri au fost fcute de la ultima referire a paginii. Deci prima stare const in cteva substri corespunztoare numrului de treceri pe care le face procesul page stealer pn cnd pagina devine posibil a fi evacuat (vezi figura 9.18). Cnd acest numr dep?e?te o valoare de prag, nucleul trece pagina n cea de-a doua stare, pregtit pentru evacuare. Perioada maxim care poate trece pn cnd pagina devine potrivit pentru a fi evacuat este dependent de implementare, ?i este limitat de numrul de bii disponibil n intrarea din pagina din tabela de pagin.
Dac dou sau mai multe procese folosesc n comun o regiune, ele actualizeaz biii de referin ai aceluiasi set de intrri din tabela de pagin. n acest fel, paginile pot fi pri ale seturilor de lucru ale mai multor procese, dar acest fapt nu are importan pentru procesele page stealer.


b.Procesul page stealer

Nucleul treze?te procesul page stealer atunci cnd memoria liber disponibil n sistem ajunge la un nivel minim, iar acesta evacueaz pagini pn cnd memoria liber disponibil n sistem ajunge la un nivel stabilit.
Cnd page stealer decide s evacueze o pagin, acesta verific dac o pagin exist o copie a paginii pe dispozitivul de swap. Exist trei posibiliti:
1. Dac nu exist nici o copie a paginii pe dispozitivul de swap, nucleul planific pagina pentru o evacuare: page stealer pune pagina ntr-o list a paginilor care trebuiesc evacuate ?i continu; din punct de vedere logic, evacuarea este terminat. Cnd lista paginilor de evacuat atinge o limit (dependent de prioritile controlerului de disc), nucleul scrie paginile pe dispozitivul de swap.
2. Dac exist deja o copie a paginii pe dispozitivul de swap ?i nici un proces nu i-a modificat coninutul n memorie (n intrarea din tabela de pagin bitul modify este ?ters), nucleul ?terge bitul valid al intrrii din tabela de pagin, decrementeaz contorul de referin la intrrii din tabela pfdata ?i pune intrarea ntr-o list de intrri libere n vederea unei alocri viitoare.
3. Dac exist o copie a paginii pe dispozitivul de swap, dar un proces a modificat coninutul paginii n memorie, nucleul planific pagina pentru a fi evacuat, ca mai sus, ?i elibereaz spaiul pe care pagina l ocup pe dispozitivul de swap.
n concluzie, exist dou faze n evacuarea unei pagini din memorie. n prima faz, page stealerul gse?te pagina ce poate fi evacuat ?i plaseaz numrul paginii n lista de pagini care trebuie evacuate. n cea de-a doua faz, nucleul copiaz pagina pe dispozitivul de swap convenit, pune pe "0" bitul valid n intarea din tabela de pagin, decrementeaz contorul de referin al intrrii din pfdata ?i pune intrarea din pfdata la sfr?itul listei de intrri libere dac din memorie este valid pn cnd pagina este reasigurat.


a.Comunicarea intre procese prin mesaje

Mecanismele de comunicare ntre procese permit acestora s schimbe date ntre ele ?i s-?i sincronizeze execuia.
Pachetul System V IPC din UNIX se compune din trei mecanisme. Mesajele permit proceselor s trimit fluxuri de date formatate ctre alte procese, memoria comun permite proceselor s foloseasc n comun pri din spaiul lor virtual de adrese, iar semafoarele permit proceselor s-?i sincronizeze execuia.
Implementate n mod unitar, aceste mecanisme au o serie de proprieti comune.
-Fiecare mecanism conine o tabel ale crei intrri descriu toate instanele acelui mecanism.
-Fiecare intrare din tabel conine o cheie numeric (key), care reprezint numele su desemnat de utilizator.
-Fiecare mecanism dispune de un apel sistem de tip "get" destinat crerii unei noi intrri, sau obinerii uneia deja existente, parametrii acestor apeluri incluznd o cheie ?i un indicator.
-n cadrul fiecrui mecanism IPC (de comunicare ntre procese), pentru determinarea indexului din tabela structurilor de date, nucleul utilizeaz urmtoarea formul bazat pe valoarea descriptorului index = descriptor modulo (numrul de intrri din tabel)
-Fiecare intrare IPC dispune de o structur de date pentru stocarea permisiunilor, aceasta incluznd indicatorul de utilizator ?i indicatorul de grup ale procesului care a creat intrarea, un indicator de utilizator ?i unul de grup fixai printr-un apel sistem de tip "control" ?i un set de permisiuni de citire-scriere-execuie (read-write-execute) separat pentru utilizator, grup ?i ceilali (user, group, others), similare permisiunilor de acces la fi?iere.
-Fiecare intrare conine ?i alte informaii de stare, cum ar fi PID-ul ultimului proces care a actualizat intrarea (a trimis ori a primit un mesaj, a ata?at o zon comun de memorie), precum ?i momentul ultimului acces sau al ultimei actualizri a intrrii.
-Fiecare mecanism dispune de un apel sistem de tip "control" prin care se primesc informaii despre starea unei intrri, se seteaz starea unei intrri, sau se elibereaz o intrare.


b.Comunic.intre proces.prin msg

Există patru apeluri sistem pentru comunicarea prin mesaje.
^-msgget întoarce (sau crează) un descriptor de mesaje, care desemnează o coadă de mesaje, utilizat ca parametru în celelalte apeluri sistem.
^-msgctl dispune de opţiuni de setare sau returnare a valorilor parametrilor asociaţi unui descriptor de mesaje, precum şi de o opţiune de eliberare a descriptorilor.
^-msgsnd trimite un mesaj
^-msgrcv recepţionează un mesaj.
Sintaxa apelului sistem msgget este următoarea
^-msgqid = msgget(key, flag)
unde:
-msgqid este descriptorul returnat de apelul sistem;
-key reprezintă cheia ataşată;
-flag (indicator) indică acţiunea de creare şi drepturile de acces.
Nucleul memorează mesajele sub forma unei liste înlănţuite (queue - coadă de mesaje) căreia îi corespunde un descriptor, şi foloseşte un descriptor de coadă de mesaje -msgqid- ca index într-un tabelă de antete de cozi de mesaje. În plus faţă de câmpul de permisiuni generale de comunicare între procese, menţionat mai sus, structura de date asociată unei cozi de mesaje conţine următoarele câmpuri
-Pointeri către primul şi către ultimul mesaj din lista înlănţuită.
-Numărul de mesaje şi numărul total de octeţi de date din lista înlănţuită.
-Numărul maxim de octeţi de date pe care îi poate conţine lista înlănţuită.
-Identificatorii ultimelor procese care au trimis şi, respectiv recepţionat, mesaje.
-Momentele de timp ale ultimelor operaţii msgsnd, msgrcv şi msgctl.
Atunci când un utilizator invocă apelul sistem msgget pentru a crea un nou descriptor, nucleul caută în tabela de cozi de mesaje pentru a vedea dacă există vreuna care să corespundă specificaţiei dată prin cheie. Dacă nu există nici o intrare care să corespundă cheii, nucleul alocă o nouă structură de date de tip coadă de mesaje, o iniţializează şi returnează utilizatorului un identificator pentru această nouă structură. Dacă există deja o astfel de coadă de mesaje, atunci nucleul verifică drepturile de acces şi revine din apelul sistem.


c.Comunic.intr

--algoritmul msgsnd /* trimiterea unui mesaj */
^intrri (1)descriptorul cozii de mesaje
(2)adresa structurii de date pentru mesaje
(3)lungimea mesajului
(4)indicatori /* flags */
ie?iri numrul de octeti efectiv trimisi
{
verifica valabilitatea descriptorului si a drepturilor de acces;
while(nu exista spatiu de memorie suficient pt. stocarea mesajului)
{
if(flag-ul specifica faptul ca procesul nu asteapta)
return;
sleep(eveniment: exista spatiu suficient pt. stocarea mesajului)
}
aloca antet de mesaj;
copiaza mesajul propriu-zis din spatiul user in spatiul nucleu;
actualizeaza structura de date:
-insereaza in lista noul antet de mesaj;
-initializeaza pointerul din antetul de mesaj catre zona de date;
-inscrie valoarea:-contorului de octeti;
-momentelor de timp;
-identificatorului procesului transmitator;
^trezeste toate procesele care asteapta sa citeasca mesaje din coada;
}
Structurile de date pentru comunicarea prin mesaje:
^Procesele primesc mesaje cu ajutorul apelului sistem msgrcv, care are urmtoarea sintax count = msgrcv(id, msg, maxcount, type, flag)
unde:
-id este descriptorul de mesaj;
-msg este adresa unei structuri de date a utilizatorului n care se va scrie mesajul primit;
-maxcount este dimensiunea ?irului de caractere din structura de date msg;
-type specific tipul de mesaj pe care utilizatorul dore?te s-l citeasc;
-flag precizeaz ce trebuie s fac nucleul dac nu exist mesaje n coada de mesaje.
Valoarea ntoars de apel, count, reprezint numrul de octei de date efectiv primii de ctre utilizator.


d.Comunic.intr

^algoritmul msgrcv /* receptionare mesaj */
^intrri: (1)descriptorul de mesaj
(2)adresa vectorului de date pentru mesajele care sosesc
(3)dimensiunea vectorului de date
(4)tipul de mesaj cerut
(5)indicatori (flag-uri)
^ie?iri: numarul de octeti din mesajul returnat
{
^verifica permisiunile;
^ciclu:
verifica validitatea descriptorului de mesaj;
/* gaseste mesajul care va fi returnat catre utilizator */
^if (tipul de mesaj cerut==0)
se considera primul mesaj din coada de mesaje;
^else
^if (tipul de mesaj cerut > 0)
se considera primul mesaj care are tipul cerut, din coada de mesaje;
^else /* valoarea tipului mesajului este negativa */
se considera primul mesaj dintre cele care au valoarea tipului cea mai mica din coada de mesaje, astfel incit aceasta valoare sa fie mai mica sau egala, in modul, cu valoarea tipului cerut;
^if (exista un mesaj)
{
corecteaza dimensiunea mesajului sau returneaza eroare daca
dimensiunea data de utilizator este prea mica;
copiaza tipul si textul mesajului din spatiul nucleu in spatiul user;
sterge mesajul din coada de mesaje;
^return;
}
/* nu exista nici un mesaj */
^if (flag-urile precizeaza ca procesul sa nu treaca in sleep)
^return (cu eroare);
^sleep(eveniment:sosirea unui mesaj in coada de mesaje);
^goto ciclu;
} .
Un proces poate inspecta starea unui descriptor de mesaj, i poate stabili valoarea ?i poate ?terge un descriptor de mesaj cu ajutorul apelului sistem msgctl. Sintaxa apelului este:
_msgctl(id, cmd, mstatbuf)
unde:
-id identific descriptorul de mesaj;
-cmd precizeaz tipul comenzii;
-mstatbuf reprezint adresa structurii de date utilizator care va conine parametrii de control sau rezultatele unei interogri.


a.Comunic intre.proc.prin.zone de mem.partaj

Procesele pot comunica direct unele cu celelalte prin folosirea n comun a unor pri din spaiul lor virtual de memorie ?i prin scrierea ?i citirea datelor memorate n memoria comun.
Apelurile sistem pentru manipularea zonelor de memorie comun sunt similare apelurilor sistem dedicate comunicaiei prin mesaje:
-apelul sistem shmget creaz o nou zon (regiune) comun de memorie sau ntoarce una existent;
-apelul sistem shmat ata?eaz la nivel logic o regiune de memorie la spaiul virtual de adrese al unui proces;
-apelul sistem shmdt deta?eaz o regiune de spaiul virtual de adrese al unui proces;
-apelul sistem shmctl manipuleaz diver?i parametri asociai zonelor comune de memorie.
Procesele scriu n -?i citesc date din- memoria comun utiliznd acelea?i instruciuni ma?in pe care le utilizeaz ?i la scrierea ori citirea din memoria obi?nuit. Dup ata?area unei zone de memorie comun, aceasta devine parte a spaiului virtual de adrese al procesului, accesibil n acela?i mod n care sunt accesibile ?i celelalte adrese virtuale nu sunt necesare apeluri sistem pentru scrierea sau citirea datelor din zona de memorie comun.
Sintaxa apelului sistem shmget este:
shmid = shmget(key, size, flag)
unde size reprezint numrul de octei din regiunea de memorie.
Nucleul caut cheia key n tabela cu zonele comune de memorie dac gse?te n aceast tabel o intrare care s corespund cheii ?i dac drepturile de acces sunt validate, atunci ntoarce descriptorul acelei intrri din tabel. Dac nu gse?te o intrare creia s-i corespund cheia key, ?i dac utilizatorul a dat indicatorului flag valoarea IPC_CREAT, n scopul crerii unei noi regiuni comune de memorie, atunci nucleul verific dac valoarea parametrului size se situeaz ntre valorile limit minim ?i maxim de memorie ale sistemului ?i apoi aloc o structur de date pentru o regiune de memorie, utiliznd algoritmul allocreg.


b,Comunic:

--algoritmul shmat /* atasare zona comuna de memorie */
^intrri: (1)descriptorul regiunii comune de memorie
(2)adresa virtuala la care sa se faca atasarea
(3)indicatori (flags)
^ie?iri: adresa virtuala la care s-a atasat zona comuna de memorie
{
verifica validitatea descriptorului si a drepturilor de acces;
^if (adresa virtuala specificata de utilizator [nu este egal] 0)
{
trunchiaza adresa virtuala conform specificatiilor indicatorilor;
verifica validitatea adresei virtuale si a dimensiunii regiunii;
}
^else /*utilizatorul doreste ca nucleul sa gaseasca o adresa*/
^nucleul alege o adresa virtuala (daca nu este nici una la dispozitie, atunci eroare);
ataseaza regiunea la spatiul de adrese al procesului(alg. attachreg)
^if (regiunea este atasata pentru prima data)
aloca tabele de pagini, memorie pentru regiune (alg. Growreg);
^return(adresa virtuala la care s-a facut atasarea);
}
Zona comun de memorie nu trebuie s se ntind peste alte regiuni din cadrul spaiului virtual de adrese al procesului, deci att amplasarea ct ?i dimensiunea ei trebuie alese judicios pentru ca, n cazul unor modificri ulterioare de dimensiune, alte regiuni s nu se extind peste zona comun de memorie. De exemplu, un proces poate mri dimensiunea regiunii sale de date prin apelul sistem brk, noua regiune de date fiind virtual contigu vechii regiuni de date n consecin nucleul nu trebuie s plaseze zona de memorie comun n apropierea regiunii de date. Similar, nucleul nu trebuie s plaseze zona de memorie comun n apropierea vrfului stivei, pentru a preveni astfel fenomenul de cre?tere a stivei n interiorul zonei de memorie comun. De exemplu, dac stiva cre?te ctre valorile mari ale adreselor, cel mai bun loc de amplasare a zonei de memorie comun ar putea fi imediat naintea adresei de nceput a regiunii de stiv.
Nucleul verific dac regiunea de memorie comun ncape n spaiul de adrese al procesului ?i o ata?eaz, utiliznd algoritmul attachreg.


c,Comunic,:

Dac procesul apelant este primul proces care ata?eaz regiunea respectiv, atunci nucleul aloc tabelele necesare, utiliznd algoritmul growreg, corecteaz valoarea coninut n cmpul last time attached al intrrii corespunztoare din tabela regiunilor de memorie comun, ?i ntoarce adresa virtual la care a ata?at regiunea respectiv.
Un proces deta?eaz o regiune de memorie comun din spaiul su virtual de adrese cu ajutorul apelului sistem shmdt. Sintaxa apelului este:
-shmdt(addr)
unde addr reprezint adresa virtual ntoars de un apel shmat anterior. De?i ar prea mai logic ca apelul shmdt s primeasc drept parametru un identificator, se ntrebuineaz totu?i adresa virtual a regiunii de memorie comun pentru ca procesul s poat face distincie ntre mai multe instane ale unei regiuni de memorie comun, care sunt ata?ate la spaiul virtual de adrese al procesului, ?i pentru c identificatorul ar putea s fi fost ?ters. Nucleul caut regiunea procesului ata?at la adresa virtual indicat ?i o deta?eaz din spaiul de adrese al procesului, utiliznd algoritmul detachreg. Deoarece tabelele cu regiuni de memorie nu conin pointeri napoi ctre tabela cu regiuni de memorie comune (Shared Memory Table), nucleul caut n aceast tabel intrarea corespunztoare regiunii ?i corecteaz valoarea din cmpul care conine momentul ultimei deta?ri a regiunii.
Pentru examinarea strii ?i stabilirea valorilor parametrilor unei regiuni de memorie comun, un proces utilizeaz apelul sistem shmctl, care are urmtoarea sintax shmctl(id, cmd, shmstatbuf)
unde:
-id identific intrarea corespunztoare din tabela regiunilor de memorie comune;
-cmd precizeaz tipul operaiunii;
-shmstatbuf reprezint adresa unei structuri de date utilizator care conine informaiile de stare a intrrii n tabela regiunilor de memorie comune, atunci cnd se face interogarea asupra strii sau stabilirea valorilor de stare.


d,Comunic,:

Nucleul trateaz comenzile de interogare asupra strii ?i de schimbare a proprietarului ?i a drepturilor de acces, n mod asemntor implementrii adoptate pentru comunicarea prin mesaje. Pentru ndeprtarea rea unei regiuni de memorie comun, nucleul elibereaz intrarea corespunztoare din tabela de regiuni de memorie comune (Shared Memory Table) ?i examineaz coninutul intrrii din tebela cu regiuni de memorie (Region Table) dac nu mai exist nici un proces care s aib ata?at regiunea respectiv la spaiul su de adrese, atunci nucleul elibereaz intrarea din aceast tabel ?i toate resursele asociate, utiliznd algoritmul freereg. Dac regiunea mai este nc ata?at la vreun proces (adic valoarea contorului de referine este pozitiv), atunci nucleul ?terge valoarea indicatorului care semnalizeaz ca regiunea s nu fie eliberat la deta?area ei de la spaiul de adrese al ultimului proces. Procesele care utilizeaz regiunea de memorie comun pot continua s o fac, dar nici un alt proces nu o mai poate ata?a. Atunci cnd toate procesele au deta?at regiunea respectiv, nucleul o elibereaz.


a.Comunicarea in retea prin socket-uri

Comunicaiile prin reea au ridicat o problem sistemelor UNIX, concretizat n faptul c mesajele trebuie, n mod frecvent, s conin poriuni de date ?i de informaii de control. Segmentul de control poate conine informaii de adresare, pentru specificarea destinaiei unui mesaj. Informaia de adresare este structurat n funcie de tipul de reea ?i de protocol utilizate. Prin urmare, procesele trebuie s cunoasc tipul reelei, n ideea c utilizatorilor trebuie s le fie transparent tipul unui anume fi?ier, deoarece toate dispozitivele periferice sunt tratate ca fi?iere. Metodele tradiionale de implementare a comunicrii prin reea se bazeaz n mod consecvent ?i n mare msur pe apelul sistem ioctl pentru a preciza informaia de control, dar aceast abordare nu este generalizat la toate tipurile de reele. O consecin nedorit a acestui aspect o constituie faptul c este posibil ca programele proiectate pentru o reea s nu funcioneze pe alte reele.
mbuntirea interfeelor de reea pentru sistemele UNIX a necesitat un efort semnificativ. Implementarea sub form de fluxuri (streams) specific ultimelor variante ale System V furnizeaz un mecanism elegant de asigurare a lucrului n reea, deoarece modulele de implementare a protocoalelor pot fi combinate n mod flexibil prin includerea lor n stream-uri ?i deoarece utilizarea lor este uniform la nivel utilizator.
Pentru a furniza metode generale de comunicare ntre procese ?i pentru a permite utilizarea protocoalelor de reea sofisticate, sistemul BSD pune la dispoziie un mecanism cunoscut sub numele de socket-uri. n acest subcapitol sunt descrise unele aspecte, la nivel utilizator, ale socket-urilor. Structura acestui mecanism la nivelul nucleului, prezint trei pri nivelul socket nivelul protocol ?i nivelul dispozitiv.
Nivelul socket furnizeaz interfaa dintre apelurile sistem ?i nivelurile inferioare, nivelul protocol conine modulele de protocoale folosite pentru comunicaie (n figur, TCP ?i IP), iar nivelul dispozitiv conine driverele de care controleaz lucrul dispozitivelor de reea.


b.Comunic in retea

La configurarea sistemului se precizează combinaţiile de protocoale acceptate şi driverele, metodă ce nu este la fel de flexibilă ca şi includerea în stream-uri a modulelor. Procesele comunică după modelul client-server un proces server ascultă la un socket, unul din capetele unei linii bidirecţionale de comunicaţii, iar procesul client transmite serverului prin celălalt socket, adică celălalt capăt al liniei, care poate fi pe o altă maşină. Nucleul păsrează conexiunea internă şi direcţionează datele de la client către server.
Socket-urile care au aceleaşi proprietăţi de comunicaţie, cum ar fi convenţiile de nume şi formatele de adresă, sunt grupate în domenii (domains). Sistemul BSD 4.2 suportă domeniul sisteme UNIX de comunicare între procesele de pe aceeaşi maşină, şi domeniul Internet de comunicare între procese prin reţea utilizând protocoalele de comunicaţie DARPA (Defense Advanced Research Project Agency). Fiecare socket are un tip, şi anume circuit virtual (virtual circuit, sau stream socket, în terminologia Berkeley) sau datagramă (datagram). Un circuit virtual permite, la recepţie, o furnizare secvenţială (în ordinea emiterii) şi sigură (fără pierderi) a datelor transmise. Datagramele nu garantează, la recepţie, păstrarea ordinii de la emisie a datelor, integritatea acestora, sau neduplicarea lor, în schimb sunt mai puţin costisitoare decât circuitele virtuale, pentru că nu necesită operaţiuni de iniţializare deosebite prin urmare ele sunt utile pentru anumite tipuri de comunicaţii. Sistemul conţine un protocol implicit pentru fiecare combinaţie acceptată de tip de domain-socket. De exemplu, protocolul TCP (Transport Connect Protocol) furnizează serviciul de circuit virtual, iar protocolul UDP (User Datagram Protocol) serviciul de datagrame, în domeniul Internet.


c.Comunic in retea

Mecanismul de socket-uri conine cteva apeluri sistem:
->Apelul sistem socket stabile?te punctul final al unei de legturi de comunicaie.
^sd = socket(format, type, protocol)
unde:
-parametrul format precizeaz domeniul de comunicaie;
-type indic tipul de comunicaie prin socket (circuit virtual, sau datagram);
-protocol precizeaz un anumit protocol pentru controlul comunicaiei.
n cadrul altor apeluri sistem, procesele vor ntrebuina descriptorul de socket, sd.
->Apelul sistem close nchide socket-urile.
->Apelul sistem bind asociaz un nume unui descriptor de socket bind(sd, address, length)
unde:
-sd este descriptorul de socket;
-address este adresa unei structuri care precizeaz un indicator al domeniului ?i protocolului de comunicaie, precizate n cadrul apelului sistem socket;
-parametrul length reprezint lungimea structurii de date address fr acest parametru nucleul nu ar ?ti ct de lung este adresa, deoarece lungimea acesteia poate diferi de la un domeniu (sau protocol) la altul.
->Apelul sistem connect cere nucleului s fac o conexiune cu un socket existent connect(sd, address, length)
unde semnificaia parametrilor este aceea?i ca la apelul bind, cu deosebirea c parametrul address reprezint adresa socket-ului de destinaie care va constitui cellalt capt al liniei de comunicaie. Ambele socket-uri trebuie s foloseasc acela?i domeniu ?i protocol de comunicaie, rmnnd n sarcina nucleului iniializarea corect a legturilor de comunicaie. Dac tipul socket-ului este datagram, atunci apelul connect informeaz nucleul asupra adresei de utilizat n cadrul apelurilor send ulterioare prin socket-ul respectiv n momentul apelului nu se realizeaz nici o legtur.
->Atunci cnd un proces server accept legturile printr-un circuit virtual, nucleul trebuie s pun ntr-o coad de a?teptare cererile care sosesc, pn n momentul n care va putea s le satisfac. Apelul sistem listen precizeaz lungimea maxim a cozii de a?teptare


d.Comunic in retea

-Apelul sistem shutdown nchide o legtur cu un socket shutdown(sd, mode)
unde mode indic dac partea care trimite datele, partea care le recepioneaz, sau ambele pri ncheie transmisia datelor. Acest apel informeaz protocoalele de nivel inferior s ncheie comunicaia prin reea, ns cu meninerea intact a descriptorilor de socket-uri. Apelul sistem close elimin ?i descriptorul de socket.
-Apelul sistem getsockname furnizeaz numele asociat unui socket, printr-un apel bind anterior
^getsockname(sd, name, length)
-Apelurile getsockopt ?i setsockopt obin ?i respectiv seteaz diferite opiuni asociate socket-ului, n concordan cu domeniul ?i protocolul socket-ului.


.MESAJE

^#include <sys/types.h>
^#include <sys/ipc.h>
^#include <sys/msg.h>
^int msqid;
^struct msqid_ds buf;
^struct msgform
{
^long mtype;
^char mtext[256];
}
msg;
^int life=64;
^main()
{
^pid_t pid;
^msqid= msgget(IPC_PRIVATE, IPC_CREAT | 0644);
^if(msqid== -1){
^printf("Nu se mai poate aloca o noua coada de mesaje!
");
^exit(-1);
}
^printf("msqid= [procent]d ", msqid);
^msgctl(msqid, IPC_STAT, [and]buf);
^printf("msg_qbytes= [procent]d ", buf.msg_qbytes);
^printf("msg_qnum= [procent]d ", buf.msg_qnum);
^printf("msg_cbytes= [procent]d
", buf.msg_cbytes);
^if (fork()== 0)
{
//proces consumator
^while(life--)
{
^if(msgrcv(msqid, [and]msg, 256, 17, !IPC_NOWAIT)== -1)
^perror("msgrcv()");
^else
^printf(">> C[procent]d:[procent]c
", life, msg.mtext[0]);
}
^exit(0);
}
^else
{
//proces producator
^while(life--)
{
^msg.mtype=17;
^msg.mtext[0]=life[procent]2==0?'#':'*';
^printf("<< P[procent]d:[procent]c
",life, msg.mtext[0]);
^if(msgsnd(msqid, [and]msg, 256, IPC_NOWAIT)== -1)
^perror("msgsnd()");
}
^do
{
^msgctl(msqid, IPC_STAT, [and]buf);
}
^while(buf.msg_qnum!=0);
^msgctl(msqid, IPC_RMID, (struct msqid_ds *) 0);
^exit(0);
}
}


,SEMNALE

^#include <stdio.h>
^#include <stdlib.h>
^#include <signal.h>
^#define TRUE 1
^#define FALSE 0
^int produce=FALSE;
^int consuma=FALSE;
^void intSIGALRM()
{
^produce=TRUE;
}
^void intSIGTERM()
{
^consuma=TRUE;
}
^int main()
{
^unsigned char articol;
^int life=10;
^int pid1, pid2;
^int fildes[2];
^signal(SIGALRM, intSIGALRM);
^signal(SIGTERM, intSIGTERM);
^pipe(fildes);
^if((pid1=fork())==0){
// proces producator
^close(fildes[0]);
^while(life--){
^while (produce==FALSE);
^articol=(unsigned char)rand();
^write(fildes[1],[and]articol,sizeof(articol));
^printf("
P[procent]d:[procent]02X >> ", life, articol);
^fflush(stdout);
^produce=FALSE;
^signal(SIGALRM, intSIGALRM);
^signal(SIGTERM, SIG_IGN);
^kill(0, SIGTERM);
}
^exit(0);
}
^if((pid2=fork())==0){
// proces consumator
^close(fildes[1]);
^while(life--)
{
^while (consuma==FALSE);
^read(fildes[0],[and]articol,sizeof(articol));
^printf("C[procent]d:[procent]02X", life, articol);
^fflush(stdout);
^consuma=FALSE;
^signal(SIGTERM, intSIGTERM);
^signal(SIGALRM, SIG_IGN);
^kill(0, SIGALRM);
}
exit(0);
}
// proces coordonator
^kill(pid1,SIGALRM);
^return 0;
}


,PIPE1

#include <sys/types.h>
#include <sys/stat.h>
#include <sys/wait.h>
#include <fcntl.h>
#include <unistd.h>
^int main(int argc, char *argv[])
{
^int fd;
^int p[2];
^char buf[16];
^int k,i,stat;
^if (argc !=2){
^printf("Syntax error!
");
^exit(-1);
}
^pipe(p);
^creat("lock", 0000);
^if(fork() == 0)
{
/* proces consumator */
^close(p[1]);
^fcntl(p[0], O_NDELAY);
^while(1)
{
^k=read(p[0],buf,16);
^if ((k==0) [and][and] (open("lock", O_RDWR) != -1)) break;
^for(i=0;i<k;i++) printf("[procent]02X ",buf[i]);
^printf("
");
}
^unlink("lock");
^printf("exit consumator...
");
^exit(0);
}
/* proces producator */
^close(p[0]);
^fd=open(argv[1],O_RDONLY);
^while((k=read(fd,buf,16)) > 0)
{
^write(p[1],buf,k);
}
^chmod("lock",0777);
^printf("exit producator...
");
^exit(0);
}


PIPE 2

#include <sys/types.h>
#include <sys/stat.h>
#include <sys/wait.h>
#include <fcntl.h>
#include <unistd.h>
^int main(int argc, char *argv[])
{
^int fd;
^int p[2];
^char buf[16];
^int k,i,stat;
^if (argc !=2)
{
^printf("Syntax error!
");
^exit(-1);
}
^pipe(p);
^if(fork() == 0)
{
/* proces consumator */
^close(p[1]);
^while(1)
{
^k=read(p[0],buf,16);
^if (k==0) break;
^for(i=0;i<k;i++) printf("[procent]02X ",buf[i]);
^printf("
");
}
^printf("exit consumator...
");
^exit(0);
}
/* proces producator */
^close(p[0]);
^fd=open(argv[1],O_RDONLY);
^while((k=read(fd,buf,16)) > 0)
{
^write(p[1],buf,k);
}
^printf("exit producator...
");
^exit(0);
}


a.acces la baze de date

Acces la baze de date fr conexiune
Tehnologiile anterioare funcionau pe baza accesului la baze de date prin stabilirea
unei conexiuni permanente pe durata efecturii operaiilor specifice. Intr-un astfel de
model, aplicaia creaza o conexiune la baza de date si aceasta este activa pana la sfr?itul aplicaiei, sau cel puin pe durata interogrii bazei de date.
Dezavantaje ale conexiunilor permanente la baze de date;
-conexiunile deschise la bazele de date sunt costisitoare din punct de vedere al resurselor
-aplicaiile sunt dificil de scalat; o aplicaie care funcioneaz foarte bine cu 5 clieni poate avea performante foarte sczute pentru 50 de conexiuni deschise simultan
-utilizarea unui numr mare de conexiuni poate conduce la epuizarea licenelor disponibile pentru baza de date
ADO.NET vine in ntmpinarea acestor probleme implementnd un model de accesare
a bazelor de date fr conexiune permanenta. In cadrul acestui model, conexiunile sunt iniializate si meninute active doar pe durata efectiva a execuiei operaiilor cu
baza de date. De exemplu, daca o aplicaie solicita anumite date dintr-o baza, conexiunea este deschisa doar pe durata ncrcrii datelor in aplicaie, apoi conexiunea este inchisa. Similar, in cazul altor operaii.
Arhitectura ADO.NET
Accesul la date in ADO.NET implica doua entiti:
(1)un DataSet, care stocheaz datele pe ma?ina locala
(2)un Date Provider, un set de componente care mediaz interaciunea dintre program si baza de date DataSet


,DataSet

Un DataSet este o reprezentare non-conexiune, in-memory, a unei mulimi de date.
Poate fi gndit ca o copie locala a seciunilor bazei de date utile aplicaiei. Datele pot fi
ncrcate intr-un DataSet din orice sursa valida, cum ar fi un server SQL, o baza de date Microsoft /Access sau un fi?ier XML. DafaSef-ul persista in memorie, iar datele coninute pot fi modificate, manipulate, independent de baza se date. La momentul oportun, DataSet-u poate aciona ca un ?ablon pentru modificarea bazei de date centrale.
Un obiect DataSet conine o colecie de zero sau mai multe obiecte DataTable, fiecare dintre acestea fiind o reprezentare in-memory a unei tabele. Structura unui obiect DataTable este definita de colecia DataColumns, care enumereaza coloanele dintr-o tabela si de colecia Constraint care enumereaza legaturile, constrngerile din tabela. Aceste doua colecii definesc schema tabelei. Un obiect DataTable conine, de asemenea, o colecie DataRows, care conine datele corespunztoare din DataSet.
Un DataSet conine o colecie DataRelations care permite crearea asocierilor intre liniile unei tabele si liniile altei tabele. Colecia DataRelations enumereaza un set de obiecte DataRelation care definesc relaiile intre tabelele din DataSet,


Data Provоder, connection

Legtura cu baza de date este creata si meninut de un data provider. Acesta este format dintr-un set de componente interconectate care coopereaz pentru a furniza date intr-o maniera eficienta, performanta.
Exista patru tipuri de furnizori de date in .NET Framework:
- SQL Server .NET Data Provider
- OleDb .NET Data Provider
- ODBC Data Provider
- Oracle Data Provider
Fiecare dintre ace?ti furnizori conin versiuni ale urmtoarelor clase generice:
- Connection - realizeaz conexiunea la baza de date
- Command- executa o comanda asupra unei surse de date: comenzi non-query (INSERT, UPDATE sau DELETE) sau comanda SELECT, retumand un DataReader - DataReader- desemneaz o mulime de nregistrri (recordset) bazata pe conexiune, de tip forward-only, read-only
- DataAdapter- populeaz un DataSet sau DataTable non-conexiune si executa modificri
Mecanismul accesrii bazelor de date in ADO.NET este urmtorul: - un obiect Connection stabile?te o conexiune intre aplicaie si baza de date. Aceasta conexiune poate fi accesata direct de un obiect Command sau de un obiect DataAdapter. Obiectul Command executa o comanda asupra bazei de date. Daca se returneaza valori multiple, se utilizeaz un obiect DataReader care va conine datele returnate. Aceste date pot fi procesate direct de de aplicaie. Alternativ, se poate utiliza un DataAdapter pentru a popula un obiect DataSet. Modificrile asupra bazei de date se pot efectua prin intermediul unui obiect Command sau unui obiect DataAdapter.
Connection Reprezint conexiunea curenta la baza de date. Tipuri de conexiuni:
- SqlConnection - pentru conectarea Ia SQL Server 7 sau versiuni ulterioare
- QleDbConnection - conexiuni la diverse tipuri de baze de date
- ODBCConnection
- OracleConnection
Un obiect Connection contine toate informaiile necesare deschiderii unui canal de comunicaie cu baza de date in cadrul proprietii ConnectionString, Sunt incorporate, de asemenea, metode pentru facilitarea tranzactiilor.


DataReader, data Adapter

- contine un recordset bazat pe conexiune, forward-only, read-only
- obiectele DataReader nu pot fi instantiate direct, sunt returnate ca rezultat al metodei ExecuteReader a unui obiect Command {SqlCommand - SqlDataReader etc)
- o singura linie din recordset este in memorie la un moment dat, deci se folose?te un minim de resurse, dar este necesara meninerea activa a unui obiect Connection pe durata de viata a obiectului DataReader.,..
DataAdapter
DataAdapter este clasa din nucleul tehnologiei ADO.NET, bazata pe mecanismul non-conexiune.
- faciliteaz comunicarea intre baza de date si DataSet
- populeaz obiectele DataTable sau DataSet ori de cate ori se apeleaz metoda F/7/
- metoda Update inregistreaza modificrile, efectuate local, in baza de date
Proprieti:
- SelectCommand - contine textul sau obiectul asociat comenzii care se va efectua la apelul metodei Fiii
- InsertCommand - contine textul sau obiectul asociat comenzii prin care se insereaz o linie in tabela
- DefeteCommand - similar, pentru ?tergerea unei linii din tabela
- UpdateCommand - similar, pentru modificarea valorilor din baza de date La apelul metodei Update, se copie modificrile din DataSet m baza de date,


Constrвngeri

Constrngerile definesc reguli de adugare si manipulare a datelor in tabele. Tipuri de constrngeri: UniqueConstraint (o coloana nu trebuie sa aib valori duplicate) si ForeignKeyConstraint (define?te regulile de modificare a liniilor copil atunci cnd se modifica o linie printe).
Constrngerile sunt manipulate prin intermediul coleciei Constraints a tabelei si sunt active atunci cnd proprietatea EnforceConstraints a DafaSef-uIui este setata la true. Exemple;
tnyDataColumn. Unique = true;
// se creaza o canstrangere UniqueConstraint
Creare manuala:
UniqueConstraint myConstraint = new UniqueConstraint (tnyDataColumn) ; myDataTable.Constraints.Add(myConstraint);
-- Constrngeri Foreign Key
ForeignKeyConstraint myConstraint = new ForeignKeyConstraint(Studeni.Columns["StudentID"], Optionale.Columns["StudentlD"]); Adugarea la colecia


Tranzacюii

Reprezint un set de operaii asupra bazei de date care se efectueaz ca un ansamblu: daca una dintre operaii e?ueaz, tranzacia nu se efectueaz. Exemplu;
// tranzaciile trebuie incluse in blocuri
//Try...Cat eh.. . Finally
System.Data,QleDb.OleDbTransaction aTransaction = nuli;
try
{
aConnection.Open();
aTransaction = aConnection.BeginTransaction{);
// crearea unei tranzacii si asocierea la conexiune
// adugare de operaii la tranzacie
Updatel.Transaction = aTransaction;
Update2.Transaction = aTransaction;
// se executa comenzile Updatel si Update2
Updatel.ExecuteNonQuery();
Update2.ExecuteNonQuery();
// daca nu s-au lansat excepii, se efectueaz tranzacia
aTransaction.Commit();
}
catch (Exception ex)
{
// tranzacia nu s-a efectuat, s-au lansat excepii
aTransaction.Rollback();
}
finally
{
// se nchide conexiunea
aConnection.Close() ;


a.www,Posta electronica

World Wide Web-ul este cel mai mare serviciu Internet (uneori este confundat cu Internet-ul), dar existã şi alte servicii şi instrumente importante şi chiar mai vechi decât Web-ul. Server-ele gazdã Internet oferã (pe lângã WWW) patru servicii Internet suplimentare:
-Poştã electronicã (email);
-FTP: ? interfaţã cu linie de comandã (bazatã pe modul text) pentru transferul fişierelor între calculatoarele din Internet şi calculator utilizatorului;
-Telnet ? instrument care asigurã clienţilor Internet o interfaţã cu linie de comandã (bazatã pe modul text) pentru calculatoarele server din Internet;
-Serviciul de ştiri Usenet ? oferã persoanelor cu interese comune o modalitate de a schimba informaţii. Utilizatorul poate subscrie la subiectele unui newsgroup (grup de discuţii);
--Poşta electronicã
Poate fi utilizatã pentru a expedia mesaje e-mail altor persoane din orice colţ al lumii. În cazul în care existã o conexiune dedicatã Internet şi programul de e-mail al LAN-ului este configurat pentru transmiterea de mesaje în Internet, utilizatorul nu trebuie sã mai întreprindã acţiuni speciale pentru a trimite poştã electronicã. De fapt, este posibil sã nu fie necesarã prezenţa protocolului TCP/IP pe calculatorul de lucru dacã existã în reţea un alt calculator care realizeazã conversia e-mail.
Dacã se utilizeazã ca pachet de e-mail unul din cele create de Microsoft (Microsoft Mail, Outloook Express, Internet Explorer Mail sau Exchange), pentru rutarea mesajelor e-mail cãtre Internet se poate folosi Microsoft Exchange Server sau se pot trimite mesajele direct în Internet de pe calculatorul personal. Procesarea mesajelor email dintr-un cont Unix se face folosind programul pine.
Cele mai populare caracteristici e-mail sunt:
-agendã de adrese;
-cutii de primiri şi plecãri;
-cutii poştale pentru corespondenţã specificã;
-transmiterea ulterioarã a mesajelor şi citirea poştei fãrã conectare (off-line);
-verificarea conturilor e-mail multiple;
-transmiterea automatã a poştei şi verificarea acesteia;
-filtre de poştã şi procesare automatã a poştei;
-anexarea de fişiere şi formate flexibile pentru mesaje;


b,FTP,telnet

Este un protocol pentru transferul fişierelor prin Internet. Sistemele de operare WindowsNT şi Windows9x sunt livrate de Microsoft împreunã cu un program client numit ftp.exe care este instalat odatã cu sistemul de operare. Sistemul de operare Linux (orice versiune) vine cu douã programe FTP: programul ftp-server (cel care "livreazã" fişierele de pe calculatorul server) si programul ftp-client (cel care ruleazã pe calculatorul utilizatorului).
FTP-ul este o aplicaţie în linia de comandã, adicã la rularea programului trebuie introduse comenzi pentru realizarea transferului de fişiere.
Acum sunt disponibile o mulţime de aplicaţii FTP grafice (un buton grafic Get corespunde comenzii get nume_fisier).
--TELNET
Este o aplicaţie care oferã o interfaţã terminal bazatã pe text, pentru un alt calculator dintr-o reţea TCP/IP. Telnet-ul se utilizeazã de obicei pentru conectarea la o maşinã Unix (sau Linux) aflatã la distanţã.
În cazul în care furnizorul de servicii Internet este utilizat pentru publicarea paginilor Web personale în Internet, va fi necesarã utilizarea liniei de comandã pentru gestionarea fişierelor World Wide Web din acest cont Unix.
WindowsNT şi Windows9x vin cu un program telnet ce este instalat odatã cu sistemul de operare.
Telnet este a doua aplicatie TCP/IP importanta si reprezinta un proces client/server TCP/IP pentru intrarea intr-o masina la distanta.
Intrarea la distanta permite unui utilizator dintr-un site sa aiba acces la un alt site. Telnet protejeaza serverul impotriva accesului "faradelege" cerand utilizatorilor sa indeplineasca identificatorii de login (intrare) si parola.
Pentru folosirea Telnet-ului, un utilizator apeleaza un client Telnet din propriul site si stabileste o conexiune cu un server Telnet din site-ul de la distanta. Telnet ?inlocuieste? (simuleaza) tastatura clientului cu cea a site-ului de la distanta ca si cum s-ar tipari acolo (la distanta). Telnet se ocupa si de afisarea iesirii de la site-ul de la distanta pe ecranul utilizatorului.


Rutare si subretele

--Ruterele conecteaza diferite retele, permitand astfel trimiterea datelor la alte conexiuni de date de orice tip. Exista doua protocoale la nivel retea :
-linii dedicate (x.25 si secventa de cadre)
-linii nededicate (IP)
Liniile dedicate (x.25) trimit intai un cerere de apel la destinatie, care poate fi acceptata sau respinsa. Daca conexiunea este acceptata, apelantului i se da un identificator de conexiune spre folosinta pentru cererile urmatoare. In multe cazuri, reteaua alege drumul de la expeditor la destinatar conform cu acest identificator.
Liniile nededicate (IP ? Internet Protocol) sunt parte a D.D. (U.S.Department of Defense). Un pachet IP poate fi trimis fara nici o setare prealabila. Fiecare pachet IP este trimis catre destinatie independent de toate celelalte. Nu este selectat sau memorat nici un drum intern ca in cazul lui x.25. Totusi se pot utiliza linii dedicate si folosind IP. Este posibil ca un pachet sa urmeze un drum diferit si sa ajunga inaintea unor pachete precedent trimise. Protocolul de transport se numeste TCP (Transmission Control Protocol) si este similar cu T4 (din cadrul lui x.25). Combinatia TCP/IP este folosita in special in universitati, pe sisteme UNIX. Protocolul DoD suporta si protocolul de transport nededicat numit UDP (Universal Datagram Protocol), care este in esenta IP cu cateva adaugari minore.


a,TCP.IP

Protocoalele Internet permit comunicarea calculatoarelor localizate in retele diferite. Protocoalele Internet asigura conexiunile logice dintre un calculator si serverul gazda Internet care ofera site-ul Web (sau alte informatii). Protocoalele Internet reprezinta baza tuturor serviciilor Internet. Internet Protocol (IP ? Protocol Internet) functioneaza prin transferul (rutarea) pachetelor (sau a unor secvente mici de informatie, denumite si datagrame) dintr-un flux continuu de date prin toate retelele dintre doua calculatoare.
Nota : Termenul Internet Protocol (IP) denumeste protocolul specific care transfera pachete in Internet.
--Termenul Protocoale Internet (la plural, deci) se refera la intregul corp de protocoale care utilizeaza serviciile IP si sunt folosite in Internet.
--Protocoalele Internet pot fi utilizate pe o retea de sine statatoare, dar vor fi mai putin eficiente decat protocoalele dedicate retelelor unice. Totusi, utilizand suita TCP/IP, se permite utilizarea protocoalelor Internet de nivel inalt (de ex. HTTP) pentru a crea un intranet ? o arhitectura de retea privata, bazata pe principiile si programele Internetului global.
--Modul de functionare al TCP/IP
Internetul utilizeaza TCP/IP pentru conectarea calculatoarelor. TCP/IP este acronimul pentru Transmission Control Protocol/ Internet Protocol (Protocol de control al transmisiei/ Protocol Internet) si se mai numeste suita de protocoale Internet (Internet Protocol Suite). Caracteristica prin care TCP/IP difera de alte protocoale de retea este faptul ca a fost proiectat pentru conectarea retelelor, nu pentru conectarea calculatoarelor intr-o retea. Modul de proiectare al TCP/IP permite fiecarei retele individuale sa fie gestionata separat, astfel incat organizatii diferite care nu doresc sa isi ofere reciproc acces complet la retele sa poata schimba informatie.


b,TCP.IP

Primele specificatii TCP/IP au circulat ca Requests For Comments (RFC ? cereri de comentarii). Proiectantii initiali si Internet Engineering Task Force (grupul de standarde curent cu inscriere libera pentru TCP/IP si Internet) pastreaza traditia producerii de RFC pentru orice noi standarde Internet si revizii ale standardelor vechi. Toate RFC-urile pentru protocoale TCP/IP pot fi transferate din Internet.
Protocoalele Internet din suita TCP/IP sunt aranjate in niveluri. Protocoalele din fiecare nivel sunt utilizate de catre urmatorul nivel. Nivelele sunt :
-nivelul interfata de retea
-nivelul Internet
-nivelul de transport
-nivelul de aplicatie
Aceste nivele nu trebuie confundate cu cele dintr-o stiva OSI (Open System Interconnection). Ele corespund aproape exact cu nivelele OSI, dar similar tuturor protocoalelor reale, exista variatii in implementarea acestora.
Nivelul interfata de retea (nivelul legatura fizica si de date)
Nivelul interfata de retea gestioneaza functiile dependente de elementele hardware si prezinta o interfata standardizata pentru nivelul Internet al TCP/IP. Intr-un calculator pot exista mai multe interfete de retea, fiecare dintre acestea putand transfera traficul de date TCP/IP pe un alt tip de retea fizica.
Exemplu : Poate exista un adaptor Ethernet care conecteaza calculatorul la o retea Ethernet si un adaptor pentru token-ring care conecteaza acelasi calculator la o retea tip token-ring. In plus, poate exista si o conexiune seriala, prin modem, la un furnizor de servicii Internet. Fiecare interfata de retea utilizeaza diferite protocoale fizice si de conexiune de date, dar ele sunt identice pentru nivelul Internet al TCP/IP.
Topologii de retea : stea, inel si bus (magistrala).
-topologia stea : toate calculatoarele sunt conectate cu un calculator central (hub). Nu exista legaturi directe intre 2 calculatoare (decat cu hub-ul);
-topologia inel : reteaua nu are capete. Datele curg intr-un singur sens.
-topologia bus : foloseste un mediu unic de transmisie numit bus. Toate calculatoarele din retea sunt legate la bus. (mediu de transmisie = cablu coaxial).


Nivelul Internet

Nivelul Internet deplaseaza informatia de la sursa la destinatie printr-o retea. Calculatoarele sursa si destinatie nu se gasesc in aceeasi retea locala; in realitate, calculatoarele sursa si destinatie pot fi calculatoare de pe continente diferite, iar datele ce se transfera trebuie sa treaca printr-o multime de calculatoare si retele intermediare pentru a ajunge la destinatie.
Protocol Internet (IP) este esenta suitei de protocoale TCP/IP. Acest protocol asigura un serviciu de transfer de date fara directie precizata pentru datele trimise atat in interiorul unei retele cat si intre acestea. Prin urmare, pentru informatia trimisa nu se garanteaza sosirea la destinatie si nici corespondenta dintre ordinea de trimitere si cea de sosire a pachetelor de date.
Internet Control Message Protocol (ICMP ? protocol Internet de control al mesajelor) utilizeaza IP pentru controlul fluxului de date prin retele si raportarea erorilor si starilor de blocare din conexiunile intre retele.
Address Resolution Protocol (ARP ? Protocol de conversie a adreselor) este utilizat in retelele locale pentru determinarea adresei componentelor hardware fizice ale calculatorului de destinatie in cazul in care calculatorul sursa poseda adresa Internet a calculatorului de destinatie.
Reserve Address Resolution Protocol (RARP ? Protocol de conversie inversa a adreselor) este un mecanism prin care un calculator care nu poseda inca o adresa Internet o poate obtine.
Dynamic Host Configuration Protocol (DHCP ? Protocol de configurare dinamica a gazdei) este un nou protocol pentru obtinerea unei adrese IP si a altor instructiuni TCP/IP intr-o retea IP. DHCP este mai flexibil decat RARP si automatizeaza multe sarcini care trebuiau realizate manual in cazul RARP.


Nivelul de transport

Nivelul de transport asigura servicii de transfer de date intre doua capete pentru nivelul de aplicatii TCP/IP superior acestuia. TCP/IP ofera doua tipuri de servicii de nivel transport. Serviciul utilizat de catre nivelele superioare depinde de natura comunicatiei de retea necesare serviciilor de nivel superior. Protocoalele de nivel de transport oferite de TCP/IP sunt :
Transmission Control Protocol (TCP ? Protocol de control al transmisie) este un protocol de nivel de transport orientat pe conexiune, care asigura sosirea datelor in ordinea corecta. TCP stabileste o conexiune intre emitator si receptor si utilizeaza serviciile IP pentru transmiterea si receptia datelor. TCP reface informatia receptionata dezordonat si va cere ca informatia ce nu a fost receptionata sa fie retransmisa (ex.: telefonul)
User Datagram Protocol (UDP ? Protocol de datagrame utilizator) adauga foarte putine la serviciul de transfer IP pe care se bazeaza. Datagramele sunt mici pachete de date de dimensiune fixa transmise printr-o retea. Similar IP, UDP nu garanteaza nici o ordine de sosire a datelor (transmise sub forma de datagrame) si nici faptul ca datele vor ajunge la destinatie. UDP este util in aplicatii atunci cand :
-se transmit mai multe unitati mici de date;
-viteza este mai importanta decat garantarea livrarii;
-aplicatia (si nu protocolul) asigura receptia datelor. (ex.: e-mail)


Nivelul aplicatie

Nivelul aplicatie intr-o implementare tipica TCP/IP contine urmatoarele aplicatii de retea:
-Ping este o aplicatie care testeaza existenta conexiunii intre doua calculatoare din Internet. Aceasta aplicatie utilizeaza pachete ecou de cerere si raspuns ICMP pentru a masura timpul necesar pentru ca informatia sa ajunga pana la celalalt calculator si inapoi.
-Telnet este o aplicatie care ofera o sesiune interactiva bazata pe caracter, cu alt calculator.
-Rlogin este asemanator Telnet-ului prin faptul ca ofera o interfata cu linie de comanda spre un alt calculator, dar, in cazul calculatoarelor UNIX, asigura transparenta conexiunii pentru programele UNIX (Rlogin nu face parte din pachetul TCP/IP Windows NT).
-Rsh permite introducerea comenzilor pe un sistem local, comenzi ce vor fi executate pe sistemul aflat la distanta, iar rezultatele se vor intoarce in sistemul local.
-File Transfer Protocol (FTP ? protocol de transfer fisiere) este o aplicatie care transfera fisiere la si de la calculatoare aflate la distanta, prin TCP/IP. Calculatorul aflat la distanta trebuie sa posede un server FTP. Windows NT ofera atat aplicatia FTP cat si un server FTP.
-Trivial File Transfer Protocol (TFTP) este un protocol de transfer de fisiere utilizat de obicei pentru transferul de cod de sistem de operare pentru calculatoarele client din retele UNIX
-Simple Mail Transfer Protocol (SMTP) trimite si receptioneaza posta Internet. Windows NT Option Pack 4 cuprinde o aplicatie client de posta SMTP la fel si Windows NT Resource Kit si Microsoft Exchange Server care ruteaza posta LAN in si din Internet.
-Hyper Text Transfer Protocol (HTTP) transfera documente World Wide Web de la o gazda Web la un browser Web, ca de exemplu Netscape sau Internet Explorer. HTTP este un protocol nativ al Web-ului.
-Domain Name Service (DNS) traduce adresele Internet literale (ex.:fenrir.infoiasi.ro) in adrese Internet numerice (ex.: 193.231.30.197) utilizate de un calculator pentru a gasi un calculator receptor. Statiile de lucru Windows NT/2000 utilizeaza protocolul DNS atat pentru gasirea numelor stocate pe serverele DNS din retea, cat si pe serverele Windows NT.


IP

IP transporta date in pachete numite datagrame, care sunt transportate separat. Datagramele pot circula pe rute diferite si pot ajunge in orice secventa sau duplicate. IP nu memoreaza drumul parcurs de ele si nu are nici o facilitate pentru reordonarea datagramelor ajunse. Deoarece este un serviciu neorientat pe conexiune, IP nu creaza circuite virtuale pentru trimitere. Nu exista apel de anuntare a expeditorului de pachetele ajunse.
Un circuit virtual este o conexiune similara unei legaturi dedicate neintrerupte. Ex.: telefon din orasul A in orasul B este un circuit virtual, (doar daca nu exista unul direct) deoarece trece prin numeroase comutatoare din alte orase. Exista doar impresia de fir dedicat (adica circuit direct).Structura unei datagrame
O datagrama este un pachet de lungime variabila (pana la 65536 octeti) ce consta in : antet si date. Antetul poate avea intre 20 si 60 octeti si contine informatii esentiale despre ruta. In general, sectiunile antetului sunt grupate in sectiuni de 4 octeti. Campurile unei datagrame sunt :
-ersiune (4 biti) : primul camp defineste numarul de versiune al IP. Versiunea curenta a IP este 4 (IPv4), cu valoarea binara 0100;
-lungimea antetului (HLEN ? 4 biti) : HLEN specifica lungimea antetului in multiplu de 4 octeti. Patru biti pot reprezenta un numar intre 0 si 15, care inmultit cu 4, da un maxim de 60 octeti;
-tipul serviciului (8 biti) : cum trebuie procesata datagrama. Contine biti care definesc prioritatea datagramei. Contine biti care specifica tipul serviciului dorit de expeditor cum ar fi : nivelul de continut, siguranta si asteptare;
-lungimea totala (16 biti) : defineste lungimea totala a unei datagrame. Este un camp de 2 octeti si poate "defini" pana la 65536 octeti;


ARP, rarp

Address Resolution Protocol (ARP) ? este folosit pentru asocierea unei adrese IP cu adresa fizica. Pe o retea fizica tipica, cum ar fi LAN (Local Area Network), fiecare dispozitiv conectat este identificat cu o adresa fizica de obicei scrisa in cardul interfetei de retea (NIC) ? placa de retea (de ex. Ethernet).
Adresele fizice au jurisdictie locala si pot fi schimbate usor. De exemplu, daca placa de retea pe o masina particulara se strica adresa fizica se schimba. Adresele IP, pe de alta parte, au jurisdictie universala si nu pot fi schimbate. ARP este folosit pentru gasirea (aflarea) adresei fizice a unui nod cand este cunoscuta adresa Internet. (numai in retele locale LAN)
Cand o gazda, sau un ruter, trebuie sa gaseasca adresa fizica a altei gazde in reteaua sa, acesta furnizeaza un pachet intrebare ARP care cuprinde adresa IP si-l trimite la toate calculatoarele din retea (broadcast). Fiecare gazda din retea primeste si proceseaza pachetul ARP, dar numai calculatorul ce are respectiva adresa Internet trimite inapoi adresa sa fizica. Gazda care contine datagrama adauga adresa destinatiei in memoria cache si in antetul datagramei, apoi trimite datagrama pe drumul sau.
Exemplu : Cautam adresa fizica a nodului cu adresa 141.23.56.23. Dupa broadcast si navigare pe reteaua locala, obtinem adresa fizica A46EF45983AB.
Reverse Address Resolution Protocol (RARP) ? permite unei gazde sa afle adresa sa Internet cand cunoaste adresa fizica.
Intrebare : De ce avem nevoie de RARP? Stim doar ca adresa Internet este memorata pe hard disk-ul local?!
Raspuns : 1. S-ar putea sa nu avem hard disk!
2. Sau calculatorul este conectat prima data la retea!
3. Sau aducem un calculator nou, dar dorim sa pastram vechea placa de retea!
RARP lucreaza similar cu ARP. Gazda ce doreste obtinerea adresei Internet trimite un pachet interogativ RARP care contine adresa sa fizica catre toate calculatoarele din reteaua sa fizica. Un server al retelei recunoaste pachetul RARP si returneaza adresa Internet a gazdei.


Segmentul TCP

Scopul serviciilor furnizate de TCP cere ca antetul segmentului sa fie extensiv (considerabil). TCP furnizeaza un domeniu intins de functii de siguranta, dar sacrifica viteza (trebuie stabilite intai conexiunile, asteptarea confirmarii etc.). Din cauza cadrelor mai mici, UDP este mai rapid decat TCP, platind cu pretul lipsei de siguranta. Descrierea campurilor unui segment TCP este :
-adresa portului sursa (16 biti) : defineste programul aplicatie in calculatorul sursa;
-adresa portului destinatie (16 biti) : defineste programul aplicatie din calculatorul destinatie;
-numar de secventa (32 biti) : un flux de date dintr-un program aplicatie poate fi impartit in doua sau mai multe segmente TCP. Campul numar de secventa arata pozitia datelor in fluxul de date original;
-numar de confirmare (32 biti) : este folosit la confirmarea primirii datelor la celalalt dispozitiv de comunicare. Acest numar este valid numai daca bitul ACK (definit ulterior) este setat. In acest caz, acesta defineste numarul de secventa care este asteptat;
-lungimea antetului (HLEN ? 4 biti) : indica numarul de cuvinte de 4 octeti din antetul TCP. Acesti 4 biti pot defini un numar <=15. Acesta este inmultit antetului cu 4 pentru a da numarul total de octeti din antet. Deci lungimea antetului poate fi pana la 4*15=60 octeti. Cum lungimea minima este 20, inseamna ca raman maxim 40 octeti pentru sectiunea de optiuni;
-rezervat (6 biti) : rezervat pentru utilizare ulterioara;


a:DNS

Domain Name System; DNS identifica fiecare gazda Internet cu un nume unic care-l identifica in mod unic dupa adresa IP. Dat numele de domeniu, un program poate obtine adresa IP asociata folosind serviciile unui server intr-o sesiune client/server.
--Pentru crearea numelor care sunt unice, descentralizate si usor de schimbat, designerii TCP/IP au ales un sistem ierarhic facut dintr-un numar de etichete separate prin puncte (ex.: chal.atc, fhda.edu). O gazda poate avea orice numar de etichete de identificare care fac numele unic (lungimea etichetei <= 63 caractere).
--DNS este implementat folosind un arbore in care fiecare nod reprezinta o eticheta posibila. Cea mai din dreapta eticheta corespunde nivelului din arbore cel mai apropiat de radacina si cea mai din stanga eticheta celui mai indepartat de radacina. Arborele este impartit in trei domenii diferite : generic, tara si invers.
1.Domeniul generic
Domeniul generic imparte gazdele inregistrate conform cu comportarea generica. Numele de domenii generice se citesc de la stanga la dreapta incep cu cea mai specifica informatie despre gazda (ex.: numele statiei) si devine din ce in ce mai general pana la natura organizatiei (ex.: .com ? comercial). Primul nivel in arborele domeniilor generice contine sapte siruri de 3 caractere etichetate astfel : com (comercial), edu (educatie), gov (guvern), int (international), mil (militar), net (retea), org (organizatie).
--Fiecare nume de domeniu corespunde cu o adresa IP particulara. Pentru gasirea adresei, aplicatia de resolutie incepe cautarea cu eticheta primului nivel (organizatie). Daca este gasita o potrivire, un pointer va puncta pe urmatorul nivel si in final pe adresa IP asociata.
2.Domeniul tarii
Conventia domeniului tarii urmeaza acelasi format ca domeniul generic, dar foloseste o abreviere cu 2 caractere (us pentru S.U.A., ro pentru Romania etc.). Etichetele de pe nivelul doi pot fi organizatii sau un stat national (California din S.U.A. poate avea ca.us).


b;DNS

3.Domeniu invers
Cand avem adresa IP si dorim numele domeniului, trebuie sa folosim functiile domeniului invers al lui DNS.
Pentru folosirea domeniului invers, dam adresa IP serverului. DNS adauga in fata arpa.inaddr. De exemplu, 132.34.45.121 devine arpa.inaddr.132.34.45.121. Sistemul incepe din topul arborelui nivelul 1 ? arpa si cauta pana gaseste numarul. Din momentul gasirii numarului, un pointer va indica numele de domeniu asociat.
--Telnet (numar de port 23)
Telnet este a doua aplicatie TCP/IP importanta si reprezinta un proces client/server TCP/IP pentru intrarea intr-o masina la distanta.
Intrarea la distanta permite unui utilizator dintr-un site sa aiba acces la un alt site. Telnet protejeaza serverul impotriva accesului "faradelege" cerand utilizatorilor sa indeplineasca identificatorii de login (intrare) si parola.
Pentru folosirea Telnet-ului, un utilizator apeleaza un client Telnet din propriul site si stabileste o conexiune cu un server Telnet din site-ul de la distanta. Telnet "inlocuieste" (simuleaza) tastatura clientului cu cea a site-ului de la distanta ca si cum s-ar tipari acolo (la distanta). Telnet se ocupa si de afisarea iesirii de la site-ul de la distanta pe ecranul utilizatorului.


NFS si RPC

Network File System (NFS) este un protocol de acces al fisierelor. FTP si TFTP transfera toate fisierele de la un server la o gazda client. Un serviciu de acces de fisiere face fisierele sistem de pe o masina la distanta vizibile, gandite ca pe propria masina, dar fara transferul fisierelor. NFS permite editarea unui fisier pe o alta masina exact ca si cum acesta ar fi fost pe masina proprie. NFS permite chiar transferul de fisiere de la server printr-un al treilea host nelegat direct la niciuna din masini.
Remote Procedure Call (RPC). NFS lucreaza prin apelarea serviciilor unui alt protocol numit apel de procedura la distanta (RPC ? remote procedure call). RPC transfera un apel de procedura la alta masina. Folosind RPC, apelurile procedurii locale sunt transmise unor apeluri de functii RPC. Clientul NFS formateaza apelul pentru clientul RPC si-l trimite acestuia. Clientul RPC transforma datele intr-un format numit reprezentare de date externa (external data reprezentation ? XDR) si furnizeaza interfata cu mecanismele de transport TCP/IP. In hostul de la distanta, serverul RPC primeste apelul, il translateaza din formatul XDR, apoi il trimite serverului NFS. Serverul NFS retransmite apelul, discului de la distanta, care se comporta ca un apel local si deschide fisierul serverului NFS.
Posta electronica: SMTP - simple mail transfer protocol ? numar de port 25. Unul dintre serviciile cele mai familiare ale retelelor este posta electronica. Protocolul TCP/IP care suporta posta electronica din Internet se numeste


a;SMTP

Simple Mail Transfer Protocol (SMTP).
Posta electronica este un sistem de trimitere mesaje sau fisiere catre alti utilizatori de calculatoare bazandu-se pe adrese mailbox (cutii postale) in loc de schimb host-to-host si suporta schimb de posta dintre utilizatori ai aceluiasi (sau diferite) calculator. Spre deosebire de alte aplicatii client/server, e-mail-ul permite utilizatorilor trimiterea de notite pana la fisiere mari fara a ne interesa de disponibilitatea gazdei. Anumite utilizari ale e-mail-ului sunt
-trimiterea unui singur mesaj catre unul sau mai multi recipienti;
-trimiterea de mesaje care includ text, sunete, video, grafica;
-trimiterea de mesaje catre utilizatori Internet (din afara retelei curente);
-trimiterea de mesaje pentru a raspunde unui program pe calculator (in loc de utilizator).
E-mail este proiectat ca un sistem postal cu ecou. Adresele sunt folosite pentru identificarea expeditorului si destinatarului. Mesajele care nu pot fi trimise intr-un timp specificat sunt returnate expeditorului. Fiecare utilizator al unei retele are o cutie postala privata. Mail-urile primite sunt memorate in mailbox pana cand destinatarul le sterge sau le salveaza.
Ceea ce face posta electronica diferita de alte servicii de transfer de mesaje prin Internet este mecanismul numit spooling (infasurare), care permite unui utilizator sa trimita mail chiar daca reteaua este momentan deconectata sau masina destinatarului nu este operationala. Cand este trimis un mesaj, o copie a acestuia este plasata intr-o facilitate de memorare numita spool. Un spool este similar unei cozi cu cateva diferente fundamentale. Mesajele dintr-o coada sunt procesate pe baza first-come, first-served (FIFO). Mesajele dintr-un spool sunt procesate pe baza first-come, first-searched. In spool, un mesaj este cautat la fiecare 30 de secunde de un proces client ce ruleaza in background. Clientul din background cauta noi mesaje si mesaje vechi netrimise inca care asteapta sa fie trimise.


b:SMTP

Daca procesul client nu poate trimite un mesaj, acesta marcheaza mesajul cu timpul de asteptare si il lasa in spool si repeta acest procedeu mai tarziu. Daca toate incercarile de trimitere esueaza, mesajul este marcat "netransmisibil" dupa cateva zile si returnat in cutia postala a expeditorului.Un mesaj este considerat trimis doar daca clientul si serverul "vad" ca mesajul a ajuns la destinatie, si abia apoi il sterg. Pana atunci sunt tinute copii de trimitere atat in spoolul de trimitere, cat si in cutia destinatarului.
Adresele de posta electronica constau in doua parti :
-numele de identificare a cutiei postale (urmat de simbolul @ - "at")
-numele domeniului destinatie.
Exemplu : vasilica@companie.org
-In site-urile care folosesc protocoale diferite de TCP/IP, acest format poate sa difere.
Exemplu : Exista adrese de forma : xxxx[procent]yyyy@zzzz.
--Aliases (porecle)
Este posibil sa forwardam mesaje mai multor destinatari la un moment dat incluzand mai multe adrese. Cu toate acestea, in situatii cand mesaje frecvente sunt trimise unui acelasi grup de oameni, acest proces conduce la pierdre de timp. Mai multe sisteme furnizeaza o solutie numita liste de posta electronica sau grupuri de cutii postale. O facilitate e-mail numita aliases mail permite unui nume (numit alias) sa refere un nume diferit sau chiar la mai multi destinatari.
Exemple : students, profs (de la facultatea noastra)
Un alt avantaj al aliaselor este ca o persoana poate avea mai multe nume de posta. Aliasurile sunt memorate intr-o baza de date accesata de un program de expansiune al aliasurilor. Cand un mesaj este trimis catre spooler, programul de interfata a postei trimite numele destinatarului catre programul de expandare a aliasului, care verifica aliasurile memorate in baza sa de date. Daca este gasita o potrivire, adresa destinatarului este transformata in adresa sa oficiala (sau toate adresele individuale ale unei liste mail) inaintea trimiterii lui


a;HTTP

HyperText Transport Protocol ? este un protocol nativ al Web-ului. Serverele si browserele (programe client) utilizeaza HTTP-ul pentru transportul prin Internet al documentelor Web compuse din hipermedia. In plus, HTTP mentine integritatea fisierelor multimedia. Cu alte cuvinte, HTTP este vehiculul de transfer pentru imagini, grafica, fisiere video si audio, hipertext si alte date din Web.
--Specificatia MIME
Browserele si serverele Web trebuie sa recunoasca tipurile si formatele documentelor pe care le primesc sau trimit. Pentru aceasta, exista specificatia MIME (Multipurpose Internet Mail Extensions ? extensiile multifunctionale pentru posta Internet). MIME este o specificatie tehnica utilizata pentru transferul de date multimedia cu ajutorul standardelor de posta Internet.
Inainte, a existat specificatia tehnica pentru transmiterea de mesaje intre calculatoare (e-mail). Sintaxa sa este scrisa in RFC 822 (Request for Comments) de D. H. Crocker, 1982. Totusi RFC 822 nu precizeaza mecanisme de transfer al mesajelor ce contin secvente audio si video, texte in limbi asiatice sau slavonice. MIME furnizeaza specificatia Internet pentru transferul acestor tipuri de date Web.
Specificatia MIME defineste formate pentru fisiere de imagine, animatie, audio, binare, aplicatie si alte tipuri de fisiere multimedia. Cu MIME se pot defini formate proprii pentru fisiere care pot fi utilizate pentru comunicarea cu un server (daca serverul recunoaste formatul respectiv).
Cand un server Web trimite un fisier sau document pe Internet catre un browser (sau alte programe client), serverul include informatii care descriu tipul fisierului intr-un antet MIME. Programul care receptioneaza fisierul utilizeaza acest antet pentru identificarea tipului de date (tipului de fisier) care urmeaza. Un antet este o simpla informatie atasata la inceputul fisierului. Corpul entitatii reprezinta continutul fisierului sau documentului initial (original) pe care-l transmite serverul.


b;HTTP-nu este static

HTTP-ul nu este static
Spre deosebire de FTP, care furnizeaza o conexiune continua pana la aparitita unei erori sau pana cand se paraseste conexiunea, HTTP nu este static. Cu alte cuvinte, browserul si serverul trebuie sa stabileasca, si mai tarziu sa intrerupa, o conexiune de retea pentru fiecare operatie HTTP.
Exemplu : Cand ne conectam la un site Web, browserul si serverul creaza o conexiune care permite serverului sa transfere catre browser o copie a fisierului HTML. Dupa ce browserul receptioneaza fisierul, serverul intrerupe conexiunea. Daca browserul trebuie sa transfere si un fisier grafic in timp ce analizeaza sintactic fisierul HTML, este necesara crearea unei alte conexiuni.
O singura operatie HTTP se numeste tranzactie. HTTP utilizeaza o conexiune TCP/IP care este intretinuta numai pe durata unei singure tranzactii. Nici browserul (clientul) nici serverul nu sunt responsabile cu memorarea ultimei stari a unei conexiuni. Apelarea unei legaturi hipertext va implica ca browserul sa treaca de la un site la altul. Stiind ca oricand se poate utiliza o hiperlegatura pentru a parasi site-ul, serverul presupune ca s-a parasit site-ul si intrerupe conexiunea. Daca "se ramane in site", serverul creaza o noua conexiune. Daca se iese ("se paraseste site-ul"), serverul nu are nimic de facut deoarece conexiunea este deja intrerupta. Eliberarea conexiunilor in acest mod permite serverului sa raspunda si altor clienti, determinand cresterea eficientei.
Recent, s-a experimentat totusi, pe servere, o tehnica de ascundere a conexiunilor (connection caching), prin care un server nu inchide conexiunea imediat dupa furnizarea raspunsului. Prin operatia de "ascundere" a conexiunii respective, serverul poate raspunde rapid unui client daca acesta "reviziteaza" locatia. Datorita faptului ca site-urile Web devin tot mai complexe, oferind utilizatorilor tot mai multe legaturi "locale" tehnica de ascundere a conexiunii (pentru legaturile locale cunoscute) va imbunatati performantele.


c;HTTP-ul formate, dinam

Prin utilizarea HTTP, clientii si serverele determina in mod dinamic formatele de document, deci cand un browser contacteaza un server, browserul trimite serverului o lista de formate pe care le recunoaste. Serverul raspunde prin trimiterea de date care utilizeaza formatul corespunzator, daca este posibil. Astfel, serverele si clientii pot utiliza formate de date proprii (personalizate) pentru schimbul de date.
Cand un server trimite un document prin Web, acesta poate include informatii despre fisier (numite metainformatii) in antetul HTTP care precede fisierul. Programul care receptioneaza datele poate utiliza informatia din antet pentru interpretarea datelor. Astfel, receptorul obtine informatii despre datele care vor sosi.
Prin utilizarea informatiilor continute in antetul HTTP, aplicatiile negociaza formatele pe care le vor utiliza pentru transferul de obiecte. Daca o aplicatie nu poate recunoaste informatia continuta intr-un antet HTTP, in general o va ignora. Intrucat aplicatiile ignora formatele pe care nu le recunosc, se pot astfel noi protocoale in Web fara a compromite integritatea HTTP.


d;HTTP este lizibil

HTTP este un protocol lizibil deoarece este bazat pe text si nu necesita decodificare pentru a-l citi. De fapt, unele browsere furnizeaza informatii care descriu starea unei tranzactii HTTP, informatii ce pot fi vizualizate pe durata tranzactiilor HTTP.
HTTP este un protocol generic
Mesajele HTTP constau din cereri trimise de client catre server si raspunsuri trimise inapoi de server clientului. Exista doua feluri de mesaje cerere/raspuns : simple si complete.
Mesajele HTTP de cerere completa (Full - Request) si raspuns complet (Full ? Response) utilizeaza un format de mesaj generic (RFC 822, D. H. Crocker). Formatul de mesaj generic HTTP poate include in mesajele de cerere completa si raspuns complet campuri de antet optionale (antete) si un corp de entitate (corpul documentului). Formatul unui mesaj HTTP este generic deoarece formatele mesajelor sunt independente de protocolul HTTP. Cu alte cuvinte, HTTP ignora continutul corpului de entitate. Mesajele de cerere simpla si raspuns simplu nu permit utilizarea unor informatii de antet si sunt limitate la regasirea unui corp de entitate.
Recomandare : Nu trebuie sa utilizati formatul de cerere simpla pentru ca acesta nu permite serverului identificarea tipului de informatii al entitatii. Drept raspuns, programul aplicatie care receptioneaza documentul (browserul) trebuie sa incerce sa afle singur tipul de format al corpului de entitate.
Operatii de cautare, regasire si adnotare efectuate de HTTP.Prin utilizarea HTTP-ului, aplicatiile pot realiza trei operatii cheie : cautare, regasire si adnotare. Pentru a cauta un obiect Web, aplicatiile utilizeaza HTTP pentru a specifica unui server URL-ul obiectului. Daca obiectul exista, aplicatia utilizeaza HTTP-ul pentru regasirea lui. In final, HTTP adnoteaza tentativa aplicatiei de a obtine acces la resursa furnizand aplicatiei informatii de stare (indicatii asupra succesului sau insuccesului operatiei de cautare/regasire).


e;etape tranz HTTP

Cele patru etape ale unei tranzactii HTTP
Clientii si serverele utilizeaza HTTP pentru cereri si raspunsuri. Serverul si clientul mentin conexiunea TCP/IP numai pe durata unei tranzactii (HTTP nu este static), iar serverul, in mod normal, inchide conexiunea dupa terminarea tranzactiei. Deci se pot reconstitui cele patru etape ale unei tranzactii HTTP :
Etapa I : Stabilirea conexiunii. Inainte ca un client si un server sa schimbe informatii, acestia trebuie sa stabileasca o conexiune TCP/IP. Protocolul HTTP foloseste portul 80, dar pot fi utilizate si alte porturi daca serverul si clientul stabilesc de comun acord acest lucru.
Etapa a II-a : Clientul emite o cerere. Fiecare cerere HTTP emisa de un client catre un server Web incepe cu o metoda, urmata de adresa URL a unui obiect. Clientul completeaza aceasta informatie cu versiunea protocolului HTTP pe care il utilizeaza, urmat de CR, LF, optional urmate de informatie codificata intr-un anumit mod, sub forma unui antet. In final, browserul adauga un CR, LF la informatia precedenta, urmat optional de corpul entitatii (un document).
O metoda HTTP este o comanda utilizata de client pentru a specifica scopul cererii catre server. Metodele HTTP corespund unei resurse (identificate prin adresa sa URL). Clientul specifica si versiunea HTTP utilizata (de exemplu 1.0). Toate acestea (metoda, URL, versiunea protocolului HTTP) formeaza linia de cerere (Request ? Line).
Clientul utilizeaza campul de antet al cererii (Request ? Header) pentru a furniza informatii despre cererea in sine si despre clientul care transmite cererea catre server.
Etapa a III-a : Serverul emite un raspuns. Dupa ce un server Web primeste si interpreteaza un mesaj de cerere, serverul raspunde cu un mesaj de raspuns HTTP. Mesajul de raspuns incepe intotdeauna cu versiunea protocoului HTTP, urmata de un cod de stare format din 3 cifre, si o fraza de motiv, un CR, LF si informatii optionale, codificate sub forma unui antet. In final, serverul adauga un CR, LF la informatiile precedente, urmat optional de corpul entitatii.


f;etape tranz HTTP

Codul de stare descrie posibilitatile serverului de a intelege si a satisface cererea clientului. Fraza de motiv este un text scurt de descriere a codului de stare. Versiunea protocolului HTTP, codul de stare si fraza de motiv formeaza impreuna linia de stare.
Un antet de rasouns poate contine informatii specifice legate de resursa solicitata, plus eventuale declaratii MIME care pot fi necesare pentru livrarea raspunsului. Cand un server Web trimite un antet de raspuns unui client, include in mod normal aceleasi informatii furnizate de antetul cererii clientului.
Etapa a IV-a : Serverul termina conexiunea. Dupa rezolvarea cererii clientului, sarcina serverului este terminarea conexiunii TCP/IP cu clientul. Totusi, atat clientul (click pe butonul Stop al browserului) cat si serverul (defectarea unui calculator) pot gestiona o inchidere neasteptata a conexiunii. In ambele cazuri, inchiderea conexiunii termina tranzactia curenta, indiferent de starea sa.
Clasele codului de raspuns HTTP
Prima cifra a codului de acces HTTP defineste clasa codului de raspuns. Exista cinci posibilitati pentru valorile primei cifre :
-1xx : Informational ? aceasta combinatie nu este utilizata dar este rezervata pentru o utilizare ulterioara
-2xx : Succes ? actiunea a fost receptionata, inteleasa si acceptata cu succes
-3xx : Redirectare ? pentru completarea cererii trebuie activata alta actiune
-4xx : Eroare client ? cererea contine sintaxa eronata sau nu poate fi indeplinita
-5xx : Eroare server ? serverul a esuat in indeplinirea unei cereri aparent valide.Definirea metodelor HTTP
O cerere client HTTP reprezinta al doilea pas in secventa de patru etape a unei tranzactii HTTP. Cererea clientului HTTP poate fi de doua feluri : cerere simpla sau completa.
In general, programul trebuie sa utilizeze cereri complete, in afara cazului in care se lucreaza cu HTTP, versiunea 0.9. Singura metoda care utilizeaza cererea simpla este GET, utilizata pentru a regasi o resursa. Sintaxa este : GET URI <CR/LF>


pen -
Prishla pora VODKA

. .
- , ? , ?? . , ? ! !

, , . ? , , , . , ?to vodka? (, ). ? , .
, . :

























































1. 1.) (Indefinite), , ;
2. 2) (Continuos)
























ó

( (: 1992 .; : 2003 .)

. .


, ,
, 䳿, .
, ,
? , , .

,
? , , , .

, , , ,
.
, ?,
?.

,
? , , , .

, ,
.
?, ,
.

,
? , , , .


( )


1.1 " . , , .

1.2"" - , 5.1.

"" - , , , , .

"" - , - , , , . .

" " - - , , () .

" " - , 2.1, 2.3.1-2.3.3 5.1 (), (- , ) , . .

"" - . , , , .

" " - , .

"- " - , , , , , .

" " - .

" " - (, , ), ().

" " - , , . .

"" - - , 50 3 50 /. , .

"" - . - , 400 .

" " - , 5.22-5.25.

" " - 300 , , , .

"" - , .

" " - , , , , , .

" " - , , .

" " - , .

" " - 4.2 , .

"" - 5 , , , .

"" - , , ( ), , ( ) ( ).

"" - , , , , . .

"" - , . , , , , , , , .

" " - , 5.16.1, 5.16.2 () 1.14.1 - 1,14.2 . 5.16.1 5.16.2.

" " - , , .

" ()" - .

" " - , (, , , , ).

"" - , . -.

" " - , .

" " - , .

" " - , , - . , , , .

"" - , , , . () . , - , .

"" - 5 , , .

" " - .

" " - , , , .

"" - , , .

" ( )" -, , , , - , , , .

" " - , , , .

1.3 , , , , .

1.4 .

1.5 , .

, , , , , , , . , , , , .

1.6, , .


17) .


Siin - yks komplekt juhtmeid.

Andmesiinid - toimub andmevahetus mylemas suunas.

Aadressiin - maarab ara maksimaalne adresseeritav malu.

Juhtsiin - komplekt juhtsignaale mylemas suunas.

Siinidraiver - element, mis eraldab siinist mingi seadme.


16) Mikroprotsessorsysteemi (mikroarvuti) komponendid


Sisend-valjund kontroller:

1.paralleelne - sobitab kokku siiniprotokolli

ja sisend-valjund seadme.

2.jarjestik - info edastatakse jarjestikkoodis.

Katkestuste kontroller IRQ - annab katkestuste

nyudmise protsessorile ja lahendab prioriteetide

probleemi.

DMA kontroller - andmevahetus ilma protsessori osavytuta.

Taimer - genereerib erinevaid impulssjadasid.




15) Programm-kask-mikroprogramm-mikrokask.


Programm - jada kaske.

Kask - yhele kasule vastab mikroprogramm.

Mikroprogramm - kasukood maarab mikroprogrammi.

Mikrokask - elementaartegevus, mis taidetakse

operatsioonautomaadis (OA).




14) Andmevahetus mikroprotsessorsysteemis.


Siinitsykkel v. Masinatsykkel - iga siini poole poordumine.

I/O READ - lugemine, I/O WRITE - kirjutamine.

Olekusyna - kood, mis siini kaudu valjastatakse.

Siinikontroller - register, kus sail. infot siinitsykli kohta.

Poordumine malu ja valissseadmete poole - siinitsykli kaudu.

Andmevahetus katkestustega - antakse aktiivsus sisend-valjund

seadmetele

Ilma katkestuseta andmevahetus - kyik valjundseadmed on

passiivsed ja protsessor maarab ara poordumise ja lahendab

prioriteedi probleemi.

Otsepoordusreziim e. DMA - korraldab ise andmevahetuse.

Haarab juhtsiinid enda alla. Andmevahetus labi DMA kontrolleri.




13) .


PAL - koosneb AND- ja OR tyypi maatriksist.

Kitsendus: OR-maatriks on ara fikseeritud.

PLA - koosneb AND- ja OR-tyypi maatriksist.

Mylemad on programmeeritavad.




12) Silpprotsessor (BS-Bit Sliced).


Monoliitprotsal on:

1.fikseeritud kasusysteem,

2.fikseeritud syna pikkus,

3.aeglasem kui silpprotsa MOS-tehnologia

Silpprotsal kasutaja teeb endale ise kasusysteemi ja

maarab syna pikkuse, kiire TTL-tehnoloogia.

Monoliit:

Akumulaaator, Registermalu, ALU, Siinipuhvrid,

pinumalu pointer (SP), Kasudekooder (INC/DEC), yldregistrite blokk.




11) ROM-iga JA.


mikroprogramm on mikrokaskude jada, mis realiseerivad keerukamaid

tehteid (korrutamine).(lihtsamate tehete + - L1, R1, AND, OR abil)

Vertikaalne - pole vahel vyimalik kasutada.

Horisontaalne - suur maluraiskamine.

V-H - kompromiss eelnevatest.




10) Opratsioonautomaat: registermalu, ALU.


Operatsiooniautomaat on operatsiooniseadme osa, milles

realiseeritakse mikrokaskudega ettenahtud elementaartegevusi.

Taidab jargmisi funktsioone: infosynade salvestamine,

mikrooperatsioonide sooritamine ja loogikatingimuste arvutamine.

ALU sooritab aritmeetika ja loogikatehteid.




9) Juhtautomaat: abstraktne, Mealy, Moore.


Abstraktne automaat - mingi must kast millel on

{Z}-sisendit {A}-olekut ja {W}-valjundit,

lambda - valjunditef., sigma-yleminekuf. Kui on maaratud

{A,Z,W,l,d} siis oeldakse, et abstr. automaat on maaratud.

Kui on maaratud ka algolek a1 siis tegem initsiaalse automaadiga

Mealy mudel: AxZ->W , W(t)=l(A(t),Z(t))

Moore mudel: W(t)=l(A(t)) (sisend tahtsust ei oma)




8) .


AKA von Neumani tsykkel.

1.kasukoodi lugemine kasuloenduri (PC) jargi (FETCH),

2.kasuloenduri modifitseerimine PC+1,

3.kasukoodi desifreerimine,

4.kasutaitmine,

5.resultaat.




7) .


Taissummaatorid - vyimaldab liita arvestades ka ylekandeid.

Jarjestikylekande summaator - aeglane

Paralleelylekandega summaator - kasvab ja ka

riistvara kulu

Kiire ylekanne - on jyrjestik-paralleelne meetod. Iga jyrgu

arvutamiseks arvutatakse eraldi Generation (generaator) ja

Propagation (levimine).




6) : RS, JK, MS, D, T.


Triger on elementaarne salvestuselement, 2 olekut. Kasutatakse

maluelementidena registrites, loendurites jne.

asynkroonsed - salv. infi vahetult sisenditesse antud signaalidega

synkroonsed - see on vyimalik ainult synkroimpulsi olemasolul

RS reset set:

R S Qt

0 0 Qt-1 ei muutu

0 1 1 set

1 0 0 reset

1 1 - keelatud

T toggle,

D delay:

C D Qt

0 - Qt-1

1 1 1

1 0 0

JK jump-key (SR), lubatud J=K=1, mis muudab valj vastupidiseks

MS master-slave, 2taktiline triger. Tegevus kas labi S vyi M




5) .


Register - trigeritest koosnevat seadet, mis vyimaldab salvestada,

sailitada ja taasesitada infot (syna kaupa). Igale registrisse

salvestatud syna bitile vastab registri koht

Ilma nihketa - hulk yhise juhtimisega trigereid

Nihkeregistrid: a) nihe paremale, b) nihe vasakule

c) Reverssiivne RG - 2-e suunaline nihe




4) ?.


Loendur - register, millesse salvestatud arv sisendile antud

signaali myjul suureneb yhe vyrra. ?

Summeerivad - loendavad paripidi

Lahutavad - loendavad tagurpidi (reverssiivne)

. ? -

. ? - . - ,=10

. .




3) .


Otsene - kasuga antakse ette operandi aadress, mille jargi see

sealt ka leitakse

Vahetu adresseerimine - operand antakse koos kasuga, malus on

koos kasukood ja operant

Suhteline - antakse operandi aadress kasuloenduri prog. jooksva

aadressi suhtes. Operandi aadress leitakse kasuloenduri ja

juhtaadressi summeerimisega

Kaudne - kaigepealt leitakse malust operandi aadress ja seejarel

teisest malupesast operand

Indekseerimine - baasaadressina kasutatakse indeksiregistris

salvestatud aadressi syna

Autoinkrementne - sarnane kaudsega, aga parast operandi

adresseerimist ja kasu taitmist registri sisu kasvatatakse

2 vyrra vyi 1 vyrra.

Autodekrementne - ,




2) .

ROM (Read only memory) - pusimalu - kasut. alglaadimisprogide

hoidmiseks. Kustutada ei saa, saab ainult lugeda

PROM - ei saa kustutada. Program. pusimalu

EPROM - UV kustutatav

EEPROM - elektriliselt kustutatav

RAM (Random Axess Memory) - muutmalu - kyik on kattesaadav

Salvestab ja kustutab infot

DRAM e. Dunaamiline malu - vajalik tsykliline info uuendamine.

Info kandjaks on kondens.

SRAM e. Staatiline malu - trigerite peal. Ymberkirj. pole vaja

Jadapoordusmalu - eri maluel-tide poole poordumine nyuab eri aja.

Suvapoordumine - poordumise aeg on sama.

Pinumalu - - LIFO e. ?last in, first out?. AKA Stack




1) . .


1 - unipolar technology, 2 - bipolar

DL (diod logic) passiivne

TTL (Transistor-Transistor Logic)-2

STTL (Schotky TTL e. Low TTL) - 2, Shottky,

, . .

ECL (Emitter Coupled Logic) - 2,neg.logika.0,-5,.

I2L (integrated injection logic) elemenditihedus parim,

samas madalam tookiirus

MOS (Metal Oxyde Silicon) - 1,hea pakkida, tarvitab en ainult

lul hetkel,aeglasem kui 2,kuid suurem pakkimis-tiheduse,

energiatarve vaiksem

NMOS (n-channel MOS) - 1

CMOS (Complementary MOS) - 1




Skanner


, . , , , , . - (CCD - Charge-Coupled Device).

(Handheld), (Sheet-Feed), (Flatbed), .

- , . - . , . -,

, , , . ( ) , RGB- . .


Plotter


1) ; 2) ( ), , , (Tractor Feed); 3) , , .




jugaprinter (Inkjet Printer)


, . , 100 . . . . , , . . 98% . , . - . , , , . - . , .




laserprinter (Laser Printer)


, . . , , / . , , , . , . . , . , . .




elektroluminesents kuvar


FED , , CRT-, , . CRT FED , CRT- , , , , FED- , , , , CRT. , , LCD-, , , CRT-. FED- .




plasma kuvar


, , . , . . , , . , , ( , ). . , , , . , , , 10000




LCD


. . - . , , . , . , .




KT1


1. Mis on anaüüsietapi väljunditeks (too välja kolm punkti või aspekti)

* määrata (modelleerida) ärivaldkond, kus see IS töötab

* määrata IS-le nõuded, millele peab ta vastama

*

2. Oma IS millega oled tööl, elus vms kokku puutunud ja määra ära selle turvaklassid

3. Tee omal valikul skeem sellele IS-le

4. Vasta oma küsimusele KT-3


ELUKAAR KOSKMUDELI


1. ärivaldkonna modelleerimine, business modeling

2. nõuete kaardistamine, requirements capture

3. nõuete analüüs, requirements analysis

4. süsteemi disain, design

5. realiseerimine, ehitamine; implementation

6. testimine, test

7. juurutamine, koolitus deployment

8. haldamine (ekspluatatsioon, hooldus, toetus)

9. mahavõtt, retirement (GOTO 1? andmesiire!)




ISKE on ?kolmeastmeline etalonturbe


süsteem?. Millised need kolm astet on, kas:

( ) 1. madal tase, 2. keskmine tase, 3. kõrge tase

( ) 1. turvaklass, 2. turbetase, 3. turvameetmed

( ) 1. kahjud ei ole olulised, 2. kahjud on olulised, 3.

võimatu täita andmekogu funktsiooni

( ) midagi muud: 1. ???.., 2. ???.., 3. ???

2. Mida infosüsteemides turvatakse? Kelle vastu?

Miks?

3. Kuidas saadakse turvaklassidest turbeaste ja

seejärel turvameetmete loetelu?

Miks peaks turvaklassi määrama asutuse

juhtkonna esindaja, mitte IT-töötaja?

2. Millised on ISKE standardi aluseks oleva

turbemudeli osaeesmärgid?

3. Mida tähendab ?R2K1T3S0??

4. Otsige iga turvaosaklassi kohta

rikkumise näiteid Eestist!






ISKE HINDAMISSKAALA


0 - eesmärgi saavutamata jäämine ei too kaasa mingeid kahjusid

1 - eesmärgi saavutamata jäämisel tekkida võivad kahjud ei ole olulised

2 - eesmärgi saavutamata jäämisel võivad tekkida olulised kahjud

3 - eesmärgi saavutamata jäämisel võib olla võimatu täita andmekogu funktsiooni

Teabe hilinemise tagajärgide lubatav kaalukus (R):

R0 - teabe saamatajäämisega ei kaasne tagajärgi;

R1 - teabe saamatajäämisega võib tuua kaasa takistusi funktsiooni täitmisele;

R2 - teabe saamatajäämisega toob kaasa olulise takistuse funktsiooni täitmisele;

R3 - teabe saamatajäämisega toob kaasa funktsiooni täitmatajäämise.

Aegkriitilise teabe käideldavus (K):

K0 - teabe saamisele ei ole seatud tähtaegu;

K1 - teabe saamisele on seatud tähtaeg päevades;

K2 - oluline on teabe saamine tundide jooksul;

K3 - oluline on teabe saamine sekundite jooksul.

Teabe terviklus (T):

T0 - teabe allikas ega muutmise tuvastavatus ei ole olulised;

T1 - teabe muutmise fakt peab olema tuvastatav;

T2 - teabe allikas peab olema tuvastatav;

T3 - teabel on tõestusväärtus.

Teabe konfidentsiaalsus (S):

S0 - juurdepääsu teabele ei piirata;

S1 - teabele juurdepääsu tingimuseks on juurdepääsu taotle va isiku identifitseerimine;

S2 - juurdepääs teabele on lubatav juurdepääsu taotleva isiku õigustatud huvi korral;

S3 - teave on seaduse alusel tunnistatud juurdepääsupiiranguga teabeks




ISKE


turvaklassi peaks määrama asutuse juhtkonna esindaja, mitte IT-töötaja (koostöös!)

R ? andmete käideldavusest teabe hilinemise tagajärgede kaalukus iseloomustab nende kahjude suurust, mis tulenevad sellest, et andmed jäävad volitatud tarbijal õigeks ajaks saamata

K ? andmete käideldavusest aegkriitilise teabe käideldavus ütleb, kui kiiresti peab volitatud tarbija süsteemist

andmed saama

T ? andmete terviklus on andmete päritolu autentsus ning volitamatute muutuste puudumine

S ? andmete konfidentsiaalsus on andmete kättesaadavus ainult selleks volitatud tarbijaile (isikutele või tehnilistele süsteemidele) ning kättesaamatus kõigile ülejäänutele


FURPS+ mudel


FURPS+ MUDEL

U ? kasutatavus, usability - human factors, help,

documentation

R ? usaldusväärsus, reliability - frequency of failure,

recoverability, predictability

P ? jõudlus, performance - response times, throughput,

availability, resource usage

S ? toetatavus, supportability - testability, adaptability,

maintainability, internationalization, configurability,

extensibility

+ indicates ancillary and sub-factors, such as

? Implementation?resource limitations, languages and tools,

hardware

? Interface?constraints imposed by interfacing with external

systems

? Operations?system management in its operational setting

? Packaging

? Legal?licensing and so forth






Milliseid UML skeeme praktikumis kasutasime, milline skeem milleks hea oli ja kuidas kasutati.


* Tegevusskeem (Activity Diagram){

1. UMLi skeemi tüüp protsesside visuaalseks esitamiseks;

2. modelleerib toimingute voogu, ajalist järjestust ja samaaegsust (paralleelsust), otsustuspunkte ja täitjaid}

* State Diagram

* Kasutusloo (User-Case Diagram)

1. kasutuslood on tehnika süsteemi nõuete kirjeldamiseks:

1a. enamike funktsionaalsete nõuete

1b. kasutusloospetsiifiliste mittefunktsionaalsete nõuete

2. NB! Kasutuslood on tekstilised, mitte skeemid ? seega kasutusloo modelleerimine on kirjutamine, mitte joonistamine

2a. UML ei reglementeeri kasutusloo struktuuri!

2b. kasutusloo tehnika on väline vaade süsteemile, käsitledes süsteemi struktuurituna, jagamatuna

2c. rootsi.k > usage case > cases of use (of system) > use case

* (Class Diagramm)

* Entity-Relationship Model

* Physical Architecture

*


Analüütik roll


1. lähenemine, et IS loomine on IT (sh tarkvara) projekteerimine ja ehitamine (sh programmeerimine) mis rahuldab mingit hulka selgelt defineeritud kasutajate infovajadusi, on aegunud

2. Hammer: "Obliterate, Don't Automate!" arvutiseerimisel uuendada, mitte automatiseerida vanu töömeetodeid)

3. analüütik ei ole passiivne kirjeldaja vaid aktiivne ärireeglite ja -protsesside looja ja ümberkujundaja




mõelda ühele infosüsteemile, millega olete töös/elus kokku puutunud (soovitavalt mitte ITK-ga seotud, sh nt ÕIS)





infosüsteem?


? organisatsiooni (töösüsteemi) alamsüsteem elementidega:

1. andmed ja

2. andmete haldamise tehnoloogia (riist- ja tarkvara) ja

3. andmete haldamise reeglid (protseduurid, eeskirjad, ..) ja

4. inimesed

? tegevustega

? info kogumine (ka: hõive, kaardistus)

? andmete säilitamine << üks võimalus on andmebaasis

? töötlemiseks, organiseerimiseks

? andmete edastamine

? info kasutamiseks: taasesituseks, analüüsiks, otsustamiseks, tegutsemiseks

? reaalsuse seisundite ja sündmuste peegeldus




miks analüüsi läbi viiakse?


inimene on üksinda tegutsedes nõrk, seetõttu koondumine organisatsioonidesse

? organisatsiooni eesmärkide saavutamiseks on vajalik:

? operatiivne, taktikaline ja strateegiline otsustamine.

Ratsionaalsete otsuse üheks aluseks info

? organiseerimine ehk koostöö, mille osa on infovahetus




mis on IS analüüs?





wiki


Nõuete analüüs(Requirements Analysis)

- Infosüsteemi piiride leidmiseks

* Funktsionaalsed nõuded - mida infosüsteem peab tegema

* Mittefunktsionaalsed nõuded - kuidas ta peab käituma

Kavandamine(Design) - Nõuetele vastava lahenduse väljamõtlemist

* arhitektuur - jagunemine komponentideks

* suhtlusprotokollid teiste süsteemidega ja kasutajaga (kasutajaliides)

* andmete struktuur ning komponentide sisemised algoritmid

Programmeerimiseks(Implementing) - Nõuetele vastava kavandusprojekti põhjal infosüsteemi realiseerimist

* graafilise materjali toimetamist

* programmilõikude silumist

* testimist ja integreerimist

* kasutajajuhendite loomist ning muid tegevusi, mis ei ole seotud programmeerimisega

Juurutamine - Valmissüsteemi käikuandmist






,1- , .

,1- , .


11 12 1801 . (.. .) 1 . . . , . .. , , , , . 1801 . ? . .1802 . ? . 8 : , . . .1802 ? . , . ..1803- . . 1801-1811 . . .


, , , : .

, , , : .

- .. :
... 1954 . ?-?. , , ( , ), . - , ? , - : , . , - . - : 1955 () ? . , , , - -, : 1962 - , . - ? . . , . 1964 . ...
- .. :
, 90- , . , ?? , ??? , , -- () , - 1980 . - 9 (1971-1975 .). 15 (1970-1985) (). 70- - - . . 70 - . 1982 ...
1984 .., 1985 .
1985 ...
- .. :
? - ?. ( ), . : 1986 . ? ? , - , - . 89 91 - , . 89 - , , . 1990 ? ? . ... , ( ) , . : -. - . , .


2

II. : .

.
, . - .
:
1) ? , , ? -, ? , , - . , ,
2) ? , ? , , , .
3) ,
4) , ? , ,
5) ? ,
6) XVIII ? I : , - ( , 1762 ? , II ? ), .
7) : I ? , I ? , - . .
8)
9) I .
II (1762-1796)
(1762-1815) , 1815 . .
. : , - - , , - , - - .
: , , : , , : , ? , . 1785 ? ?- ? ? , , - , . . ? ? ? . ? - , , .
, -.
, - .
, .
II .
II . , -, .
, , -.


. .

. .

. . . , , - , .
- , , , ( . XVI), , , .
- :
1. .
2. .
3. -
- ? , :
1. .
2.
3. .
-, , , , . .
:
1. (. XIII-80. XIV) ? , (., , .), 1301- , .
: - ? , -; : , , . .; , , , ; - ; ; . -, , , .
(1325-1340). , , , - .
(1359-1389). . 1380 . , . , ? . : , ? .
2. (80. XIV-.XV). ? , .
. II , . . - III (1462-1505) III (1505-1533). III
3. (2 . XV ? XVI .) ? -. III III.
( 1476 . III ), (1478), - (1485), . (1510), (1514), .(1521).
, . 1497 ? ? -, , - . ? . ? . ? -. - , . -.
. . , .
, , , - ? . -. , -. . -, . .

:
1. - .
2. - (-, , , , , ), , --.
3. .
4. , . -, - -. .


- XIX-XX. .

- XIX-XX. .

III (1881-1894) . : 1. . ? 1) ? 50-60.- , 2) 60. ? 2 ? , 3) 70-80 ? . 2. - . -. 3. . 4. .
1) ? , , .
2) ? , , . . . . , (- - )
3)
4) . . ( , , , , , , - , )..
5) : , , . .
? , - -> -. . .
1891-1893 ? : , , . -, .
1892 ? . . ? . : - . ? , ? 10 .
1. : , . 1897 ? , . - : /,
2. ( , . , ).
3. .
4. .
90- ? ,
II (1894-1916).
: 2 ? -> -, . , -. -, ? - . ?18% , / ?80%, ? . ? , , - , . C/ ? ? ? (), -, /, , , .
1903 ? . -> 1905 . ? -
1905 ?
1906 ?
, .
II : , 1903 ? .
II , -> -> -> , .
- -> , II (-, ).
.
, .
. : , - . ? 20 .
1906
1) - ?
2) , .
:
1)
2) - .
3) , , , - .
4) , - , .
, ,
? 14%, - .
.
. - 1917 . .. - 1917 . ? 1 .



#7.

.. - .. .- . - .. , : -, , , . , .1.IX-..- .2.2- .-1- .XI.- I , ;3.2- .XI-.XII., -.. VIII-IX . , / . , .-. / .. /. =>. .. , .,-, ,,,,,, .
--.,. - () . .. - , , , . . -..
.:1.()-. -;2.() ;3.( ) , .. .(2), (1) . / .
.(. )- - => .. - ,.. ., .
. . ..: , ..: => .; .=> ., .=> .. . -( ).
:
- -, -.
, - , , .. - .
.
.-,.- .-. -, ,- . . , . .. -, . ..... . . . . .. . . ., . . - - . ... ( - ).
, .. ./ .. ..2- .XI.- ( , , , , ? ). XI.- , ( .)
: ,- ; .; ; .- ., .
()- , , - -.
.? ?- -
.-..-.- ,. . --(,). .. , , - .
2 :1()- , , . : .2. -( ,- ) (. -, .. ). , .
2- .XII-XIII.- ,..
..: - ( . ),-. ., . -.- - ., ,.( , ,. / .)




. I: .

. I: .

. XVIII . . .
: 1) ? , . ; 2) . -, , ; 3) / - . -; 4) - , ; 5) . ; 6) . : - .
. ↑ 11 , ↑ 5 , -, , , 50 200 , ( - ), . ? -.
: I , , - ,.. - .
, . ( . -) ( ). , - . : - , , ? . 1719 ? -, -. 1724 ? () ? . . - . .
, - . -, , .
: , , . : ( ), ( ). , , , - . ( , ). .
: , , ( ? , , -> , , ()), .
.1) : 1 : , , , , . 2 : , ; 2) ; 3) (-, ); 4) -. 1714 ? , . 1722 ? .
: , - . .
. : . ? , ? . ? ? ( , .).
. , - ? , - . . . . . : , . . : , , , .
. . . : , ? - 1711(. , , ), 1718-1721- (- ? (11)). ? (, , . ? , , ).
: , - , , . .
. 1721 - ? ( . , - ). . , . . - . .
? . , , - . ? , .
:
. - , , - , ? - , -, .
, , - . , 1917. . ? ( ), ? . , , ? , ? , (-=). I -, .


: .

(1533-1584).
.
? (, , ) ? 1547 . - ( ) . : , , -> , .
1547 ? . ? ? , . . ? - , , - .
? ? . 1560 ., . XVI .
. .
? .
? ? . , -, . ? , -.
. ? . . ? ?. . , , . ? . .
. 1556 . ? , . . ( ), ( ).
, XVI . . - .
. 1550 . ? , III, , - ( , ??, - -, . ).
. , ? . .
. ? , (-), ? .
. . 50 . XVI -. , - , . . ? , . , , ? ? . : ? -, , ? - ? 3- .
. , . .
1. ? , , . 1552 ? -, 1557 ? , , , . : . ? 1582 -> ().
2. ? ? ? 1558-1583. : , -> , - ? 1583.
: : ? , ? .
. - (1565-1572)? , , - , .. . : .
. , , , . , ? (, ), , . 4 . . .
:
1)
2) , , .
3) .
, - . - ? ?.
XIX . , , ? ?. . . : ? , , ?, .
?.. , -, ?.


.


18 . . 17-18 . . . , . 17 , , . 17 - . , . . 17 . . . . . -.

. -. . / (). , . . . . . 18 .1 . . . .- , - . 18 ?. . -. . . . . . 18 ? . -. . . . .. . . . . , , , , , , . 18 , . 18 -, . . , . , , - 250 , ? 100 .18 . .

1 90 17 -20 18 . . . . - .1)- .

2) . , , , .

2 30-50 18 . . .1). , 2) 3) 4) .

, . . . ( -).. , ,

3 60-90 . . . . :, . , ., 90 18 , , . . , . , , , . .


, .


. - , . 1 , , . , . , , - . 650 , 1 , , . , . 1722 . , . - , , . .

. .


, .


, , , , 16 , , , , . . / . - , ? . 1 , . - . , .

- -

-

- -

-

-

- 1 / 2

- , . - . . : ( ) .


, .


70 17 1 ? , .

, 8-10 . 1 , 3 :

1

2

3

1702 , ?, , , 15 , 1707, , , (), . , / . 1707-1717. . :

- , - .

- , , . . . ? . . . , . 1702. 19 , 3 :

- ? , .

- - . .

- .

- . ? : .


1/3 18 .


18 2 :

1

2 .

. -. .

? ?, ? ?. , . . / :

-

-

- - .

- , . ? , 1 . :

- ,

-

-

- .

?? ??

, 0 .

??. ..?

2 :1) 1 , .. .

2) .

-

- .

-

-

- , .


1/3 18 .


- 17 . 17 / .1658-1682 . 1682 / , 1 /.

1 ? , 1694 . : , - . 1856 . 18 / . ? 1/3 18 .

, , .

/ , , , . , ? . : ? , -. 2 : - ().

-

, , , . ? ? ? 20 18 , / . 0 / , .. 17 .

2 : . - - ? , , . . . , --1 - . : , ? . - . ? . . : . , .


.


1715, - , . 1, -. . - , , , 3 :

1

2

3 1 . - , 2 , - ( ), . , ? . ?-. , , .()

- :

? ?20 .

? ?.

-.

? ?.

??. - . . , -, . -. . ? .


. , .


. 1725-1762-

, 2, 3, , , , ?.

1755 , !?%: . , . 1757 -, 30-50 - . , , , , - 30-40 .

- 1 1/2 17 . . , , . .

- . - -, - .

1) -

2) - .

2 . - . . -: 1)

2)

3)

4)

. , ?. -?, .

?





- .

- .

/ , .

.

. 4

:

1) -

2) -

:

3) -, .

4) - (, ? ).



1) / , , ,

2) / , , , ?, .

3) , , ,

3 : -

-

-

? 1 2 , ?-1,2,3


.


, . / , , ??, 9 .

5 , 4 , 1762 2 .

. . , , -.

- . -

- , , .

- . ?. - . ., . . . . , / . . 1, 2 9 . 8 . . . , . 1 2 9 . 1 1729 . ? , , ., ? .

,

1 , .


.1703-1769.


18 , , , , , . . . . , ? . . -. ., 1730 . ? ? 1 , . ? . . : , . 30 18 . 1740 . , . . . , . .? ?- 1 - . , . -- , .. /-. . : , , . :

2 : , . .

. . . . , -. 13 6 .1 ---, ~~, -~,~-,2 3 ., 456.. 1 , , , , , . . ..? 2 1-7, 2-6 . . ? , 13 .

- - .

.

.


.


. 3 . . -? (). 3 : , , . ().

. 20 ? ., ., , / . ? 3 : , , . . 1731 , . 1740 . - ., . .

? ? 1750, . 1, ? ?. --., 2 .. .

? , 1 1739 , 1763, .

- . , - ., , .

. 2 :

- , - , , .

- ()-- . .

20 , 11 .

6 , .

. 2 :

- ()-

-

-

- .

- . . , .

- / = . .

.

8

.


.


. . , , . , . , , ? , .. . , , , , . , . / , . 9 . : 5 , , . - 7 . . , ? . - (6- ). .

??. 1747. . - . : , . - , ( ). 3 , . . , . . . 1 . .



1770 ? . , . , , , - . . , . . ? 3 .- .


.


1760-1790 60-90 ? , .. . , , , . 2. , . . 60-90 , , , -.. , , . ? 2, 2 1, -.- ? , . : ? , ? . , 1767 , . , .-1 . 2 ??- . , . 2 , , .

2 , ??

. , , , , , .

:

- , , , -.

- , .

1762- .

, - .

- .

2 , ? ?.


.


, . . , . 2 : - . - . -, , ? . . , .. . - . ., ? . . . 2 :-?, - ().

? , . - ? . , .. . . . , . . - . (). 12 , 30 , 50-70 : 50- , 60 - -. 70 - . . 1 , , .

??-? . -.


.


2 . . 1769 ? ?. -1 ? . 69-74 4 : ?? ?? ??? ??.

? ? 69-70 1000 . ??72-73

?? - , . -. . . , , , . : / . ..

*** ??72 . -, . ? ?4, / . 1 - . ? .

? .

: 2 . : .

? ?. -, . . , . . 2.

? ?. . .. . . 2 . . 70 . : . , . ?

, 1 1 , - , ? , .


. 70-80-.


? ?.

, , , , ? . ,

1 . . , -. . ?-??. , . ? ? , .


.


1786 2 ? ?. , . .

2, .

. , , , 2, , , , .

, , =. , .. .

1789, .

. . 2 .

, . , . , , -? 18 .


???????????????? ?????.


?????? ????????????? ? 18 ???? ?????????, ??? ??? ?? ????????? ???. ??????????? ?.?. ????????, ? ?????? ????? ?????????? ???????? ? ??????????? ??????? ?????? ?? ????????. ?? 2 ? 18 ? ????????? ????????, ??? ????? ?????. ??? ??? ???? ????? ?????. ???????????? ?? ?????, ????? ?????????? ? ????????.????-??? ??? ? ??? ???. ???????? ??? ? ???? ???? ??? ?? ??/??? ???.?????????: ???????, ???????, ??????, ????????, ?????????, ?????. ???????????? ???? ???? ????? ? ?????. ????? ?/? ????????????? ? ??????., ?? ????? ??? ?????., ???? ????? ????, ???????? ???-?. ???? - ???????? ??????, ?? ??? ???????, ?????? ?????? ? ??????, ?????? ?????, ??????? ?????.

4 ?????: - ???? ???????, - ??????????? ?????, - ???????? - ????????? ???????, ???-??????? ???(????? ???????).


.


. 1780 , , . : ? , . . ? , .( , , ? ). 2 : - . - .


.


17 . , / . .

, . . ..-

. , . ? ?. ? ?, ? ?. . , 18 . ? ?. , , ? . , ? . ? ?.1775., 1779 , ? . . ..- . . . , . ? , , . 3 : - . ? , . ? ( , ). , , . . . . , . 3 , .


, .


? . . . : -

- , - .

. , , - . . 3 : ?? -

- , - .

1 : ? ?

. - .

: 60 . -, . , -, .


.


? : , - , - ( - , )., - . - . - . 2 .: - ()., . . ? . - - . 18 2 .

- , , . : ?, ? ?. 1771, ??. 1783. ?? (, 17 , .) .- 19

. 2 : . : . , . , 2 .


??.


1778-1 ? ?, = ., ? ? , ? ?- . ??. .

, . ?? . , . , . , 1 ? , , .. . . .


.




, , , , . ? . -, , ? , , . -. -. , . , . , , / -. . . 1779 ? , , , . . , ? -, . , ? . . / . . : ?? 1782, ? ? 1783, ? ? 1784, ? ? 1789.

-- - . .

: ? ?.1779, ? ?. 1795, ?? ?? 1794. (). . ? ? , ? , - , . .


.


50-60 18. 90 , 1 10- 19.18120 . 2 . , -.

, . / : 1 -- -, . . , , , . ? .( ). - ? ?, , . ? . . : - . - , ? . . : , , , .

:- . 20-30 18.

.?, , , , .

- 2, , , . . , . . ( ). ?, - , . ? ( ).- , - , .


C

45454545



 ;  ?;    -    1000 , - 6-220  - 330 .

, , , . - 330-1150 , ?? .

, - , ?? 110-220 . 110-330 , , ?. - ? , (110, 220 ) , 㳿 . - ?, , .

, - , ?? , , . 0,4-20 , 15 .

, .

? , . , ( 1.1, ,). .

- ( 1.1, ). .

( 1.1, ) , . , ?? . ? . 1.1 , ? . ( ). : ( 1.1), .



"" 1866 . ..... .



...



-





- ,

30000 ...




Wap:i/o errors

WAP- . ?

, . , <?xml ?> encoding=windows-1251, , windows-1251. . , , . WML Unicode convertor. . , , . .



, , .



(Δχ > 2 ), , , , .



, NaCl :

Δχ = 3,0(Cl) - 0,9(Na) = 2,1



Na (1 ) Cl (7 ) Na+ Cl- ( 8 ), , .. .





. ,



Select t_lector.fio_lector, t_disc.name, t_typeexercise.name_type, cast(char(AVG(double(t_cenz.cenz))) as varchar(4)) || ' ' || '(' || cast(char(AVG((t_cenz.cenz)*(100/5))) as varchar(4)) || '%' || ')'



From t_disc

Inner Join t_lesson On t_disc.id_disc=t_lesson.id_disc and t_disc.name = '' and

t_lesson.begin_lesson >= '2008-10-01 10:00:00.0' and t_lesson.end_lesson <= '2008-12-01 12:00:00.0'

Inner Join t_lector On t_lector.id_lector=t_lesson.id_lector

Inner Join t_exercise On t_exercise.id_lesson=t_lesson.id_lesson

Inner join wasteland.t_typeexercise t_typeexercise on t_typeexercise.id_typeexercise = t_exercise.id_typeexercise

Inner Join t_cenz On t_cenz.id_exercise=t_exercise.id_exercise



group by t_lector.fio_lector, t_disc.name, t_typeexercise.name_type

2008-10-01 10:00:00 2008-12-01 12:00:00





Select t_office.full_name, AVG(double(t_cenz.cenz))



From t_office

Inner Join t_lector On t_lector.id_office=t_office.id_office

Inner Join t_lesson On t_lector.id_lector=t_lesson.id_lector and

t_lesson.begin_lesson >= '2008-10-01 10:00:00.0' and t_lesson.end_lesson <= '2008-12-01 12:00:00.0'

Inner Join t_exercise On t_exercise.id_lesson=t_lesson.id_lesson

Inner join wasteland.t_typeexercise t_typeexercise on t_typeexercise.id_typeexercise = t_exercise.id_typeexercise

Inner Join t_cenz On t_cenz.id_exercise=t_exercise.id_exercise



group by t_office.full_name



2008-10-01 10:00:00 2008-12-01 12:00:00






, ,




Select t_lector.fio_lector, t_office.full_name as office , t_disc.name as disc

From t_disc

Inner Join t_lesson On t_disc.id_disc=t_lesson.id_disc and

t_lesson.begin_lesson >= '2008-10-01 10:00:00.0' and t_lesson.end_lesson <= '2008-12-01 12:00:00.0'

Inner Join t_lector On t_lector.id_lector=t_lesson.id_lector

Inner join t_office on t_office.id_office = t_lector.id_office

Inner Join t_exercise On t_exercise.id_lesson=t_lesson.id_lesson

Inner join wasteland.t_typeexercise t_typeexercise on t_typeexercise.id_typeexercise = t_exercise.id_typeexercise and t_typeexercise.name_type = ''



group by t_lector.fio_lector,t_office.full_name, t_disc.name



2008-10-01 10:00:00 2008-12-01 12:00:00






, . ,




Select t_disc.name as disc, t_typeexercise.name_type, t_exercise.thema

from wasteland.t_student t_student

inner join wasteland.t_cenz t_cenz on t_cenz.id_student =t_student.id_student

inner join wasteland.t_learngroup t_learngroup on t_learngroup.id_learngroup = t_student.id_learngroup and t_learngroup.id_learngroup = 2

inner join wasteland.t_exercise t_exercise on t_exercise.id_exercise = t_cenz.id_exercise

inner join wasteland.t_typeexercise t_typeexercise on t_typeexercise.id_typeexercise = t_exercise.id_typeexercise

inner join wasteland.t_lesson t_lesson on t_lesson.id_lesson = t_exercise.id_lesson

inner join wasteland.t_disc t_disc on t_disc.id_disc = t_lesson.id_disc



group by t_disc.name, t_typeexercise.name_type, t_exercise.thema



= 2






, .




Select t_typeexercise.name_type, t_exercise.thema

from wasteland.t_exercise t_exercise

inner join wasteland.t_typeexercise t_typeexercise on t_typeexercise.id_typeexercise = t_exercise.id_typeexercise

inner join wasteland.t_lesson t_lesson on t_lesson.id_lesson = t_exercise.id_lesson and

t_lesson.begin_lesson >= '2008-10-01 10:00:00.0' and t_lesson.end_lesson <= '2008-12-01 12:00:00.0'

inner join wasteland.t_disc t_disc on t_disc.id_disc = t_lesson.id_disc and T_disc.name = ''



group by t_typeexercise.name_type, t_exercise.thema



2008-10-01 10:00:00 2008-12-01 12:00:00






, ,




Select t_disc.full_name, t_lector.fio_lector, t_typeexercise.name_type

From t_disc

Inner Join t_lesson On t_lesson.id_disc=t_disc.id_disc

Inner Join t_lector On t_lector.id_lector=t_lesson.id_lector

Inner Join t_exercise On t_exercise.id_lesson=t_lesson.id_lesson

Inner Join t_typeexercise On t_typeexercise.id_typeexercise=t_exercise.id_typeexercise

Where t_lesson.lesson_begin>'2007-01-01 10:00:00' and t_lesson.lesson_end<'2008-06-05 10:00:00'

Order by t_disc.full_name, t_lector.fio_lector, t_typeexercise.name_type






, .




Select distinct t_disc.full_name, t_structdisc.name_part

From t_learngroup

Inner Join t_lesson On t_learngroup.id_learngroup=t_lesson.id_learngroup

Inner Join t_disc On t_lesson.id_disc=t_disc.id_disc

Inner Join t_structdisc On t_structdisc.id_disc=t_disc.id_disc

Where t_learngroup.id_formlearn=1 and t_lesson.lesson_begin>'2007-01-01 10:00:00' and t_lesson.lesson_end<'2008-06-05 10:00:00'

Order by t_disc.full_name






, , . , , .




Select distinct t_institut.sec_name as inst, t_spec.sec_name as spec, t_specs.sec_name as specs, t_formlearn.sec_name as formlearn,

(Select count(1)

from t_learngroup

Inner Join t_student On t_student.id_learngroup=t_learngroup.id_learngroup

where id_spec=t_spec.id_spec) as stud

From t_lesson

Inner Join t_learngroup On t_lesson.id_learngroup=t_learngroup.id_learngroup

Inner Join t_institut On t_learngroup.id_institut=t_institut.id_institut

Inner Join t_spec On t_learngroup.id_spec=t_spec.id_spec

Inner Join t_specs On t_learngroup.id_specs=t_specs.id_specs

Inner Join t_formlearn On t_learngroup.id_formlearn=t_formlearn.id_formlearn

Where t_lesson.lesson_begin>'2007-01-01 10:00:00' and t_lesson.lesson_end<'2008-06-05 10:00:00'

Group By t_institut.sec_name, t_spec.sec_name, t_specs.sec_name, t_formlearn.sec_name, t_spec.id_spec

Order By t_institut.sec_name, t_spec.sec_name, t_specs.sec_name, t_formlearn.sec_name






,




Select t_place.name

From t_place

Where 0=(select count(1)

from t_lesson

where t_lesson.lesson_begin>'2007-01-01 9:00:00' and t_lesson.lesson_end<'2008-06-01 9:00:00' and id_place=t_place.id_place)






, . , .




Select t_student.fio_student, t_exercise.thema

From t_exercise

Inner Join t_lesson On (t_lesson.id_lesson=t_exercise.id_lesson and t_lesson.id_disc=1 and t_lesson.lesson_begin='2007-12-05 12:00:00')

Inner Join t_learngroup On t_learngroup.id_learngroup=t_lesson.id_learngroup

Inner Join t_student On t_learngroup.id_learngroup=t_student.id_learngroup

Where 0=(select count(1)

from t_cenz

where id_student=t_student.id_student and id_exercise=t_exercise.id_exercise)

Order By t_student.fio_student






, . , ,




Select t_student.fio_student, t_institut.sec_name as inst, t_spec.sec_name as spec, t_specs.sec_name as specs, t_formlearn.sec_name as formlearn,

t_learngroup.kurs, t_learngroup.group, t_disc.full_name as disc

From t_lesson

Inner Join t_disc On t_disc.id_disc=t_lesson.id_disc

Inner Join t_learngroup On t_learngroup.id_learngroup=t_lesson.id_learngroup

Inner Join t_student On t_learngroup.id_learngroup=t_student.id_learngroup

Inner Join t_institut On t_learngroup.id_institut=t_institut.id_institut

Inner Join t_spec On t_learngroup.id_spec=t_spec.id_spec

Inner Join t_specs On t_learngroup.id_specs=t_specs.id_specs

Inner Join t_formlearn On t_learngroup.id_formlearn=t_formlearn.id_formlearn

Where t_lesson.id_lector=1 and t_lesson.lesson_begin>'2007-01-01 9:00:00' and t_lesson.lesson_end<'2008-06-01 15:00:00'

Group By t_institut.sec_name, t_spec.sec_name, t_specs.sec_name, t_formlearn.sec_name, t_learngroup.kurs, t_learngroup.group, t_disc.full_name, t_student.fio_student




. ( ) . , ,






Select t_lector.fio_lector, t_exercise.thema, SUM( case when t_cenz.cenz > 2 then 1 else 0 END)*100 / count(t_cenz.cenz)



From t_disc

Inner Join t_lesson On t_disc.id_disc=t_lesson.id_disc and t_disc.name = ''

Inner Join t_lector On t_lector.id_lector=t_lesson.id_lector

Inner Join t_exercise On t_exercise.id_lesson=t_lesson.id_lesson

Inner Join t_cenz On t_cenz.id_exercise=t_exercise.id_exercise



group by t_lector.fio_lector, t_exercise.thema








,




Select t_disc.name as disc, t_struct_disc.part_name as struct

from wasteland.t_disc t_disc

inner join wasteland.t_lesson t_lesson on t_lesson.id_disc = t_disc.id_disc and

t_lesson.begin_lesson >= '2008-10-01 10:00:00.0' and t_lesson.end_lesson <= '2008-12-01 12:00:00.0'

inner join wasteland.t_struct_disc t_struct_disc on t_disc.id_disc = t_struct_disc.id_disc

inner join wasteland.t_exercise t_exercise on t_lesson.id_lesson = t_exercise.id_lesson

inner join wasteland.t_cenz t_cenz on t_cenz.id_exercise = t_exercise.id_exercise

inner join wasteland.t_student t_student on t_cenz.id_student = t_student.id_student and t_student.id_learngroup = 2

inner join wasteland.t_learngroup t_learngroup on t_student.id_learngroup = t_learngroup.id_learngroup

group by t_disc.name, t_struct_disc.part_name



2 2008-10-01 10:00:00 2008-12-01 12:00:00




, ,




Select distinct t_lector.fio_lector as fio, t_office.full_name as office, t_disc.name as disc

from wasteland.t_lector t_lector

inner join wasteland.t_office t_office on t_lector.id_office = t_office.id_office

inner join wasteland.t_lesson t_lesson on t_lector.id_lector = t_lesson.id_lector and

t_lesson.begin_lesson >= '2008-10-01 10:00:00.0' and t_lesson.end_lesson <= '2008-12-01 12:00:00.0'



inner join wasteland.t_disc t_disc on t_lesson.id_disc = t_disc.id_disc



2008-10-01 10:00:00 2008-12-01 12:00:00




,




Select distinct t_lector.fio_lector as fio, t_office.full_name as office

from wasteland.t_lector t_lector

inner join wasteland.t_office t_office on t_lector.id_office = t_office.id_office

inner join wasteland.t_lesson t_lesson on t_lector.id_lector = t_lesson.id_lector



inner join wasteland.t_disc t_disc on t_lesson.id_disc = t_disc.id_disc and t_disc.name = ''

inner join wasteland.t_exercise t_exercise on t_lesson.id_lesson = t_exercise.id_lesson

inner join wasteland.t_cenz t_cenz on t_cenz.id_exercise = t_exercise.id_exercise

inner join wasteland.t_student t_student on t_cenz.id_student = t_student.id_student and t_student.id_learngroup = 2

inner join wasteland.t_learngroup t_learngroup on t_student.id_learngroup = t_learngroup.id_learngroup and t_learngroup.learn_yaer = '2006-2007'



, 2 2006-2007




,




SELECT DISTINCT T_STUDENT.FIO

FROM WASTELAND.t_disc AS t_disc

Inner Join wasteland.t_lesson t_lesson On t_lesson.id_disc=t_disc.id_disc and t_disc.name = ''



Inner Join wasteland.t_exercise t_exercise On t_exercise.id_lesson=t_lesson.id_lesson

Inner join wasteland.t_typeexercise t_typeexercise On t_typeexercise.id_typeexercise=t_exercise.id_typeexercise and t_typeexercise.name_type = ''

Inner Join wasteland.t_cenz t_cenz On t_cenz.id_exercise=t_exercise.id_exercise and t_cenz.cenz > 2

Inner Join wasteland.t_student t_student On t_student.id_student=t_cenz.id_student



where 0= (select count(1)from t_learngroup, t_disc

Inner Join wasteland.t_lesson t_lesson On t_lesson.id_disc=t_disc.id_disc and t_disc.name = ''



Inner Join wasteland.t_exercise t_exercise On t_exercise.id_lesson=t_lesson.id_lesson

Inner join wasteland.t_typeexercise t_typeexercise On t_typeexercise.id_typeexercise=t_exercise.id_typeexercise and t_typeexercise.name_type = ''

Inner Join wasteland.t_cenz t_cenz On t_cenz.id_exercise=t_exercise.id_exercise and t_cenz.cenz = 2

where id_student=t_student.id_student and t_learngroup.learn_yaer = '2006-2007' )







Select t_exercise.thema, t_disc.full_name AS disc, t_lector.fio_lector

From t_lector

Inner Join t_lesson On t_lesson.id_lector=t_lector.id_lector

Inner Join t_disc On t_disc.id_disc=t_lesson.id_disc

Inner Join t_exercise On t_exercise.id_lesson=t_lesson.id_lesson

Where t_lector.id_lector=1

Group By t_disc.full_name, t_exercise.thema, t_lector.fio_lector







Select t_student.fio_student

From t_formlearn

Inner Join t_learngroup On t_formlearn.id_formlearn=t_learngroup.id_formlearn

Inner Join t_student On t_learngroup.id_learngroup=t_student.id_learngroup

Where t_formlearn.id_formlearn=1 and t_learngroup.learn_year='2007-2008'

Order By t_student.fio_student




. :




Select t_lector.fio_lector, t_disc.full_name

From t_office

Inner Join t_lector On t_lector.id_office=t_office.id_office

Inner Join t_lesson On t_lesson.id_lector=t_lector.id_lector

Inner Join t_disc On t_disc.id_disc=t_lesson.id_disc

Where t_office.id_office=1

Group By t_lector.fio_lector, t_disc.full_name




,






SELECT DISTINCT T_STUDENT.FIO

FROM WASTELAND.t_disc AS t_disc

Inner Join wasteland.t_lesson t_lesson On t_lesson.id_disc=t_disc.id_disc and t_disc.id_disc = 1

and t_lesson.begin_lesson >= '2008-10-01 10:00:00.0' and t_lesson.end_lesson <= '2008-12-01 12:00:00.0'

Inner Join wasteland.t_exercise t_exercise On t_exercise.id_lesson=t_lesson.id_lesson

Inner Join wasteland.t_cenz t_cenz On t_cenz.id_exercise=t_exercise.id_exercise

Inner Join wasteland.t_student t_student On t_student.id_student=t_cenz.id_student



where t_student.id_student=t_cenz.id_student

group by (t_student.fio) having min(t_cenz.cenz)<>2;




,




Select t_structdisc.name_part, t_lector.fio_lector, t_disc.full_name

from t_lector

Inner Join t_lesson On t_lector.id_lector=t_lesson.id_lector

Inner Join t_disc On t_disc.id_disc=t_lesson.id_disc

Inner Join t_structdisc On t_structdisc.id_disc=t_disc.id_disc

Where t_disc.id_disc=1 and t_lector.id_lector=1

Order by t_structdisc.name_part




5


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40


4


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40




3


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40




2


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40




1


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40




1


22313231131112343432




1. , . . , .

2. , . . . 131, 132 . , . , , (. . 134 136 ).

3. , .

, .. . . , , , .

, , .

.

, , .

?



.



?



, . , , , , . , , . , , , .



, .



. . , . , , .



, .



, , , .



, . . , .



:



1) , ;



2) ;



3) , ;



4) , () ;



5) .



.



, , . , . 76 .



, , , . , .



. . . . , .



, .


- . - .

? -, - , - - .



, - .



- -:



) ? -. - ? . - ;



) , . ? - ;



) () - , - , ;



) , , . - , .



() - , - , . - , . .



- , - , .



- - , , -, , .



() - , - , :



1) : ) - ; ) ; ) ; ) ( -);



2) : ) , - ; ) , .



, . .



? - , - , . - - , . , , ? , - ?





- , , . : , , , ,



, , ., .. (.61 ).

(.1 .61). : - ; - .

, , , , , .. , , . , . , .

, , , , . . , , . , , , .

, , , , , . , . , , ( , ..), .



18. , :



-- 1) - ;



2) , .



, .



, . , :

-- , . , , , () . () . , () .



- , . , , , , , . . 150 . , , , .




, , .

. - . - , , , / . . , , . . >- . , . , . . . . , , . , , , - . . . . . . . . . - , . . , , - , . . . . , . . , . : 1) ; 2) /; 3) . . / , . 1. - : ) ;) : ) ; ). . 3. : ) - -); 1.- ; 2. . ; 3. -;4. - - ;5. . -; 6.. -. ), . - - (). 1.- 2.. ; 3.-; 4.-; 5. . . ; 6.; 7.-; 8.-.



, , , .



, , .



. (.43 , .53 ) (.43 ).



(, , ) . (.43-48, 126, 129, 148 .).



. , , . , , , , (, ..).



. , , .



.



, , , . , -, , , , -, , . , (.182 189 ). , , , , .



, , , , .4 42 , , - .



, 44 , :

;

, . , , , , , ;

, , , , ;

, , ;

. , ;

(.35 );

, , , .



, , , ( ) () . , .39 , , . , .







. . .



, .



, , . ; , ; ; , .







, , , (.46 ), . , , , , , .. , , , :

;

;

;

;

;

.



, . , , , . .

, , : . . , . . , .




I- : , , , .

I- : , ,

, .



,

,

(, ,

- , ).



,

. ,

, , , ,

, ,

.

, ,

, ,

.

. .35 ,

"

".



.

, ,

, , ,

.

.

, , ,

, .



,

,

, ,

.



.

,

, ,

,

, (.49, 53-56),

, ,

.



, ,

,

,

- .

.

-

.



,

. , ,

, , ,

, .



,

( , ).



(),

,

.



.



,

: " (

) ". ,

, : "

( ) ".

, ,

() .



.

, (, ,

),

.



,

.197 (,





.).



,

, .



.



, .



.

, .



.

, ,

, .

- , , ..



.



,

.



, (, ,

).

. ,

, . , ,

,

. , ,

, ,

.



(

) - , , , -

: ( ), ,

,

..



, , ,

.

,

, , ..



,

( ,

..), , , .



,

, .



,

, , .

,

, , .

,

, , ,

, ,

.





.

, , .



,

( ,

),

, .

,

,

.



,

, ,



.



, ,

.

, ,

.





.

, .

, ,

,

.210, 211 ..





, :

( ), ( ),



,



.



, , ,

, ,

. ,

.



,

, , , ,

.

, . , ,



,

,

, ,

.



, ,

. -

.

, "

" . 24 1995 .





, .



.

,

(.210, 211),

.



:

,

( ,

- ), ,

(

,

).




1. , -




231 2.2 - .



, . 231 . " , - ", .231 24-1 , -, . , .1 .231 ( 23 ) , .



, .2 .32 , , . , .1 .231 , .



24-1 , , .



, , 24-1, , , , (.2 .27 ), , , , .



(, .24-30 ), , .2 .231.



, - , 22-24-1, . 2 .47 . - " ", " ", " ", " ", " " ., ( ) , , , .



.46 .231, , : ) , , , : ) .2 .231 24-1 , ; ) , , () . , , 22-24-1, " " , " 15 1995 .



2 .231 , - , . , .2 .231, , ( ) , , ; () , , , () .



1. , - , : 1) () (, ) , , , , - , ; 2) , , , - .



- (), . .



, , - , , : , , , ..



- , , : , . - , (.126), , ., , - .



(), , .



, - , . () , , .









DOS.

- , . . .

, ,

( ..), ()

.

() .

,



, , .

,

.

,

.

, ,



. ,

MS DOS Microsoft Corp. DOS . :

- (BIOS),

() . . Ÿ

,

-. , - -

.

, 1- DOS. Ÿ

, .

DOS. IO.SYS MSDOS.SYS.

. IO.SYS

- - . MSDOS.SYS

DOS. DOS

, .

COMMAND.COM , . .

, Type, Dir, . . .

()

, , ,

. DOS -

, .

, , ,

..

.

- , . . .

, ,

( ..), ()

.

() .

,



, , .

,

.

,

.

, ,



. ,

MS DOS Microsoft

Windows. Windows .

DOS :1.W .

, DOS, W.2. W

.

. W . W



. W . W

, , ,

DOS. , IBM OS/2 Warp

3.0 4.0, UNIX .

DOS.

DOS .

, DOS

. DOS , ,

. DOS ,

: A> C:>.

enter. , ,

, DOS,

. . DOS

.

Windows Windows.

Windows

Microsoft , ,

: 150 . IBM PC-

, Windows 100 . . ,

Windows,

.

4 1995

Windows 95.

- ,

, (drag-and-drop),

.



.

Windows 95

Windows, 32-

(API),

32- , ,



. FAT

, , , ;

255 .




"" 1866 .



...



-





- ,

30000 ...




666766


Hdhdhdhdhshs


ggshdhdhdhdhdh


Hdhdjdjdhdhdhdhhd


Lotus Notes. .


@- - Notes , Notes.

: @FunctionName(Arg1; Arg2; ...; ArgN);

. , . . .

, , @Command, @PostedCommand, @DocMark, @GetPortsList, @PickList, @MailSend, @Name, @Prompt - . .

.

@Prompt([OK]; Title; Subject)

@Name([CN]; AUTHOR)

@Command([EditClear])

@- . - .

@- - , . @- . , . @- - "Run once"- , , , . , .

7.1. @If , @Do, @Select, @Return

@If( _1; _1; _2; _2; ... ; _99; _99; _ ) - . (TRUE), , . (FALSE), .. , . , "_". .

99 , , , . : @If(; ; _).

@Do( _1; _2; ... ; _n ) - . .

@Do @PostedCommand @Command, , , @Select( ; _1; _2; ... ; _n )

, . n, . , .. @PostedCommand @Do.

@Return( ) - . , , @Error, , , " ", ("") (TRUE FALSE).

@Return , , @If ,

7.2. NOTES.INI

@Environment()

@Environment(_)

@Environment(; )

@Environment(_; )

. NOTES.INI (Windows, OS/2, UNIX) Notes Preferences (Macintosh). , . NOTES.INI, : OrderNumber, ITD_SaveDUID DocumentAdvisors . (.. @Return) .

@Environment ( ) NOTES.INI . NOTES.INI, . . , .

@Environment NOTES.INI ( ENVIRONMENT). (, "PO123"), , (, @UserName @Text(Total)). , . , , . "" , , NOTES.INI.

@Environment , , . , , , . , - . , NOTES.INI . , , , , . , .

7.3.

@Set(; ) - . , . .

, @Set , . , , :

__ := "";

, @Set "" , , @If @Do.

@SetField(; ) - . , @SetField , , , @SetField . , , . , , FIELD, , :

FIELD _:= _;

@SetField . , . FIELD, , @SetField .

@SetField , -, .

7.4.

@DeleteDocument - -, @DeleteDocument , .

@DeleteDocument -, . @DeleteDocument , , , .

@DeleteField - -, @DeleteField , .

@DeleteField -, . , , .

7.5.

@DocumentUniqueID - (UNID) - 32-x , .

"" "ID:", OF " " ON " ": CE442676:95A4F344-C32562CA:005C80DB. Notes . 16 (8 ) - , 16 - . Notes , ( "") , , , 16 . . , - , , , , . "ID:" , .

Notes, "" -, . , - $Ref, - -.

@InheritedDocumentUniqueID - , , . , , , "" . , "" (DoLink) .

@NoteID - 8- - NT, , "NT000023DA". NoteID " " .

@DocFields - , .

@GetDocField( UNID ; _ ) - _ , UNID. _ (, ). : , , - ... , .

@SetDocField( UNID ; _ ; _ ) - _ UNID. _ . _ .

@SetDocField , . , .

7.6. "-"

@Now - "-".

@Date( ; ; )

@Date( ; ; ; ; ; )

@Date( [-] )

"-", . (, , , , , ) @Date . @Date([-]) "-". @Date , , . "-" , [10/31/95 12:00:00].

@Today - . @Date(@Now). .

@Yesterday - "-", .

@Tomorrow - "-", .

@Time( ; ; )

@Time( ; ; ; ; ; )

@Time( [-] )

"-", .

@Day( - ) - .

@Month( - ) - "-".

@Year( - ) - "-"; .

@Hour( - ) - "-".

@Minute( - ) - "-".

@Second( - ) - "-".

@IsTime( ) - 1 (TRUE), "-"; 0 (FALSE).

@TextToTime( ) - , , "-". "Today", "Tomorrow" "Yesterday" ("", "" "") . "-".

@Weekday( - ) - , "" "-", . 1 7, 1, - 2, ..

@Adjust( -; ; ; ; ; ; ) - "-" ("" + "" + "" + "" + "" + "" ). . ; - , 0. @Adjust - , , .

7.7. ,

@Created - .

@Modified - "-", , . , @Modified , ; . @Modified .

@Accessed - "-" ( ) . , @Accessed, ; . " ": .

@Accessed , , -. , @Accessed ( ), . CDROM, @Accessed , .. Notes. , "" .

7.8.

@Length( ) @Length( _ ) - , @Length . , @Length .

@LowerCase( ) @UpperCase( ) @ProperCase( ) - @LowerCase , @UpperCase - , @ProperCase - - , - .

@NewLine - ( ) .

@Trim( ) @Trim( _ ) - . , .

@Begins( ; ) @Begins( ; _ ) - , ( ) . 1 (TRUE), , , 0 (FALSE), . .

@Contains( ; ) @Contains( ; _ ) - , ( ) . 1 (TRUE), ; 0 (FALSE). .

@Ends( ; ) @Ends( ; _ ) - , ( ) . 1 (TRUE), , 0 (FALSE), . .

@Left( ; ) @Left( ; )

@Left( _; ) @Left( _; )

, @Left . , . , .

@LeftBack( ; ) @LeftBack( ; )

@LeftBack( _; ) @LeftBack( _; )

, . , . , .

@Right( ; ) @Right( ; )

@Right( _; ) @Right( _; )

. , . @Right(; ) . , .

@RightBack( ; ) @RightBack( ; )

@RightBack( _; ) @RightBack( _; )

@RightBack(; ) . , . @RightBack(; ) . , .

@Middle( ; ; _ )

@Middle( ; ""; _ )

@Middle( _; ; _ )

@Middle( _; ""; _ )

@Middle(; ; _). , , , , _ . _ , , "" . _ , , .

@Middle(; ""; _). , "" , . _ , , "" . _ , , "" . , .

@MiddleBack( ; ; _ )

@MiddleBack( ; ""; _ )

@MiddleBack( _; ; _ )

@MiddleBack( _; ""; _ )

@MiddleBack(; ; _). , , , , _ . _ , , . _ , , .

@MiddleBack(; ""; _). c , "" , , _ . _ , , "" . _ , , "" .

, .

@Matches( ; ) - -. - . @Matches 1 (TRUE), , 0 (FALSE), .

:

@Text( ) @Text( ; ) - . , . . . , .

@Text "-". "": Dx, Tx, Zx, Sx. , .

, , , , Sx.

@Text . "" , .

@TextToNumber() - , , . .

@ReplaceSubstring( _ ; ; _ ) - _ _. . .

, _, "" _. "" _ .

7.9.

@Elements( ) - , "-" () . @Elements("") 0.

@IsMember( ; _ )

@IsMember( __1; __2 )

1 (TRUE), ; 0 (FALSE), . , 1, _1 _2. .

@IsNotMember( ; _ )

@IsNotMember( __1; __2 )

1 (TRUE), ; 0 (FALSE), . , 1, _1 _2. .

@Member( ; _ ) - 0, ; 1 n, , 1 n .

@Replace( _; ; _ ) - , "". "_". ( "" , ).

"_" "", "_" "" "". : "_" ; "" , @Trim() .

@Subset( ; ) - "" , , . "" , , . , .

@Unique( _ ) - . .

@Keywords( __1 ; __2 )

@Keywords( __1 ; __2 ; "" )

, __2, " " __1. " " , . .

"" , , __1. , " .," , , . " ,?!;:[](){}<>".

@Sum( __1; ; __n ) - , . , .

7.10. @Explode @Implode - " - "

@Explode( ) @Explode( ; "" ) - , . , , . "" .

@Implode( _ ) @Implode( _; ) - ( ) ( ) . , , .

7.11.

@Success - 1 (TRUE). @If ( , ), , .

@Failure( ) - , @Failure , , OK, , . @Failure -c . - , .

@IsAvailable( _ ) - . 1 (TRUE), , 0 (FALSE).

@IsUnavailable( _ ) - . 1 (TRUE), , 0 (FALSE).

@IsDocBeingLoaded - 1 (TRUE), ; 0 (FALSE). : 1 , . @IsDocBeingLoaded .

@IsDocBeingEdited - 1 (True), , 0 (False). : , ", ", .

@IsDocBeingMailed - 1 (TRUE), ; 0 (FALSE). : 1 .

, , . . , . @IsDocBeingMailed . , , , 1.

@IsDocBeingRecalculated - 1 (TRUE), ; 0 (FALSE). , 1 . , , . @IsDocBeingRecalculated .

@IsDocBeingSaved - 1 (TRUE), ; 0 (FALSE). , 1 .

, , .

@IsNewDoc - 1 (TRUE), , 0 (FALSE), .

, , , . 0.

@IsExpandable @IsExpandable() @IsExpandable(_1; _2) - @IsExpandable , "". , @IsExpandable "+", , "-" , . "+", , . _1 "+" _2 "-".

@IsNumber( ) - 1 (TRUE), ; 0 (FALSE).

@IsResponseDoc - 1 (TRUE), (Response), 0 (FALSE). - - , , Response to document ( ) Response to response ( ). - $REF, . , @IsResponseDoc 0 . " ", .

@Responses - "", . (response) . @Responses .

@AllChildren SELECT _ | @AllChildren - . SELECT _ | @AllChildren , , , - , . , SELECT _ | @IsResponseDoc , , , - ( , ).

@AllDescendants SELECT _ | @AllDescendants - . SELECT _ | @AllDescendants , , , - - , "" , .

@DbExists( : _ )

@DbExists( ; _ )

1(True), , 0(False), . . , . "" , . _ . _ - .

, , -, .

7.12.

@DbName - Notes. "": "_.nsf". , , : "": "_.nsf".

@DbTitle - .

@DbManager - , , .

@UserAccess( : _ ) - , . , .

level : create : delete, :

level 1 - , 2 - , 3 - , 4 - , 5 - , 6

create 1 (True), , 0 (False),

delete 1 (True), , 0 (False), .

6:1:1. , : "You are not authorized to perform that operation."

@UserRoles - , . .

@ViewTitle - . , . @ViewTitle -, .

@Domain - , NOTES.INI ( Notes Preferences) . , .

7.13.

@V3UserName - @UserName 3.. , 3. 4, @UserName @V3UserName. ([Abbreviate]). @V3UserName , , @V3UserName, , . , , @V3UserName, . @V3UserName , . , , , @V3UserName . , @V3UserName - .

@UserName - @ V3UserName, ([Canonicalize]).

@Name([]; "") @Name([]; "_") - . Notes 3.0. @Name .

, , , . , .

Notes. , @Name . , , @Name .

Names, Authors Readers, Notes . , Notes . Names, Authors Readers .

, , - . @Name.

"" , . - . [] . [].

[Canonicalize]. , , , .

[Abbreviate]. , . .

[C]. .

[O]. .

[OUn]. ; n 1 4, , OU1. OU ; , , OU OU1, -- OU2, .. Notes [OU] .

[CN]. .

[ToKeyword]. :

7.14.

@Prompt([]: [NoSort]; ""; "";

"_"; "") - @Prompt . , , . . . [c] . . . "" .

@PickList([Custom]; "": "_"; ""; "";

""; _)

@PickList([Name]: [Single])

@PickList([Custom];) , , () . @PickList .

@DialogBox( ""; [AutoHorzFit]: [AutoVertFit]) - ( ) "". , Notes, OK Cancel.

7.15. @DbColumn -

@DbColumn("": "NoCache"; "": "_";

""; ) - Notes. , .

@DbColumn . @DbColumn , .

@DbColumn 64 K . , @Dbolumn, :

: 2 + (2 * ) +

: 6 + 10 *

@DbColumn , , , , -, . @DbColumn , .

7.16. @DbLookup - ,

@DbLookup( "": "NoCache"; "": " "; "";

""; "" ) - "", , "" . - , . , .

7.17. , ODBC-

Notes 4 - @DbColumn, @DbLookup @DbCommand - , ODBC-. 3. , "" DataLens. , , , . . @DbColumn, @DbLookup @DbCommand 64 K . , , :

: 2 + (2 * ) + . 511 ; , 64 .

: (10 * ) + 6 .

@DbColumn, @DbLookup @DbCommand - . NOTES.INI NoExternalApps=1, @DbColumn, @DbLookup @DbCommand , .

@DbColumn( "ODBC": "NoCache"; "_";

"ID_1":"ID_2"; "_1": "_2";

""; "": "_"; "Distinct": "" )

ODBC-, . . , . , , . @DbColumn .

"ODBC" , "" ( Notes) ODBC-. .

"NoCache" . "NoCache" , "", .. . ( , , ) . , , "", "NoCache".

"_" . . 32 - . @DbColumn . ODBC-, MS Windows, Windows 95 Windows NT (Control Panel).

@DbLookup( "ODBC": "NoCache"; "_";"ID_1": "ID_2"; "_1": "_2"; ""; "": "_"; "_"; ; "Distinct":"") - ODBC- . , , . , . , , . @DbLookup , .

@DbCommand( "ODBC": "NoCache"; "_"; "ID_1": "ID_2"; "_1": "_2"; "_": "_" ) - ODBC- . ODBC- DBMS, , . , . , .

7.18. @MailSend -

@MailSend

@MailSend( ""; ""; "_"; ""; ""; "__1": : "__n"; [_1]: : [_n])

@MailSend ( -) , SendTo () . SendTo. , . opyTo () BlindCopyTo ("" ), , . DeliveryPriority, DeliveryReport ReturnReceipt, , . , .

@MailDbName

@MailSavePreference

@MailSignPreference

@MailEncryptSentPreference

@MailEncryptSavedPreference

. Locations , , , , File - Tools - User Preferences.

@MailDbName "": "__", . , .

@MailSavePreference 0, "Save sent mail" "Don't keep a copy" ( ); 1, "Always keep a copy" ( ); 2, "Always prompt" ( , ).

@MailSignPreference 1 (TRUE), "Sign sent mail" ("" ). @MailEncryptSentPreference 1 (TRUE), "Encrypt sent mail" ( ). @MailEncryptSavedPreference 1 (TRUE), "Encrypt saved mail" ( ).


Notes, . Lotus Notes, . .


2. Lotus Notes

Notes . Notes - , . Notes , , .

Lotus Notes? Notes Lotus Development , . , , -, Notes , , -, Notes , . Notes (, ), ( ). , . Notes OLE- . , OLE-, , Notes, . Notes , , , , , , , - . Notes , (, ). Notes , . Notes , .

. (). , , . , . . (- ), , .

" " Lotus Notes - , , .

1. , Lotus Notes - .. . .. , , , , , , (, ), LN , .

- LN .

2. , LN . - , - , "" . , - constraints .

3. - , , LN - , , , . .. - , - . , LN , () . - , , Lotus- ...

2.1.

Notes .

.



NSF 4 Notes

NS3 1 3- Notes

NTF

(template)

DSK

. (Notes desktop)

NCF

Notes (cut/paste)

NTM

.

NSX



2.2. Notes

Notes - , , (). .

, , , , .. "" "" , note, , , , , OLE-, ..

( ) , ( note) - , . " " (Record Relocation Vector - RRV), .

(Database Title)

(Replication Settings)

(Access Control List)

(Replication History)

(User Activity Log)



(Allocation map)

(Icon Note)

"About Database" (Policy Note)

"Using Database" (Help Note)

(View Note)

(Form Note)

(Filter Note)

(Data Note)

(Data Note)

(Form Note)

(View Note)

(Data Note)

...

Note - , Notes . Note - - . , , , , Help- - notes. notes - data note. (note) : NoteID - (RRV - ), UNID - , OID - , , (, items), :



Header - - NoteID, / NoteCLASS - (Form, View, Document ...).

Access Privilege Mask - .

Items 1-N - (), (). , , , , , , :

2.3. (note)

(data note) , . , . Notes. :

"Form" - , .

"$Ref" - (UNID) "" .

"$File" - OLE.

"$Links" - , , .

"$Readers" - , , , .

"$Revisions" - .

"$UpdatedBy" - , .

(Form definition note) , , , , , , .

(View definition note) , , , , , . , , .

2.4. .

, . @Command([FileOpenDatabase]; "server": "database"; "view"; "key"; "newinstance"; "temporary"), , "", .

(, ) .

(template) - , . .ntf . , .

:

" " - (Blank);

Database_Design_Only, , , ;

, Notes, , ;

" " , , .

.

- (design template) - , , (, , , -, ), .



6. Notes. . . .

@- - (statements), . @- @- ( 180, ). Notes :

.

.

, .

, RichText- , , .

, .

.

, .

.

, , , , , .

Notes 3.x @- . 4- : , - (simple actions), , - - LotusScript.

LotusScript , @-, , (ACL), @- , @- , , , , , , , .

6.1.

, , ; , .

(statements) ";".

@- ";".

, , .

( ) .

.

( ) , . .

6.2.

(statement) ( , .. ) , , (, ..), @- .

(value) , , @- , .

6.2.1.



. - . . . , - .

RichText-, , . , FIELD @DbLookup, "" RichText- . @IsAvailable(FieldName) ( RichText) .

:

. , "" , , . Notes -, " ".

. , :

FirstName + " " + LastName, FirstName LastName - , .

. :

, , , @Text(BirthDate).

, , Status , "Virus Check":

@DbLookup("":"NoCache"; "RESEARCH":"SMITH\PROJECTS.NSF";

"In Progress"; "Virus Check"; "Status")

:

FIELD FieldName := Value; , FIELD Status := " ";

@SetField("FieldName"; Value); , @SetField("Status"; " ");

FIELD , , . . :

FIELD FieldName := @DeleteField.

@SetField , , , @Do @If.

, ( ) . , FIELD:

VariableName := Value;

. Text, Time, Number Boolean. - - @- ( 1) ( 0).

@Set :

@Set(VariableName; Value);

6.2.2.

: "Text constant".

@Repeat.

"" Esc-. , " .

0 1 2 3 4 5 6 7 8 9 - + E e, , 123, -123, 1.23, -0.123, 1.23E-12. , .

- (Time-date) , [5:30], [30.3.93] [30.3.93 5:30]. ( , ..) , .

6.2.3.

, :

, -

:= -



: 1



- 2



*

**

/

*/





3







+

*+

-

*-





4







=

*=

<>, !=, =!, ><

*<>

<

*<

>

*>

<=

*<=

>=

*>=





















5























!

&

|



6



. , . .

(:) . . , . :

"Moscow":"London":"New York":"Tokyo"

( ) :

(Pair-wise) - , .. , .

(Permuted) - - : , .. : *.

.

6.2.4.

DEFAULT - .

DEFAULT FieldName := Value - , FieldName, , Value.

ENVIRONMENT - , NOTES.INI.

ENVIRONMENT EnvVariable := "TextString"

@Environment:

FIELD FieldName := @Environment("EnvVariable")

FIELD - , ( ). , .

FIELD FieldName := Valu

REM - .

REM " !";

SELECT - , . , , . , , SELECT, "".

6.3. Notes

6.3.1.

Notes , , .

(1) Statement1;

(2) Statement2;

(3) Statement3;

(4) Statement4;

, @Return, , Notes GoTo For-Next, - , "" - @If.

, . , @If :

@If( Condition_1; TRUE_Statement_1;

...; ...;

Condition_N; TRUE_Statement_N;

FALSE_Statement);

Notes , @Do

@If:

@If( Condition;

@Do(Statement_1; ...; Statement_N);

FALSE_Statement);

6.3.2. ,

@-, ( , ), . , @Return, . , . , , @- . ( SELECT) , . :

Replication formula ( ). - SELECT .

Form formula ( ). - .

Selection formula ( ). - SELECT .

Column formula ( ). .

Show action formula ( ). - .

Formula pop-up ( "" ). - .

Window title formula ( ). .

Section access formula ( ). - .

Insert subform formula ( ). - ().

Section title formula ( ). - .

Hidden paragraph formula ( ). - .

Default value formula ( ). .

Input translation formula ( ). .

Input validation formula ( ). - .

Computed field formula ( ). .

Keyword field formula ( ). - , .

6.3.3. ,

, . . @- @-.

Notes , , , .

( ).

.

, RichText - .

, RichText - .

6.3.4. , @-

@PostedCommand 4- Notes @Command 3- , @Command 4- . @Command, 4- 3-.

Notes @PostedCommand ( @Command 3- ) . @PostedCommand, , @-. @Do, @Command .

, , , @Do:

FIELD X :=

@If(;

@Do(@PostedCommand1; @Prompt; @PostedCommand2);

@Error)

, , @Do :

(1) @Prompt

(2) @PostedCommand1

(3) @PostedCommand2

@Do @PostedCommand ; @PostedCommand .

, , @PostedCommand, @If, , @PostedCommand. Notes : , "" , @PostedCommand.



(4) @PostedCommand([_]; );

(1) @If(; True_; False_);

(2) FIELD X := "";

(3) FIELD Y := " ";

(5) @PostedCommand([_])

"" Notes @PostedCommand @If , - ( "Run once" - ) @PostedCommand:

( , , , , Run once - )

(1) @PostedCommand([_];);

(2) @PostedCommand([ToolsRunMacro];"(Subprogram)")

() (Run once - , , Subprogram)

(3) @if(; True_; False_)

(4) FIELD X := "";

(5) FIELD Y := " ";

(6) @PostedCommand([_])

@Command , ( @-. . @Command @PostedCommand, :

[FileCloseWindow]

[FileDatabaseDelete]

[FileExit]

[NavigateNext]

[NavigateNextMain]

[NavigateNextSelected]

[NavigateNextUnread]

[NavigatePrev]

[NavigatePrevMain]

[NavigatePrevSelected]

[NavigatePrevUnread]

[ToolsRunBackgroundMacros]

[ToolsRunMacro]

[ViewChange]

[ViewSwitchForm]

6.4.

, . , .

6.4.1.

( ):

Default value - , . - . .

.

0 - 0;

@Now - Time ;

@UserName - ;

Price - Price;

"Price" - Price;

, / . Formulas inherit values from selected document. , - "", .. Computed for Display ( ) .

Input Translation - , . . , , .

Input Validation - . .

1 (@Success, @True @Yes) - . - 0 (@Failure( ), @False @No) - , .

6.4.2.

(Rich Text) . " ".

Rich Text , .

6.4.3.

(Computed - , Computed for display - , Computed when composed - ) . , .

.

.

, +



(*)



+ +





(**) (**)



(Rich text) +



(*)

+ +

*** +

*** (*)

+ +

*** +

*** +

+



(*)

+ - .

* - . , .

** - .

*** - , Compute after validation.

. , - , , , , LotusScript- , . .

Formulas inherit values from selected document, "Computed when composed" , - . "Computed" - " ".

(View - Refresh) "".

, .

- .

, , "Compute after validation", .

- , . (layout regions). , . . : Design - Bring To Front.




. . -.


























. , . .

1.

, , (, , , ..). , .

, , , .. , "" , . $5 000 - $50 000.

2. -

, , , . , , , , . . - $50 000 $200 000.

3.

. , : . " - - " MRPII . (, , .) , . : 6 . , , , , . , -. , , , , , - . , - , $50 000, , , $500 000 .

4.

( ). , , , , . - ( ) , , . , - $500 000.

. , , , .

. , - , , , , . . . - .

, , , :

- ;

- ;

- ();

- ;

- ;

- .

, : 1:1:3 - 1:1:5, - , - , - , .

.

, , , . , . , , . , .

-. , , " ". , , . , 1 $800, 20 , $16 000. 20 , . .

("", "", "" ..), - " ". 3 "", . , .. "" ( 2-3 ).

, ( ) . , .

"" $300, - $2000. 6 . ? - $300 x 6 + $2 000 = $3 800. , ? "" : $300 x 6 + $2 000 x 2 = $5 800. , , - , , , . ? , .

- . ( Oracle, MS SQL Server, Informix, Unify) . , . . , - .

, . , , . , 4-5 . , () .

- , , - , .

- , , (. 8.6).



. 8.6.

: , , , - . , .

, , : -! , , .

- - , / .

, :

;

;

, ;

;

.

, , , (. 8.7).

:

?

, ?

, , ?

, , ?

?



. 8.7.

- , -, -, , . , (. 8.8).

- :

, , ;

, -;

;

;

.



. 8.8.

:

;

, ;

, , , , ;

(Data Flow), (Work Flow), (Cash Flow), (Control Flow) (Doc Flow).

, . , , . " " (As Is). , : " " (As To Be), " " (. 8.9).



. 8.9. -

. , , .

- , . 8.1 .

8.1.





,





: , , ,









;









;



;









; , " "

" , ?" " "

3-5 ; ,







;



;

;





;





;

;

;

; ;



IT-, " ", , " -". : - , - , , , . - - .

, , . "" - . , - " - : , , ". BPR , . , .

- , , . - . , , , . .

, - . "" , " " - TQM, , , " " (continuous improvements).

"". , . , "" , .

, , , . , " -". - , - . , , , .

. , , .



3. . - .

, 1.



.1

MRP

MRP (Material Requirements Planning) , , , , .

MRP II

MRP II (Manufacturing Resource Planning) . - : , , . , , , , , , , , .

- , , , . .

MRP II , , 2.



. 2 MRP II

: , , . , , , , , . -.

, -.

- ( , 5- 10-). - . . , .

, , , .

- , - , ( ) .

, . ( ) . / .

(, , ..). .

, , , - .

.

- .

, , , . , , , .

.

APICS MRP II 16 ( ) :

Sales and Operation Planning ( ).

Demand Management ( ).

Master Production Scheduling ( ).

Material Requirements Planning ( ).

Bill of Materials ( ).

Inventory Transaction Subsystem ( ).

Scheduled Receipts Subsystem ( ).

Shop Plow Control ( ).

Capacity Requirements Planning ( ).

Input/output control ( /).

Purchasing (- ).

Distribution Resource Planning ( ).

Tooling Planning and Control ( ).

Financial Planning ( ).

Simulation ().

Performance Measurement ( ).

ERP (Enterprise Resources Planning) . MRP II , ERP ( , , ..). ERP ( ). . , MRP II, , . 3.

MRP II ERP , , . ERP , , , , , , , .



.3 ERP MRP II

2000 Gartner Group ERP II , ERP. . "" .

ERP II "", . ERP II .

ERP II 4. ERP II :

ERP ,

CRM (Customer Relation Management),

SCM (Supply Chain Management),

BI (Business Intelligence),

IMS (Information Management System) ,

e-commerce.

, 4, . , .

. 4 ERP II





4. CPM: Comshare MPC, Hyperion Pillar, Oracle Financial Analyzer, Adaytum e.Planning, Exact Globe 2000.

. , , IT. ERP (Enterprise Resource Planning). , . . . .

(Management Planning and Control MPC), , , CPM (Corporate Performance Management), . BPM (Business Performance Management). Gartner Group , .

, , , , . , , .

CPM (MRP, CSRP ERP) , .

, , , . CPM , , , , .

CPM : , , . , ̬ . CPM $10 . , .

Gartner Group, CPM 431%. , , . . , , . , . , , . , , 5% CPM. . CPM .

, CPM: , . ? Excel. , . . , Excel, , , .

Excel . . , drilldown, , , , , , , .

CPM

CPM Comshare MPC, Hyperion Pillar, Oracle Financial Analyzer, Adaytum e.Planning, Exact Globe 2000. .

Comshare MPC

CPM Comshare MPC Comshare Inc. IҬ, Comshare Inc. .

, Comshare MPC, , , . .

Comshare, Microsoft SQL Server Oracle, IBM DB2 OLAP, Hyperion Essbase, MS Analysis Services, - . , , . Comshare MPC ERP, SAP, BAAN, Microsoft Navision Axapta, 1C, , . Comshare .

, MS Excel, . Comshare MPC .

Comshare Inc. . Comshare Inc. , .

. .

Comshare , , ( , ). omshare MPC , , -, , , , , , .

CPM Hyperion

Hyperion Solutions Corporation (HYSL) Hyperion Pillar. Hyperion Enterprise Performance Management, , Hyperion Enterprise , Hyperion Performance Scorecard , , Hyperion Business Modeling - , Activity Based Management , .

, CPM Hyperion Pillar.

, , , . .

Hyperion Pillar , , . . , , .



, ( , 腻), , , .



, . , () , , , , , , . , Hyperion Pillar , . , .



, .



Hyperion Pillar , . / . (), . , . , , , , .



, , . , .



Hyperion Pillar , ERP, . Hyperion Pillar : / , , Copy&Paste, ODBC, Hyperion Application Link. , ERP SAP R/3, JD Edwards, PeopleSoft, Oracle Applications, Baan ( , ERP).

Hyperion Pillar OLAP Hyperion Essbase. Hyperion Pillar , , Hyperion Essbase. , , ( ), , , " " .

Exact Software

CPM Exact Software , : Exact Globe 2000 Exact eSynergy, , , - , .

, , , , . CPM Exact ERP Exact.

Exact Globe 2000 , , , , . Excel.

Exact , , . -, , , .

Exact Globe 2000, Exact eSynergy . , , , , , , . , , ( Exact Globe 2000 Exact eSynergy), .

Exact , Exact.

, Exact ( Exact Software), 1984 . Exact . , , Exact , , , .

1995 Exact . Exact 50 . Exact Siemens AG, Novell Russia, Geocell, , GG&MW Co. N.V. () .

- Oracle Financial Analyzer

CPM- Oracle Financial Analyzer (OFA) , , , .

Oracle Financial Analyzer, CPM, , . OFA General Ledger, Oracle.

CPM- - , Oracle Financial Analyzer , . , , , .

, , Oracle. , , .

, , , OFA .

, OFA . , , Selector, . .

Adaytum e.Planning

Adaytum e.Planning Adaytum . : e.Planning . . , OLAP, , . e.Planning , . , OLAP. , ? . e.Planning , . .Planning ERP, CRM Windows DNA (Microsoft Windows Distributed interNet Application Architecture).

Adaytum , , . Analyst , , . Contributor , . Contributor . Reporter , , .

Adaytum , , , . , ?... , , . , , , .

Adaytum BMW, MercedesBenz, Dr.Perrer/Seven Up .

CPM

CPM , . CPM. , , , , , . , . , , (CPM BPM).

, . , , , , , . , , .

. , , , , ERP .



5. Lotus Notes. , , .

Lotus Notes - (), . , Lotus Notes , Lotus Lotus Domino. Lotus Notes/Domino.

Lotus Notes .

Lotus Notes - .

Lotus Notes . Notes , , :





, .

, , , , , . , , .

Notes , - , , . Notes , , .

- . - (, ) - . , , workflow, " ", , , "", .

Notes . , Notes, . Notes , , , .

Notes . .

Notes , .

, . , , " ", " ", " ", " ", "", " ", " ", " ", " " .. , , . , ( ), .

1.2. Lotus Notes?

Lotus Notes :

;

;

() ;

;

.

, , . , , .

Notes . Notes . Notes , Notes , Notes, .

Notes /. , Notes : , , , .

Notes , . , , .

, , Notes . , Lotus Notes Notes - Notes.

Notes Notes . , Notes, . , , , .

Notes , , , .

, , , . Notes Notes.

Notes Notes. Notes :

;

;

;

;

.

, Notes . Notes, 1996 , , HP-UX, IBM AIX, Sun Solaris, SCO UNIX, Microsoft NT, OS/2 Novell NLM. Notes 4 Windows 3.1, Windows 95, Windows NT, OS/2, Macintosh UNIX.

, Notes IBM-Lotus , .

Notes .

Notes . Notes . Notes , Notes , Notes, , .

, Notes:

;

;

.



1.3.1. Notes

Notes, :



. 1.1. Notes

- . , . - , . ( API, Notes ) : , - Notes ( - remote procedure call - RPC).

, , .

1.3.2. Notes

OS: . , , .. .

SEC: . BSAFE RSA Security Inc.

NSF: Notes. Notes, , , . , "ODS" ( On-Disk Structure management ), .NSF . NSF ; (RPC) . RPC- , , , NIF ( ).

NET: , , LAN- , "Connection"- .

COMPUTE: , Notes.

NIF: Notes. .

FT: . "" .

MAIL: Notes.

1.3.3.

(Notes client) Notes :

DESK: Notes, , .

EDIT: , (Compound documents - CD).

VIEW: , ;

NEM: , .

1.3.4.

, . Notes (add-in) : , . Replicator, , Indexer, , mail router, Chronos, -.

1.3.5. Notes Notes API

Notes API , :

API - , Notes, WS, .

(Add-In), , Notes.

, Tools . Windows OS/2 DLL.

/ , , / (Windows, OS/2, UNIX).

Hook- , , , .

, -Notes Notes - ( @DbColumn, @DbLookUp).

, Notes . , , , (SMP) , , : , , , .

, . .

( ):

;

;

( , , );

(compact);

(categorize).

Notes (RPC): , RPC , . , . RPC , , .

, , .

Lotus Notes :

1. - , ,

.

2. , , .

3. . .

4. .

5. (Replication) . , . , , , . , ( ), .

6. Lotus Notes , ERP-.

7. , Lotus Notes , , , , .

8. , , .

9. , Notes .

10. - , .




. , .


, " " . , , :

- , - .

-, , . , SAP R/3 ( ) 1000. , , , -, , , , , , - . , , , . - ( ). : , .

- , , .

, .

, , , , , .



, , , , , , .

, .

.

, - .

, :

,

(, ..) (, , )

.



: , -, - .

- . - . . , . - . . - . , . . - - , . .



, . . . , . , , , , . , , . - . , . .



. . . . . . .



: - , , , , . , , , , . : , , , .. , , , , , . , , . , , , . : , . .

() - , . , . , .

.

, , . " ", : . . . - . . . . . . - . .

: .

ERP , , () , . , , , , , , .. , .



: ( - ).

ERP , . : , , , , ( ). , . , .



, , . . . 3.1.

, . .



. 3.1.

, , , , , , . , . , , . .

3.2.1

, . . , , ; , . . .

. , (, ). , , . , , , , : , , ( !). , , , , . , , , , , . , 99% - .

, , , . . , - - ( , , , -).

. ( ) . , . , .

, , , , . . , .

, , .

3.2.2

, , , . . , , . , .

.

, ( , ). , . , , . . , .

: . (, , ), . ( ) , (, ) . , , . .

.

3.2.3 ()

, , . (), , , . , .

, , , , , . , , , .

, . , .

- .

3.2.4

, , , 90- , . , , , , , .

-, , . , . , , .

-, . , , .

, , , -.

.

, , . , , , , , . ( ) .




Oracle.


- , , (), () .

Oracle8 . Oracle8 , PL/SQL. , :



6

, , SQL*PLUS:



7

, , , , .



. , , , , ADA, PL/SQL.

(. . 4). ( ). .





4. .

8 Person. Address, (, ). [4].



8

Oracle8 . , , . 9 Person . , Person Address .

, 9 age (). , .



9

Oracle8 , , , , , , .. :

, (, )

, -

"" , MAP ORDER, .

, age () :



10

, , . , , , , . , , , .

, Oracle8, , , , , , . EXTENDS, PRIVATE, PROTECTED .., - .



2. PL/SQL. , , , .

PL/SQL - - . SQL Oracle.

PL/SQL :

, ;

, , ;

;

SQL, , PL/SQL;

, FOR ;

PL/SQL , ;

;

;

.

PL/SQL , , .

, ; .

:

( );

;

( ).

[ <<label_name>> ]

[DECLARE



]

BEGIN



[EXCEPTION



]

END [label_name]; -



-





-



-

PL/SQL , .

PL/SQL ;.

.

PL/SQL SQL, Oracle. Transact-SQL, PL/SQL , . PL/SQL , . DECLARE ( ) . DECLARE , . PROCEDURE ( ), SQL. , PROCEDURE . EXCEPTION ( ), . EXCEPTION . PL/SQL , , , , , , , , .

PL/SQL :

, ;

.

, .

, .

. LOB , , (, ).

.

PL/SQL , .

PL/SQL . .

LOB- (Large Object). SQL-99 LOB- . Oracle LOB-.

Oracle :

BFILE - ;

BLOB - ;

CLOB - ;

NCLOB - , .

LOB : , .

BLOB, CLOB NCLOB , PL/SQL.

LOB PL/SQL DBMS_LOB.

PL/SQL : , - PL/SQL ( ) .

, .

SQL PL/SQL.

PL/SQL, .

.

PL/SQL, , :

:

IF-THEN-END IF;

IF-THEN-ELSE-END IF;

IF-THEN-ELSIF-END IF;

:

LOOP-END LOOP;

WHILE-LOOP-END LOOP;

FOR-LOOP-END LOOP;

EXIT;

EXIT WHEN;

:

GOTO;

NULL;

<<labels>>.

"" , SQL , SQL SQL ,

SQL, ,

Oracle

DECLARE CURSOR _

IS {_SELECT}

EMPLOYEE_TBL

DECLARE CURSOR EMP_CURSOR IS

SELECT * FROM EMPLOYEE_TBL

{ }

ANSI

OPEN

FETCH ,

CLOSE .

SELECT,

Oracle .

OPEN _ [ 1 [, 2 ]]

, EMP_CURSOR: OPEN EMP_CURSOR

, (. . ) FETCH.

Oracle .

FETCH CURSOR _ {INTO : _ }

[[ INDICATOR ] : _ ]]

[, : _

[[ INDICATOR ] : _ ]]

I USING DESCRIPTOR ]

, , . , , .

. DEALLOCATE. , . . .

Oracle DEALLOCATE. Oracle . CLOSE _

SQL, , ( , SQL). , , . . , , , . .

. SQL (CREATE TABLE, INSERT, UPDATE, SELECT' ..) , , . , .

SQL , , . , .

. , , , .

( SQL). , , .

Oracle .

CREATE [ OR REPLACE ] PROCEDURE __

[ ( [{IN | OUT | IN OUT) ] ,

[{IN 1 OUT | IN OUT} ] ] ] {IS I AS)

_

, SQL . .

.

.

.

.

.

.

.

, , , , ( DML). INSERT, DELETE UPDATE. , , INSERT, DELETE UPDATE. , . , , -. , .

CREATE TRIGGER.

Oracle .

CREATE [ OR REPLACE ] TRIGGER _

[ BEFORE | AFTER]

[ DELETE I INSERT | UPDATE]

ON [ ._ ]

[ FOR EACH ROW ]

[ WHEN ]

[ PL/SQL ]

, SQL ( ) CREATE TRIGGER.

DROP TRIGGER. .

DROP TRIGGER _PA.




SGA, PGA. Oracle.


(SGA)

SGA - , Oracle Oracle. SGA Oracle . Oracle SGA. SGA ( ):

- - . , , ( ); , ( ). , ( , / ).

- - . , . , Oracle

.

- - SGA, , SQL- . , , , . .

SQL. SQL- , (.. ). SQL-, SQL- ( , ).

, Oracle. . :

- (, ) - , - .

- , .

Oracle SQL-. Oracle. Oracle. , , , . , . , .

( SGA)

ORACLE.

Shared Global Area ( ),

.

SGA ORACLE . SGA.

, SGA , () SGA , . , SGA :

* , ( - )

*

* ( ).

SGA . , , SGA .

SGA ORACLE . , SGA , SHOW SGA SQL*DBA.

SGA INIT.ORA.

SGA , "", RDBMS. ORACLE SGA.

(PGA)

- , Oracle. PGA , Oracle. :

- - , , ..

- - Oracle , PGA. , SGA.

- SQL- - PGA, .

( PGA) , -. - (PGA). ORACLE, . PGA ( ) ORACLE . PGA , . . PGA ; , . ORACLE . , PGA.

INIT.ORA PGA :

* OPEN_CURSORS

* OPEN_LINKS

* SAVEPOINTS

* DB_FILES

* LOG_FILES

PGA (DBWR, LGWR, SMON, PMON ARCH) .

PGA - . PGA . PGA ORACLE .

SQL - , , . - PGA , SQL. , SQL, :

* SQL -

* SQL -

*

*

*

Oracle : SGA . , . , , , . , . , , .. , . , , , , , , .

: ( ) . , , Oracle. . , .

PMON . . , "" , , , PMON . PMON , SGA, . , PMON Oracle ( ). ( ), PMON ( ). PMON Oracle , , . , (LGWR) . , . , Oracle. PMON ( Oracle 8i) Net8. PMON ( ), , . / , Oracle, 1521. , ? , LOCAL_LISTENER. , PMON , .

SMON . SMON , , "" . " " . .

. - , . , (TEMPORARY). CREATE INDEX - , SMON . , , SMON.

. SMON .

. , , SMON "" . , PCTINCREASE.

, . , . SMON , . , . , SMON .

OPS. Oracle Parallel Server, ( ), .

OBJ$. OBJ$ , (, , , ..) . , "" , Oracle. SMON .

. SMON .

"" . "" . . : " ". SMON "" , .

, SMON. , ps, SMON ( ps , ). SMON "" ( "" ) .

RECO . RECO : , - (2PC). 2PC , . . 2PC N ( ) , , . N -1 , . , N - 1 . N -1 (YES) (NO). NO, . YES, N - 1 .

YES , - , (in-doubt) . 2PC , , . , RECO. , . . , RECO .

, . , ( Oracle). . , RECO.

CKPT . , , DBWn. CKPT , . CKPT , , 8.0, , ps UNIX. LGWR (Log Writer). LGWR. LGWR , , , , . CKPT LGWR.

DBWn . (Database Block Writer DBWn) , . DBWn , ( ) ( , Oracle ). , Oracle . Oracle , . , , , (checkpoint not complete), .

, DBWn . , FREE_BUFFER_WAITS, 'Write Complete Waits' .

( ) DBWn (DBW0 ... DBW9). , , . DBWn, DB_BLOCK_LRU_LATCHES. , LRU lists (, 8i, touch lists). DBWn . DBWn , .

DBWn - . - DBWn . DBWn , , . , DBWn. DBWn , . " " , - - , .

DBWn. , , , , DBWn . , . LGWR, , . , Oracle LGWR. , . SGA LGWR, , . DBWn , LGWR . , Oracle -, ( ), , Oracle .

LGWR . LGWR , SGA. :

;

;

1 .

: Oracle . , , - DBWn. , , , . LGWR . -. Oracle , , , LGWR.

ARCn . ARCn , LGWR. . "" ( ), . , /d01/oradata/ora8i/system.dbf, , , . "" , .

ARCn ( !). , , , . , . ( , Oracle).

BSP . Oracle Parallel Server (OPS). OPS Oracle, . Oracle , .

SGA . BSP. OPS ('ping'). , , . . , BSP, .

LMON . OPS. LMON . (Distributed Lock Manager DLM), , , .

LMD . OPS. LMD . LMD , . LMD .

LCKn . LCKn OPS. LMD, , .



. , . , , .

. . Oracle , . , (Advanced Queuing AQ). AQ .

UNIX, , ps. ps , (ora_snp0_ora8I) .

SNPn ( ). , SNPn . 7.0 Oracle . , (snapshot). SNPn (snapshot process). , , . Oracle 7.1 Oracle DBMS_JOB. , 7.0, " " 7.1 . ( ) SNAPSHOT_REFRESH_INTERVAL SNAPSHOT_REFRESH_PROCESSES JOB_QUEUE_INTERVAL JOB_QUEUE_PROCESSES. .

36 . SNP0, SNP1, ..., SNP9, SNPA, ..., SNPZ. . () . , , : ( , Oracle LGWR DBWn).

SNPn , : , ( UGA PGA ). . , . . , ( ). DBMS_JOB .

QMNn . QMNn AQ , SNPn . , . , , .

. AQ_TM_PROCESS QMN0, ..., QMN9. QMNn .

EMNn . EMNn . , . . Oracle Call Interface (OCI) , . (callback) OCI, . EMNn . EMNn . message_receive(dequeue) .






Oracle. . , . Oracle.


Oracle , ,

Unix Windows. Oracle, . Oracle .

Oracle

, Oracle, , Oracle, Oracle .. , , Oracle. 160 , Oracle . Oracle.

Oracle .

20 ,

Oracle ( , ). ISO 9000. , , Oracle Internet Application Server, , Internet/Intranet.

, Oracle , (OS/390) Vax VMS, Windows NT Unix, Solaris, HP-UX, AIX, Linux, SCO Unix ..

Oracle , , , .. , . , . . Oracle , , . Oracle Database Enterprise Edition ( ), ,

. Oracle Database Enterprise Edition ( Parellel Server), . Oracle Database Standard Edition ( ) . Oracle Database Personal Edition ( ).

Oracle (, , SQL Server) ( Gartner Group - ) Oracle , Oracle , . Oracle , , , , Oracle Database Enterprise Edition - Oracle Database Standard Edition. , , , . Oracle, , , , . Oracle . 80% Oracle C, ( ) -. 20% , , - , , .

Oracle,

, . , Oracle , . , Oracle , , , . , - .

, , Oracle



/ Internet/Intranet-.

, , .

. , .

OLTP (Online Transaction Processing) - . . OLTP- , . ( , , .).

OLTP-: , . , . OLTP- -. - .

DSS (Decision Support System) - , . , , , .

DSS: . DSS- , , . , . DSS- ( ).

(Data Warehouse) - , OLTP, DSS. , , .

: DSS-, .. , . DSS-.

(Data Mart) - ( ), Data Warehouse.

: 100 . , .

-: . , .

-: , . , /. , , .

-: -. , , . - Oracle, , -. , . .

- Oracle: , , , , , , . .

OLAP(Online Analytical Processing) - . . OLAP- - , .

OLAP-: . OLAP- . .

ORACLE

() Oracle . : () ( ). , , (, ). , . - , .

: Oracle8 . , Oracle - (-). , , .

Oracle : . , , . .



:

1) - , . , . ( ). . MAXDATAFILES.

2) (redo log files) - , . ( ) , . , , . ( , ). , .

3) - , Oracle ( ). . Oracle .



:

1) ;

2) , , , , , ..



, . . , , . . .

, , - , , . , Oracle , , , . . .

Oracle , , SYSTEM. , . SYSTEM . , , , , , ..

ORACLE , (TABLESPACE). :

-

-

- , online offline

-

-

SYSTEM

ORACLE SYSTEM, . SYSTEM . SYSTEM; , . .

- , .



ORACLE (.. ) (), . , SYSTEM , ORACLE. - , , , . :

,

( , )



, ORACLE SQL .

, . , , , .



ORACLE . , , . . ORACLE . , , ORACLE. , . SYSTEM, SYSTEM .



; - - . (, ) , ORACLE , . ( , , ..) , .



(.. ) ( ). , , , . ; .

,

Oracle . :

- - Oracle. , .

- - .

- - , .



Oracle :

- - .

- - .

- - , .

- () - , SQL- . SQL-. , , .



, , , . () . , , . , .

, , , . .



Oracle. . 2 (2048 ), . , ORACLE ( , ORACLE ). . ORACLE . , . , , , ORACLE. , , .. , . , , . ORACLE , . - -, . , ORACLE. - , ORACLE. ORACLE , , , .

ORACLE

Oracle , . , , Oracle , .

(shared memory)? Oracle : , . ( ). Oracle (System Global Area SGA) (Program Global Area PGA).

(SGA) SGA - , Oracle Oracle. SGA Oracle . Oracle SGA. SGA ( ):

- - . , , ( ); , ( ). , ( , / ).

- - . , . , Oracle

.

- - SGA, , SQL- . , , , . .

SQL. SQL- , (.. ). SQL-, SQL- ( , ).

, Oracle. . :

- (, ) - , - .

- , .

Oracle SQL-. Oracle. Oracle. , , , . , . , .

(PGA). - , Oracle. PGA , Oracle. :

- - , , ..

- - Oracle , PGA. , SGA.

- SQL- - PGA, .



( ) - , . , . - (, , ..), , , . Oracle : Oracle ( ). ( Windows NT) , , , "".



() - . Oracle Oracle. , , , .

Oracle

Oracle . : ( ) ( ).

() Oracle, . , , SGA, SGA.

-- ( ), ( ), .

Oracle. Oracle . Oracle:

- DBWR (DataBase WRiter) - . , . , DBWR , . DBWR , . , . / DBWR.

, DBWR.

- LGWR (LoG WRiter) - .

- CKPT (ChecK PoinT) - DBWR . - , . CKPT - . CKPT , LGWR.

- PMON (Process MONitor) - :) PMON , .

.

- SMON (System MONitor) - . . .

- RECO (RECOvery) - . .

- ARCH (ARCHiver) - . ARCH , ARCHIVELOG. , , .

NOARCHIVELOG.

- LCKn (Parallel Server LoCK) - ( n - 0 9) . .

- Dnnn (Dispatcher) - , , . .




. SQL : Oracle, SQL Server, IBM DB2, Informix.


(), , . , , : .

, (dBASE, FoxPro, MS Access ..). . , . , , . . - , . , N N -, N . . , , . . , , . , , . , -, , -, , . , , , .

, , , , . , ( , , ), . , , . .

. , , , , () -, (). , . . , . . . , , . , . , , , . SQL, - SQL-. SQL , - , .

, , .. ( - ). :

;

;

;

;

.

SQL. - Oracle, IBM DB2, Microsoft SQL Server Informix - :

- ,

- ,

- ,

- ,

- .

, 50 500, . Pentium II 128 , 13- EIDE RAID 0 ( HDD SCSI). Windows NT Server 4.0. Linux.

Oracle.

Oracle , SQL; 1979 . Oracle ( Microsoft) , .

, . Oracle, - ( Oracle 5, 1985 ). UNIX, VMS . Oracle Novell NetWare. 90- (Personal Oracle 7 for Windows 3.1, Personal Oracle 7 for Windows 95, Personal Oracle Lite, Oracle Workgroup Server 7 for Windows NT). Oracle DOS.

, Oracle , , Oracle Parallel Server ( ). Oracle Parallel Server , , .

Oracle Oracle 8i, :

, , , . , Oracle 8 Oracle 8i - ;

(, , , );

, (materialized views) , ;

Java, JDK 1.2 JDBC 2.0;

XML, Oracle 8i XML Parser for Java, C/C++, PL/SQL, XML- , Oracle 8;

HTML- XML- PL/SQL ( , WebDB PL/SQL Gateway Oracle Application Server PL/SQL Cartridge);

- , , ;

(Oracle Spatial);

, , SSL, ;

, , ;

Microsoft Cluster Server;

OLE DB- .

Oracle 8i : Oracle 8i, Oracle 8i Enterprise Edition, Oracle 8i Personal Edition.

Oracle Express OLAP.

Oracle Designer/2000 CASE- - , . Developer/2000 ( Oracle*Forms) Oracle; (, Oracle Power Objects). , , Developer/2000, . PL/SQL, , , Oracle . Developer/2000 .

, Oracle . , API (Oracle Call Interface) Oracle (Oracle Objects for OLE), Oracle COM- . , Oracle ODBC- .

, ODBC- OLE DB- Oracle ( , Microsoft). , , ( Inprise Gupta/Centura), Oracle .

Oracle , SAP/R3. Oracle Corporation, Oracle Applications, Oracle Financials, Oracle Human Resources, Oracle Market Management, Oracle Project Systems .

Oracle8i, Java , . , . Oracle, . . -, . Oracle NT, , MS SQL. UNIX-, , Oracle , . , . , Oracle , LINUX WEB (www.oracle.com) . Oracle , :

.

(large-database partition), ;

;

;

;

( );

.

, .

.

, Oracle DB2 IBM. - Oracle. interMedia, , Jserver, Java, Java ( Java ( ), Enterprise JavaBeans ). Enterprise JavaBeans - Java.

Oracle , , interMedia :

;

;

;

( Locator ).

Oracle8i - , , , .

, Oracle (multiversioning concurrency) Oracle ( InterBase InterBase Inprise). , , (.. Oracle ). Oracle8i , . WEB LINUX Oracle MySQL, .

Microsoft SQL Server

Microsoft SQL Server, 1988 Microsoft Sybase, OS/2. Windows NT . . Oracle. 90- , Microsoft SQL Server 6.0 (1995 ), , Microsoft SQL Server 6.5 (1996 ) Microsoft SQL Server 6.5 Enterprise Edition, . 1998 Microsoft SQL Server 7.0. , Microsoft Windows NT. Microsoft SQL Server 7.0 (Enterprise Manager), (Data Transformation Services), SQL Server , , OLAP- ( ), Web-. Microsoft SQL Server 7.0 Microsoft Data Engine (MSDE) , Microsoft SQL Server ( 2 ) . MSDE Microsoft SQL Server . MSDE .

Microsoft SQL Server MSDE Microsoft Visual Basic, Visual C++, Access Visual FoxPro, . ODBC- OLE DB-, Microsoft Data Access Components (MDAC), ActiveX Data Objects (ADO) COM- . MDAC Windows 2000, Windows- Web- Microsoft.

Oracle, Microsoft , , , (, SQL Server Debugger Visual Basic Visual C++).

- :

,

Web,

,

,

. , . OLAP . , . , SQL Server : . Java, HTML SQL Server , DB2, Informix, Oracle Sybase. XXI LINUX, SQL Server Windows. SQL Server , , ODBC, .

IBM DB2

IBM DB2 - 30- - IBM. (6.) , Windows 95 S/390, OS/390.

DB2 : DB2 Workgroup DB2 Enterprise Edition. DB2 , , , , , - Java. , DB2 -, , - , . , IBM . Web, , . DB2 . Stored Procedure Builder - SQL Java . DB2 6.1 : Microsoft OLE DB, . DB2, Java Web, . () , LINUX. Index Smart-Guide , , . DB2- , . - , . , , , ( ), DB2 6.1 . , , - ( Microsoft SQL Server).

IBM, DB2 Universal Database, IBM DB2 . 1996 DB2 Universal Database , DB2 Common Server, DB2 Parallel Edition (DB2 PE), Net.Data, Data Propagator DataHub, UNIX, OS/2 Microsoft Windows NT. , DB2 -IBM- . , DB2 for Windows 2000 Windows NT LAN Manager, Windows Performance Monitor, Systems Management Server, Active Directory , , ODBC, ADO OLE DB. DB2 for Windows 2000 Microsoft Transaction Services (MTS) , . , Microsoft Visual Studio, , Stored ProcedureBuilder, Visual Studio. IBM , IBM VisualAge for Java, , DB2. Java (Java Stored Procedure Builder). IBM Microsoft Access DB2, Oracle, Microsoft, Sybase Informix.

, , , 64- , Web- ( , Java, JDBC, SQLJ, XML) .

DB2 AS/400 RISC System/6000, IBM, Hewlett-Packard Sun Microsystems , Windows NT Windows 95/98, OS/2, AIX, HP-UX, SCO UnixWare, Linux, NUMA-Q Sun Solaris, Windows CE Palm OS.

DB2 Universal Database DB2 Universal Database Enterprise Extended Edition ( AIX, Solaris Windows NT), DB2 Universal Database Enterprise Edition ( AIX, HP-UX, Linux, OS/2, Solaris Windows NT), DB2 Universal Database Workgroup Edition ( Linux, OS/2 Windows NT) DB2 Universal Database Personal Edition ( OS/2, Linux, Windows 9x Windows NT).

:

DB2 OLAP Server , Hyperion Essbase DB2 Universal Database. Hyperion Integration Server (Hyperion), Hyperion Wired for OLAP (Hyperion), Brio.Insight (Brio Technology), BUSINESSOBJECTS (Business Objects), PowerPlay (Cognos), Lotus 1-2-3 (Lotus), Excel, Internet Explorer, Visual Basic (Microsoft) Crystal Info (Seagate);

DB2 Connect DB2 AS/400;

DB2 Universal Developers Edition -, DB2;

DB2 DataJoiner , ;

DB2 Data Links Manager , ;

DB2 Query Patroller . DB2 Query Patroller ODBC- , DB2 UDB Enterprise Extended Edition;

DB2 Net.Data , Web- Internet-, Web Macros;

DB2 Universal Database Satellite Edition , . , Web DB2 Web Control Center;

DB2 Everywhere Palm OS Windows CE, SQL- , Lotus Notes/Domino PIMs.

Informix.

- ( Oracle). Informix Centaur Informix Dynamic Server 7.3 - Informix Universal Data Option Dynamic Server Universal Data Option. . , , , , Web . Java , DataBlades, Informix . Inforix, , DataBlades SPL, Informix . , Centaur ActiveX. , , Visual Basic; , , Centaur Windows NT. Centaur Informix Dynamic Server , , . , Centaur , Informix Universal Server . - , ; SQL.

Informix Informix Dynamic Server, Informix Dynamic Server.2000 ( 1999 ). UNIX Microsoft Windows NT -, , . Dynamic Scalable Architecture (DSA), . Informix Dynamic Server :

(UNIX Microsoft Windows NT), , , Raw Disk Management;

, , ;

;

;

(parallel database query, PDQ);

.

, ( -Informix , Informix Enterprise Gateway).

DataBlade , . DataBlades DataBlade Developers Kit. Informix DataBlade, , , Excalibur Text DataBlade Module, Informix Geodetic DataBlade Module, Informix TimeSeries DataBlade Module, Excalibur Image DataBlade Module, Informix Web DataBlade Module .

Informix Dynamic Server (DB-Access) (DB/Cockpit).

Informix ESQL ( , SQL), , ++, Java, Visual Basic Delphi. Informix-4GL Informix Client Software Developers Kit. Informix Informix ODBC Driver, OLE DB Provider Informix Dynamic Server Informix JDBC Driver. , Informix Connect 2.30, DataBlade Developers Kit 4.0 Informix Server Administrator 1.0. Informix-ViewPoint , . Pro . Informix, OLAP: Informix MetaCube Informix Decision Frontier .

Informix :

Informix Internet Foundation.2000 Internet Informix Dynamic Server;

i.Reach , . ;

i.Sell Informix Dynamic Server.




.


, " " " " . , , : , (, ). . , , , , .

, , , . ANSI (American National Standards Institute) , . 2.1:



. 2.1. , ANSI

, "" . . , . , , , , , .

, , , , . ( ), . , , , .

, , .

( 1 2) ( 2 3) . , . , . , .

.







(1) ( ) , .

(2-3)

(4-5) ( )

(6-7) ( - )

(8-9) .

(10-11) .

(12-13) , , .



2.2 , . :



. 2.2.

1. .

2. , , .

3. ( 12) , , .

4. .

5. .

6. ( ).

7. .

8. , .

9. .

10. .

11.12. , , , , .

, , , , , . , .

? , . , . , , , , , , 11 12 .

, , , , .





, . , :

;

;

;

;

.

- ( Data Base Engine), ( SQL), , . , - , .

, , . , ( , , ), , , . , , . , , SQL ( ) . . "-" .

. , ( , , SQL) , .. , , ( ). , , . , . , , - . , , , .

, , , , , , .. , .



, . . - (SDL - Schema Definition Language) (DML - Data Manipulation Language). SDL , .. , . DML , .. , , , . .

, , , . SQL (Structured Query Language). SQL , , "" (.. , SQL).

, SQL SDL DML, .. . ( - ) , SQL -. () . SQL . , -, , .. SQL .

SQL , ( ) . , , , . .

, SQL. , SQL . , , . , . -, .

SQL , SQL .


, , . . .


, . . - , , . , .

() , , .

:

-

, , , , ( ). , . , , , , . , .

-

; . , , . . , ( UNIX), , . .

, , . , , . .

-

- , . , (COMMIT) , , , . . , , . ( , , ). . , . - , . , , , , ( ). . , . . ( , ) . , ( ) .

-

. , . : , (, ), , . : ( ) , . ; .

, . , , , , . . - , ( , ), . : (, ), - ; . "" ( Write Ahead Log - WAL). , , , . , WAL, . - . , . , , , . , , , ( ). , , , , , ( , ). WAL , . , . , , (undo), (redo) , . , . . . , - ( ). , , . , . , , . , . , .


. . .


( . integrity , , , ) . : , ( ). , , 5 ( ) 3. , 9 . , (1,2,3,4,5,6,7).

( , ). ( , ).

:

.

.

, .

́ ́ ́ (database integrity) , . , , (integrity constraint). : ; 25; ..

.

, , , . , . ( ) , , . , , . . ( ) , . , , .

, , . : , . , ( ) .

. , . :

1) , . . ;

2) , ;

3) , . . .

, , , , . . . . , , .

, .

.

: , , , .

() :

.

.

.

.

- . -.

, , .

, : , ( ), (, ).

, , , , ; .

, . , , 10 000 . , , 10 000.

, , , , , , , , , . , : , , : , .

. , , .

. - , .

- , , , . , : .

. . , .

.

- , , , " ", .

, :

() .

() .

() .

() .

, .

- , .

:

.

.

.

:

- (DDL).

- .

:

.

.

:

.

.

.

.

.

- , . , . , - , , . , , , , - .

. , , , . , . , . , . - .

, . , . , .

. , . . (two phase commit). , - . , - .

- , . , (COMMIT) , , , . .

, (, , ). .

, , . ( , , ).

. , . - , . , , , , ( ).

. , . . ( , ) . , ( ) .

, , , , . .

: , .

, , , : , , , () ACID (Atomicity, Consistency, Isolation, Durability). ACID-. :

(Atomicity) , .

(Consistency) , .

(Isolation) , , , , .

(Durability) : , , , ( ).

. , .

, , .

, , , . , . , . , , "" .

, , . , , SQL .

, . , , .

ANSI/ISO SQL COMMIT ROLLBACK. , SQL-, , . SQL- . :

COMMIT ; , ;

ROLLBACK , , ; ROLLBACK;

, , ( COMMIT);

( ROLLBACK).

, , , .

ANSI/ISO. SYBASE , . SYBASE :

BEGIN TRANSACTION . ANSI/ISO, , SYBASE .

COMMIT TRANSACTION . COMMIT ANSI/ISO. , COMMIT, , .

SAVE TRANSACTION , , . SAVE TRANSACTION . , .

ROLLBACK . , , ROLLBACK ANSI/ISO. ROLLBACK B, B.

, , SYBASE, . , , . , . , ; .




. (SQL) .


SQL (Structured Query Language ) , , . , SQL - , .

SQL .

SQL :

(. Data Definition Language, DDL)

(. Data Manipulation Language, DML)

(. Data Control Language, DCL)

(. Transaction Control Language, TCL)

IT-, SQL : - SQL , . , SQL, .

1996 SQL NIST, . , , , .

SQL-92. , ANSI NIST :

Entry ()

Transitional () NIST

Intermediate ()

Full ()

, . , , Entry, SQL-92 compliant, , .

SQL:1999. SQL/Foundation, . , Core, . . .





, SQL-, DDL DML, . , (: Documentum Oracle, Microsoft SQL Server IBM DB2). , .



SQL . , , , , Core- SQL:2003 1300



SQL , . , , SQL-. , , , . , , , .





, , SQL . SQL[3]:



(nulls)





=





[4] Tutorial D, .



SQL , , , .



ANSI SQL-92, , (, Oracle, Sybase, Microsoft, MySQL AB), SQL, , . SQL.



SQL . . , Oracle CONNECT BY. WITH.




. .


- , , . , , (), , , ().

( ), ( ) ( ).

(). . . . , .

:

.

.

, --. DBTG.

--, .

n- , .

.

:

. DBTG, .

. DBTG, : .

. DBTG, , .

- , . , ; .

DBTG ; , :

, .

, .

, , , . .

. , , .

. , , .

, .

.

(DDL) SQL, , , .

DDL, , . CREATE TABLE, ALTER TABLE, DROP TABLE, CREATE INDEX, ALTER INDEX, DROP INDEX

() . . , . , . . , , .. (, ) . .

. , . , . SQL. 1987 . . SQL:2003 2003 .

, . SQL.

() . , , .

: , , , .

.2. .



1 . , .

2 . , .

3 . , .

4 . , , .

(DML) SQL, .

DML: INSERT, UPDATE, DELETE




. .


(DBS) () (Informix, Ingres, Sybase, Oracle).

SQL-. , , SQL-. -, - . , .. .

, DBS- .

:

;

( SQL- );

;

.

, SQL, , Pascal. - .

, (DBS-), , - (RD-).

, RDA- DBS-. (Ingres, Sybase, Oracle). - . , , . , , SQL . SQL, , . , , , , . - .

DBS- . -, ( -) - . DBS- RDA- : -, , , . .

-, , , , . , - SQL, , C Pascal. , , , . , , , . , , . , - , , " ".

-, DBS- . , - . ( , . .) .

-, ( ) . , , . ., DBS- .

, - . , , :

;

;

;

.

AS-, "-".

(AS) , -, (.. ).

, , .

(, SQL-). , , , . AS, , , SQL- , .

RDA DBS :

RDA - ( );

DBS ( ).

AS . . , , AS .

AS- . , (service) , . , . , , (Applicaation Client - AC). . AC , AS, "" , . , , AS-, .

, . ( ), (, ), , , AS. , AS . , . , . AS . AS-, , .

, AS- . , RDA- DBS-. AS- - .

(Transaction Processing Monitor - TPM), , , - ( middleware), - . , , . - , , , .



1. . , , . .

, . .. , " , .. - ". , . ( "" relation - "").

. .

:

: ( ) : ,

: R, . :

-

-

- n ( n=1 - , n=2 - , ..., n-)

-

. "-". , - . , "-" , , . , .

. , : , . " - " . - "" . .

, , ( ). " ", . , , .

. , . .

. . , , .

.

-. . , , . , "", .. , - .

.

. .

, .. ().

, . , " ", . , . .

:

X Y , , Y X, X Y.

X -> Y. , X Y , , .

, " ", .

.

:

- , , , .

, . () . , . ( , ). .

, , .. :

;

.

- . :



.

. :

(.. ).

, (.. ), . (). :



, .

, . : .

() (). , , .

: , , .

:

1. . , , , , . .

2. ( , ).

. , "". , , , . 70- 12 , () :

, , , .

:

. , , : .

. , .

(missing information). ( - ) ( , ) , : , . , .

. , , .

. , , , :





( )

- ( )





-. , - , , .

. - , , .

. -

. , .

. , .

. ( ) ( ).

. ( ), "" , () .

, . , . -, :

() , (). , , .

. , ( ), ( ), - .

:

. , . , .. . ( , ..) .

, , "" , , , . , (join), .

,



,

-, , , :

. , , , , . "" .

, , , . , .




. "/". . FS. RDA.


, . : , , . , - . , , . .

, , , . . , .

, . : 1:M ( - ) M:1 ( - ). , , , . , N:M. - . N:M. (, DNS, DBMS).

. , . , . - , . . - . . , - . , , . . , : (-) - ( ).

:

.

.

0,1 -.

, - .

.

1:M .

, .

. "" "" . , , , , . . , , N - . - -. . .

. , , DBTG CODASYL (1971 ). -, "--", . "--", .

. , .

:

( , ) - , , : ( );

( , ) - ; ( : = (, , )), ( : = (, = (_, , , _))), ( : (12) = (, ));

( ) - , ( );

(, ) - ( );

- , .

, :

- ;

- (-);

- -;

- , ;

- ;

- ;

- ;

- .

, . , , . .

"-" , . , .

- . , , .

, . , .

. .



. 1.10. "-"

, "-" , , , (. 1.10). , , "-".

-:

;

, .

:

( );

( , , , ; ).

() :

1. .

2. , (, , ..).

3. - ( , ..).

4. , .

:

, ;

, ;

, , ( ).

:

, ;

, ;

;

, .

, :

(File Server FS);

(Remote Data Access RDA);

(Data Base Server DBS);

(Application Server AS).

(FS). . . (.. ). , .

, -.

:

( , ),

(),

( ) ..

(RDA) FS . -. (, SQL, ) ( API).

, , .

RDA

;

.



;

RDA, ( ).

-

- , . , - , , , . , - , .

-, . , , .

- - , . - . - .

, , , , . .




. , , . .


"-". .

, . .

, : , , , . , , .

. . 1-, -. : , . - . , , . , .

"--" ( "--").

:

(), . .

, , .

, .

, .

. .

:

"--"

( );

.

. , , , .

, , .

. ( , , ). . ( , , , , , , , ).

" ". , , . , ( , , , ), ( , , , , , , ).

( ) , - . . , . , , ( ). , , , -.

. , () , , , , .

, , , , , . , . "" .

, . , .

60- . , .

, , . . , , : () () . .. : " " " ".

, .. .

, . , , , , . , .

, , 60- , , , .




. , , . .


"" Simula (1967 .) - . ", " ( .). , , (, , - ""). , ( ) - .

- .

, "- " . "" - .

, : , . , - :

:

:

- ( ), - , ( ) , , . , , .

- , , , . ( ) ( ).

- , .

:

- :



"", ;



:

, - , . - , SmallTalk, C++ Java.

:

- , , , . - , :

- . , "-" . - , .

- .

, - :

- . , .

- ( PRIMARY KEY REFERENCES) .

, . - - ( ODMG), (SQL-3, - ).

ODMG.

ODMG (Object Data Management Group) - , 1991 . . , ODMG 2.0. .

ODMG 2.0 : (SQL), ( OMG - Object Management Group) - (C++, Smalltalk, Java).

ODMG - : , . :

- . OMG , . ODMG:



()



()

, , ..





(ODL - Object Definition Language) - ( DDL ). ODL IDL (Interface Definition Language - ) OMG , , . ODL , , . ODL , . ODMG- , DDL.

(OQL - Object Query Language) - SQL - , , . SELECT, SQL-92, OQL, , SELECT-, , ODMG. OQL- -, OQL- , OO-. OQL ( ).

-. C++, Smalltalk Java Object Manipulation Language (OML) - , - . OQL, . - OML, , .

(), , , . , , . , , , , , , . . , , .




. -. ER- . ER-.


. 70- , . , 80- .

, . 1960- . .. , IBM, - 1970 . " " .. , 1970 ., . ( 12 ).

12

.

- ( ) .

- ,

(null value) - ( ), .

- , , .

- , . , , .

(views) - , , .

, - , ,

- - .

- - , , .

- . , .

- - , .

- , ,

, . , .

, . , . .

, - .

, :

- , ;

- . , ;

- , . .



, . - (), :

- , ;

- , ;

, , (, , .);

- , , , .

( ), , () .

: . , , , .

, "" (relation), , , ( , , "" - , .). : , . , ( ), .

, , , ( "" "").

, ,

- , , - . ( : , , - , , , , ..), (, , - , , , .). . , - .

:

. . . (). , . . .

. , . , , (, ). , , .

- .

. . (,

, - ( ), .

- , . "" " ". . - , - . , " " - , "" - .

- . , " " , "" "" , .

: " ", " " " ".

, , . . , ( ). .

, . - , .

"-" (Entity-Relationship diagrams, E/R diagram) . 1976 . . "-" , - , - (. . 2.6).



. 2.6. "-"

( , IDEF1X, .). , , , . , "-" - . , (), .

, . .

- .

.. , .

- . - ( ) , .

.

(1) . - , (.. ). , . , .. , "" .

1, - , .. .

1 , .

(2) ( ) .

A B, B A (A B). ( ) A .

, . .

2, 1 .

(3) . A, B, C - . A B B C, , .. C B B A. , C A (A C).

, , . .

3, 2 , .

-

3 , -, , - (), . . , , 3 -.

- (), 3, . , , : , .

, , 3, , 3. , (, , _), 3, , . , _ , _ .

. 3, .



(4), 3 . , 4 , .



, () . , : . ; ; ( ).

. . , . , , . 4 , .

(5), 4 . 5 . , quot;--quot;.

, . :

1 - ;

2 - 1 ;

3 - 2 ;

- 3 ;

4, - 3 ;

5 - 4 .

:

, . . , , .

. , .

, .

- . , . "- (ERD)" c .

, , , .




, , , .


, .

, . , . .

, . ( ) ( ), , - , - . , , . , , () (). . , , (: ); , , (, ). , - . , , .

. . , . . . . , , . , . pax . pa , . .

. , , . " " , , . , , . " ". "" , "" . , , . , , , , ( ). , .



() (). , , . .

:

;

-;

;

-;

.

, , , . , . , , . , .



;

;

, ;

;

.

:

, ;

;

.

, ( ):

;

;

.

. : .



. : . , , , ( "" _ ).

.

: , (), .

, . . .

, , , .

, , , .

, , . , , .

. - ; .

. , ( " ", - " "). , . , .

, . , .. " ". , , "Cronos Plus".

, , . , -

, , .

: . .



:

;

;

;

;

;

;

;

;

;

..



, ( ).

:

;

;

( ).

:

;

;

;

.

. ( relation - ) , , .

.

, , . . , .

1970-1971 .. , - .

.

.

. , . , . , . , . , . , .

.

, , , , .

, , . , , .

. :

- ;

, .. (, ..) ;

;

;

.

, , - , , .

, , ( ). , .

, ( ); - .

:

, (relation). "" - ( " ", - result set. " ", ;

. , ;

. . (, ), ().

- :

(relation) - , ( - ).

- , . , - .

- ( , );

- ;

- ;

- . - , - ().

, - ( ), - ( , ). "" " " . .

( - 0 ).

, , .

.

, . ( ) , , .

- , , , . () - - (). , . , , , , .

- - Python, Java, C#, Visual Basic .NET, C++, Objective-C Smalltalk; . , - .

- , , .

(Atkinson et al., 1989) , . 2 : - .

:

- .

- .

- .



-

-

-

-

-



- . . , , .

- . , .

- . , , .

- . , . ( . . , . , . , , .)

- . , , , , .

- . . , . .

- . .

- . . , .

:

-

-

-

-



- (, )

-

-

- . .

, . , . -, :

- () , (). , , .

. , ( ), ( ), - .

, , "" , , , . , , .

,



,

-, , , :

. , , , , . "" .

, , , . , .

(), , , . , , . , , , , , , . . , , .




. .


.. 1970 . : 1) , , 2) , .

, . . 4.1. " - - ". . , . . . . , . , . , .



. 4.1. " - - "

. , (). , () .

, .

1. D1, D2, ..., Dn - , . . :

2.

- . r R .

3.

r e D1, D2,, Dn R .

(d1, d2, ..., dn), , . , , , n. (d1, d2, ..., dn) n . d1, d2, ..., dn. . , .

. , , , .

-, , . , . -, , , , . : . , ! -, , , - . .

. , . , , . . ( ), .

, , , , , . , , . , , -. - .



, . . , . .

, , .. - , .

! " " " " , .

, . - . , , .

. R r , . , , - . , . , , ( ) .

: . , , - . .

, , .. .

, , , . , ER-, . CASE- . CASE- . , , ErWin .

, . , : " ? , ?" , . , . , . - , .

, .

1. .

2. .

3. .

4. .

5. , .. .

6. , 1) - , 2) .

7. . , .



: , , , , , , . .

. , , . .

4. ( ).

5. ( ).

6. , ( ).



Qa, Qb, Qc - , B, . A B. C, B, A. , - :





. , , . , - :

.



. , , . , - :



, Qa - (Qa - Qb).



. , , - . , :





. , , , . :



, , , . , . , , i1, i2, , iN, N - .

, Qa .



, - -, B - -. B A. , , , , :



. , . n m - Qa Qb, n > m. t n - m, , s m Qb, ts Qa. . n, Qa. n - m Qa, Qb. t n - m, n - m Qa, Qb s m, , ts Qa. , T - V , , .



() . , , ( ). :

s , F - , (, , , ).



q- . - , , . , .

:

n - Q_a; - ; i, j - Q_a Q_b , .

-.

, . .

, . . R1 (A1, A2,..., An, B1, ...) R2 (A1, A2, ..., An, C1, ...) - , :

- ;

- , R1 - R2, , R1. R2., R1. - , R1. R2..;

- R2.. , A1, A2, ..., An , R1, R2, Qc = R1 >< R2 .

: , , .



: . (a comp-op b), b - , comp-op, (a comp-op const), a - , const - .

, -, -, true.

UNION , INTERSECT - , MINUS - . A WHERE comp, A - , comp - . comp1 comp2 - . :

A WHERE comp1 AND comp2 , (A WHERE comp1) INTERSECT (A WHERE comp2)

A WHERE comp1 OR comp2 , (A WHERE comp1) UNION (A WHERE comp2)

A WHERE NOT comp1 , A MINUS (A WHERE comp1)

, , AND, OR, NOT .

"" -.



- A , A.

A a1, a2, ..., an , , a1, a2, ..., an, , <a1:v1, a2:v2, ..., an:vn> , A , a1 v1, a2 v2, ..., an vn. , "" - -.



( ) - - . A B. , comp (a comp-op b), (a comp-op const), a b - A B, const - , comp-op - .

, comp A B.

, , - , (a comp-op b), a b - -. , .

( ), . , . , .

- , - . , (a = b), a b - . , (a) , (b) .

A B, ( ) c (.. ). ab A B. A B - ab A B A/c BBC. , , - , . , .



. - A {a1, a2, ..., an, b1, b2, ..., bm} B {b1, b2, ..., bm}. , bi A bi B , . {aj} a, {bj} - b. A(a,b) B(b).

A B C(a), v , A <v, w> , {w} b B.




. .


:

- ,

- .

, .

:

- , , ,

- , . .



, , - , , .

, , , . , . , - - . - :

- ;

- ;

- ;

- .

:

- ;

- ;

- ;

- .

, , , , () .

, , -.

, , -.

, , - , , , .

, () .

, -, .

, -.

, .

- . , , ( ) .

, , .

.

( ) , , - .

( ) ( ). , , , , .. , . .

<-, ->. , , , -. .

, , - . ? , . . , .

. . , - . , .

- , .

(, , ). -. -, . - ( ), , , , , .. . , .

: , . , , , .

, , , -. , "" , .. , , .

, , , , . , , , .

. , , . , . ! , .

- . , ( ) .

- -? , , - .

. , . .

, . -, , -, , . , , .

- , . . ., OP , (A OP B) OP C = A (B OP C), , A OP B OP C (A, B C - , , ). , , , .. A OP B = B OP A.



, , (_, _, _, _) (_, _, _), , 50.

, , , , :

_ = _;

_ > 50;

_, _.

, . , , , , , : _ _ , _ _ 50.

, . , . , , .. , - ( ), . , .

. , , . , , . , .. . , , .. . , . , , , , , . . , , QUEL, Ingres.

RANGE. , , , ,

RANGE IS

, , . ( , , , ). , , _ , ._.

(WFF - Well-Formed Formula) , . WFF (comparison), ( ). , "._ = 140" . , WFF, WFF, , .

WFF NOT, AND, OR IF ... THEN. , form - WFF, comp - , NOT form, comp AND form, comp OR form IF comp THEN form WFF.

, WFF . form - WFF, var, EXISTS var (form) FORALL var (form) wff.

, WFF, . , WFF, , . , , - WFF true, . WFF EXISTS var (form) FORALL var (form), WFF WFF, , var - . , WFF, . WFF , .

1 2 - , . , WFF EXISTS 2 (1._ > 2._) 1 true , ( 2) , _ . WFF FORALL 2 (1._ > 2._) 1 true , ( 2) _ .

, , . , var WFF form, WFF, , var, , var WFF form. :

EXISTS 2 (1.__ = 2.__) AND

FORALL 2 (1._ > 2._)

2 .



, WFF . , , . (target_list).

, :

var.attr, var - WFF, attr - , var;

var, var.attr1, var.attr2, ..., var.attrn, attr1, attr2, ..., attrn ;

new_name = var.attr; new_name - .

, WFF .

target_list WHERE wff. , WFF, - .



, . - , , ( - ) ( - ).

, . R - n- a1, a2, ..., an,

R (ai1:vi1, ai2:vi2, ..., aim:vim) (m <= n),

vij - , . true , R , . vij - , aij , ; vij - , .

. , , .

" , " ( , , , , , , ):

_, _ WHERE EXISTS _1

( (_1) AND

(_, _, _) AND

_ > _1)

, . , Query-by-Example, ( ) , .




:


(). , , , , , . -, , , , , - . , , , , .

, , , , . , , .

, , , , , , -. , .

- - . , , , , .

. :

- ;

- : , -, , ;

- : , , ;

- : , , , ;

- : ( ), ;

- -: , ;

- -: . .

, -, - , , , . , , , . , , , . , , . , , .

- - . , 1024 728 24- 2 ( ). , 20:1, 0,1 . , 30 , 38 000 , 100 - 380 . , , , , .

, . , - . , . - . (, , ), -.

- , (, ) ( ). - . .



. ( , , , , , , ) .

, .

, , .

- . .

- . .

- . , .

- . ( ) .

- . .

- . .

- . , , .

- . -.

- . .

- , ;

- ;

- ;

- , ;

- -;

- - ;

- .



, :

- -;

- -;

- - ;

- , -;

- -;

- -;

- .

-

, , - . , , ( , , , ), (, , ), ( , , ), ( , , ) ( , ). , -, , .




, , .


() - ( ).

:

1. ;

2. ;

3. ;

4. .

, (, ). , , .

.

, . . : , , . . : , , ; .

, , . . . , , .. = . .

, , , . - (). , , .

.

, , :

;

;

, ( );

() ;

.

. ; ; , , ; . , : , , , .

. ( ), ( ) ( , , ). , , .

, , : , , ( ).

:

- - ;

- ;

- ;

- , , ;

- (- , , , , ..);

- - ;

- , , ;

- - , ;

- ;

- ;

- . , , , , , , , , - .

. , (, , ) .

, , . , , , , .

, .

, , : - , ; - , ; - (, -, ); - , ; - ; - ( , , .); - , (, , , , , , ); - , ; - ; - , ..

: , , ... - (), . : , .

, . , , : . , . .

() . . - . . , , . .

, (), , , .


. , , , . .


, (). : , .. , , ().

, - , - . , , .

: (), , , .

- , .. , . ( ) .

:

( ) - , . . , .. , , .

, , . , . .

. , , , , - . , () / , , .

, , , () .

, (, CList MFC). , , , , (, , ), , (, ).

, . / .

( ) - . , . . ( , , ). , , , . .

, . .

, - . , , .

, . , . , , , , . .

.

, : , , . . , , , ..

, , , , . , .. .

:

- .

, . , , (), , (), .

- .

:

- - - , . .

- . - ; .

, , .

- , . , . .

.

, . : , , . , .

, , , ( ), .

, , . - , , . , , . , . , - , . , .

, :

- ,

- .

. . , . , . , , , , . . , , .

. G (V,E), V - , E - V, V . V . - , .

- , b a, , b. , . . , .

.

: , , , , :

"-";

, . ;

; ;

"-" , .. .

( ) . . .

, , , . .

, 2 . . : , . , , , , , , - . 1 , .

, . , .

: (balanced), 1.

.

, . , , - ( "to hash" - , ). . , , -.

, , - , .




. (, , ).


, , .

(, database) - , .

- , . , .

() - , , , , , , , , .

:

I. :

- ( - ), : ( ) ( );

- - , :

- - , ;

- - , ;

- - , :

- -

1. , ( -), ;

2. () (., ).

II. , ():

- - , ;

- - , ;

- - , ;

- - , ;

- - , () ;

- - , () (1, 2, 4);

- -

1. , (. ):

2. , .. "" . ( .. , ..);

- - ;

- -

1. " " (, );

2. , ;

- - , ;

- - , .

III. :

- - , : - , ;

- () - , :

- () - , ():

- - , , ;

- - , ; .

IV. , :

- , , , . , , . , , , , . ;

-

1. , , , ;

2. , ;

- , (. ) :

- () - , / , (). , , , -, , .. ;

() - . - ( .. ) ,

- , - . (. , ..);

" " - ( .. - ) (, ) (, , - - , ..).

V. :

- , ;

() -

, ,

, , ;

- , ( , );

- , .

.

.

:

- -;

- - ;

- " " - - ( ).

-. ( ). () (, Microsoft Windows Server 2003). . ( Microsoft Windows 2000 Professional Microsoft Windows 98). , . . .

-. , , () - , , MicrosoftSQL Server Oracle. : . - (SQL). SQL, ( ) , . . , .

- -. (" "), , HTML- Web- Windows-, Web-. , , . Web- (, Oracle Forms Server).

, . , , . . :

, , , ;

, ;

-, .

, CDS/ISIS , , . ADABAS , ORACLE - . , , , . , : (, , , ..).

( ) : . , .. . , , . , , - . , , , ..

. , : . . " " . , 30-45 .

, ( , ). , , ( ) (). , , .

, , , , . , , , , , , , (. 1.3).



. 1.3.

- . , . , - , .

, . 1.3, -. , . .

, . , , .



, , .

, . .

, . . , , , .

- . .

-- , , , , , . . 2.3 :

. , , , . , : , , , , . , . , , .



. 2.3.

, . , .

, . , . - , , .

, .

, , .

, , -- SGML (Standart Generalised Markup Language), ISO 80- . , (), . , DTD-, . , . SGML , , , . , SGML , , ( HTML), SGML- .

, SGML, HTML -- , . HTML, , - , . , HTML, , HTTP. , , HTML , , HTML .

HTML , . , , , , , XML. ?

XML (Extensible Markup Language) -- , , XML-. . XML , , .

, . -, . .

-- , . -- . , . , , , , , , , . , , , .

(, ) . () , . ( ), , , . ( "" ), . , .

, , . : , , "-" .. - , "" . , , .

. , , . , , .

. , "" . "" "-", .. " ", , . , , , , .. UNIX " ".

. 60- , . , , .

.

. , .




31213131


-..

-



4-

5-

6-

7

8

9

10-

11-

12-

13-,,

14.-

15-.-

16--,

17

18-

19-

20-

21.

22


1. caroticus, a, um

2. dexter, tra, trum

3. externus, a, um -

4. hepaticus, a, um -

5. iliacus, a, um -

6. internus, a, um -

7. laesus, a , um ,

8. longus, a, um -

9. palatinus, a , um -

10. peroneus, a , um -

11. profundus, a , um

12. pterygoideus, a , um

13. rectus, a , um -

14. sinister, tra, trum

15. styloideus, a , um -

16. thoracicus, a, um -

17. transversus, a , um -

18. zygomaticus, a , um -

19.

20. articularis, e-

21. communis, e

22. dorsalis, e

23. frontalis, e

24. lacrimalis, e-

25. longitudinalis, e-

26. lumbalis, e-

27. nasalis, e-

28. occipitalis, e-

29. temporalis, e-

30. vertebralis, e-

axis, is m- ,

basis, is f - ,

caput, Itis n -,

cavitas, atis f -

corpus, oris n - 8

costa, ae f-

cranium, i n-

dens, ntis m -

facies, ei f ,

femur, oris n -



fibula, ae f -

fovea, ae f- , ( )

fractura, ae f-

fundus, i m-

ligamentum, i n

mandibula ae f -

maxilla, ae f-

nasus , i m -

pelvis, is f -

pes. pedis m - ,

radix, icis f -

septum, i n -

vertebra, ae f -
1) articulatio, onis, f -
2) cerebellum, i, n -
3) cerebrum, i, n -
4) cortex, icis. m - ,
5) ductus, us, m - ,
6) functio, onis, f -
7) genu, us, n -
8) incisura, ae, f -
9) lingua, ae, f -

10) lobus, i, m -
11) membrum, i, n - ,
12) pulmo, onis, m -
13) sutura, ae, f -
14) truncus, i, m - ,
caroticus, a, um - ,
communis, -
dexter, tra, trum -
hepaticus, a, um -
lacrimalis, -
laesus, a, um - ,
longitudinalis, -
longus, a, um -
palatinus, a, um -
peroneus, a, um -
posterior, ius -
sinister, tra, trum -
superior, ius -
thoracicus, a, um-

dens, dentis m -
coccyx, ygis m -
fornix, icis m -
larynx, yngis m -
pharynx, yngis m -
margo, inis m -
pulvis, eris m -
sanguis, inis, m -
thorax, acis, m -
ren, renis, m -
lien, lienis, m
dies, ei, m - .
f :
diameter, tri, f -
periodus, i, f -
mater, tris, f - ,
manus, us, f - , .
:
dura mater -
pia mater -
atlas, antis, m - , I
axis, is, m - , II ,
canalis, is, m -
cor, cordis, n -
os.ossis, n -
os, oris, n
tuber, eris, n -
vas, vasis, n -
pancreas, atis, n -
cornu, us, n - ,
1) ganglion, ii, - ,
2) rete, is, n -
3) anterior, ius -
4) centralis, e -
5) ischiadicus, a, urn -
6) durus, a, um -
7) lateralis, e - ,

10) lymphaticus, a, um -
11) minor, minus -
12) pius, a, um - ( pia mater)
13) venosus, a, um -
abdomen, inis, n -
.abductor, oris, m - '
Brachium, ii, n -
carpus, i, m -
crus, cruris, n - ,
cartilage inis, f -
deformatio, onis, f - ,
m extensor, oris, m - -
fascia, ae. f - ,
m. flexor, oris, m - -
11) labium, ii n -
12) m. levator, oris m -
13) membrana, ae f -
14) oculus, i m -
1 5) pollex, icis m -
16) regio, onis f-
17) scapula, ae, f -
18) vagina, ae, f -
19) vesica, ae, f -
20) ventriculus, i, m - ,
21) accessorius, a, um -
22) cervicalis, e -
23) hyoideus. a, um - (, )
24) hypoglossus, a, um - ()
25) inferior, ius -
26) maxillaris. e -
27) mucosus, a, um -
28) rotundus, a. um - (, )
29) sublingualis, e - (, , )
30) sacraiis, -
31) teres, etis - (, )




1) articulatio, onis, f -

2) cerebellum, i, n -

3) cerebrum, i, n -

4) cortex, icis. m - ,

5) ductus, us, m - ,

6) functio, onis, f -

7) genu, us, n -

8) incisura, ae, f -

9) lingua, ae, f -



10) lobus, i, m -

11) membrum, i, n - ,

12) pulmo, onis, m -

13) sutura, ae, f -

14) truncus, i, m - ,

caroticus, a, um - ,

communis, -

dexter, tra, trum -

hepaticus, a, um -

lacrimalis, -

laesus, a, um - ,

longitudinalis, -

longus, a, um -

palatinus, a, um -

peroneus, a, um -

posterior, ius -

sinister, tra, trum -

superior, ius -

thoracicus, a, um-


(MS WORD)

, .(,,,,,,,,). . , , , , , , .


(MS WORD)

- , . . , . <> : <>- ; <>- ; <>- ; <>- ; < >- ; < >- , , ;< >- ; <>- ; <>- ; < >- ; <>- , ; <>- ;<>- Word .


(MS WORD)

-, , . . <> - : < >- ;< >- ; <>- ; <>- ;<>- ; < >- ;<>- ; < >- ; <>- ; <>- ; <>- ; <>- , ; <>- ;<>- ;<>- , , .


(MS WORD)

- ; ; . , .
<> - : <>- ; < >- ; < >- ;< >- ; < >- ; < >- ; <>- ; <>- ; <>- ;<>- ; <>- .


(MS WORD)

- , ( , , ). . <> - : <>- , ; < >- ; <>- ; < >- ; <>- ; <>- ; < >- ; <>- ;<>- ; <>- ; < >- ; <>- ; <>-: ;<>- ; <>- , , ; < >- .


(MS WORD)

- . <> - :<>- ;<>- ;<>- ;< >- , ;<>- ;<>- ; <>- ;<>- -; < >- ;<>- ;< >- ;<>-, ;<>- , ;<>- , ;< >- , , .


(MS WORD)

. , , . . , . <> - : <>- ; <>- ;< >- ; <>- ; <>- ;<>- ; <>- ;< >- , ;< >- ;<>- ;<>-, , ; <>- Word (, );<>- Word Windows.


(MS WORD)

. , . <> - : < >- ;< >- ;< >- ; < >- ;< >- ; < >- ;< >- ;< >- ;< >- ; <>- ;< >- ;< >- ;<>- ;< >- ; < >- .


(MS WORD)

. , .
<> - : < >- ;< >- ; <>- .


(MS WORD)

- , . <> - : <>- ;< ...>- ;<>- ;
<>- Word; < >- ;< >- Microsoft Word;< ...>- .


(MS WORD) ( )

, . Word 20 , , , 2-3. Word - "" "". , / , .
. , . . . . " ", . . , , , . .
Word . .., , , , Word . , , , Word " ".



(MS WORD) MS Graph

. Word Microsoft Graph. Word, , Microsoft Graph. , .
Microsoft Graph:
Microsoft Graph;
.
.
: , , Excel Microsoft Graph.


(MS WORD)

Word : Microsoft Word;
, , , .
, , , - . . , , .




(MS WORD)

. () ( ) .
: ;
(, ); (, , ); ( ); ( ). , .
(, , ) . , , , . , F1, . , , .
: (, , , ), ;
, . . , . () .
. : 1. . : ; () ;
;
. Word. , , Word. .




(MS WORD) : , , ,

Word , . , , : , , . Word . , , , . , , , . Word , . . , . . , . . Word , , . . - , . . . . , .




(EXCEL) ( )

Excel - . , . , , , - , , , . , Microsoft Word , , . - , , , , - . Excel , , , ; , . - , , , .
( , -, ), - -: , , , , , , , .. .. Excel , , , . , , , , Excel , - .


(MS WORD) , , ,, , ,


, , , . Word , , . .
, , , . , Word.
Word . . . .

, Word. , , - Word.
, .

, . , . .

, . I, .
, . , . .
, , , , , .

. , , . , .
, , .
.

, , . , . , , .

, , , , Shift+F10. .
, , , , .
Word , .




, !




. ( ). .



, - , . , , .



, - , .



- ! .


" "


. , , - , . . , , . , , , , .. , "" "" ;-)))



""

3-, 4- ( ..) - (,,,,, ..). . ( ). , , (1- - ,2- - ,3- ..). . . , .



""

, ... (, , , ) .. ... --- . .. ... . ... ... ... ... , ... ... .. ... , , 3 .







. . . . : . . .







, , , , , , . . , , , , , : !. : , , , . , , , , , , .



" 3 "

( ) . , (:" 3 . , , .") , . , ( ) . ( ). , . , . ( "" - .)




24


- , : ( . . ); - ; . .

- : ( ), , .

, -, ( , , ) . , , 䳿, , , . 쒿


23


() 3 : ( ); ( ); ( ).



' . :



, - ( );



, , ; ; - , . , ; G ; , (X) ().



,



Y = C + I + G + Xn, Y , 䳿 . , , , , , , . 񳺿 .



', () ( , - ), - . , .



: ( , 쳿, ); ( ); ; ( , , ); ( , ).


18


, , . () . , , ycy . +




17


( ; . inflatio ) , , . :

;

( 50 % )

.

:

( );

( , , );

( , );

;

, ;

(, , , ).

³ , , , , , . , .

, . , . , ,

- , ( ' ), (), ' , (), ' (), () ( - );




16


- , . :

1. ()

2.

3.

4.

5. *4

*5 - , . : , , " ".

, . . , , . ϳ 30- , , 4 . . . , . , , , , . , , , .




15


- ( ), , , , . , , , , . , . ֳ , , . , . . , .

- , , -. - , , () . - , . " ".

. : . .




14


ϳ

, .

:

ϳ









( ) (): 1.

2.

3.

4. , (): 1.

2.

3.

4. ()



ֳ :

1) ( - , , , );

2) ;

3) ;

4) ' ;

5) , ;

6) .




12


. , , . . ,




11


, , . , , ' ( %) : Ed>1.

, , ' , : Ed=1.

, , : Ed<1. , - () .

' , . . . , , , .

, , . : , , . , .

:



Ko

Q

P

, . , . ϳ .

. , , ' , .

' . - , , .



́ ́, , , , , . , - , .

.