Kami menyebut arsitektur komputer kami sebagai byte-addressable
- artinya, memori dialamatkan sebagai byte. Itu membantu kita menarik 8-bit data sekaligus. Tapi, itu tidak selalu norma, dan lebar lainnya digunakan.
Bahkan ketika Anda menggunakan komputer byte-address berbasis Intel, memori yang Anda gunakan biasanya diakses dengan lebar yang berbeda (64 bit seperti pada contoh Anda).
Ini membantu dalam menangani jumlah data yang lebih besar dengan ruang alamat yang lebih sedikit.
Jawaban saya benar-benar selesai di sini, bagaimanapun, saya mengoceh lebih lanjut untuk berbicara tentang bagaimana akses memori dilakukan yang dapat membantu berpikir tentang abstraksi yang diterapkan (dan mungkin juga memotivasi Anda untuk membaca lebih banyak tentang kenangan).
Jika Anda telah melihat stik DDR-RAM, Anda akan ingat melihat beberapa chip pada PCB hijau. Ini bergaris bersama untuk akses paralel. Itu membuat RAM Anda diakses lebih cepat.
Di depan modul RAM adalah Memory Controller. Ini dirancang untuk mengakses data dalam lebar bit yang lebih luas (32, 64, 128 bit - tergantung pada desain).
Saat Anda mengakses byte dari ruang memori ini, pengontrol memori sebenarnya mendapatkan "kata memori" lengkap; di sini, sebuah kata sebenarnya adalah lebar dari akses ini dari pengontrol memori.
Yang berarti jika lebarnya 128 bit, Anda selalu mengambil 16 byte dari alamat yang merupakan kelipatan dari 16.
Jadi, sekarang apa yang terjadi ketika Anda menginginkan byte di alamat 18 (= 16 + 2)?
Nah, Anda mendapatkan 16 byte dari alamat 16 dan membuang 15 byte!
Lebih menarik, apa yang terjadi ketika Anda ingin menulis byte di alamat 19?
Anda mengambil 16 byte dari alamat 16, mengubah byte ke-3 (alamat 19), dan kemudian menulis kembali semua 16 byte ini (menyenangkan ya?).
Semua ini merupakan upaya. Pengontrol memori dirancang untuk mengelola ini dan ternyata berfungsi pada beberapa permintaan secara paralel.
Kami bahkan belum membicarakan 'dual-channel' :-)
Berikut ini adalah referensi dari Wikipedia tentang organisasi DDR SDRAM
PC3200 adalah DDR SDRAM yang dirancang untuk beroperasi pada 200 MHz menggunakan chip DDR-400
dengan bandwidth 3.200 MB / s. Karena memori dipompa ganda,
ini berarti bahwa laju clock efektif memori PC3200 adalah 400 MHz.
1 GB PC3200 modul non-ECC biasanya dibuat dengan enam belas 512 Mbit chip,
8 di setiap sisi (512 Mbits × 16 chip) / (8 bit (per byte)) = 1.024 MB.
Chip individual yang membentuk modul memori 1 GB biasanya
diatur dengan 64 Mbits dan lebar data 8 bit untuk setiap chip,
umumnya dinyatakan sebagai 64M × 8.
Memori yang diproduksi dengan cara ini adalah RAM dengan kerapatan rendah dan biasanya akan
kompatibel dengan motherboard yang menetapkan memori PC3200 DDR-400.
Dari Memory Controller halaman
Lebar bus adalah jumlah garis paralel yang tersedia untuk berkomunikasi dengan sel memori.
Lebar bus pengontrol memori berkisar dari 8-bit pada sistem sebelumnya, hingga 512-bit pada sistem dan kartu video yang lebih rumit (biasanya diimplementasikan sebagai empat pengontrol memori simultan 64-bit yang beroperasi secara paralel, meskipun beberapa dirancang untuk beroperasi dalam "mode gang" "Di mana dua pengontrol memori 64-bit dapat digunakan untuk mengakses perangkat memori 128-bit).
Lebih cepat untuk mentransfer sejumlah besar data 8 byte sekaligus daripada 1. Selain itu, tidak ada cara untuk benar-benar mengatasi byte tunggal di luar cache CPU karena beberapa bit alamat terakhir tidak memiliki koneksi fisik lagi (karena mereka tidak dibutuhkan).
sumber
Saya berbicara tanpa keahlian luar biasa tapi secara kasar ...
Prosesor mengambil satu kata setiap kali (yaitu prosesor 64 bit mengambil 8 byte sekaligus). Namun ketika mengambil satu byte mereka secara efektif membuang 7 byte lainnya. Skema pengalamatan memori biasanya masih dianggap sebagai byte, tetapi jika Anda menarik data secepat mungkin Anda menggunakan alamat yang disejajarkan, yaitu alamat yang dapat dibagi dengan panjang kata dalam byte. Dalam sistem 64 bit Anda akan menggunakan alamat 0, 8, 16, 24, dll.
Jika Anda menarik kata dari alamat yang tidak selaras dengan kata, katakan 5, prosesor harus melakukan dua pengambilan, satu untuk byte 5, 6, 7 dan yang kedua 8, 9, 10, 11, 12, sehingga akan membutuhkan dua kali lebih panjang.
Mengatasi byte secara individual berguna untuk semua alasan, tetapi orang dapat dengan mudah membayangkan desain prosesor yang membahas pengalamatan kata. Jika Anda menginginkan byte, Anda akan mendapatkan sebuah kata, kosongkan byte yang tidak Anda inginkan, dan kocok byte tersebut ke bagian bawah kata tersebut. Dengan cara itulah yang terjadi, mendapatkan byte berarti mendapatkan kata, dan kemudian memilih byte darinya, hanya lebih mudah untuk menganggapnya sebagai byte pada alamat 10 daripada kata 1, byte 3.
Di luar CPU, RAM tidak pernah dapat melihat bit alamat yang lebih rendah, RAM diatur sebagai kata-kata, itu model CPU / Programmer yang memberikan ilusi pengalamatan byte.
sumber
Dalam contoh Anda, menulis satu byte, dari sudut pandang kata memori, kata tersebut telah berubah. Anda dan saya sama-sama tahu bahwa hanya beberapa bit saja yang berbeda, tetapi terlepas dari itu, memori sekarang perlu di-refresh. Jadi kata itu akan ditulis kembali ke memori - semua 64 bit. Ini akan menjadi kenyataan, tidak peduli berapa ukuran memori minimum yang dapat dialamatkan. Ketika memori selebar 8-bit, semua 8 bit akan ditulis walaupun mungkin hanya 1 bit yang berubah.
sumber
Dari apa yang saya ingat dari masa Assembler dan pekerjaan perangkat keras tingkat rendah, memori sebenarnya diakses di halaman. Anda tidak pernah benar-benar mengakses satu byte, atau bahkan bus-lebar RAM, tetapi dalam blok (saya tidak bisa memberikan angka yang pasti - terutama karena bervariasi - tetapi angka 4KB terdengar sangat akrab [mungkin saya memikirkan segmen, meskipun itu 64KB]).
Intinya adalah bahwa itu sangat tidak efisien untuk mengatasi satu byte, terutama karena alamat memori berikutnya yang akan diakses kemungkinan berada tepat di sebelahnya. Dengan demikian, ketika Anda mengakses byte, sistem melakukan cache satu blok RAM (menurut Anda untuk apa berbagai cache CPU?) Setiap perubahan yang Anda lakukan dilakukan pada RAM yang di-cache, sehingga jika Anda menulis kembali, itu bisa tulis blok bagus dan cepat. Byte diakses sendiri, tetapi dari blok cache; artinya, CPU tidak mengambil satu byte, tetapi hanya mengembalikan satu byte.
Dengan sistem saat ini yang jauh lebih besar, saya membayangkan bahwa mereka perlu melakukan cache lebih banyak lagi untuk mengoptimalkan hal-hal (karenanya cache CPU lebih besar).
sumber
block
dalam konteks ukuran 4KB dan 64KB dalam jawaban Anda. Cache-lines dan cache-memory berada pada level yang berbeda dari hirarki perangkat keras. (rujuk en.wikipedia.org/wiki/CPU_cache terhadap tautan dalam jawaban saya)