|
Politica de confidentialitate |
|
• domnisoara hus • legume • istoria unui galban • metanol • recapitulare • profitul • caract • comentariu liric • radiolocatia • praslea cel voinic si merele da aur | |
Crearea si lansarea programelor - sisteme de operare | ||||||
|
||||||
Rolul unui compilator este crearea fisierelor executabile. Totusi, compilarea (traducerea comenzilor scrise intr-un limbaj sursa in instructiuni pentru procesor) reprezinta numai prima etapa in acest proces. Exista si un al doilea pas, numit editarea legaturilor (linking), care trateaza aspecte mai putin evidente privitoare la gestiunea memoriei intr-un program. Necesitatea fazei de editare a legaturilor apare cel mai clar in cazul realizarii unui fisier executabil din mai multe module (fisiere) sursa, facilitate de altfel foarte utila in scrierea si intretinerea programelor de mari dimensiuni. Sa consideram un program format din doua module, numite A si B, care arata astfel: Fisierul executabil va arata astfel: Se observa ca in instructiunea de salt din modulul B adresa de salt nu mai este corecta. Fenomenul se datoreaza faptului ca, modulele fiind compilate independent, fiecare presupune ca incepe la adresa 0, ceea ce nu este posibil. Deoarece in general un fisier executabil contine, in afara modulelor componente, si un antet cu diverse informatii, nici macar primul modul nu va incepe la adresa 0, deci absolut toate instructiunile de salt din program devin incorecte. Mai mult, si instructiunile care acceseaza date (adrese de memorie) vor fi eronate din acelasi motiv. Aceasta problema este numita problema relocarii, deoarece apare ca urmare a deplasarii (relocarii) adreselor la alte adrese decat cele la care se aflau in timpul compilarii. Mai exista insa si o alta situatie generatoare de erori, referitoare la instructiunea de apel de procedura. La momentul compilarii se cunoaste faptul ca procedura X este definita in alt modul, dar este imposibil de determinat la ce adresa se va afla aceasta in programul final. Numim aceasta situatie problema referintelor externe. Ambele probleme sunt rezolvate de editorul de legaturi. Ca urmare a compilarii, pentru fiecare modul sursa este creat un fisier obiect; acesta contine, pe langa instructiunile pentru procesor, si o serie de informatii necesare editorului de legaturi. Concret, partile componente ale unui modul obiect sunt urmatoarele: un bloc ce contine informatii de identificare: numele modulului, lungimea celorlalte
parti ale modulului etc. tabela punctelor de intrare, care contine numele simbolurilor (variabile si
proceduri) din modulul curent care pot fi apelate din alte module tabela referintelor externe, in care sunt precizate denumirile simbolurilor
definite in alte module, dar care sunt utilizate in modulul curent codul propriu-zis, rezultat din compilare; aceasta parte este singura care va
aparea in fisierul executabil dictionarul de relocare - contine informatii despre localizarea instructiunilor
din partea de cod care necesita modificarea adreselor cu care lucreaza u5l22lu construieste o tabela cu toate modulele obiect si dimensiunile acestora pe baza acestei tabele, atribuie adrese de start modulelor obiect determina instructiunile care realizeaza accese la memorie si aduna la fiecare
adresa o constanta de relocare, egala cu adresa de start a modulului din care
face parte determina instructiunile care apeleaza proceduri sau date din alte module si
insereaza adresele corespunzatoare Fisierul executabil contine la randul sau informatii de relocare, pe care le
va folosi sistemul de operare la incarcarea programului in memorie pentru a
actualiza referintele la memorie. Aceasta abordare este folosita de catre sistemul
de operare DOS. unele proceduri, care trateaza situatii exceptionale intervenite in program,
sunt extrem de rar apelate si nu este eficient sa consume inutil memorie exista proceduri folosite de un numar mare de programe; stocarea lor in fisiere
separate duce la economisirea spatiului pe disc, deoarece este suficient sa
existe o singura copie; de asemenea, este posibil ca o singura instanta a acestor
proceduri sa fie incarcata in memorie si utilizata simultan de mai multe programe
aflate in executie In functiile de modul de apelare, distingem doua metode de legare dinamica: legare implicita legare explicita La legarea explicita, programul face un apel specific, prin care cere legarea unei anumite biblioteci partajate. Sistemul de operare verifica daca respectiva biblioteca exista deja in memorie si in caz contrar o incarca. Spre deosebire de legarea implicita, aici legatura cu o biblioteca partajata poate fi realizata sau distrusa in orice moment, nefiind permanenta pe toata durata executiei programului. Legarea explicita este specifica sistemelor de operare Windows. In afara avantajelor oferite, legarea dinamica si lucrul cu biblioteci partajate
presupun o gestiune complexa, greu de realizat. O biblioteca partajata trebuie
inserata in spatiul de adrese virtual al fiecarui program care o foloseste;
in plus, utilizarea incorecta a variabilelor globale, care sunt comune tuturor
programelor, poate genera interferente nedorite. In Windows, o problema suplimentara
a aparut din cauza conflictelor dintre diversele versiuni de biblioteci partajate
existente in acelasi sistem, deoarece de multe ori versiunile mai noi nu pastreaza
compatibilitatea cu versiunile anterioare. |
||||||
|
||||||
|
||||||
Copyright© 2005 - 2024 | Trimite document | Harta site | Adauga in favorite |
|