Sunteți pe pagina 1din 8

Sisteme de operare Scurt descriere

VC ++ poate fi utilizat pentru a dezvolta programe pentru trei platforme Win32: Windows NT (pe procesoare multiple), Windows 95/98 si Win32s. Windows NT este un SO multifir (multithreaded ) pe 32 biti cu mediu grafic integrat si posibilitati de server avansate. A fost dezvoltat pentru a maximiza portabilitatea, stabilitatea si securitatea. Subsistemul Win32s este un alt nivel pentru Windows 3.1; acesta implementeaza un subset al sistemului Win32 care permite executia aplicatiilor pe 32 biti. Windows 95 mosteneste o parte semnificativa de cod de la Windows 3.1. Asigura o compatibilitate pentru aplicatiile scrise pentru Windows 3.1.

Windows i Mesajele
Windows este referit adesea ca un sistem de operare bazat pe mesaje. Fiecare eveniment (apasarea unei taste, clic de mouse, etc.) este transformat ntr-un mesaj. In mod obinuit aplicaiile sunt construite n jurul unei bucle de mesaje care regsete aceste mesaje i apeleaz funcia potrivit pentru a trata mesajul. Mesajele, dei sunt trimise aplicaiilor, nu se adreseaz acestora, ci unei alte componente fundamentale a SO, fereastra (windows). O fereastra este mai mult dect o zon dreptunghiular afiat pe ecran; aceasta reprezint o entitate abstract cu ajutorul creia utilizatorul i aplicaia interacioneaz reciproc.

Aplicaii, Fire i Ferestre


O aplicaie Win32 const din unul sau mai multe fire (threads), care sunt ci paralele de execuie. Gndim firele ca fiind multatsking-ul din cadrul unei aplicaii. Observaie: Sub Win32s, poate rula o aplicaie cu un singur fir de execuie. O fereastr este totdeauna gestionat de un fir; un fir poate fi proprietarul uneia sau mai multor ferestre sau pentru nici una. In final, ferestrele sunt ntr-o relaie ierarhic; unele sunt la nivelul cel mai de sus, altele sunt subordonate prinilor lor, sunt ferestre descendente.

Procese, fire i ferestre Exista mai multe tipuri de ferestre in Windows; cele mai obinuite sunt asociate cu o aplicaie. Boxele de dialog din cadrul unei ferestre sunt de asemenea ferestre. Acelai lucru pentru butoane, controale de editatre, listbox-uri, icoane, etc.

Clase Window
Comportarea unei ferestre este definita de clasa fereastr ( window class). Clasa fereastr menine informaii despre modul de afiare iniial, icoana implicit, cursor, resursele meniu i cel mai important lucru adresa funciei ataat ferestrei procedura fereastr window procedure. Cnd o aplicaie proceseaz mesaje, aceasta se face n mod obinuit prin apelul funciei Windows DispatchMessage pentru fiecare mesaj primit; DispatchMessage la rndul ei apeleaz procedura fereastr corespunztoare, identificnd iniial crei ferestre i este trimis mesajul. n continuare procedura fereastr va trata mesajul. Exist mai multe clase fereastr standard furnizate de Windows. Aceste clase sistem globale implementeaz n general funcionalitatea controalelor comune. Orice aplicaie poate folosi aceste controale, de exemplu orice aplicaie poate implementa controale de editare, utiliznd clasa fereastra Edit. Aplicaiile pot de asemeni s-i defineasc propriile clase fereastr cu ajutorul funciei RegisterClass. Acest lucru se ntmpl n mod obinuit pentru fereastra principal a aplicaiei (icoana, resurse, etc.). Windows permite de asemeni subclasarea sau superclasarea unei ferestre existente. Subclasarea substituie procedura fereastr pentru o clas ferestr cu o alt procedur. Subclasarea se realizeaz prin schimbarea adresei procedurii fereastr cu ajutorul funciei SetWindowLong (instance subclassing) sau SetClassLong (subclasare global). Instance subclassing nseamn c se schimb numai comportarea ferestrei specificate. Global subclassing nseamn c se schimb comportarea tuturor ferestrelor de tipul specificat.

Observaie: Global subclassing se compor diferit in Win32 i n Windows pe 16 bii (Win32s). In cazul Win32, aceasta afecteaz numai fereastra care este sub controlul aplicaiei ce face subclasarea; n windows pe 16 bii, efectul este global, se afecteaz ferestrele fiecrei aplicaii. Superclasarea creaz o nou clas bazat pe o clas existent, reinnd numai procedura fereastr. Pentru a superclasa o clas fereastr, o aplicaie regsete informaiile despre clasa fereastr utiliznd funcia GetClassInfo, modific structura WNDCLASS astfel recepionat i folosete structura modificat ntr-un apel al funciei RegisterClass. GetClassInfo ntoarce de asemenea i adresa procedurii fereastr. Mesajele pe care noua fereastr nu le trateaz trebuie trecute acestei proceduri.

