Co determinuje endianizm

8
  1. Zastanawiałem się, czy endianność zależy tylko od procesora?
  2. Czy to zależy od innego sprzętu, takiego jak pamięć, dodatkowe urządzenie pamięci?
  3. Czy to zależy od systemu operacyjnego? Dlaczego w Wikipedii wydaje się to prawdą?
Tim
źródło
Wiem o tym bardzo niewiele, ale po przeczytaniu artykułu, do którego linkujesz, zbieram: 1. Nie w systemach bi-endian, inaczej tak. 2. Nie endianizm procesora, ponieważ nie muszą one modyfikować przechowywanych danych. Zobacz sekcję dotyczącą zamiany plików i bajtów, aby uzyskać informacje na temat podobnych problemów 3. Tak, w przypadku architektur Bi-Endian. Ktoś musi zdecydować.
Daniel Beck
@Daniel: Dzięki! Co rozumiesz przez „nie endianness procesora”?
Tim
1
Inny sprzęt może być świadomy problemów związanych z endianizmem (w artykule wspomniano o sieci). Dlatego starałem się odróżnić rodzaj, o którym mówisz, nazywając go „endianizmem procesora”.
Daniel Beck
Należy dodać, że niektóre procesory (np. PowerPC) obsługują oba elementy. Zaczynają się domyślnie, ale można to zmienić.
flolo,

Odpowiedzi:

10

Endianness dotyczy danych liczbowych, gdy liczba jest zbyt duża, aby zmieścić się w jednym bajcie. Np. Tekst ASCII jest tylko bajtami z rzędu, nie dotyczy endianizmu.

Jeśli wstawimy małą liczbę, taką jak 42, w 32-bitową (4-bajtową) liczbę całkowitą, widzimy, że przy dużym endianie (BE) używany jest tylko ostatni bajt, a przy małej endianie (LE) używany jest tylko pierwszy bajt :

|    | byte[0] | byte[1] | byte[2] | byte[3] |
|----+---------+---------+---------+---------|
| BE |       0 |       0 |       0 |      42 |
| LE |      42 |       0 |       0 |       0 |

Endianizm architektury to endianizm procesora. RAM nie robi matematyki, więc to nie obchodzi.

Urządzenia takie jak karty dźwiękowe dbają o to (np. Dźwięk 16 bitów 44100 kHz jest w większości BE), ale to do systemu operacyjnego (sterownika urządzenia) należy powiadomienie procesora, aby mógł przekonwertować endianizm przed wysłaniem na kartę dźwiękową.

W sieciach przeważnie wszystko jest dużym endianem , więc system operacyjny musi informować małe procesory endian, aby bajty zamieniały liczby całkowite podczas konstruowania pakietów sieciowych.

Systemy plików są dostępne w obu wersjach końcowych. Np. FAT32 jest LE, więc tylko architektury BE muszą wymieniać bajty podczas korzystania z FAT32.

W programowaniu w sieci C musisz pamiętać, aby używać htonl()i ntohl()-funkcji do konwersji między kolejnością hosta (natywną) a kolejnością bajtów w sieci. Gdy program jest kompilowany na dużym systemie endian, funkcje nic nie robią. W małych systemach Endian zamieniają kolejność bajtów.


Endianizm architektury jest rzeczą na poziomie bajtów. Kolejność / numeracja bitów jest przeważnie nieistotna przy rozważaniu endianizmu architektury. ALE to zawsze miło wiedzieć :)

Z grubsza LSB (najmniej znaczący bit) jako pierwszy to LE świata bitów, a MSB (najbardziej znaczący bit) to BE świata bitów.

Większość procesorów i magistrali szeregowych wydaje się (zaskakująco) LSB nawet na dużych systemach endianowych, takich jak SPARC. Również Ethernet jest LSB, mimo że bajty przeważnie są w dużej kolejności. Z drugiej strony np. PPC to big endian, a MSB pierwszy.

