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.

S-ar putea să vă placă și