Pertanyaan ini telah mengganggu saya untuk beberapa waktu sekarang dan hari ini saya pikir saya akan Google itu. Saya telah membaca beberapa hal tentang itu dan sepertinya sangat mirip dengan apa yang saya kenal sebagai cache prosesor .
Apakah ada perbedaan antara keduanya atau apakah saya benar ketika saya pikir mereka sama? Apakah register benar-benar harus ada di dalam CPU agar bisa berfungsi?
Menurut Wikipedia register adalah tempat di CPU di mana memori dapat dengan cepat diakses dan dimodifikasi sebelum dikirim kembali ke RAM. Apakah saya mengerti ini salah atau apakah cache dan register sebenarnya sama?
terminology
memory
cpu
register
Jeroen
sumber
sumber
Jawaban:
Mereka tidak persis sama. Register adalah tempat di mana nilai CPU sebenarnya bekerja berada. Desain CPU sedemikian rupa sehingga hanya dapat benar-benar memodifikasi atau bertindak berdasarkan suatu nilai ketika berada dalam register. Jadi register dapat bekerja dengan logika, sedangkan memori (termasuk cache) hanya dapat menyimpan nilai yang dibaca dan ditulis CPU.
Bayangkan tukang kayu sedang bekerja. Dia memiliki beberapa item di tangannya (register) dan kemudian, sangat dekat dengan meja kerjanya (cache) hal-hal yang sering dia kerjakan, tetapi tidak menggunakan saat ini, dan kemudian di bengkel (memori utama) hal-hal yang berkaitan dengan proyek sudah dekat tetapi itu tidak segera cukup penting untuk berada di meja kerja.
EDIT: Berikut ini penjelasan sederhana tentang cara kerja logika register.
Bayangkan kita memiliki empat register bernama R1..R4. Jika Anda menyusun pernyataan yang terlihat seperti ini:
kompiler akan menampilkan kode mesin yang (ketika dibongkar) terlihat seperti ini:
Karena kebanyakan CPU modern memiliki register yang lebar 32 atau 64 bit, mereka dapat melakukan perhitungan matematika pada nilai berapa pun hingga ukuran yang dapat mereka pegang. Mereka tidak membutuhkan register khusus untuk nilai yang lebih kecil; mereka hanya menggunakan instruksi ASM khusus yang memberitahukannya untuk hanya menggunakan sebagian dari register. Dan, seperti halnya tukang kayu dengan hanya dua tangan, register hanya dapat menampung sejumlah kecil data sekaligus, tetapi mereka dapat digunakan kembali, dengan mengirimkan data aktif masuk dan keluar dari mereka, yang berarti bahwa "banyak register" tidak akhirnya dibutuhkan. (Memiliki banyak tersedia memang memungkinkan kompiler untuk menghasilkan kode lebih cepat, tentu saja, tetapi itu tidak sepenuhnya diperlukan.)
sumber
Sebenarnya A register in terminology CPU adalah small Named chunk of memory. Tersedia di dalam mikroprosesor (CPU), Register memiliki nama spesifik, ukuran dan fungsi bervariasi dari satu prosesor ke prosesor, misalnya, jika mengambil 8085 mikroprosesor adalah prosesor 8-bit yang memiliki 8 -bit Registers (A: Akumulator, B, C, D, E, H, dan L Register dan satu flag register semuanya 8-bit). Dua register 16-bit, PC dan SP, semuanya memiliki fungsi khusus dan fungsi muncul dalam gambar selama pemrograman perakitan. Beberapa kontrol register berada di luar programmer.
Jika Anda menggunakan prosesor lain, register akan bervariasi, misalkan 8086 adalah prosesor 16-bit dan memiliki AX, BX, CX, dan DX semuanya merupakan register 16-bit, PC, SP dan Bendera.
seperti yang Anda kutip dalam pertanyaan mereka untuk mempercepat pelaksanaan program dan bertindak sebagai cache prosesor tetapi sekarang arsitektur prosesor berubah dan mereka (Intel) menambahkan banyak memori memanggil cache prosesor
tetapi ada sedikit perbedaan antara cache prosesor (CPU) dan Prosesor (CPU), register sebenarnya diperlukan untuk beberapa kegiatan khusus seperti penunjuk memori, status program, dll. Mis: PC: Penghitung Program yang bertindak sebagai penunjuk memori dalam memori program, SP: Stack pointer yang bertindak sebagai penunjuk memori di memori tumpukan. dan Accumulator adalah buffer dan register utama untuk mengakses ALU untuk Ops Aritmatika ...
Anda bisa melihat penjelasan Mason Wheeler untuk exaples
sumber
Saya pikir itu membantu untuk berpikir bahwa Register bukan memori dan tidak boleh dianggap seperti itu.
Berpikirlah lebih seperti OO - Register adalah kelas, bukan berasal dari Memori dan Memori adalah kelas yang tidak berasal dari register, tetapi kelas Register memiliki metode (Kode Op Mesin) untuk mengonversi datanya ke dan dari Memori. Memori di sisi lain tidak tahu apa-apa tentang Register dan tidak bisa meminta tindakan pada mereka. Akibatnya, semua operasi CPU dilakukan oleh register, yang sering mengakses memori.
Tidak jarang melihat register tulis saja - bukan atribut memori. Ini juga memungkinkan untuk mengubah nilai register tanpa menulis ke sana - lagi, bukan perilaku yang Anda harapkan dari memori.
sumber
Jawaban yang diberikan oleh @Mason Wheeler akurat, tapi saya pikir mungkin untuk meletakkan pertanyaan Anda di bawah perspektif lain. Menilai pertanyaan Anda, menurut saya konsep yang Anda butuhkan untuk memahami perbedaan antara cache dan register adalah jalur data . Seperti yang ditunjukkan Mason dengan tepat, logika CPU (yaitu jalur datanya) dirancang sedemikian rupa sehingga informasi memori tidak dapat ditangani secara langsung oleh CPU dan itulah sebabnya register itu ada. Bahkan, CPU bahkan tidak mampu mendekode instruksi saat ini dari program yang sedang berjalan jika instruksi itu tidak dimuat dalam register yang tepat terlebih dahulu (biasanya yang bernama IR, "Instruction Register").
Ini terkait dengan cara kabel CPU. Tidak ada jalur fisik antara memori dan ALU; semua data yang dipasok ke ALU harus di-buffer entah bagaimana dalam beberapa register. Ini bisa saja berbeda, tetapi sirkuit yang diperlukan untuk menghubungkan memori ke ALU secara langsung akan terlalu rumit: lebih mudah dan lebih efisien untuk memediasi semua komunikasi antara memori dan ALU melalui file register , sebagaimana ditentukan oleh jalur data yang disebutkan di atas. . Bahkan, bahkan ketika instruksi yang diberikan menentukan posisi memori sebagai operan (mode pengalamatan yang dikenal sebagai pengalamatan langsung ), unit data terkait dimuat ke dalam register yang dikenal sebagai MBR (Memory Buffer Register, kadang-kadang disebut MDR, Memory Data Buffer) ).
Perhatikan bahwa dari sudut pandang CPU, tidak masalah jika informasi (data atau kode) berasal dari memori utama atau cache, tetapi yang terakhir jauh lebih cepat. Cache ada karena alasan kinerja, register ada karena desain CPU (yaitu, karena jalur data). Programmer pintar (kompiler pintar, sebenarnya) mencoba memaksimalkan penggunaan register untuk meminimalkan akses memori (register lebih cepat daripada cache atau memori). Ini dapat dibenarkan karena informasi yang disimpan dalam register cenderung digunakan beberapa kali dan, pada kenyataannya, ini adalah salah satu prinsip dari filosofi RISC.
sumber