Architektura Komputerów/Wykład 2: Dane: Różnice pomiędzy wersjami
Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Nie podano opisu zmian |
Nie podano opisu zmian |
||
(Nie pokazano 4 pośrednich wersji utworzonych przez tego samego użytkownika) | |||
Linia 175: | Linia 175: | ||
|valign="top" width="500px"|[[Grafika:ASK_M2_S21.png]] | |valign="top" width="500px"|[[Grafika:ASK_M2_S21.png]] | ||
|valign="top"| | |valign="top"| | ||
... | Wartość pola wykładnika równa 0 oznacza postać zdenormalizowaną. Jeżeli pole mantysy ma wartość 0 – zapis reprezentuje liczbę 0. W przeciwnym przypadku jest to liczba o bardzo małej wartości bezwzględnej. | ||
Wartość pola wykładnika złożona z bitów o wartości 1 oznacza tzw. nie-liczby. Pole mantysy równe 0 identyfikuje nieskończoność. Wzorzec bitowy, w którym najbardziej znaczący bit jkest równy 0, a wśród pozostałych jest co najmniej jedna jedynka jest zapisem głośnej nie-liczby, czyli wartości, która ni e może być argumentem operacji. Najbardziej znaczący bit mantysy o wertości 1 identyfikuje cichą nie-liczbę. Wynikiem operacji na cichej nie-liczbie jest zawsze cicha nie-liczba. | |||
|} | |} | ||
<hr width="100%"> | <hr width="100%"> | ||
Linia 217: | Linia 219: | ||
|valign="top" width="500px"|[[Grafika:ASK_M2_S25.png]] | |valign="top" width="500px"|[[Grafika:ASK_M2_S25.png]] | ||
|valign="top"| | |valign="top"| | ||
. | Istnieją dwa sposoby zapisu danej wielobajtowej w pamięci, zwane konwencjami adresowania danych. Nazwy konwencji pochodzą z powieści „Podróże Guliwera”, w której odnosiły się one do dwóch społeczności, różniących się zasadami jedzenia gotowanych jaj. | ||
|} | |} | ||
<hr width="100%"> | <hr width="100%"> | ||
Linia 229: | Linia 231: | ||
|valign="top" width="500px"|[[Grafika:ASK_M2_S27.png]] | |valign="top" width="500px"|[[Grafika:ASK_M2_S27.png]] | ||
|valign="top"| | |valign="top"| | ||
... | W konwencji Little-Endian adres bajtu odzwierciedla wagę bajtu w liczbie. Jest to konwencja naturalna dla komputera, chociaż dla człowieka na pierwszy rzut oka wydaje się dziwna – jesteśmy przyzwyczajeni do zapisywania liczb począwszy od najbardziej znaczących cyfr. | ||
Istotną cechą tej konwencji jest to, że jeżeli zapiszemy w pamięci daną całkowitoliczbową w długim formacie (np. 64 bity), to przy dostępach do jej mniej znaczącej części o mniejszej długości (np. jednego, dwóch lub czterech bajtów) adres danej będzie w każdym przypadku ten sam. Jest to wygodne przy częstym rzutowaniu typów całkowitoliczbowych, ca ma miejsce w programach pisanych w języku C. | |||
|} | |} | ||
<hr width="100%"> | <hr width="100%"> | ||
Linia 235: | Linia 239: | ||
|valign="top" width="500px"|[[Grafika:ASK_M2_S28.png]] | |valign="top" width="500px"|[[Grafika:ASK_M2_S28.png]] | ||
|valign="top"| | |valign="top"| | ||
... | Zapis Big-Endian, naturalny dla człowieka, jest zwykle mniej wygodny dla komputera. Dostęp do danej całkowitoliczbowej w pamięci wymaga zmiany wartości adresu w zależności od długości danej. Jeżeli liczba 32-bitowa zostanie zapisana pod adresem A, to jej wartość w postaci jednobajtowej ma adres A+3. | ||
Istotną zaletą konwencji Big-Endian jest możliwość szybkiego porównywania łańcuchów tekstowych przy użyciu instrukcji operujących na liczbach całkowitych o długości 32 lub 64 bitów. Wektor znaków (bajtów) interpretowany jako liczba ma w najbardziej znaczącym bajcie pierwszy bajt łańcucha. Zamiast więc prowadzić operację porównywania łańcuchów znak po znaku, można ją wykonać posługując się grupami znaków o długości słowa procesora. | |||
|} | |} | ||
<hr width="100%"> | <hr width="100%"> | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|valign="top" width="500px"|[[Grafika:ASK_M2_S29.png]] | |valign="top" width="500px"|[[Grafika:ASK_M2_S29.png]] | ||
|valign="top"| | |||
Dane powinny być umieszczone w pamięci w taki sposób, aby dostęp do danej, której rozmiar nie przekracza długości słowa pamięci następował w pojedynczym cyklu dostępu do pamięci. | |||
W nowszych architekturach komputerów rozmieszczenie danych gwarantujące dostęp w jednym cyklu transmisji jest obligatoryjne – próba dostępu do danej położonej inaczej generuje błąd. | |||
|} | |||
<hr width="100%"> | |||
{| border="0" cellpadding="4" width="100%" | |||
|valign="top" width="500px"|[[Grafika:ASK_M2_S30.png]] | |||
|valign="top"| | |||
Dostęp w jednym cyklu przesłania można zagwarantować, umieszczając każdą daną skalarną pod adresem podzielnym przez jej długość. Dane 32-bitowe powinny być położone pod adresami podzielnymi przez 4, a 16-bitowe – pod adresami parzystymi. Takie umieszczenie danych w pamięci nazywa się wyrównaniem naturalnym. | |||
Nawet jeśli model programowy procesora nie narzuca takiego wymagania, wyrównanie naturalne jest zwykle wymuszane przez kompilatory (np. w x86). | |||
Dane strukturalne muszą być wyrównane w taki sposób, aby każde pole struktury było wyrównane naturalnie. Oznacza to, że początek struktury powinien być wyrównany zgodnie z wymaganiami najdłuższego typu danych obsługiwanego przez procesor. Należy zauważyć, że wyrównanie wpływa na rozmiar struktury, zwracany przez operator sizeof – rozmiar jest „zaokrąglany w górę” do granicy wyrównania struktur. | |||
|} | |||
<hr width="100%"> | |||
{| border="0" cellpadding="4" width="100%" | |||
|valign="top" width="500px"|[[Grafika:ASK_M2_S31.png]] | |||
|valign="top"| | |valign="top"| | ||
... | ... | ||
Linia 245: | Linia 269: | ||
<hr width="100%"> | <hr width="100%"> | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|valign="top" width="500px"|[[Grafika: | |valign="top" width="500px"|[[Grafika:ASK_M2_S32.png]] | ||
|valign="top"| | |valign="top"| | ||
... | ... | ||
|} | |} |
Aktualna wersja na dzień 23:07, 5 paź 2006
![]() |
... |
![]() |
... |
![]() |
... |
![]() |
... |
![]() |
... |
![]() |
... |
![]() |
... |
![]() |
... |
![]() |
... |
![]() |
... |
![]() |
... |