Questo sito utilizza cookie di terze parti per inviarti pubblicità in linea con le tue preferenze. Se vuoi saperne di più clicca QUI 
Chiudendo questo banner, scorrendo questa pagina, cliccando su un link o proseguendo la navigazione in altra maniera, acconsenti all'uso dei cookie. OK

Programare Windows cu Win32 API

Informaniile prezentate în această lucrare sunt bazate în mare parte pe Help –ul Win32SDK care vine cu cîteva binecunsocute limbaje de programare, respectiv numeroase informaŃii si documentaŃii provenind de pe atotputernicul Internet. Dacă este cazul atunci la locurile respective se vor găsi liste cu originea informatiilor, respectiv câteva note de copyright, dacă era specificat în documentaŃia respectivă.
Sursele, care vor fi prezentate sunt scrise (în mare parte) de mine, marea majoritate a lor nu sunt complete, dar se vor găsi indicaŃii, cum pot fi incadrate într-un program. Sursele pot fi folosite fără restrictii si copyright.
API-ul prezentat provine direct din documentatii copyright de Microsoft sau Intel, eu le-am tradus, si am adăugat numai niste comentarii, dacă era cazul, dacă nu atunci niste completări. Dacă vă interesează si în original, atunci vă recomand consultarea Helpului mai sus menŃinut.
Lucrarea este adresată în special programatorilor avansati, dar poate fi studiată si de programatori, care acum încep să se familiarizeze cu modul de programare sub Windows. Oricum, sunt necesare cîte ceva cunostinŃe de programare, deci să nu fie prima lucrare pentru un programator, care acum începe să descopere diferenta dintre un byte si un word.
Sunt discutate separat tehnicile pentru Windows 9x si Windows NT, care la unele capitole sunt total contrare, si sunt prezentate, si unele facilităti, care sunt valabile numai în unul dintre cele două sisteme de operare.

Mostra/Nascondi contenuto.
Programare Windows şi kernelul sistemelor de operare multitasking Memorie - 18 - III. Procese Avem nevoie de sisteme cu mai multe procese, c ă altfel nu am avea nevoie de sinconizarea lor Prin procese de fapt nŃelegem toate programele, care rulează n sistem la un moment dat. Prin fir de execuŃie nŃelegem două lucruri: o procedură, care se execută paralel cu programul, care l-a apelat, sau firul de execuŃie principal, care de fapt este programul. Fiecare proces are măcar un fir de execuŃie, cel principal, care este creat c nd procesul este execu tat. Firele de execuŃie au SpaŃiul de Adrese Virtuale (Virtual Address Space - VAS) comun cu cel al procesului, şi comun şi ntre ei. Despre acel paralel vom mai avea o discu Ńie, dar momentan este de ajuns introducerea asta scurtă. III.1. Multitasking Multitasking nseamnă execuŃia a mai multor programe, denumite taskuri. ˛n lumea de azi cam toate sistemele de operare performante oferă multitasking, unele mai bune, altele şi mai bune. Procesorul unui calculator este responsabil pentru executare taskurilor, deci mai ntăi o să prezint arhitectura necesară, ca să nŃelegem evenimentele, ce se petrec n nucleul unui sistem de operare, cum ar fi Windows sau Linux. III.2. Arhitectura Intel Din punctul de vedere al procesorului, un task este o unitate de lucru, care la un moment n timp poate să fie executat sau suspendat. Măcar un task trebuie să există n toate sistemele, care rulează, fiindcă altfel nu ar fi nimic de executat. Şi handleurile de ntreruperi sunt considerate taskuri. Arhitectura Intel providă mecanisme evoluate pentru a salva starea unui task, pentru pregătirea unui task pentru execuŃie sau pentru schimbarea taskurilor. Să nu uităm, că procesorul poate să lucreze cu multitasking numai n mod protejat, capitolul III.2.1.2. Structura unui task Un task este alcătuit din două module mari: SpaŃiul de execuŃie a taskului (task execution space - TES) respectiv un segment, denumit Task State Segment (TSS). TES conŃine un segment de code, un segment de stack şi unul sau mai multe segmente de dată. Dacă un task are părŃi, care rulează la diferite nivele de protecŃie, atunci pentru fiecare nivel există un segment de stivă propriu. Un registru, denumit Task Register (TR) are adresa TSS ului pentrul taskul curent. TR conŃine segmentul de 16 biŃi, deplasarea pe 32 de biŃi, o limită de segmente pe 16 biŃi, şi diferite atribute pentru TSS. TR reprezintă un descriptor n GDT. Cu instrucŃiunile LTR respectiv STR putem să controlăm registrul TR. Descriptorul de task din GDT (şi numai n GDT) conŃine adresea (segment şi offset) codului taskului, respectiv c teva flaguri, care indic ă starea taskului, li nivelul de protecŃie, la care rulează taskul. TR de fapt nu este altceva, dec t o copie a intrării n GDT a TSS ului taskului. TSS-ul de 32 de biŃi conŃine aproape toate informaŃiile referitoare la taskul respectiv: • Segmentele CS (Code), SS (Stack), DS (Data), ES, FS, GS • Starea registrilor EAX, EBX, ECX, EDX, ESI, EDI, EBP • Flagul EFLAGS • Registrul EIP • Un link spre taskul precedent • Registrul de control CR3 • Registrul LDTR • Harta de adrese I/O ( n TSS) • Stack pointeri spre stackurile la diferite nivele de protecŃie ( n TSS) Numai primele 104 de octeŃi sunt folosite la schimbarea de taskuri. Primele cinci sunt numite c mpuri dinamice, restul sunt statice. ExplicaŃie: c mpurile dinamice se schimb ă la fiecare schimbare de task, iar cele sttice sunt modificate numai o singură dată: c nd se crează taskul respectiv.

International thesis/dissertation

Facoltà: Informatică

Autore: Ferenc Deak Contatta »

Composta da 65 pagine.

 

Questa tesi ha raggiunto 127 click dal 22/05/2008.

Disponibile in PDF, la consultazione è esclusivamente in formato digitale.