2016-10-27 32 views
5

Poniższa tabela stron dotyczy systemu z 16-bitowymi adresami wirtualnymi i fizycznymi oraz 4 096-bajtowymi stronami. Bit odniesienia jest ustawiony na 1, gdy strona została przywołana. Okresowo, wątek zeruje wszystkie wartości bitu odniesienia. Wszystkie liczby są podawane w systemie dziesiętnym. enter image description heretłumaczyć adres wirtualny na adres fizyczny

Chcę przekonwertować następujące adresy wirtualne (w systemie szesnastkowym) na równoważne adresy fizyczne. Również chcę ustawić bit odniesienia dla odpowiedniego wpisu w tabeli stron.

0xE12C

0x3A9D

0xA9D9

0x7001

0xACA1

znam odpowiedzi są, ale chcę wiedzieć, w jaki sposób można osiągnąć te odpowiedzi :

0xE12C → 0x312C 
0x3A9D → 0xAA9D 
0xA9D9 → 0x59D9 
0x7001 → 0xF001 
0xACA1 → 0x5CA1 

Znalazłem i wypróbowałem This, ale nie pomogło mi to zbytnio.

Odpowiedz

4

Jest podane, że adres wirtualny jest 16 bit długo.
W związku z tym w wirtualnej przestrzeni adresowej znajduje się 2^16 adresów.
Rozmiar strony wynosi 4 KB (na stronie są 4K (4 * (2^10)), więc liczba stron będzie wynosić (2^16)/(2^12) = 2^4.
Do każdej strony wymagane są 4 bity.
Najbardziej znaczące 4 bity adresu wirtualnego będą oznaczać numer strony, która jest odsyłana, a pozostałe 12 bitów będzie odsunięcie strony.

Należy pamiętać, że rozmiar strony (w wirtualnej przestrzeni adresowej) jest zawsze taki sam, jak rozmiar ramki w pamięci głównej. W związku z tym ostatnie 12 bitów pozostanie takie samo w adresie fizycznym, jak adres wirtualny.

Aby uzyskać adres ramki w pamięci głównej, wystarczy użyć pierwszych 4 bitów.
Przykład: Rozważmy adres wirtualny 0xACA1
Tutaj A w A CA1 oznacza numer strony (10) i odpowiadającą jej ramkę nr 5 (0101), dlatego wynikowy adres fizyczny będzie wynosił → 0x5CA1.

7

Aby przetłumaczyć wirtualny adres do fizycznej adres, musimy wiedzieć rzeczy:

  • fizyczna wielkość pamięci (w tym przykładzie nie jest ważne .. wyglądać [1]
  • Rozmiar strony
  • Liczba bitów dla wirtualnego adresu

w poniższym przykładzie: układ 16-bitowy, 4KB rozmiar strony i fizyczny rozmiar pamięci jest 64 KB.

Przede wszystkim musimy określić liczbę potrzebnych bitów do działania jako offset na stronie.
log2(Page-Size) = log2(4096) = bity przesunięcie

Spośród 16 bitów dla wirtualnego adresu 12 do przesunięcia, to znaczy, każdy proces ma 2^4 = 16 stron wirtualnych. Każda pozycja w tabeli stron przechowuje odpowiednią ramkę mieszczącą stronę. Na przykład:

enter image description here

Teraz pozwala tłumaczyć!

Przede wszystkim za łatwość pracy pozwala przekonwertować 0xE12C na binary.

0xE12C = (1110 0001 0010 1100) in base 2 
1110 = 14 in decimal 
Entry 14 in P.T => Page frame 3. 

Pozwala złączyć go do 12 przesunięcie bitów

Answer: (0011 0001 0010 1100) = 0x312C 

Inny przykład: 0x3A9D

0x3A9D = 0011 1010 1001 1101 
0011 = 3 
PageTable[3] = 10 
10 in decimal = 1010 in binary 
1010 1010 1001 1101 in binary = 0xAA9D 

[1] Gdyby strona wpisy tabeli zawartej więcej informacji, to musiałaby znać liczba bitów potrzebnych do odniesienia się do każdej ramki. W naszym przypadku jest to bit log2(64KB/4KB) = log2(16) = 4. to znaczy, jeśli wpis tablicy strony zawierał 6 bitów, wiemy, że tylko 4 z nich jest dla numeru ramki, a reszta dla flag.

Na przykład:

| page | page frame | 
|-------------------| 
| 5 | 100101 | 

Page 5 is mapped to frame number 1001 = frame number 9. 
1

Aby pomóc rozwiązać to pytanie, musimy nasze dane po prawej:

  1. 16 bit wirtualnej przestrzeni adresowej = 2^16 = 65536 przestrzeń adresowa
  2. 16 bit fizycznej przestrzeni adresowej = 2^16 = 65 536 przestrzeni adresowej
  3. 4096 Rozmiar strony bajtu określa przesunięcie, którym jest Log (4096)/Log (2) = 12 bitów. Oznacza to, że 2^12 dla rozmiaru strony
  4. Zgodnie @Akash Mahapatra, przesunięcie od adresu wirtualnego jest bezpośrednio odwzorowywany na przesunięcie na adres fizyczny

Jako taki, mamy teraz:

  • 2^16 (16bit) dla adresu wirtualnego, 2^12 (12bit) dla offsetu => pozostawia nam 4-bity dla stron lub raczej całkowitą liczbę dostępnych stron.
  • Nie będę powtarzać obliczeń fizycznych, ponieważ są to te same liczby.
  • 2^4 (4bit) dla stron = 16, co jest skorelowane z liczbą wpisów w tabeli powyżej!

Docieramy tam ... bądź cierpliwy! :)

Adres pamięci 0xE12C w notacji szesnastkowej jest również znany z posiadania 16-bitowego adresu. (Ponieważ jest to wskazane w pytaniu.)

Załóżmy teraz zarżnąć adres ...

Najpierw usuń „0x” z informacją.

Możemy przekonwertować E12C na notację binarną, np. @Tony Tannous, ale zamierzam zastosować trochę skrótu.

Mapping of the Address and Offset

po prostu użyć wskaźnika. Cóż, adres jest zapisany w 4 znakach powyżej, a ponieważ 16/4 = 4, mogę zdefiniować pierwszą literę jako adres wirtualny, podczas gdy pozostałe 3 to adres przesunięty.

Z informacją "E" w formacie szesnastkowym, muszę przekonwertować na wartość dziesiętną = 14. Następnie zajrzałem do podanego stołu i znalazłem ramkę strony "3". Ramka strony 3 jest zapisana w formacie dziesiętnym, który następnie musi zostać przekonwertowany z powrotem na format szesnastkowy ... Duh! ... która wynosi 3!

Mapowanie adresu fizycznego lokalizacji pamięci wirtualnej 0xE12C można znaleźć w 0x312C w pamięci fizycznej.

Będziesz wtedy wrócić do stołu, i odnoszą się do kolumny bit odniesienia i umieścić „1” do wiersza 14.

Zastosuj tę samą koncepcję nich -

0x3A9D → 0xAA9D 
0xA9D9 → 0x59D9 
0x7001 → 0xF001 
0xACA1 → 0x5CA1 

Jeśli zauważysz, ostatnie 3 cyfry są takie same (co określa przesunięcie). i 1 z 4 cyfr odwzorowywane są zgodnie z tabelą:

table entry 3 -> page frame 10 -> hex notation A 
table entry A (10) -> page frame 5 -> hex notation 5 
table entry 7 -> page frame 15 -> hex notation F 
table entry A (10) -> page frame 5 -> hex notation 5 

Nadzieja to wyjaśnienie pomaga Tobie i innym jak ja! :)