![]() ![]()  | 
| 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 - 2025 | Trimite document | Harta site | Adauga in favorite | 
	||||||
| 
 |