Ogólnie

 

Adresem logicznym nazywamy adres widziany przez program. Zbiór wszystkich adresów logicznych tworzy tzw. logiczną przestrzeń adresową.

Adresem fizycznym nazywamy adres, który trafia na szynę adresową pamięci fizycznie występującej w komputerze.

Tłumaczeniem adresu nazywamy mechanizm (najczęściej realizowany sprzętowo) przekładania adresów dostarczonych przez program na adresy pamięci fizycznej; właściwość istotna w systemach wieloprogramowych, gdyż umożliwia systemowi operacyjnemu ładowanie programów w różne miejsca pamięci bez żadnego ujemnego wpływu na ich wykonywanie.

Wprowadzenie

 

Jednym z zadań systemu operacyjnego jest zarządzanie zasobami systemowymi. Jednym z podstawowych zasobów systemowych niezbędnych do działania procesów jest pamięć operacyjna. Tak więc przydzielanie procesom pamięci operacyjnej jest jednym z podstawowych zadań systemu operacyjnego. Dalej, przez "pamięć" będziemy zawsze rozumieć "pamięć operacyjną".

Pamięć możemy traktować jak dużą tablicę słów (maszynowych). W zależności od architektury, słowo maszynowe składa się z określonej liczby (będącej potęgą 2-ki) bitów, np. 32, 64 czy 128. Pozycję słowa w tablicy, jaką jest pamięć, nazywamy adresem. Adres jest liczbą binarną złożoną z określonej liczby bitów. Zwykle liczba tych bitów jest również potęgą 2-ki, często taką samą jak w słowie maszynowym, choć nie zawsze.

W systemie operacyjnym działa zwykle równocześnie wiele procesów. Każdy z nich, aby móc działać, musi być umieszczony w pamięci. Napotykamy tu dwa problemy związane z pamięcią:

  1. Każdy proces powinien mieć dostęp do swojej pamięci, ale nie powinien mieć dostępu do pamięci innych procesów. Należy więc zapewnić mechanizm ochrony pamięci.
  2. Kompilując program, trudno przewidzieć, w którym miejscu w pamięci będzie on umieszczony. Jednym z rozwiązań tego problemu jest generowanie w trakcie kompilacji kodu przemieszczalnego. W trakcie ładowania programu do pamięci, wszelkie adresy zawarte w takim kodzie mogą być odpowiednio przesuwane.
Czasami, gdy nie można zaspokoić zapotrzebowania na pamięć wszystkich procesów system operacyjny musi wstrzymać wykonywanie niektórych procesów, zapisać je w pamięci masowej (na dysku), a przydzieloną im pamięć operacyjną rozdzielić pomiędzy pozostałe procesy. Po pewnym czasie, gdy dostępna jest odpowiednia ilość pamięci operacyjnej, procesy te można wznowić, ładując je z dysku. Mechanizm taki nazywamy wymianą procesów. Gdy mamy do czynienia z wymianą, proces może zostać załadowany w inne miejsce w pamięci, niż to, w którym był poprzednio. Nie wystarczy wówczas, aby kod programu stanowiącego proces był przemieszczalny. Cała zawartość pamięci przydzielonej procesowi musi być przemieszczalna i to w każdej chwili.

Problem przemieszczania zawartości pamięci przydzielonej procesom rozwiązuje się tworząc na potrzeby procesu odrębny obraz pamięci. Całą pamięć operacyjną dostępną w komputerze, tak jak ją widzi system operacyjny, nazywamy pamięcią fizyczną. Adresy pamięci fizycznej nazywamy adresami fizycznymi. Posługując się adresami fizycznymi mamy dostęp do całej pamięci fizycznej.

Proces, w odróżnieniu od systemu operacyjnego, nie powinien mieć dostępu do całej pamięci, ale tylko do pamięci przydzielonej mu przez system operacyjny. System operacyjny tworzy na potrzeby procesu obraz przydzielonej mu pamięci, który nie zmienia się gdy zawartość pamięci przydzielonej procesowi jest przemieszczana w pamięci fizycznej. Jest to pewnego rodzaju iluzja. Pamięć, taką jak ją widzi dany proces, nazywamy pamięcią logiczną. Adresy, którymi posługują się procesy, a które odnoszą się do ich pamięci logicznych, nazywamy adresami logicznymi. Pamięć logiczna jest realizowana przez mechanizm, który jest również odpowiedzialny za ochronę pamięci. Mechanizm ten jest realizowany sprzętowo przez jednostkę zarządzania pamięcią (ang. memory management unit, w skrócie MMU), która:
  • sprawdza, czy używane przez proces adresy logiczne są poprawnymi adresami, tzn. czy odnoszą się do przydzielonej procesowi pamięci; w przypadku, gdy adres logiczny jest niepoprawny, zgłaszany jest błąd,
  • tłumaczy adresy logiczne, na odpowiadające im adresy fizyczne.
Zwróćmy uwagę, że każdy proces ma własną pamięć logiczną. Przełączanie kontekstu między procesami wymaga przeprogramowania MMU. Tak więc konstrukcja MMU ma nie tylko wpływ na efektywność dostępu do pamięci, ale również na czas przełączania kontekstu między procesami.

Przestrzenie adresowe

 

Adres wytworzony przez procesor w wyniku wykonania rozkazu programu nosi nazwę adresu logicznego (ang. logical address). Zbiór wszystkich adresów logicznych generownych przez program tworzy logiczną przestrzeń adresową procesu.
Adres fizyczny wskazuje konkretną komórkę pamięci operacyjnej. Zbiór wszystkich adresów fizycznych tworzy fizyczną przestrzeń adresową. Wiązanie adresów polega na odwzorowaniu adresów logicznych generowanych w programie na adresy fizyczne w pamięci operacyjnej. Może następować w dowolnych z poniższych etapów:

  • w czasie kompilacji, czyli tworzenia programu,
  • w czasie ładowania programu do pamięci,
  • w czasie wykonania programu.
Wiązanie podczas kompilacji wymaga dokładnej znajomości początkowego adresu, pod którym program zostanie załadowany do pamięci. Tylko w takiej sytuacji program może posługiwać się bezpośrednio adresami bezwzględnymi w pamięci. W czasie wykonywania programu adresy logiczne i fizyczne są już takie same. Wiązanie podczas kompilacji można zastosować jedynie w prostych systemach przeznaczonych dla jednego użytkownika (np. MS-DOS).

Jeśli początkowy adres w pamięci nie jest znany w czasie tworzenia programu, to wiązanie adresów musi być opóźnione do momentu ładowania programu do pamięci. Po załadowaniu program nie może być już przemieszczany w pamięci podczas wykonywania, ponieważ adresy logiczne i fizyczne są już takie same. Zmiana adresu początkowego pociąga za sobą konieczność ponownego załadowania całego programu, począwszy od nowego adresu w pamięci.

Największe możliwości swobodnego przemieszczania programu w pamięci daje wiązanie adresów w czasie wykonywania programu. Adresy logiczne muszą być jednak tłumaczone na bieżąco na adresy fizyczne, co wymaga zastosowania specjalnego sprzętu. Zajmuje się tym jednostka zarządzania pamięcią (ang. memory management unit - MMU). Złożoność tej jednostki warunkuje wybór strategii zarządzania pamięcią.