To tylko jedna z 2 stron tej notatki. Zaloguj się aby zobaczyć ten dokument.
Zobacz
całą notatkę
Do czego procesowi pamięć Każdy proces działający w komputerze wymaga pamięci operacyjnej do przechowywania kodu swego programu i danych które przetwarza. Dane, które przetwarza proces reprezentowane są przez zmienne programu. Przez zmienną programu rozumie się obszar pamięci o ustalonym adresie początkowym i długości, do którego można odwoływać się z programu poprzez symbol zwany nazwą zmiennej. Każda zmienna posiada swój typ, definiowany jako zbiór, którego elementy mogą być kodowane przez wartości zmiennej, np. typ char języka C koduje znaki zbioru ASCII lub liczby z przedziału -128 do 127. Typ decyduje o długości obszaru przeznaczonego na zmienną. Ważnymi typami zmiennych są zmienne wskaźnikowe. Przechowują one adresy (adresy początku obszaru) innych zmiennych. Z punktu widzenia zarządzania pamięcią wyróżnia się trzy klasy zmiennych: Zmienne statyczne - są tworzone przy starcie procesu i istnieją przez cały czas jego życia. Określenie zmienna statyczna może być mylące. Zmienna ta, oczywiście, może być modyfikowana przez program. Określenie statyczna odnosi się do sposobu gospodarowania pamięcią tej zmiennej - rezerwuje się ją przy starcie a zwalnia przy końcu procesu. Przez cały czas życia procesu dany obszar pamięci wykorzystywany jest w ten sam sposób - na przechowywanie aktualnej wartości danej zmiennej. Zmienne lokalne podprogramów zwane też automatycznymi - są tworzone dla każdego wywołania podprogramu i usuwane po jego zakończeniu. Zmienne dynamiczne - są tworzone i usuwane w miarę potrzeby. Wyróżnia się trzy zasadnicze grupy obszarów pamięci, z których korzysta proces: Obszary zajmowane przez kod programu i bibliotek. Na pamięci wchodzącej w skład tych obszarów po załadowaniu programu (lub biblioteki) procesor wykonuje jedynie operacje odczytu. Obszary te mogą być wspólny dla różnych procesów wykonujących ten sam program, lub korzystających z tej samej biblioteki ładowanej dynamicznie. Obszary zajmowany przez prywatne dane programu, w tym zmienne statyczne i dynamiczne. Obszar ten jest inicjowany przy starcie procesu początkowymi wartościami zmiennych globalnych (często zerami). W trakcie życia procesu dokonywane są zarówno operacje odczytu jak i zapisu. Obszar przechowujący zmienne dynamiczne nazywany jest stertą. Tworzenie i niszczenie zmiennych dynamicznych może powodować zwiększanie się i zmniejszanie tego obszaru w trakcie życia procesu. Każdy proces wymaga własnego obszaru prywatnych danych. Jeżeli proces składa się z wątków, wątki współdzielą obszar danych procesu. Obszar stosu. W obszarze tym zapamiętuje się adresy powrotów z podprogramów oraz przechowuj zmienne lokalne (dla każdego wywołania podprogramu tworzony jest jego własny komplet zmiennych lokalnych). Obszar ten jest rezerwowany w pamięci przy starcie procesu. Z początku jest pusty. Wypełnia się i opróżnia w miarę jak wywoływane i kończone są poszczególne podprogramy. Każdy wątek wymaga własnego obszaru stosu.
(…)
… podprogram jądra systemu operacyjnego. Dane systemu operacyjnego w tym np. bufory dyskowe, kod jądra systemu operacyjnego, kod sterowników urządzeń w pamięci ROM, adresowalna pamięć urządzeń wejścia wyjścia, np. pamięć obrazu karty graficznej. Pamięć dzielona - obszary pamięci przechowujące dane, do których dostęp ma więcej niż jeden proces. Pliki dyskowe mapowane na pamięć. Rozważmy prosty program w C #include <stdio.h>
#include <string.h>
char napis[] = "Hello world!";
void main()
{
char *tymczasowa;
tymczasowa=strdup(napis);
printf("%s\n",tymczasowa);
free (tymczasowa);
}
Rys. 3.1 Przykładowy program w C używający różnych klas zmiennych
W trakcie działania powyższego programu tworzone są (a potem usuwane) następujące zmienne: zmienna statyczna ``napis '' zawierająca łańcuch "Hello World…
... zobacz całą notatkę
Komentarze użytkowników (0)