Asembler x86/Zaawansowana architektura: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Doles (dyskusja | edycje)
Nie podano opisu zmian
Doles (dyskusja | edycje)
Linia 17:
 
Każdy nasz "logiczny segment" jest reprezentowany przez tzw '''deskryptor segmentu''', o długości 8 bajtów (64 bity). Deskryptor ten zaś jak sama nazwa wskazuje opisuje nasz segment. Wspomiany deskryptor znajduje się w tablicy deskryptorów. Mogłeś sobie postawić pytanie: "W której ? Przecież są dwie tablice: GDT i LDT" Odpowiedź: "To zależy od pola TI w selektorze segmentu". Poniżej znajduje się obrazek prezentujący jak wygląda deskryptor segmentu wraz z wytłumaczeniem danych pól.
 
 
[[Grafika:Selektor_segmentu.jpg|320px]]
 
 
*Base - tutaj znajduje się adres liniowy pierwszego bajtu danego segmentu.
Linia 33 ⟶ 37:
Co musi zrobić system operacyjny aby uzyskać adres liniowy z adresu logicznego ? Dla przykładu mamy wcześniejszy adres logiczny 0xc00d:1001. Najpierw brana jest część 0xC00D. Ineks z selektora segmentu jest pomnożony przez 8 (ponieważ taką długość w bajtach ma deskryptor segmentu). Do tej liczby dodawana jest wartość Base z deskryptora segmentu. Odpowiedni Deskryptor segmentu system operacyjny bierze z GDT lub LDT a to zaś wybiera na podstawie wartości pola TI w selektorze. Po zsumowaniu na sam koniec dodawana jest wartość offsetu z naszego adresu logicznego czyli 0x1001.
Poniżej znajduje się rysunek pokazujący jak powstaje adres liniowy:
 
===Translacja na adres fizyczny===
Tutaj aby dany adres liniowy mógł być przetłumaczony na adres fizyczny, należy skorzystać z mechanizmu stronicowania pamięci. Pamięć operacyjna została pododzielona na małe obszary zwane stronami, zaś ich adresy to ramki stron. Nie myl obu tych pojęć. Strona jest to pewien blok danych zaś ramka strony to adres początkowy tego bloku. Procesory firmy Intel oraz zgodne z nimi mają rozmiar strony równy 4 KB.