- Zastanawiałem się, czy endianność zależy tylko od procesora?
- Czy to zależy od innego sprzętu, takiego jak pamięć, dodatkowe urządzenie pamięci?
- Czy to zależy od systemu operacyjnego? Dlaczego w Wikipedii wydaje się to prawdą?
Odpowiedzi:
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.
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.
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ć,
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 mips
i mipsel
kompilacje Debiana, a co nie.
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).
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.