• Obszary systemowe. W nowoczesnych systemach operacyjnych dostęp do tych obszarów proces ma tylko wtedy, gdy wykonuje w trybie jądra podprogram jądra systemu operacyjnego.
o Dane systemu operacyjnego w tym np. bufory dyskowe, o kod jądra systemu operacyjnego, o kod sterowników urządzeń w pamięci ROM,
o 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
flincludc <stdio.h> tfincludc <string.h>
char napis!) = "Hello world!";
voidmain()
{
char ‘tymczasowa: tymczasowa =strdup(napis); printf("%s\n",tymczasowa); free (tymczasowa);
I
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!”;
• bezimienna zmienna statyczna zawierająca łańcuch "%s\n";
• zmienna lokalna funkcji " main" typu wskaźnikowego (wskażiuk do typu char) o nazwie "tymczasowa";
• zmienna dynamiczna, będąca duplikatem zmiennej "napis", wskażiuk do niej podstawiany jest do zmiennej "tymczasowa".
• inne zmienne zadeklarowane w standardowej bibliotece C, których deklaracje znajdują się w plikach nagłówkowych stdio.h i stnng.h
Pizy starcie procesu wykonującego powyższy program w obszarze kodu programu znajdzie się skompilowana funkcja ' ‘ main" oraz skompilowane niezbędne funkcje biblioteczne w tym funkcje "prinif", "strdup" i "frcc". W obszarze danych statycznych utworzone będą zmienne "napis", bezimienna zmienna zawierająca łańcuch "%s\n" oraz niesprecyzowane tutaj bliżej zmienne tworzone dla potrzeb bibliotek.
Po zainicjowaniu pamięci proces zaczyna wykonywać swój kod poczynając od funkcji "main". W trakcie prologu tej funkcji rezerwowane jest na stosie miejsce na zmienną "tymczasowa". W trakcie wykonania (druga linijka) tworzona jest zmienna dynamiczna będąca duplikatem zmiennej "napis" a jej adres wstawiany jest do zmiennej "tymczasowa". Przy końcu programu zmienna dynamiczna (której adres wciąż przechowuje zmienna ’ tymczasowa") jest niszczona. Epilog funkcji "main" niszczy zmienną lokalną "tymczasowa". Zakończenie się tej fimkcji kończy jednocześnie proces. W trakcie usuwania zakończonego procesu niszczone są pozostałe zmienne.