Tipuri de mesaje
Mesajele reprezint n fapt evenimente la diferite nivele ale aplicaiei. Exist o clasificare a acestor mesaje (din pcate nu prea exact): mesaje fereastr, mesaje de notificare i mesaje de comand, dar deocamdat nu ne intereseaz acest lucru. Mesajele windows constau din mai multe pri, descrise de structura MSG. typedef struct tagMSG { HWND hwnd; UINT message; WPARAM wParam; LPARAM lParam; DWORD time; POINT pt; } MSG; Descriere: hwnd identific n mod unic fereastra la care a fost transmis acest mesaj. Fiecare fereastr n Windows are un asemenea identificator. message reprezint identificatorul mesajului. Identificatorii mesajului sunt referii n mod obinuit cu ajutorul constantelor simbolice dect prin valoarea lor numeric care o au n sistem. Aceast descriere se gsete n windows.h. Urmtoarele elemente pot fi privite ca parametrii ai mesajului, care au valori specifice funcie de fiecare mesaj n parte. Marea majoritate a mesajelor ncep cu WM_. De exemplu WM_LBUTTONDOWN, WM_MOUSEMOVE, WM_LBUTTONUP, etc. Aplicaiile pot s-i defineasc propriile mesaje. Cerina major este ca identificatorul mesajului s fie unic. Pentru a defini un mesaj n sistem folosim funcia RegisterWindowMessage.

Mesaje i multitasking
In Windows 3.1, bucla de mesaje are rol important n interaciunea dintre aplicaii i SO. Funcionarea corect a unui SO Windows 3.1 depinde de cooperarea dintre aplicaii. Aplicaiile sunt cele care permit SO s preia controlul. Acest neajuns este nlturat n Windows 95/98, NT, 2000. SO este cel care realizeaz programarea aplicaiilor pentru cuantele de timp necesare pe procesor. Dei aceast planificare a execuiei este diferit pe Windows 95/98 fa de NT, rolul primordial revine SO.

Cozi de mesaje
n Windows pe 16 bii, SO menine o singur coad de mesaje. Cnd o aplicaie ncearc s gseasc urmtorul mesaj din coada de mesaje prin funciile GetMessage sau PeekMessage, SO poate efectua un context switch i poate activa o alt aplicaie pentru care mesajele ateapt n coad. Mesajul din vrful cozii este extras i returnat aplicaiei via structura MSG. Dac aplicaia eueaz n apelul lui GetMessage, PeekMessage sau Yield, aceasta blocheaz sistemul. Coada de mesaje poate deveni plin... n Win32 (95/98, NT, 2000) mecanismul cozii de mesaje este mult mai complicat. O singur coad de mesaje nu mai rezolv problema. Aici sistemul de operare d controlul unei aplicaii i tot SO permite multitasking-ul. Dou sau mai multe fire pot accesa coada de mesaje n acelai timp i nu exist nici o garanie c mesajele extrase sunt ale lor. Acesta este unul motivele pentru care coada de mesaje a fost separat n cozi de mesaje individuale pentru fiecare fir din sistem.

Procese i Fire
ntr-un SO non-multifir, de exemplu UNIX, unitatea cea mai mic de execuie este task-ul sau procesul . Mecanismul de planificare (aparine SO) al task-urilor va comuta ntre acestea; multitasking-ul se realizeaz ntre dou sau mai multe procese (task-uri). Dac o aplicaie are nevoie s execute mai multe funcii simultan, atunci aceasta se va divide n mai multe task-uri. Din aceast tehnic decurg anumite neajunsuri, consum de resurse, timp de lansare a unui nou task, spaii de adrese diferite, probleme de sincronizare, etc. n contrast, ntr-un sistem multifir (multifilar, multithreaded) unitatea cea mai mic de execuie este firul, nu procesul. Un proces sau task poate conine mai multe fire, dintre care unul singur este firul principal, firul primar. Lansarea n execuie a unui nou fir cere mai puine resurse din partea SO, firul ruleaz n cadrul aceluiai proces, problemele de sincronizare sunt i nu sunt complicate. Oricum apar dou sincronizri: sincronizare ntre procese i sincronizare ntre fire.

Fire i Mesaje
Dup cum am mai spus proprietarul ferestrei este firul de execuie. Fiecare fir are coada proprie, privat, de mesaje n care SO depoziteaz mesajele adresate ferestrei. Aceasta nu nseamn c un fir trebuie neaprat s aib o fereastr proprie i o coad proprie de mesaje. Pot exista fire i fr fereastr i fr bucl de mesaje. n MFC, aceste fire se numesc worker threads (nu au ataat o fereastr, nu prezint interfa ctre utilizator), iar celelalte se numesc user-interface threads.

