Apa itu register CPU?

27

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?

Jeroen
sumber
13
Register CPU adalah organisasi yang melacak CPU Anda untuk Anda. NSA adalah contoh register CPU.
Jimmy Hoffa
3
Cache level-1 CPU sering dibuat dari jenis silikon yang sama dengan register. Ini tidak secepat karena memerlukan pencarian tambahan untuk mengaitkan alamat cache dengan lokasi cache. Tetapi register dan cache adalah tempat yang berbeda pada chip.
Zan Lynx
3
@JimmyHoffa: Saya khawatir komentar Anda akan sangat membingungkan bagi OP, sehingga merugikan pengetahuan ilmu komputer.
rwong
3
@rwong Nah saya mengerti, saya pikir itu cukup lucu. : P
Jeroen
1
Dan perbedaan lainnya adalah ukuran: file register jarang lebih besar dari beberapa ratus kata, sedangkan L1 cache dapat dengan mudah menjadi sesuatu yang sebesar 64k.
SK-logic

Jawaban:

61

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:

x = y + z * 3;

kompiler akan menampilkan kode mesin yang (ketika dibongkar) terlihat seperti ini:

LOAD  R1, ADDRESS_Z //move the value of Z into register 1
MUL   R1, 3         //multiply the value of register 1 by 3
LOAD  R2, ADDRESS_Y //move the value of Y into register 2
ADD   R1, R2        //adds the value in R2 to the value in R1
STORE R1, ADDRESS_X //move the value of register 1 into X

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.)

Mason Wheeler
sumber
26
Dan lebih banyak barang di gudang di seberang kota (disk) dan hal-hal lain yang dapat dia miliki di Fedex (jaringan) :-)
Dan Pichelman
2
Sangat tergantung pada arsitektur sistem yang bersangkutan.
Insinyur Dunia
5
@Binero dalam prosesor x86 16 bit Anda memiliki register bernama Axe, Bx dan sebagainya. Ketika mereka pindah ke prosesor 32 bit mereka Memperpanjang register menjadi 32 bit EAx, EBx, jika Anda mengakses Axe Anda mendapatkan EAx 16 bit yang rendah. Dalam mode 64 bit mereka menamakan register RAx dengan 32 bit yang lebih rendah menjadi EAx dan 16 bit yang lebih rendah masih Ax. lihat diagram ini untuk melihat bagaimana Anda mendapatkan bagian lain dari byte seperti AH untuk mendapatkan byte tinggi dari register 16 bit Axe: en.wikipedia.org/wiki/X86#truktur
stonemetal
2
Dan dalam CPU modern, ini agak rusak, juga, karena register hanyalah pemetaan sementara ke bank inti dari Memori Cepat Sangat, berubah tergantung pada aliran instruksi dan seberapa dekat mengikuti aliran instruksi yang diprediksi.
Vatine
2
@MasonWheeler Pilihan yang bagus untuk Anda.
Vatine
3

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

Mohan PAKALAPATI
sumber
1

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.

mattnz
sumber
Dalam I / O yang dipetakan dengan memori, wilayah "-memori" yang hanya dapat ditulis tidak jarang.
SK-logic
@ SK-logic - Benar - namun konteks pertanyaan bertanya dengan jelas OP menganggap memori sebagai sesuatu yang Anda baca dan tulis. Tidak perlu membingungkannya lagi :)
mattnz
0

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.

Humberto Fioravante Ferro
sumber