Jaka jest fizyczna reprezentacja sterty i stosu?

9

Z łatwością rozumiem, w jaki sposób .bss i kod mają fizyczne reprezentacje w procesorze, który ma zestaw pamięci dla instrukcji, które licznik programu może policzyć, a bss (blokowy symbol początkowy) to tylko dane globalne. Ale jest też stos zmiennych lokalnych i sterta pamięci dynamicznej. Jak te rzeczy są fizycznie wprowadzone w obwód?

Niklas
źródło

Odpowiedzi:

6

Uwaga: odnoszę się głównie do x86, ponieważ jestem z nim najlepiej zaznajomiony i jest szeroko udokumentowany:

Na x86 (i większości innych architektur) stos jest po prostu rezydujący w pamięci, jak wszystko inne. Procesor manipuluje stosem za pomocą wskaźnika, który zwykle jest przechowywany w rejestrze (wskaźnik stosu). Instrukcje push i pop zmienią wartość wskaźnika stosu, zmieniając, gdzie jest góra stosu.

Kupa jest abstrakcją oprogramowania . Jak sama nazwa wskazuje, jest to po prostu kawał pamięci RAM, na który alokator dzieli i podaje wskaźniki. Pod względem fizycznym sterta nie wygląda inaczej niż jakakolwiek inna część pamięci RAM.

Jednak stronicowanie i segmentacja są stycznie związane ze stertą. Są one głównie związane z wielozadaniowością, w której procesom nie wolno modyfikować pamięci RAM, których nie są wyraźnie właścicielami.

Mathew Hall
źródło
3
Przywoływanie dotyczy bardziej ogólnie zarządzania pamięcią - jednostki, w której pamięć fizyczna jest mapowana na adres logiczny - niż tylko ograniczeń dostępu, chociaż później są one zwykle stosowane jako dodatkowa funkcja jednostki zarządzania pamięcią.
Chris Stratton
4

Logicznie rzecz biorąc stos i sterty są zwykle tylko pamięcią; na poziomie implementacji będą one jednak obsługiwane przede wszystkim z pamięci podręcznej. W większości systemów docierają tam dynamicznie za pomocą algorytmów buforowania, ale istnieją systemy, które obsługują wyraźną lokalizację w pamięci podręcznej lub innej pamięci szybszej niż zwykle, i prawdopodobnie także te, które obsługują pozostawianie wskazówek, że określone dane powinny mieć pierwszeństwo przy umieszczaniu tam, ponieważ pozwala na miejsce.

Mam nadzieję, że projektowanie niskopoziomowego oprogramowania i generatorów kodu kompilatora uwzględnia organizację dostępu do danych, która może skutkować dobrym wykorzystaniem pamięci podręcznej w porównaniu do ciągłych braków pamięci podręcznej.

Niektóre procesory mają rejestr adresów zwrotnych, który działa jako rodzaj jednopunktowej pamięci podręcznej stosu jawnego (prawdopodobnie są też te z kilkoma głębokimi stosami sprzętowymi, choć przykłady nie przychodzą mi do głowy).

Chris Stratton
źródło