Apeluri de funcii Windows


Windows ofer un mare numr de funcii pentru a executa o mare varietate de task-uri, controlul proceselor, gestionarea ferestrelor, fiierelor, memoriei, servicii grafice, comunicaii, etc. Apelurile sistem pot fi organizate n trei categorii: 1. servicii nucleu (apeluri sistem pentru controlul proceselor, firelor, gestiunea memoriei, etc.); 2. servicii utilizator (gestiunea elementelor de interfa ale utilizatorului cum ar fi ferestre, controale, dialoguri, etc.); 3. servicii GDI (Graphics Device Interface) (ieirea grafic independent de dispozitiv). Sistemul Windows include de asemenea funcii API pentru alte funcionaliti MAPI (Messaging API), TAPI (Telephony API) sau ODBC (Open Database Connectivity).

Servicii Nucleu
Serviciile nucleu cuprind de obicei: getionarea fiierelor, memoriei, proceselor, firelor, resurselor. Gestionarea fiierelor nu ar trebui s se mai fac cu funcii din bibliotecile C sau prin iostream-urile din C++. Aplicaiile ar trebui s utilizeze conceptul Win32 de obiect fisier file object i funciile asociate cu acesta. De exemplu exist fiiere mapate n memorie care asigura comunicarea ntre task-uri. Referitor la gestionarea memoriei pe lng funciile cunoscute, SO Windows ofer funcii care pot manipula spaii de adrese de sute de MB alocndu-le dar nefcnd commiting. Cea mai important faet a proceselor i firelor este gestiunea sincronizrii. Problema este complet nou i nu a fost ntlnit n Windows 3.1. n Win32, sincronizarea se face cu ajutorul unor obiecte de sincronizare, pe care firele le pot utiliza pentru a informa alte fire despre starea lor, de a proteja zone senzitive de cod sau de a obtine informatii despre alte fire sau starea altor obiecte. In Win32 multe resurse nucleu sunt reprezentate ca obiecte obiecte nucleu: fiiere, fire, procese, obiecte de sincronizare, etc. Obiectele sunt referite prin manipulatori, identificatori (handlers); exist funcii pentru manipularea generic a obiectelor, pentru manipularea obiectelor de un anumit tip . Sub NT, obiectele au ataate proprieti de securitate. De exemplu, un fir nu poate accesa un obiect fiier dac nu are drepturile necesare care s coincid cu proprietile de securitate. Modulul nucleu furnizezz de asemeni funcii pentru gestionarea resurselor interfa-utilizator. Aceste resurse includ icoane, cursoare, abloane de dialog, resurse string, tabele de acceleratori, bitmap-uri, etc. Nucleul NT furnizeaz printre altele: atribute de securitate pentru obiectele nucleu, backup, funcionalitatea aplicaiilor de tip consol care pot utiliza funcii pentru memoria virtual sau pot utiliza mai multe fire de execuie.

Servicii utilizator
Modulul utilizator furnizeaz apeluri sistem care gestioneaz aspecte i elemente ale interfeei utilizatorului; sunt incluse funcii care manipuleaz ferestre, dialoguri, meniuri, controale, clipboard, etc. Se exemplific tipurile de operaii pentru fiecare resurs n parte (n general creare, modificare, tergere, mutare, redimensionare, etc.). Modulul utilizator furnizeaz funcii pentru managementul mesajelor i cozilor de mesaje . Aplicaiile pot utiliza aceste apeluri pentru a controla coninutul cozii de mesaje proprii, a regsi i a procesa mesajele, a crea noi mesaje. Noile mesaje pot fi trimise (sent) sau plasate (posted) la orice fereastr. Un mesaj plasat pentru o fereastr funcia PostMessage - nseamn pur i simplu intrarea acestuia n coada de mesaje nu i procesarea imediat a acestuia. Trimiterea unui mesaj (sent) implic tratarea lui imediat sau mai corect spus funcia SendMessage nu-i termin execuia pn cnd mesajul nu a fost tratat.

Servicii GDI
Funciile din GDI sunt utilizate n mod obinuit pentru a executa operaii grafice primitive independente de dispozitiv pe contexte de dispozitiv. Un context de dispozitiv este o interfa la un periferic grafic specific (n fapt este o structur de date pstrat n memorie). Contextul de dispozitiv poate fi utilizat pentru a obine informaii despre periferic i pentru a executa ieirile grafice pe acest periferic . Informaiile care pot fi obinute printr-un context de dispozitiv, descriu n detaliu acest periferic. Ieirea grafic este executat printr-un context de dispozitiv prin pasarea (trecerea) unui manipulator (identificator) al contextului de dispozitiv funciilor grafice din GDI . Contextele de dispozitiv pot descrie o varietate mare de periferice. Contextele de dispozitiv obinuite includ: contexte de dispozitiv display, contexte de dispozitiv memorie (pentru ieirea unui bitmap memorat n memorie) sau contexte de dispozitiv printer. Un context de dispozitiv foarte special este contextul de dispozitiv metafile care permite aplicaiilor de a nregistra permanent apelurile din GDI (fiierul pstreaz o serie de primitive grafice) care sunt independente de dispozitiv. Metafiierele joac un rol crucial n reperzentarea independent de dispozitiv a obiectelor OLE nglobate.

