Segmenty i pamięć

0

Od razu przepraszam za głupie pytania, ale niestety nie rozumiem tego co jest napisane w wiki. Tak więc:
1.Co to jest pamięć fizyczna a co to pamięć wirtualna?
2.Co to jest segment?

0

Wszędzie używają słowa segment bez uprzedniego wytłumaczenia.

"Pamięć wykorzystywana przez proces, z logicznego punktu widzenia, nie stanowi jednego spójnego obszaru. Zwykle składa się z kilku segmentów. Typowe segmenty to: kod programu, zmienne globalne, stos i sterta. System operacyjny może więc przydzielać procesom pamięć nie w postaci jednego spójnego bloku, ale kilku takich bloków, segmentów. Co więcej, proces może w trakcie działania prosić o przydzielenie lub zwolnienie segmentów."

0

Cóż,trochę mój assembler zaśniedział,ale z tego co pamiętam to pomyśl Bracie o segmentach jako o (sporych) tablicach bajtów,to chyba powinno Ci ułatwić wyobrażenie ich sobie.Z poziomu asemblera program posiada segmenty:
1.Kodu-bajty znajdujące się w pamięci wskazywanej przez rejestr EIP:CS traktowane są jako intrukcje maszynowe dla procesora
2.Danych (albo innaczej owa sterta)-te bajty traktowane są jako zmienne globalne znane z języków wyższego poziomu.Na początek tego segmentu wskazuje rejestr DS
3.Stosu-co to jest stos powinieneś wiedzieć.Dodam,że z poziomu assemblera stos adresuje się za pomocą pary rejestrów ESP:SS
powyższe jest prawdziwe dla systemu DOS,pod Windows sprawa się komplikuje (dochodzą selektory,global descriptor table,local descriptor table),ale o tym to już sobie na wiki poczytasz

0

No dobrze wiem że program posiada sobie jakieś segmenty, kodu itd itp, ale nadal nie wiem czym tak właściwie są. Czy to są jakieś miejsca w RAMie czy gdzieś indziej, po co one są i w ogóle.

1

To są fragmenty pamięci. Pytanie "gdzie one są" jest trochę bardziej skomplikowane. Poczytaj linki które podałem wyżej. Jak dojdziesz do stronnicowania to zrozumiesz czemu ciężko okreslic gdzie akurat dana pamięć leży (w skrócie: RAMu masz czasem za mało więc System Operacyjny zrzuca nieużywaną aktualnie część na dysk a w razie potrzeby ściąga ją znowu do RAMu).
Po co są? A po co masz pamięć w programie? o_O Napisałes kiedys jakiś program? Program po uruchomieniu musi zostać załadowany do pamięci żeby procesor mógł go wykonać. Procesor potrzebuje mieć gdzieś zapisane instrukcje do wykonania (segment kodu), musi skądś pobierać dane z których program korzysta (segment danych), musi też mieć stos na zmienne lokalne czy adresy powrotne z wywolań funkcji (segment stosu). Gdyby procesor czytał to z dysku to trwałoby to wieki (odczytywanie danych z dysku jest ekstremalnie bardziej czasochłonne niż odczytywanie z RAMu).

0

Z wielu kursów i innych źródeł wyczytałem że segment to pewien obszar pamięci wirtualnej przydzielany programowi żeby nie wchodził w konflikty z innymi programami. Nie wiem, napiszę wam jak ja to rozumiem i ewentualnie "rozjaśnicie niejasności". Tak więc pamięć wirtualna i fizyczna. Zaczynamy od tego że na początku zastanawiałem się dlaczego w pamięci panuje taki syf. Dziury, dane, dziury itd. ale potem doszedłem do wniosku że dziury powstają w skutek zwolnienia pamięci kiedy program przestaje działać. To pamięć fizyczna. No i teraz żeby programom łatwiej było się odwoływać do przydzielonej im pamięci stworzona została pamięć wirtualna. Pamięć przydzielona jakiemuś programowi może być porozrzucana po całej pamięci fizycznej, dlatego też programy używają pamięci wirtualnej- sklejki wszystkich kawałków w jedną całość. No i teraz segment. Segment to właśnie ten obszar pamięci przydzielony programowi i dzieli się on na te kilka części, segment kodu itp. Czy to tak?

1
MakeMeHappy napisał(a)

No i teraz segment. Segment to właśnie ten obszar pamięci przydzielony programowi i dzieli się on na te kilka części, segment kodu itp. Czy to tak?
Nie do końca. Segment nie jest podzielony na te kilka części, tylko w zależności co przechowuje, cały jest segmentem kodu albo danych itd.

0

Czyli każdy program ma kilka segmentów, każdy przechowuje coś innego. W pamięci fizycznej są porozrzucane po całej pamięci, a w pamięci wirtualnej są ładnie upchane w jednym miejscu. Czy pamięć przydzielona programowi zawiera tylko konkretne segmenty czy jest jeszcze wolne miejsce, nieprzydzielone do żadnego z segmentów?

1

Cała pamięć programu składa się z segmentów.

1

patrz: http://img59.imageshack.us/img59/3751/pamx.png
V to jest to co widzisz, czyli pamięć którą system operacyjny Ci pokazuje - pamięć wirtualna, w rzeczywistości ta pamięć nie istnieje, adresy są wewnętrznie przekształcane na adresy fizyczne.

Strzałeczki w trakcie działania systemu mogą pokazywać w zupełnie różne miejsca, czyli jak odwołasz się do pamięci wirtualnej pod adresem 15, to w pamięci fizycznej (ram) odwołałbyś się do adresu 10, czyli system operacyjny przekształca sobie wewnętrznie adresy do miejsc w których dane rzeczywiście się znajdują, a te mogą znajdywać się zarówno w RAM jak i na twardzielu

1 użytkowników online, w tym zalogowanych: 0, gości: 1