PRZYDZIAŁ PAMIĘCI OPERACYJNEJ dr inż. Krzysztof Patan Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski k.patan@issi.uz.zgora.pl
Wstęp Pamięć komputera wielka tablica słów (bajtów) oznaczonych adresami Wykonanie programu: proces jest ładowany do pamięci procesor pobiera rozkazy z pamięci stosownie do wartości licznika rozkazów Typowy cykl wykonania rozkazu pobranie rozkazu z pamięci dekodowanie rozkazu pobranie z pamięci dodatkowych argumentów wyniki są przechowywane w pamięci
Wstęp Pamięć komputera wielka tablica słów (bajtów) oznaczonych adresami Wykonanie programu: proces jest ładowany do pamięci procesor pobiera rozkazy z pamięci stosownie do wartości licznika rozkazów Typowy cykl wykonania rozkazu pobranie rozkazu z pamięci dekodowanie rozkazu pobranie z pamięci dodatkowych argumentów wyniki są przechowywane w pamięci
Wstęp Pamięć komputera wielka tablica słów (bajtów) oznaczonych adresami Wykonanie programu: proces jest ładowany do pamięci procesor pobiera rozkazy z pamięci stosownie do wartości licznika rozkazów Typowy cykl wykonania rozkazu pobranie rozkazu z pamięci dekodowanie rozkazu pobranie z pamięci dodatkowych argumentów wyniki są przechowywane w pamięci
Wiązanie adresów Wiązanie adresów może być wykonywane podczas: 1 kompilacji sposób ten jest używany w sytuacjach kiedy znane jest miejsce ulokowania procesu w pamięci. Generowany jest tzw. kod bezwzględny. Jeżeli adres początkowy ulegnie zmianie to program należy przekompilować 2 ładowania sposób ten jest używany wtedy, gdy podczas kompilacji nie wiadomo gdzie będzie umieszczony proces. Kompilator wytwarza tzw. kod przemieszczalny i wiązanie adresów jest dokonywane podczas ładowania procesu do pamięci. Jeżeli adres początkowy ulegnie zmianie to wystarczy ponownie załadować program z uwzględnieniem nowej wartości adresu początkowego 3 wykonania jeśli proces będzie ulegał przemieszczeniom z jednego miejsca pamięci do innego to należy zaczekać z wiązaniem adresów aż do czasu jego wykonania. Wymagane jest tutaj zastosowanie dodatkowego sprzętu
Wiązanie adresów Wiązanie adresów może być wykonywane podczas: 1 kompilacji sposób ten jest używany w sytuacjach kiedy znane jest miejsce ulokowania procesu w pamięci. Generowany jest tzw. kod bezwzględny. Jeżeli adres początkowy ulegnie zmianie to program należy przekompilować 2 ładowania sposób ten jest używany wtedy, gdy podczas kompilacji nie wiadomo gdzie będzie umieszczony proces. Kompilator wytwarza tzw. kod przemieszczalny i wiązanie adresów jest dokonywane podczas ładowania procesu do pamięci. Jeżeli adres początkowy ulegnie zmianie to wystarczy ponownie załadować program z uwzględnieniem nowej wartości adresu początkowego 3 wykonania jeśli proces będzie ulegał przemieszczeniom z jednego miejsca pamięci do innego to należy zaczekać z wiązaniem adresów aż do czasu jego wykonania. Wymagane jest tutaj zastosowanie dodatkowego sprzętu
Wiązanie adresów Wiązanie adresów może być wykonywane podczas: 1 kompilacji sposób ten jest używany w sytuacjach kiedy znane jest miejsce ulokowania procesu w pamięci. Generowany jest tzw. kod bezwzględny. Jeżeli adres początkowy ulegnie zmianie to program należy przekompilować 2 ładowania sposób ten jest używany wtedy, gdy podczas kompilacji nie wiadomo gdzie będzie umieszczony proces. Kompilator wytwarza tzw. kod przemieszczalny i wiązanie adresów jest dokonywane podczas ładowania procesu do pamięci. Jeżeli adres początkowy ulegnie zmianie to wystarczy ponownie załadować program z uwzględnieniem nowej wartości adresu początkowego 3 wykonania jeśli proces będzie ulegał przemieszczeniom z jednego miejsca pamięci do innego to należy zaczekać z wiązaniem adresów aż do czasu jego wykonania. Wymagane jest tutaj zastosowanie dodatkowego sprzętu
Przetwarzanie programu użytkownika program Ÿród³owy modu³y wynikowe kompilator modu³ wynikowy czas kompilacji biblioteki systemowe konsolidator modu³ ³adowalny czas ³adowania biblioteki ³adowane dynamicznie program ³aduj¹cy obraz binarny w pamiêci czas wykonywania
Ładowanie dynamiczne Podprogramy nie są ładowane do pamięci dopóki nie zostaną wywołane Do pamięci zostaje załadowany tylko program główny. W przypadku potrzeby wywołania podprogramu: sprawdzamy czy ten podprogram znajduje się w pamięci jeżeli nie to wywoływany jest tzw. program łączący program łączący wprowadza żądany podprogram do pamięci oraz uaktualnia tablicę adresów sterowanie zostaje przekazane do ładowanego podprogramu
Ładowanie dynamiczne Podprogramy nie są ładowane do pamięci dopóki nie zostaną wywołane Do pamięci zostaje załadowany tylko program główny. W przypadku potrzeby wywołania podprogramu: sprawdzamy czy ten podprogram znajduje się w pamięci jeżeli nie to wywoływany jest tzw. program łączący program łączący wprowadza żądany podprogram do pamięci oraz uaktualnia tablicę adresów sterowanie zostaje przekazane do ładowanego podprogramu
Ładowanie dynamiczne Podprogramy nie są ładowane do pamięci dopóki nie zostaną wywołane Do pamięci zostaje załadowany tylko program główny. W przypadku potrzeby wywołania podprogramu: sprawdzamy czy ten podprogram znajduje się w pamięci jeżeli nie to wywoływany jest tzw. program łączący program łączący wprowadza żądany podprogram do pamięci oraz uaktualnia tablicę adresów sterowanie zostaje przekazane do ładowanego podprogramu
Ładowanie dynamiczne Podprogramy nie są ładowane do pamięci dopóki nie zostaną wywołane Do pamięci zostaje załadowany tylko program główny. W przypadku potrzeby wywołania podprogramu: sprawdzamy czy ten podprogram znajduje się w pamięci jeżeli nie to wywoływany jest tzw. program łączący program łączący wprowadza żądany podprogram do pamięci oraz uaktualnia tablicę adresów sterowanie zostaje przekazane do ładowanego podprogramu
Ładowanie dynamiczne Podprogramy nie są ładowane do pamięci dopóki nie zostaną wywołane Do pamięci zostaje załadowany tylko program główny. W przypadku potrzeby wywołania podprogramu: sprawdzamy czy ten podprogram znajduje się w pamięci jeżeli nie to wywoływany jest tzw. program łączący program łączący wprowadza żądany podprogram do pamięci oraz uaktualnia tablicę adresów sterowanie zostaje przekazane do ładowanego podprogramu
Zalety nigdy nie zostanie załadowany podprogram, którego się nie używa metoda nie wymaga specjalnego wsparcia ze strony systemu operacyjnego Podsumowanie Użytkownicy są odpowiedzialni za zaprojektowanie programów, aby mogły korzystać z ładowania dynamicznego System operacyjny może dostarczyć bibliotek do realizacji tej metody
Zalety nigdy nie zostanie załadowany podprogram, którego się nie używa metoda nie wymaga specjalnego wsparcia ze strony systemu operacyjnego Podsumowanie Użytkownicy są odpowiedzialni za zaprojektowanie programów, aby mogły korzystać z ładowania dynamicznego System operacyjny może dostarczyć bibliotek do realizacji tej metody
Konsolidacja dynamiczna Wady W obrazie binarnym programu znajduje się tylko namiastka procedury bibliotecznej Ten fragment kodu pozwala zlokalizować odpowiedni podprogram w pamięci, bądź załadować bibliotekę z dysku Aktualizacja bibliotek biblioteka może zostać zastąpiona nową ulepszoną wersją Wszystkie programy odwołujące się do biblioteki będą automatycznie korzystały z nowej wersji wymagana pomoc ze strony systemu operacyjnego sprawdzanie czy dany podprogram znajduje się w pamięci innych procesów kontrola nad dostępem różnych procesów do tych samych komórek pamięci
Konsolidacja dynamiczna Wady W obrazie binarnym programu znajduje się tylko namiastka procedury bibliotecznej Ten fragment kodu pozwala zlokalizować odpowiedni podprogram w pamięci, bądź załadować bibliotekę z dysku Aktualizacja bibliotek biblioteka może zostać zastąpiona nową ulepszoną wersją Wszystkie programy odwołujące się do biblioteki będą automatycznie korzystały z nowej wersji wymagana pomoc ze strony systemu operacyjnego sprawdzanie czy dany podprogram znajduje się w pamięci innych procesów kontrola nad dostępem różnych procesów do tych samych komórek pamięci
Konsolidacja dynamiczna Wady W obrazie binarnym programu znajduje się tylko namiastka procedury bibliotecznej Ten fragment kodu pozwala zlokalizować odpowiedni podprogram w pamięci, bądź załadować bibliotekę z dysku Aktualizacja bibliotek biblioteka może zostać zastąpiona nową ulepszoną wersją Wszystkie programy odwołujące się do biblioteki będą automatycznie korzystały z nowej wersji wymagana pomoc ze strony systemu operacyjnego sprawdzanie czy dany podprogram znajduje się w pamięci innych procesów kontrola nad dostępem różnych procesów do tych samych komórek pamięci
Konsolidacja dynamiczna Wady W obrazie binarnym programu znajduje się tylko namiastka procedury bibliotecznej Ten fragment kodu pozwala zlokalizować odpowiedni podprogram w pamięci, bądź załadować bibliotekę z dysku Aktualizacja bibliotek biblioteka może zostać zastąpiona nową ulepszoną wersją Wszystkie programy odwołujące się do biblioteki będą automatycznie korzystały z nowej wersji wymagana pomoc ze strony systemu operacyjnego sprawdzanie czy dany podprogram znajduje się w pamięci innych procesów kontrola nad dostępem różnych procesów do tych samych komórek pamięci
Konsolidacja dynamiczna Wady W obrazie binarnym programu znajduje się tylko namiastka procedury bibliotecznej Ten fragment kodu pozwala zlokalizować odpowiedni podprogram w pamięci, bądź załadować bibliotekę z dysku Aktualizacja bibliotek biblioteka może zostać zastąpiona nową ulepszoną wersją Wszystkie programy odwołujące się do biblioteki będą automatycznie korzystały z nowej wersji wymagana pomoc ze strony systemu operacyjnego sprawdzanie czy dany podprogram znajduje się w pamięci innych procesów kontrola nad dostępem różnych procesów do tych samych komórek pamięci
Konsolidacja dynamiczna Wady W obrazie binarnym programu znajduje się tylko namiastka procedury bibliotecznej Ten fragment kodu pozwala zlokalizować odpowiedni podprogram w pamięci, bądź załadować bibliotekę z dysku Aktualizacja bibliotek biblioteka może zostać zastąpiona nową ulepszoną wersją Wszystkie programy odwołujące się do biblioteki będą automatycznie korzystały z nowej wersji wymagana pomoc ze strony systemu operacyjnego sprawdzanie czy dany podprogram znajduje się w pamięci innych procesów kontrola nad dostępem różnych procesów do tych samych komórek pamięci
Konsolidacja dynamiczna Wady W obrazie binarnym programu znajduje się tylko namiastka procedury bibliotecznej Ten fragment kodu pozwala zlokalizować odpowiedni podprogram w pamięci, bądź załadować bibliotekę z dysku Aktualizacja bibliotek biblioteka może zostać zastąpiona nową ulepszoną wersją Wszystkie programy odwołujące się do biblioteki będą automatycznie korzystały z nowej wersji wymagana pomoc ze strony systemu operacyjnego sprawdzanie czy dany podprogram znajduje się w pamięci innych procesów kontrola nad dostępem różnych procesów do tych samych komórek pamięci
Nakładki W pamięci przechowywane są tylko te rozkazy i dane, które są stale potrzebne Inne rozkazy są wprowadzane w miarę zapotrzebowania na miejsce zajmowane przez zbędne już rozkazy Zalety nakładki nie wymagają specjalnego wsparcia ze strony SO mogą być zrealizowane poprzez czytanie plików do pamięci oraz skoków w określone miejsca pamięci szybsze ładowanie danych
Nakładki W pamięci przechowywane są tylko te rozkazy i dane, które są stale potrzebne Inne rozkazy są wprowadzane w miarę zapotrzebowania na miejsce zajmowane przez zbędne już rozkazy Zalety nakładki nie wymagają specjalnego wsparcia ze strony SO mogą być zrealizowane poprzez czytanie plików do pamięci oraz skoków w określone miejsca pamięci szybsze ładowanie danych
Nakładki W pamięci przechowywane są tylko te rozkazy i dane, które są stale potrzebne Inne rozkazy są wprowadzane w miarę zapotrzebowania na miejsce zajmowane przez zbędne już rozkazy Zalety nakładki nie wymagają specjalnego wsparcia ze strony SO mogą być zrealizowane poprzez czytanie plików do pamięci oraz skoków w określone miejsca pamięci szybsze ładowanie danych
Nakładki W pamięci przechowywane są tylko te rozkazy i dane, które są stale potrzebne Inne rozkazy są wprowadzane w miarę zapotrzebowania na miejsce zajmowane przez zbędne już rozkazy Zalety nakładki nie wymagają specjalnego wsparcia ze strony SO mogą być zrealizowane poprzez czytanie plików do pamięci oraz skoków w określone miejsca pamięci szybsze ładowanie danych
Wady wolniejsze działanie - dodatkowe operacje czytania kodu jednej nakładki w miejsce innej Przykład Dwuprzebiegowy asembler. Przebieg 1 konstrukcja tablicy symboli, przebieg 2 generacja kodu maszynowego Kod przebiegu 1 Kod przebiegu 2 Tablica symboli Wspólne podprogramy RAZEM 70kB 80kB 20KB 30kB 200kB dostępna pamięć 150kB moduł obsługi nakładek 10kB
Wady wolniejsze działanie - dodatkowe operacje czytania kodu jednej nakładki w miejsce innej Przykład Dwuprzebiegowy asembler. Przebieg 1 konstrukcja tablicy symboli, przebieg 2 generacja kodu maszynowego Kod przebiegu 1 Kod przebiegu 2 Tablica symboli Wspólne podprogramy RAZEM 70kB 80kB 20KB 30kB 200kB dostępna pamięć 150kB moduł obsługi nakładek 10kB
Przebieg 1 70kB Tablica 20kB symboli Wspólne podprogramy 30kB Modu³ obs³ugi 10kB nak³adek Przebieg 2 80kB Rozmiary nakładek: Nakładka A (przebieg 1): 20kB+30kB+70kB=120kB Nakładka B (przebieg 2): 20kB+30kB+80kB=130kB
Przydział ciągły pamięci operacyjnej Przydział pojedynczego obszaru Załóżmy, że system operacyjny znajduje się w pamięci dolnej, a procesy użytkownika w górnej Zadania algorytmu przydziału pamięci: ochrona kodu i danych systemu operacyjnego przed zmianami pochodzącymi od procesów użytkownika ochrona procesów użytkownika przed zmianami spowodowanymi przez inne procesy użytkownika Rejestr graniczny Rejestr przemieszczenia CPU adres logiczny < Tak + adres fizyczny Pamiêæ operacyjna Nie Pu³apka: b³¹d adresowania
Przydział ciągły pamięci operacyjnej Przydział pojedynczego obszaru Załóżmy, że system operacyjny znajduje się w pamięci dolnej, a procesy użytkownika w górnej Zadania algorytmu przydziału pamięci: ochrona kodu i danych systemu operacyjnego przed zmianami pochodzącymi od procesów użytkownika ochrona procesów użytkownika przed zmianami spowodowanymi przez inne procesy użytkownika Rejestr graniczny Rejestr przemieszczenia CPU adres logiczny < Tak + adres fizyczny Pamiêæ operacyjna Nie Pu³apka: b³¹d adresowania
Rejestr przemieszczenia wartość najmniejszego adresu fizycznego Rejestr graniczny zakres adresów logicznych Planista CPU wybiera proces do wykonania, wtedy ekspedytor nadaje odpowiednie wartości rejestrom Przydział wielu obszarów Maksymalne wykorzystanie pamięci wiele procesów użytkowych może być załadowanych do pamięci w tym samym czasie Cała dostępna pamięć traktowana jest jak jeden wielki blok dziura Dla procesu z zapotrzebowaniem na pamięć szukana jest odpowiednio duża dziura
Rejestr przemieszczenia wartość najmniejszego adresu fizycznego Rejestr graniczny zakres adresów logicznych Planista CPU wybiera proces do wykonania, wtedy ekspedytor nadaje odpowiednie wartości rejestrom Przydział wielu obszarów Maksymalne wykorzystanie pamięci wiele procesów użytkowych może być załadowanych do pamięci w tym samym czasie Cała dostępna pamięć traktowana jest jak jeden wielki blok dziura Dla procesu z zapotrzebowaniem na pamięć szukana jest odpowiednio duża dziura
Rejestr przemieszczenia wartość najmniejszego adresu fizycznego Rejestr graniczny zakres adresów logicznych Planista CPU wybiera proces do wykonania, wtedy ekspedytor nadaje odpowiednie wartości rejestrom Przydział wielu obszarów Maksymalne wykorzystanie pamięci wiele procesów użytkowych może być załadowanych do pamięci w tym samym czasie Cała dostępna pamięć traktowana jest jak jeden wielki blok dziura Dla procesu z zapotrzebowaniem na pamięć szukana jest odpowiednio duża dziura
Przykład Mamy pamięć o rozmiarze 2560 kb i system operacyjny zajmujący 400kB. Rozplanować pamięć biorąc pod uwagę kolejkę z tabeli Proces Pamięć Faza procesora P 1 600kB 10 P 2 1000kB 5 P 3 300kB 20 P 4 700kB 8 P 5 500kB 15 planowanie zadań - metoda FCFS przydział CPU - metoda rotacyjna (kwant=1)
Wybór wolnych obszarów: strategie pierwszego bądź najlepszego dopasowania
FRAGMENTACJA Fragmentacja zewnętrzna Przestrzeń wolnej pamięci zostaje podzielona na małe kawałki. Suma wolnych obszarów może wystarczyć na spełnienie pewnego zamówienia, lecz nie tworzą one spójnego obszaru Badania statystyczne pokazały, że w strategii pierwszego dopasowania na N przydzielonych bloków z powodu fragmentacji będzie ginąć 0.5N innych bloków (1/3 pamięci bezużyteczna! reguła 50%) Fragmentacja wewnętrzna Bezużyteczny kawałek pamięci wewnątrz obszaru pamięci przydzielonego dla pewnego procesu
FRAGMENTACJA Fragmentacja zewnętrzna Przestrzeń wolnej pamięci zostaje podzielona na małe kawałki. Suma wolnych obszarów może wystarczyć na spełnienie pewnego zamówienia, lecz nie tworzą one spójnego obszaru Badania statystyczne pokazały, że w strategii pierwszego dopasowania na N przydzielonych bloków z powodu fragmentacji będzie ginąć 0.5N innych bloków (1/3 pamięci bezużyteczna! reguła 50%) Fragmentacja wewnętrzna Bezużyteczny kawałek pamięci wewnątrz obszaru pamięci przydzielonego dla pewnego procesu
FRAGMENTACJA Fragmentacja zewnętrzna Przestrzeń wolnej pamięci zostaje podzielona na małe kawałki. Suma wolnych obszarów może wystarczyć na spełnienie pewnego zamówienia, lecz nie tworzą one spójnego obszaru Badania statystyczne pokazały, że w strategii pierwszego dopasowania na N przydzielonych bloków z powodu fragmentacji będzie ginąć 0.5N innych bloków (1/3 pamięci bezużyteczna! reguła 50%) Fragmentacja wewnętrzna Bezużyteczny kawałek pamięci wewnątrz obszaru pamięci przydzielonego dla pewnego procesu
UPAKOWANIE Upakowanie rozwiązanie problemu zewnętrznej fragmentacji Poprzemieszczanie zawartości pamięci tak, aby cała wolna pamięć znalazła się w jednym wielkim bloku Uwagi! należy zmienić wewnętrzne adresy przesuwanych procesów upakowanie nie jest możliwe, gdy nadawanie adresów jest statyczne (podczas kompilacji lub ładowania) upakowanie jest możliwe gdy nadawanie adresów jest dynamiczne (podczas wykonania programu) należy oszacować koszt upakowania (jakie procesy i gdzie należy przemieszczać)
UPAKOWANIE Upakowanie rozwiązanie problemu zewnętrznej fragmentacji Poprzemieszczanie zawartości pamięci tak, aby cała wolna pamięć znalazła się w jednym wielkim bloku Uwagi! należy zmienić wewnętrzne adresy przesuwanych procesów upakowanie nie jest możliwe, gdy nadawanie adresów jest statyczne (podczas kompilacji lub ładowania) upakowanie jest możliwe gdy nadawanie adresów jest dynamiczne (podczas wykonania programu) należy oszacować koszt upakowania (jakie procesy i gdzie należy przemieszczać)
UPAKOWANIE Upakowanie rozwiązanie problemu zewnętrznej fragmentacji Poprzemieszczanie zawartości pamięci tak, aby cała wolna pamięć znalazła się w jednym wielkim bloku Uwagi! należy zmienić wewnętrzne adresy przesuwanych procesów upakowanie nie jest możliwe, gdy nadawanie adresów jest statyczne (podczas kompilacji lub ładowania) upakowanie jest możliwe gdy nadawanie adresów jest dynamiczne (podczas wykonania programu) należy oszacować koszt upakowania (jakie procesy i gdzie należy przemieszczać)
UPAKOWANIE Upakowanie rozwiązanie problemu zewnętrznej fragmentacji Poprzemieszczanie zawartości pamięci tak, aby cała wolna pamięć znalazła się w jednym wielkim bloku Uwagi! należy zmienić wewnętrzne adresy przesuwanych procesów upakowanie nie jest możliwe, gdy nadawanie adresów jest statyczne (podczas kompilacji lub ładowania) upakowanie jest możliwe gdy nadawanie adresów jest dynamiczne (podczas wykonania programu) należy oszacować koszt upakowania (jakie procesy i gdzie należy przemieszczać)
UPAKOWANIE Upakowanie rozwiązanie problemu zewnętrznej fragmentacji Poprzemieszczanie zawartości pamięci tak, aby cała wolna pamięć znalazła się w jednym wielkim bloku Uwagi! należy zmienić wewnętrzne adresy przesuwanych procesów upakowanie nie jest możliwe, gdy nadawanie adresów jest statyczne (podczas kompilacji lub ładowania) upakowanie jest możliwe gdy nadawanie adresów jest dynamiczne (podczas wykonania programu) należy oszacować koszt upakowania (jakie procesy i gdzie należy przemieszczać)
UPAKOWANIE Upakowanie rozwiązanie problemu zewnętrznej fragmentacji Poprzemieszczanie zawartości pamięci tak, aby cała wolna pamięć znalazła się w jednym wielkim bloku Uwagi! należy zmienić wewnętrzne adresy przesuwanych procesów upakowanie nie jest możliwe, gdy nadawanie adresów jest statyczne (podczas kompilacji lub ładowania) upakowanie jest możliwe gdy nadawanie adresów jest dynamiczne (podczas wykonania programu) należy oszacować koszt upakowania (jakie procesy i gdzie należy przemieszczać)
Przykład Rozważmy przydział pamięci poniżej 0 System 0 System 0 System 0 System Operacyjny 300kB Operacyjny 300kB Operacyjny 300kB Operacyjny 300kB P 1 P 1 P 1 P 1 500kB 500kB 500kB 500kB P 600kB 2 P 600kB 2 P 600kB 2 600kB P 2 1000kB 1500kB 800kB P 4 P 4 1000kB 1200kB 1200kB 1200kB 1900kB 2100kB P 3 1500kB P 4 P 4 1900kB Przydzia³ pocz¹tkowy 2100kB P 3 Przemieszczono 600kB 2100kB P 3 Przemieszczono 400kB 2100kB P 3 Przemieszczono 200kB Problemy: przemieszczenia można dokonać na wiele sposobów wybranie optymalnej strategii jest trudne
Przykład Rozważmy przydział pamięci poniżej 0 System 0 System 0 System 0 System Operacyjny 300kB Operacyjny 300kB Operacyjny 300kB Operacyjny 300kB P 1 P 1 P 1 P 1 500kB 500kB 500kB 500kB P 600kB 2 P 600kB 2 P 600kB 2 600kB P 2 1000kB 1500kB 800kB P 4 P 4 1000kB 1200kB 1200kB 1200kB 1900kB 2100kB P 3 1500kB P 4 P 4 1900kB Przydzia³ pocz¹tkowy 2100kB P 3 Przemieszczono 600kB 2100kB P 3 Przemieszczono 400kB 2100kB P 3 Przemieszczono 200kB Problemy: przemieszczenia można dokonać na wiele sposobów wybranie optymalnej strategii jest trudne
Przykład Rozważmy przydział pamięci poniżej 0 System 0 System 0 System 0 System Operacyjny 300kB Operacyjny 300kB Operacyjny 300kB Operacyjny 300kB P 1 P 1 P 1 P 1 500kB 500kB 500kB 500kB P 600kB 2 P 600kB 2 P 600kB 2 600kB P 2 1000kB 1500kB 800kB P 4 P 4 1000kB 1200kB 1200kB 1200kB 1900kB 2100kB P 3 1500kB P 4 P 4 1900kB Przydzia³ pocz¹tkowy 2100kB P 3 Przemieszczono 600kB 2100kB P 3 Przemieszczono 400kB 2100kB P 3 Przemieszczono 200kB Problemy: przemieszczenia można dokonać na wiele sposobów wybranie optymalnej strategii jest trudne
STRONICOWANIE S tronicowanie (ang. paging) jest metodą pozwalającą na rozwiązanie problemu zewnetrznej fragmentacji. Pozwala się na to, aby procesowi można było przydzielać dowolne dostępne miejsca w pamięci fizycznej Metoda podstawowa Pamięć fizyczną dzieli się na bloki o stałej długości (ramki) Pamięć logiczną dzieli się na bloki o takiej samej długości (strony) Adres logiczny składa się z dwóch części: 1 numer strony (ang. page address) s 2 odległość na stronie (ang. page offset) o numer strony s m-n odleg³oœæ na stronie o n
STRONICOWANIE S tronicowanie (ang. paging) jest metodą pozwalającą na rozwiązanie problemu zewnetrznej fragmentacji. Pozwala się na to, aby procesowi można było przydzielać dowolne dostępne miejsca w pamięci fizycznej Metoda podstawowa Pamięć fizyczną dzieli się na bloki o stałej długości (ramki) Pamięć logiczną dzieli się na bloki o takiej samej długości (strony) Adres logiczny składa się z dwóch części: 1 numer strony (ang. page address) s 2 odległość na stronie (ang. page offset) o numer strony s m-n odleg³oœæ na stronie o n
STRONICOWANIE S tronicowanie (ang. paging) jest metodą pozwalającą na rozwiązanie problemu zewnetrznej fragmentacji. Pozwala się na to, aby procesowi można było przydzielać dowolne dostępne miejsca w pamięci fizycznej Metoda podstawowa Pamięć fizyczną dzieli się na bloki o stałej długości (ramki) Pamięć logiczną dzieli się na bloki o takiej samej długości (strony) Adres logiczny składa się z dwóch części: 1 numer strony (ang. page address) s 2 odległość na stronie (ang. page offset) o numer strony s m-n odleg³oœæ na stronie o n
STRONICOWANIE S tronicowanie (ang. paging) jest metodą pozwalającą na rozwiązanie problemu zewnetrznej fragmentacji. Pozwala się na to, aby procesowi można było przydzielać dowolne dostępne miejsca w pamięci fizycznej Metoda podstawowa Pamięć fizyczną dzieli się na bloki o stałej długości (ramki) Pamięć logiczną dzieli się na bloki o takiej samej długości (strony) Adres logiczny składa się z dwóch części: 1 numer strony (ang. page address) s 2 odległość na stronie (ang. page offset) o numer strony s m-n odleg³oœæ na stronie o n
STRONICOWANIE S tronicowanie (ang. paging) jest metodą pozwalającą na rozwiązanie problemu zewnetrznej fragmentacji. Pozwala się na to, aby procesowi można było przydzielać dowolne dostępne miejsca w pamięci fizycznej Metoda podstawowa Pamięć fizyczną dzieli się na bloki o stałej długości (ramki) Pamięć logiczną dzieli się na bloki o takiej samej długości (strony) Adres logiczny składa się z dwóch części: 1 numer strony (ang. page address) s 2 odległość na stronie (ang. page offset) o numer strony s m-n odleg³oœæ na stronie o n
STRONICOWANIE S tronicowanie (ang. paging) jest metodą pozwalającą na rozwiązanie problemu zewnetrznej fragmentacji. Pozwala się na to, aby procesowi można było przydzielać dowolne dostępne miejsca w pamięci fizycznej Metoda podstawowa Pamięć fizyczną dzieli się na bloki o stałej długości (ramki) Pamięć logiczną dzieli się na bloki o takiej samej długości (strony) Adres logiczny składa się z dwóch części: 1 numer strony (ang. page address) s 2 odległość na stronie (ang. page offset) o numer strony s m-n odleg³oœæ na stronie o n
Definicja adresu fizycznego adres bazowy strony w pamięci r odległość na stronie o adres bazowy r odleg³oœæ na stronie o Idea stronicowania pamięci CPU adres adres logiczny fizyczny s o r o s {... r... Tablica stron Pamiêæ operacyjna
Definicja adresu fizycznego adres bazowy strony w pamięci r odległość na stronie o adres bazowy r odleg³oœæ na stronie o Idea stronicowania pamięci CPU adres adres logiczny fizyczny s o r o s {... r... Tablica stron Pamiêæ operacyjna
Definicja adresu fizycznego adres bazowy strony w pamięci r odległość na stronie o adres bazowy r odleg³oœæ na stronie o Idea stronicowania pamięci CPU adres adres logiczny fizyczny s o r o s {... r... Tablica stron Pamiêæ operacyjna
numer strony jest indeksem w tablicy stron tablica stron zawiera adresy bazowe wszystkich stron w pamięci 0 1 2 3 Strona 0 Strona 1 Strona 2 Strona 3 Pamiêæ logiczna 0 1 1 4 2 3 3 7 Tablica stron 0 1 Strona 0 2 3 Strona 2 4 Strona 1 5 6 7 Strona 3 Pamiêæ fizyczna rozmiar strony (zarazem ramki) określa sprzęt rozmiar ten jest zwykle potęgą dwójki: 2 m rozmiar przestrzeni logicznej 2 n rozmiar strony
numer strony jest indeksem w tablicy stron tablica stron zawiera adresy bazowe wszystkich stron w pamięci 0 1 2 3 Strona 0 Strona 1 Strona 2 Strona 3 Pamiêæ logiczna 0 1 1 4 2 3 3 7 Tablica stron 0 1 Strona 0 2 3 Strona 2 4 Strona 1 5 6 7 Strona 3 Pamiêæ fizyczna rozmiar strony (zarazem ramki) określa sprzęt rozmiar ten jest zwykle potęgą dwójki: 2 m rozmiar przestrzeni logicznej 2 n rozmiar strony
numer strony jest indeksem w tablicy stron tablica stron zawiera adresy bazowe wszystkich stron w pamięci 0 1 2 3 Strona 0 Strona 1 Strona 2 Strona 3 Pamiêæ logiczna 0 1 1 4 2 3 3 7 Tablica stron 0 1 Strona 0 2 3 Strona 2 4 Strona 1 5 6 7 Strona 3 Pamiêæ fizyczna rozmiar strony (zarazem ramki) określa sprzęt rozmiar ten jest zwykle potęgą dwójki: 2 m rozmiar przestrzeni logicznej 2 n rozmiar strony
numer strony jest indeksem w tablicy stron tablica stron zawiera adresy bazowe wszystkich stron w pamięci 0 1 2 3 Strona 0 Strona 1 Strona 2 Strona 3 Pamiêæ logiczna 0 1 1 4 2 3 3 7 Tablica stron 0 1 Strona 0 2 3 Strona 2 4 Strona 1 5 6 7 Strona 3 Pamiêæ fizyczna rozmiar strony (zarazem ramki) określa sprzęt rozmiar ten jest zwykle potęgą dwójki: 2 m rozmiar przestrzeni logicznej 2 n rozmiar strony
numer strony jest indeksem w tablicy stron tablica stron zawiera adresy bazowe wszystkich stron w pamięci 0 1 2 3 Strona 0 Strona 1 Strona 2 Strona 3 Pamiêæ logiczna 0 1 1 4 2 3 3 7 Tablica stron 0 1 Strona 0 2 3 Strona 2 4 Strona 1 5 6 7 Strona 3 Pamiêæ fizyczna rozmiar strony (zarazem ramki) określa sprzęt rozmiar ten jest zwykle potęgą dwójki: 2 m rozmiar przestrzeni logicznej 2 n rozmiar strony
Podsumowanie stronicowanie jest odmianą dynamicznego przemieszczenia. Przypomina używanie tablicy rejestrów bazowych - po jednym na każdą ramkę pamięci stronicowanie eliminuje zewnętrzną fragmentację stronicowanie wprowadza wewnętrzną fragmentację np. rozmiar strony 2048B, rozmiar procesu 72766B wewnętrzna fragmentacja 962B wyraźne rozdzielenie pamięci widzianej przez użytkownika od pamięci fizycznej stronicowanie wydłuża czas przełączania kontekstu. Przechowuje kopie tablicy stron, licznika rozkazów i zawartości rejestrów
Podsumowanie stronicowanie jest odmianą dynamicznego przemieszczenia. Przypomina używanie tablicy rejestrów bazowych - po jednym na każdą ramkę pamięci stronicowanie eliminuje zewnętrzną fragmentację stronicowanie wprowadza wewnętrzną fragmentację np. rozmiar strony 2048B, rozmiar procesu 72766B wewnętrzna fragmentacja 962B wyraźne rozdzielenie pamięci widzianej przez użytkownika od pamięci fizycznej stronicowanie wydłuża czas przełączania kontekstu. Przechowuje kopie tablicy stron, licznika rozkazów i zawartości rejestrów
Podsumowanie stronicowanie jest odmianą dynamicznego przemieszczenia. Przypomina używanie tablicy rejestrów bazowych - po jednym na każdą ramkę pamięci stronicowanie eliminuje zewnętrzną fragmentację stronicowanie wprowadza wewnętrzną fragmentację np. rozmiar strony 2048B, rozmiar procesu 72766B wewnętrzna fragmentacja 962B wyraźne rozdzielenie pamięci widzianej przez użytkownika od pamięci fizycznej stronicowanie wydłuża czas przełączania kontekstu. Przechowuje kopie tablicy stron, licznika rozkazów i zawartości rejestrów
Podsumowanie stronicowanie jest odmianą dynamicznego przemieszczenia. Przypomina używanie tablicy rejestrów bazowych - po jednym na każdą ramkę pamięci stronicowanie eliminuje zewnętrzną fragmentację stronicowanie wprowadza wewnętrzną fragmentację np. rozmiar strony 2048B, rozmiar procesu 72766B wewnętrzna fragmentacja 962B wyraźne rozdzielenie pamięci widzianej przez użytkownika od pamięci fizycznej stronicowanie wydłuża czas przełączania kontekstu. Przechowuje kopie tablicy stron, licznika rozkazów i zawartości rejestrów
Podsumowanie stronicowanie jest odmianą dynamicznego przemieszczenia. Przypomina używanie tablicy rejestrów bazowych - po jednym na każdą ramkę pamięci stronicowanie eliminuje zewnętrzną fragmentację stronicowanie wprowadza wewnętrzną fragmentację np. rozmiar strony 2048B, rozmiar procesu 72766B wewnętrzna fragmentacja 962B wyraźne rozdzielenie pamięci widzianej przez użytkownika od pamięci fizycznej stronicowanie wydłuża czas przełączania kontekstu. Przechowuje kopie tablicy stron, licznika rozkazów i zawartości rejestrów
SEGMENTACJA Segmentacja w prosty sposób oddziela sposób widzenia pamięci przez użytkownika od pamięci rzeczywistej. W odróżnieniu od stronicowania pozwala na dopasowanie sposobu wyobrażenia pamięci przez użytkownika na pamięć fizyczną Metoda podstawowa Programista nie wyobraża sobie pamięci jako liniowej tablicy bitów, widzi pamięć jako zbiór segmentów o zróżnicowanych wymiarach Idea segmentacji Podprogram Logiczna przestrzeñ adresowa Funkcja SQRT Program g³ówny Tablica symboli STOS
SEGMENTACJA Segmentacja w prosty sposób oddziela sposób widzenia pamięci przez użytkownika od pamięci rzeczywistej. W odróżnieniu od stronicowania pozwala na dopasowanie sposobu wyobrażenia pamięci przez użytkownika na pamięć fizyczną Metoda podstawowa Programista nie wyobraża sobie pamięci jako liniowej tablicy bitów, widzi pamięć jako zbiór segmentów o zróżnicowanych wymiarach Idea segmentacji Podprogram Logiczna przestrzeñ adresowa Funkcja SQRT Program g³ówny Tablica symboli STOS
każdy segment ma swoją nazwę i długość adresy określają nazwę segmentu i odległość wewnątrz segmentu adres segment-offset określony jest za pomocą dwu wielkości: <numer segmentu, odległość> Podczas tłumaczenia programu kompilator automatycznie konstruuje segmenty odpowiadające np.: 1 programowi głównemu 2 zmiennym lokalnym 3 zmiennym globalnym 4 poszczególnym procedurom i funkcjom, etc.
każdy segment ma swoją nazwę i długość adresy określają nazwę segmentu i odległość wewnątrz segmentu adres segment-offset określony jest za pomocą dwu wielkości: <numer segmentu, odległość> Podczas tłumaczenia programu kompilator automatycznie konstruuje segmenty odpowiadające np.: 1 programowi głównemu 2 zmiennym lokalnym 3 zmiennym globalnym 4 poszczególnym procedurom i funkcjom, etc.
każdy segment ma swoją nazwę i długość adresy określają nazwę segmentu i odległość wewnątrz segmentu adres segment-offset określony jest za pomocą dwu wielkości: <numer segmentu, odległość> Podczas tłumaczenia programu kompilator automatycznie konstruuje segmenty odpowiadające np.: 1 programowi głównemu 2 zmiennym lokalnym 3 zmiennym globalnym 4 poszczególnym procedurom i funkcjom, etc.
każdy segment ma swoją nazwę i długość adresy określają nazwę segmentu i odległość wewnątrz segmentu adres segment-offset określony jest za pomocą dwu wielkości: <numer segmentu, odległość> Podczas tłumaczenia programu kompilator automatycznie konstruuje segmenty odpowiadające np.: 1 programowi głównemu 2 zmiennym lokalnym 3 zmiennym globalnym 4 poszczególnym procedurom i funkcjom, etc.
każdy segment ma swoją nazwę i długość adresy określają nazwę segmentu i odległość wewnątrz segmentu adres segment-offset określony jest za pomocą dwu wielkości: <numer segmentu, odległość> Podczas tłumaczenia programu kompilator automatycznie konstruuje segmenty odpowiadające np.: 1 programowi głównemu 2 zmiennym lokalnym 3 zmiennym globalnym 4 poszczególnym procedurom i funkcjom, etc.
każdy segment ma swoją nazwę i długość adresy określają nazwę segmentu i odległość wewnątrz segmentu adres segment-offset określony jest za pomocą dwu wielkości: <numer segmentu, odległość> Podczas tłumaczenia programu kompilator automatycznie konstruuje segmenty odpowiadające np.: 1 programowi głównemu 2 zmiennym lokalnym 3 zmiennym globalnym 4 poszczególnym procedurom i funkcjom, etc.
każdy segment ma swoją nazwę i długość adresy określają nazwę segmentu i odległość wewnątrz segmentu adres segment-offset określony jest za pomocą dwu wielkości: <numer segmentu, odległość> Podczas tłumaczenia programu kompilator automatycznie konstruuje segmenty odpowiadające np.: 1 programowi głównemu 2 zmiennym lokalnym 3 zmiennym globalnym 4 poszczególnym procedurom i funkcjom, etc.
Sprzęt s{ granica baza Tak CPU s o < Adres Nie logiczny Pu³apka: B³¹d adresowania Tablica segmentów + Pamiêæ operacyjna adres użytkownika dwuwymiarowy pamięć fizyczna jednowymiarowy ciąg bitów odwzorowanie adresów tablica segmentów
Sprzęt s{ granica baza Tak CPU s o < Adres Nie logiczny Pu³apka: B³¹d adresowania Tablica segmentów + Pamiêæ operacyjna adres użytkownika dwuwymiarowy pamięć fizyczna jednowymiarowy ciąg bitów odwzorowanie adresów tablica segmentów
Sprzęt s{ granica baza Tak CPU s o < Adres Nie logiczny Pu³apka: B³¹d adresowania Tablica segmentów + Pamiêæ operacyjna adres użytkownika dwuwymiarowy pamięć fizyczna jednowymiarowy ciąg bitów odwzorowanie adresów tablica segmentów
Tablica segmentów jest wykazem par rejestrów bazy i granicy Elementy tablicy segmentów: baza segmentu początkowy adres fizyczny segmentu w pamięci granica segmentu określa długość segmentu Odległość o: przedział < 0, granica segmentu > Adres fizyczny: dodanie odległości do bazy segmentu
Tablica segmentów jest wykazem par rejestrów bazy i granicy Elementy tablicy segmentów: baza segmentu początkowy adres fizyczny segmentu w pamięci granica segmentu określa długość segmentu Odległość o: przedział < 0, granica segmentu > Adres fizyczny: dodanie odległości do bazy segmentu
Tablica segmentów jest wykazem par rejestrów bazy i granicy Elementy tablicy segmentów: baza segmentu początkowy adres fizyczny segmentu w pamięci granica segmentu określa długość segmentu Odległość o: przedział < 0, granica segmentu > Adres fizyczny: dodanie odległości do bazy segmentu
Tablica segmentów jest wykazem par rejestrów bazy i granicy Elementy tablicy segmentów: baza segmentu początkowy adres fizyczny segmentu w pamięci granica segmentu określa długość segmentu Odległość o: przedział < 0, granica segmentu > Adres fizyczny: dodanie odległości do bazy segmentu
Tablica segmentów jest wykazem par rejestrów bazy i granicy Elementy tablicy segmentów: baza segmentu początkowy adres fizyczny segmentu w pamięci granica segmentu określa długość segmentu Odległość o: przedział < 0, granica segmentu > Adres fizyczny: dodanie odległości do bazy segmentu
Przykład Rozważmy następującą przestrzeń logiczną Funkcja SQRT Segment 1 Podprogram Segment 0 Program g³ówny Segment 2 Tablica symboli Segment 4 STOS Segment 3 Tablica segmentów Granica Baza 0 1000 1400 1 400 6300 2 400 4300 3 1100 3200 4 1000 4700 5 segmentów numerowanych 0,1,...,4 odwołanie do komórki 53 segmentu 2: 4300+53=4353 odwołanie do komórki 852 segmentu 3: 3200+852=4052 odwołanie do komórki 1222 segmentu 0: błąd adresowania
Przykład Rozważmy następującą przestrzeń logiczną Funkcja SQRT Segment 1 Podprogram Segment 0 Program g³ówny Segment 2 Tablica symboli Segment 4 STOS Segment 3 Tablica segmentów Granica Baza 0 1000 1400 1 400 6300 2 400 4300 3 1100 3200 4 1000 4700 5 segmentów numerowanych 0,1,...,4 odwołanie do komórki 53 segmentu 2: 4300+53=4353 odwołanie do komórki 852 segmentu 3: 3200+852=4052 odwołanie do komórki 1222 segmentu 0: błąd adresowania
Przykład Rozważmy następującą przestrzeń logiczną Funkcja SQRT Segment 1 Podprogram Segment 0 Program g³ówny Segment 2 Tablica symboli Segment 4 STOS Segment 3 Tablica segmentów Granica Baza 0 1000 1400 1 400 6300 2 400 4300 3 1100 3200 4 1000 4700 5 segmentów numerowanych 0,1,...,4 odwołanie do komórki 53 segmentu 2: 4300+53=4353 odwołanie do komórki 852 segmentu 3: 3200+852=4052 odwołanie do komórki 1222 segmentu 0: błąd adresowania
Przykład Rozważmy następującą przestrzeń logiczną Funkcja SQRT Segment 1 Podprogram Segment 0 Program g³ówny Segment 2 Tablica symboli Segment 4 STOS Segment 3 Tablica segmentów Granica Baza 0 1000 1400 1 400 6300 2 400 4300 3 1100 3200 4 1000 4700 5 segmentów numerowanych 0,1,...,4 odwołanie do komórki 53 segmentu 2: 4300+53=4353 odwołanie do komórki 852 segmentu 3: 3200+852=4052 odwołanie do komórki 1222 segmentu 0: błąd adresowania
Fragmentacja planista musi znaleźć i przydzielić pamięć wszystkim segmentom programu mamy do czynienia z dynamicznym przydziałem pamięci: metoda pierwszego dopasowania, metoda najlepszego dopasowania segmentacja powoduje zewnętrzną fragmentację problem stanowi dobór średniego rozmiaru segmentu każdy proces stanowi jeden segment stronicowanie upraszcza się do ciągłego przydziału pamięci każdy bajt zapisany jest w osobnym segmencie unika się całkowicie zewnętrznej fragmentacji, ALE każdy bajt potrzebuje swojego rejestru bazowego. W efekcie podwaja się zużycie pamięci segmentacja likwiduje całkowicie wewnętrzną fragmentację
Fragmentacja planista musi znaleźć i przydzielić pamięć wszystkim segmentom programu mamy do czynienia z dynamicznym przydziałem pamięci: metoda pierwszego dopasowania, metoda najlepszego dopasowania segmentacja powoduje zewnętrzną fragmentację problem stanowi dobór średniego rozmiaru segmentu każdy proces stanowi jeden segment stronicowanie upraszcza się do ciągłego przydziału pamięci każdy bajt zapisany jest w osobnym segmencie unika się całkowicie zewnętrznej fragmentacji, ALE każdy bajt potrzebuje swojego rejestru bazowego. W efekcie podwaja się zużycie pamięci segmentacja likwiduje całkowicie wewnętrzną fragmentację
Fragmentacja planista musi znaleźć i przydzielić pamięć wszystkim segmentom programu mamy do czynienia z dynamicznym przydziałem pamięci: metoda pierwszego dopasowania, metoda najlepszego dopasowania segmentacja powoduje zewnętrzną fragmentację problem stanowi dobór średniego rozmiaru segmentu każdy proces stanowi jeden segment stronicowanie upraszcza się do ciągłego przydziału pamięci każdy bajt zapisany jest w osobnym segmencie unika się całkowicie zewnętrznej fragmentacji, ALE każdy bajt potrzebuje swojego rejestru bazowego. W efekcie podwaja się zużycie pamięci segmentacja likwiduje całkowicie wewnętrzną fragmentację
Fragmentacja planista musi znaleźć i przydzielić pamięć wszystkim segmentom programu mamy do czynienia z dynamicznym przydziałem pamięci: metoda pierwszego dopasowania, metoda najlepszego dopasowania segmentacja powoduje zewnętrzną fragmentację problem stanowi dobór średniego rozmiaru segmentu każdy proces stanowi jeden segment stronicowanie upraszcza się do ciągłego przydziału pamięci każdy bajt zapisany jest w osobnym segmencie unika się całkowicie zewnętrznej fragmentacji, ALE każdy bajt potrzebuje swojego rejestru bazowego. W efekcie podwaja się zużycie pamięci segmentacja likwiduje całkowicie wewnętrzną fragmentację
Fragmentacja planista musi znaleźć i przydzielić pamięć wszystkim segmentom programu mamy do czynienia z dynamicznym przydziałem pamięci: metoda pierwszego dopasowania, metoda najlepszego dopasowania segmentacja powoduje zewnętrzną fragmentację problem stanowi dobór średniego rozmiaru segmentu każdy proces stanowi jeden segment stronicowanie upraszcza się do ciągłego przydziału pamięci każdy bajt zapisany jest w osobnym segmencie unika się całkowicie zewnętrznej fragmentacji, ALE każdy bajt potrzebuje swojego rejestru bazowego. W efekcie podwaja się zużycie pamięci segmentacja likwiduje całkowicie wewnętrzną fragmentację
Fragmentacja planista musi znaleźć i przydzielić pamięć wszystkim segmentom programu mamy do czynienia z dynamicznym przydziałem pamięci: metoda pierwszego dopasowania, metoda najlepszego dopasowania segmentacja powoduje zewnętrzną fragmentację problem stanowi dobór średniego rozmiaru segmentu każdy proces stanowi jeden segment stronicowanie upraszcza się do ciągłego przydziału pamięci każdy bajt zapisany jest w osobnym segmencie unika się całkowicie zewnętrznej fragmentacji, ALE każdy bajt potrzebuje swojego rejestru bazowego. W efekcie podwaja się zużycie pamięci segmentacja likwiduje całkowicie wewnętrzną fragmentację
Fragmentacja planista musi znaleźć i przydzielić pamięć wszystkim segmentom programu mamy do czynienia z dynamicznym przydziałem pamięci: metoda pierwszego dopasowania, metoda najlepszego dopasowania segmentacja powoduje zewnętrzną fragmentację problem stanowi dobór średniego rozmiaru segmentu każdy proces stanowi jeden segment stronicowanie upraszcza się do ciągłego przydziału pamięci każdy bajt zapisany jest w osobnym segmencie unika się całkowicie zewnętrznej fragmentacji, ALE każdy bajt potrzebuje swojego rejestru bazowego. W efekcie podwaja się zużycie pamięci segmentacja likwiduje całkowicie wewnętrzną fragmentację