Desenarea ntr-un context de dispozitiv se face cu ajutorul coordonatelor logice . Coordonatele logice descriu obiectele utiliznd msurtori reale independente de dispozitiv, de exemplu, un dreptunghi poate fi descris ca fiind lat de 2 inch i nalt de 1 inch. GDI furnizeaz funcionalitatea necesar pentru maparea coordonatelor logice n coordonate fizice. Diferene semnificative exist n modul cum aceast mapare are loc n Win32s, Windows 95 i Windows NT. Win32s i Windows 95 folosesc reprezentarea coordonatelor pe 16 biti. Windows NT poate manipula coordonate pe 32 bii. Toatre cele trei sisteme suport mapri (transformri) din coordonate logice n coordonate fizice. Aceste transformri sunt determinate (influenate) de valorile ce specific originea coordonatelor i (signed extent) extensia cu semn a spaiului logic i al celui fizic. Originea coordonatelor specific deplasarea pe orizontal i vertical, iar extensia (extent) determina orientarea i scara obiectelor dup mapare (transformare). n plus, Windows NT ofer ceea ce se numete world transformation functions. Prin aceste funcii, orice transformare liniar poate fi folosit pentru transformarea spaiului de coordonate logice n spaiul de coordonate fizice; n plus pentru translaii i scalare ieirile pot fi rotite sau sheared. Exemple de funcii grafice: Rectangle, Ellipse, Polygon, TextOut, etc. Alte funcii de interes deosebit ( bit blit functions: PatBlt, BitBlt, StechBlt) sunt cele legate de desenarea i copierea bitmap-urilor. Contextele de dispozitiv pot fi create i distruse, starea lor poate fi salvat i rencrcat. Un alt grup de funcii gestioneaz transformrile de coordonate. Funcii comune tuturor platformelor pot fi utilizate pentru a seta sau regsi originea i extent-ul unei ferestre (spaiul de coordonate logic) i viewport-ului (spaiul de coordonate al perifericului destinaie). NT posed funcii specifice pentru transformri matriceale. Funciile GDI pot fi folosite de asemenea pentru gestionarea paletelor, aceasta nseamn c prin gestionarea paletei de culori, aplicaiile pot selecta o mulime de culori care se potrivesc cel mai bine cu culorile din imaginea (gif, pcx.) care trebuie afiat. Gestionarea paletei poate fi utilizat i n tehnici de animaie. O alt trstur a GDI-ului este crearea i gestionarea obiectelor GDI (pensoane, penie, fonturi, bitmap-uri, palete) precum i a regiunilor i a clipping-ului.

Alte API-uri
Funcii pentru controale comune; Funcii pentru dialoguri comune; MAPI, (Messaging Applications Programming Interface); MCI (Multimedia Control Interface); OLE API; TAPI (Telephony API).

Raportarea erorilor
Majoritatea funciilor Windows folosesc un mecanism pentru evidenierea erorilor. Cnd apare o eroare, aceste funcii seteaz o valoare a erorii pentru firul respectiv, valoare care poate fi regsit cu funcia GetLastError. Valoarile pe 32 bii, returnate de aceast funcie sunt definite in winerror.h sau n fiierul header al bibliotecii specifice. Valoarea erorii poate fi setat i din cadrul aplicaiei cu ajutorul funciei SetLastError. Codurile de eroare trebuie s aib setat bitul 29.

Folosirea funciilor din biblioteca C/C++


Aplicaiile Win32 pot folosi setul standard al funciilor din biblioteca C/C++ cu anumite restricii. Aplicaiile Windows nu au acces n mod normal la stream-urile stdin, stdout, stderr sau obiectele iostream din C++. Numai aplicaiile consol pot utiliza aceste stream-uri. Funciile relative la fiiere pot fi folosite, dar acestea nu suport toate facilitile oferite de SO Windows securitate, drepturi de acces. n locul funciilor din familia exec se va folosi CreateProcess. n ceeea ce privete gestionarea memoriei se folosesc cu succes funciile din C sau C++. Funciile din biblioteca matematic, pentru gestionarea stringurilor, a bufferelor, a caracterelor, a conversiilor de date pot fi de asemenea folosite. Aplicaiile Win32 nu trebuie s foloseasc ntreruperea 21 sau funcii IBM PC BIOS.