Apa yang menentukan endianness

6
  1. Saya bertanya-tanya apakah endianness hanya tergantung pada CPU?
  2. Apakah itu tergantung pada perangkat keras lain, seperti memori, perangkat penyimpanan sekunder?
  3. Apakah itu tergantung pada OS? Kenapa masuk Wikipedia , apakah itu benar?
Tim
sumber
Saya tahu sedikit tentang ini, tetapi dari membaca artikel yang Anda tautkan, saya kumpulkan: 1. Tidak pada sistem bi-endian. 2. Bukan CPU endianness, karena mereka tidak perlu benar-benar memodifikasi data yang mereka pegang. Lihat bagian pertukaran file dan byte untuk masalah terkait 3. Ya, untuk arsitektur bi-endian. Seseorang harus memutuskan.
Daniel Beck
@Aniel: Terima kasih! Apa yang Anda maksud dengan "Not CPU endianness"?
Tim
1
Perangkat keras lain mungkin perlu mewaspadai masalah endianness (jaringan disebutkan dalam artikel). Itu sebabnya saya mencoba membedakan jenis yang Anda rujuk dengan menyebutnya "CPU endianness".
Daniel Beck
Orang mungkin harus menambahkan bahwa beberapa CPU (mis. PowerPC) mendukung endianess. Mereka mulai secara default, tetapi dapat diaktifkan.
flolo

Jawaban:

8

Endianness adalah tentang data numerik ketika angka terlalu besar untuk muat dalam satu byte. Misalnya. Teks ASCII hanya byte dalam satu baris, tidak terkait dengan endianness.

Jika kita menempatkan sejumlah kecil suka 42 dalam integer 32-bit (4 byte), kita melihatnya dengan big endian (BE) hanya byte terakhir yang digunakan dan dengan little endian (LE) hanya byte pertama yang digunakan :

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

Arsitektur endianness adalah endianness CPU. RAM tidak melakukan matematika sehingga tidak peduli.

Perangkat seperti kartu suara benar-benar peduli (mis. Audio 16bit 44100kHz sebagian besar BE), tetapi begitu Sistem operasi (driver perangkat) tanggung jawab untuk memberi tahu CPU agar mungkin mengubah endianness sebelum mengirim ke kartu suara.

Dalam jaringan, sebagian besar semuanya adalah big endian , jadi OS harus memberitahu prosesor endian kecil swap byte bilangan bulat sebagai paket jaringan dibangun.

Sistem file hadir dalam kedua endianness. Misalnya. FAT32 adalah LE sehingga hanya arsitektur BE yang harus melakukan byte swapping ketika menggunakan FAT32.

Dalam pemrograman jaringan C Anda harus ingat untuk menggunakannya htonl() dan ntohl() -fungsi untuk mengkonversi antara urutan host- (asli) dan byte jaringan. Ketika program dikompilasi pada sistem big endian, fungsinya tidak melakukan apa-apa. Pada sistem endian kecil mereka menukar urutan byte.


Arsitektur endianness adalah hal tingkat byte. Urutan / penomoran bit sebagian besar tidak relevan ketika mempertimbangkan endianness arsitektur. TAPI itu selalu menyenangkan untuk diketahui :)

Secara kasar LSB (Least Significant Bit) pertama adalah LE of bit world dan MSB (Most Significant Bit) pertama adalah BE dari bit world.

Kebanyakan CPU dan serial bus tampaknya (secara mengejutkan) LSB bahkan pada sistem big endian seperti SPARC. Juga Ethernet adalah LSB meskipun byte sebagian besar berjalan dalam urutan big endian. Di sisi lain, mis. PPC adalah big endian dan MSB pertama.

jkj
sumber
12
  1. CPU mengontrol endianness. Beberapa CPU dapat beralih antara big-endian dan little-endian. Arsitektur x86 / amd64 tidak memiliki fitur ini.

  2. Endianness adalah hal yang tersirat dengan memuat dan menyimpan instruksi pada CPU. Data yang tidak muat dalam satu byte (0-255) perlu dibaca dan ditulis dalam serangkaian beberapa byte, dan jelas byte tersebut harus dibaca dan ditulis dalam urutan yang konsisten. Perancang CPU juga harus memilih urutan byte dari register dibaca dan ditulis. Urutan tidak penting jika data tidak pernah meninggalkan CPU atau RAM, tetapi ketika Anda masuk ke hal-hal seperti menulis data ke register I / O (yang mungkin tidak mengharapkan urutan yang sama) dan sektor disk (di mana sistem lain mungkin membaca data ) itu menjadi penting dan standar eksternal diperlukan. Standar ini biasanya merupakan bagian dari spesifikasi perangkat keras atau spesifikasi format file. Setiap programmer / desain yang bernilai, akan mendesain format kegigihan untuk memperhitungkan hal ini, pemrograman yang buruk atau pemrograman yang mengasumsikan segala sesuatu akan selalu dibaca pada satu arsitektur dapat mengungkapkan kesalahan.

  3. Sebuah OS sangat berurusan dengan register I / O dan sektor disk sehingga # 2 berlaku di sini. Satu area yang sangat penting yang membutuhkan standar umum antara semua CPU adalah implementasi sistem file. Itu sebabnya ada yang terpisah mips dan mipsel membangun Debian dan apa yang tidak.

LawrenceC
sumber
1
"Data yang tidak cocok lebih dari satu byte (0-255) perlu dibaca dan ditulis dalam serangkaian beberapa byte, dan jelas byte itu perlu dibaca dan ditulis dalam urutan yang konsisten. "- Saya tidak berpikir Anda menginginkan lebih dari itu di sana .
EBGreen
Terima kasih! dalam 2, apakah "mendaftar" dalam "Perancang CPU juga harus memilih urutan bahwa byte register dibaca dari dan ditulis ke" sama dengan "I / O register" dalam "urutan tidak penting jika data tidak pernah meninggalkan CPU atau RAM, tetapi ketika Anda masuk ke hal-hal seperti menulis data ke register I / O (yang mungkin tidak mengharapkan urutan yang sama "?
Tim
@Tim, Untuk keperluan diskusi ini saya akan mengatakan ya.
LawrenceC
1
Lihat jawaban @ jkj. Dia menyaring esensi dari apa yang saya coba katakan sedikit lebih jelas.
LawrenceC
1
@ultrasawblade ok saya melihat Anda telah menjawab masalah itu di sini superuser.com/questions/308487/… Anda cukup banyak mengatakan I / O Register ada di perangkat, bukan prosesor. Baik. Tidak ada yang kontroversial di sana.
barlop
3

Endianness adalah urutan dimana prosesor meletakkan bit-bit angka biner. RAM tidak peduli dengan data pesanan apa yang disimpan, juga hard drive (karena mereka tidak mengambil tindakan sendiri terhadap isi datastream, hanya menjalankan arahan dari prosesor / chipset di mana meletakkannya.) Sistem Operasi dapat dibangun untuk bekerja dengan kedua endianness (misalnya Mac OS X.)

Andrew Lambert
sumber
2

Endianness tidak selalu tergantung pada CPU. Misalnya Ethernet dan sebagian besar protokol tingkat rendah TCP / IP adalah endian besar, terlepas dari CPU dan mudah-mudahan, mesin berbasis x86 masih dapat terhubung ke Internet. Demikian pula, OS yang berjalan pada CPU endian besar akan membaca FAT32 yang menggunakan sistem file endian kecil atau menggunakan kartu PCI endian kecil, dan sebagainya.

jlliagre
sumber