jkj
źródło
14
  1. CPU kontroluje endianizm. Kilka procesorów może przełączać się między big-endian i little-endian. Architektury x86 / amd64 nie posiadają tej funkcji.

  2. Endianness jest domyślną rzeczą z ładowaniem i przechowywaniem instrukcji na CPU. Dane, które nie zmieszczą się w jednym bajcie (0–255), muszą być odczytywane i zapisywane w szeregu wielu bajtów, i oczywiście te bajty muszą być odczytywane i zapisywane w spójnej kolejności. Projektanci CPU muszą również wybrać kolejność, z której bajty rejestrów są odczytywane i zapisywane. Kolejność nie jest ważna, jeśli dane nigdy nie opuszczają procesora lub pamięci RAM, ale gdy wchodzisz w takie rzeczy, jak zapisywanie danych w rejestrach we / wy (które mogą nie oczekiwać takiej samej kolejności) i sektorach dysku (gdzie inne systemy mogą odczytać dane ) staje się wtedy ważny i potrzebny jest zewnętrzny standard. Ten standard jest zwykle częścią specyfikacji sprzętowej lub specyfikacji formatu pliku. Każdy programista / projekt wart swojej soli zamierza zaprojektować formaty trwałości, aby to uwzględnić,

  3. System operacyjny w dużej mierze zajmuje się rejestrami we / wy i sektorami dysków, więc tutaj ma zastosowanie # 2. Szczególnie ważnym obszarem, który wymaga wspólnego standardu między wszystkimi procesorami, są implementacje systemów plików. Dlatego istnieją osobne mipsi mipselkompilacje Debiana, a co nie.

LawrenceC
źródło
1
„Dane, które nie zmieszczą się w więcej niż jednym bajcie (0–255), muszą być odczytywane i zapisywane w szeregu wielu bajtów, i oczywiście te bajty muszą być odczytywane i zapisywane w spójnej kolejności”. - Nie sądzę, żebyś chciał tam więcej.
EBGreen
Dzięki! w 2, czy „rejestracja” w „Projektanci CPU muszą również wybrać kolejność, w której bajty rejestrów są odczytywane i zapisywane w„ tak samo jak „rejestr We / Wy” w ”kolejność nie jest ważna, jeśli dane nie opuszcza procesora lub pamięci RAM, ale gdy pojawi się na rzeczy jak pisanie danych do rejestrów I / o (który może nie oczekiwać tego samego porządku? "
Tim
@ Tim, Na potrzeby tej dyskusji powiedziałbym, że tak.
LawrenceC
1
Zobacz odpowiedź @ jkj. Podkreślił nieco istotę tego, co próbowałem powiedzieć.
LawrenceC
1
@ultrasawblade ok. Widzę, że odpowiedziałeś na ten problem tutaj superuser.com/questions/308487/... Mówisz, że rejestry we / wy są w urządzeniu, a nie w procesorze. W porządku. Wówczas nie ma nic kontrowersyjnego.
barlop
3

Endianness jest prostą kolejnością, w której procesor umieszcza bity liczby binarnej. Pamięć RAM nie dba o to, w jakiej kolejności są zapisywane dane, podobnie jak dysk twardy (ponieważ nie podejmują żadnych działań w odniesieniu do samej zawartości strumienia danych, po prostu wykonują instrukcje z procesora / mikroukładu, gdzie je umieścić). Systemy operacyjne mogą być budowane do pracy z oboma endianities (na przykład Mac OS X).

Andrew Lambert
źródło
2

Endianness niekoniecznie zależy od procesora. Na przykład Ethernet i większość protokołów niskiego poziomu TCP / IP są big endianami, niezależnie od procesora i miejmy nadzieję, że komputery oparte na architekturze x86 mogą nadal łączyć się z Internetem. Podobnie, systemy operacyjne działające na dużym procesorze endian odczytują FAT32, który to mały system plików endian lub używają małych kart PCI endian i tak dalej.

jlliagre
źródło