CPU kayıtları nedir?


27

Bu soru bir süredir beni rahatsız ediyor ve bugün Google’ın bunu yapacağını düşündüm. Bununla ilgili bazı şeyler okudum ve her zaman işlemci önbelleği olarak bildiğim şeye çok benziyordu .

İkisi arasında bir fark var mı yoksa aynı olduklarını düşündüğümde haklı mıyım? Bir kayıtçanın çalışması için aslında bir CPU içinde olması gerekli midir?

Wikipedia'ya göre, bir kayıt CPU'ya RAM'e geri gönderilmeden önce hızlıca erişilebilen ve değiştirilebilen bir yerdir. Bunu yanlış mı anladım, yoksa önbellek ve kayıt gerçekte aynı mı?


13
CPU kaydı, CPU'nuzu sizin için takip eden bir organizasyondur. NSA bir CPU kaydı örneğidir.
Jimmy Hoffa,

3
CPU seviye-1 önbellek çoğu zaman registerlarla aynı tip silikon malzemeden yapılır. O kadar hızlı değil çünkü önbellek adresleriyle önbellek konumlarını ilişkilendirmek için fazladan arama gerekiyor. Ancak yazmaç ve önbellek yongaların üzerinde kesinlikle farklı yerlerdir.
Zan Lynx 18

3
@JimmyHoffa: Korkarım ki yorumunuz OP, bilgisayar bilimi bilgisinin zararı için çok kafa karıştırıcı olacak.
rwong

3
@ rwong Nah Anladım, oldukça komik olduğunu düşündüm. : P
Jeroen

1
Ve bir başka fark büyüklüktür: bir kayıt dosyası nadiren yüzlerce kelimeden daha büyüktür, L1 önbellek ise kolayca 64k büyüklüğünde olabilir.
SK-mantık

Yanıtlar:


61

Onlar tamamen aynı değil. Kayıtlar, CPU'nun gerçekte üzerinde çalıştığı değerlerin bulunduğu yerlerdir. CPU tasarımı, sadece bir kayıt defterindeyken bir değeri ancak gerçekten değiştirebilmeyi veya başka bir şekilde hareket edebilmeyi sağlayacak şekildedir. Böylece kayıtlar mantıkta çalışabilirken, hafıza (önbellek dahil) yalnızca CPU'nun okuduğu ve yazdığı değerleri tutabilir.

İş yerinde bir marangoz düşünün. Elinde (kayıtları olan) birkaç madde var ve daha sonra, üzerinde çalıştığı tezgahları (önbellekleri) çok yakından takip ediyor, fakat şu anda kullanmıyor, ardından atölyede (ana hafıza) Eldeki proje ancak bu tezgah üzerinde olmak için hemen önemli değil.

EDIT: İşte mantık kayıt nasıl çalıştığını basit bir açıklama.

R1..R4 adında dört kayıt olduğunu düşünelim. Buna benzeyen bir ifade derlerseniz:

x = y + z * 3;

derleyici (demonte edildiğinde) şuna benzeyen makine kodunu verir:

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

Modern işlemcilerin çoğu 32 veya 64 bit genişliğinde kayıtlara sahip olduklarından, tutabilecekleri boyuta kadar herhangi bir değerde matematik yapabilirler. Daha küçük değerler için özel kayıtlara ihtiyaçları yoktur; sadece kaydın sadece bir kısmını kullanmasını söyleyen özel ASM talimatları kullanıyorlar. Ve, sadece iki eli olan marangoz gibi, kayıtçılar bir kerede yalnızca az miktarda veri tutabilirler, ancak tekrar kullanılabilirler, aktif verileri bunlardan içeri ve dışarı aktarabilirler, yani "çok sayıda kayıt yapan" Sonunda ihtiyaç duyuluyor. (Çok fazla kullanılabilirliğin olması derleyicilerin daha hızlı kod üretmesini sağlar, ancak kesinlikle gerekli değildir.)


26
Şehirde depoda (disk) ve Fedex'te (ağda) sahip olabileceği diğer şeylerde daha fazla şey :-)
Dan Pichelman

2
Söz konusu sistem mimarisine çok bağlı.
Dünya Mühendisi

5
@Binero, 16 bit x86 işlemcideki Ax, Bx ve benzeri adında kayıtlara sahiptir. 32 bit işlemciye geçtikleri zaman, kayıtları 32 bit EAx, EBx'e uzattılar. 64 bit modunda, düşük 32 bit EAx ve düşük 16 bit hala Ax olan, RAx registerlarını adlandırdılar. 16 bit Ax yazmacının yüksek baytını almak için AH gibi baytların diğer bölümlerine nasıl
ulaştığınızı

2
Ve modern işlemcilerde, bu kayıtlar aynı zamanda, yazma işlemine bağlı olarak değişen ve gerçekten öngörülen talimat akışını ne kadar yakından takip ettiğine bağlı olarak değişen, Gerçekten Hızlı Hafızanın temel bir bankasına geçici olarak eşlenen kayıtlar nedeniyle de bozuluyor.
Vatine

2
@MasonWheeler Sizin açınızdan iyi bir seçim.
Vatine

3

Aslında CPU terminolojisinde bir Kayıt küçüktür. Adlandırılmış bellek parçası Bir mikroişlemcinin (CPU) içinde mevcut olan Kayıtlar, belirli adlara, boyutlara ve işlevlere sahiptir; örneğin, 8085 mikroişlemci 8 bitlik bir işlemciye sahipse -bit Kayıtlar (A: Akümülatör, B, C, D, E, H ve L Kayıtlar ve bir bayrak kaydı tümü 8 bit'tir). İki adet 16 bitlik PC ve SP kaydında özel fonksiyonlar vardır ve montaj programlaması sırasında fonksiyonlar resme gelir. Birkaç kayıt kontrolü programcının ötesindedir.

Başka bir işlemci alırsanız, Kayıtlar değişebilir, diyelim ki 8086, 16 bit işlemci ve AX, BX, CX ve DX, hepsi 16 bit, PC, SP ve Bayrak kayıtlarına sahiptir.

Soruda da belirtildiği gibi, programın yürütülmesini hızlandırıyorlar ve işlemci önbelleği gibi davranıyorlar, ancak şimdi bir gün işlemci mimarisi değişti ve (Intel) çok fazla bellek çağıran işlemci önbelleği eklediler

ancak işlemci (CPU) önbelleği ve İşlemci (CPU) arasında çok az fark var. Kayıtlar, bellek imleci, program durumu vb. gibi bazı özel aktiviteler için gerçekte ihtiyaç duyulan kayıtlar. SP: Yığın bellekte bir bellek işaretçisi görevi gören yığın işaretçisi. ve Akümülatör, Aritmetik İşlemler için ALU’ya erişmek üzere arabellek ve ana kayıttır

Örnekler için Mason Wheeler açıklamasını görebilirsiniz.


1

Bence Yazmacıların hafıza olmadığını ve böyle düşünülmemesi gerektiğini düşünmeye yardımcı olur.

OO gibi düşünün - Register, Memory'den türetilmemiş bir sınıftır ve Memory, register'dan türetilmeyen bir sınıftır, ancak Register sınıfının verilerini Belleğe ve Belleğe dönüştürmek için yöntemleri vardır (Machine Op Codes). Öte yandan, Bellek, Kayıtlar hakkında hiçbir şey bilmez ve bunlar hakkında eylemler isteyemez. Sonuç olarak, tüm CPU işlemleri çoğu zaman belleğe erişen kayıtlar tarafından gerçekleştirilir.

Sadece yazma kayıtlarının görülmesi nadir değildir - neredeyse bir bellek özelliği değildir. Ayrıca bir kayıt defteri değerinin üzerine yazmadan değişmesi de mümkündür - yine hafızadan beklediğiniz davranış değil.


Bellek eşlemeli I / O’da, sadece “hafıza” nın yazma bölgeleri nadir değildir.
SK-mantığı

@ SK-mantık - Doğru - ancak sorunun içeriği OP açıkça belleğin okuduğunuz ve yazdığınız bir şey olduğunu düşünüyor. Onu daha fazla karıştırmana gerek yok :)
mattnz

0

@Mason Wheeler tarafından verilen cevap doğruydu, ancak sorunuzu başka bir bakış açısıyla ele almanın mümkün olduğunu düşünüyorum. Sorunuza göre, bana bir önbellek ve bir kayıt arasındaki farkı mükemmel bir şekilde anlamak için gereken kavram veri yoludur . Mason'un doğru bir şekilde belirttiği gibi, CPU'nun mantığı (yani veri yolu), bellek bilgilerinin doğrudan CPU tarafından ele alınamayacağı şekilde tasarlanmıştır ve bu nedenle kayıtlar mevcuttur. Aslında CPU, eğer o komut ilk olarak doğru kayıt defterine yüklenmediyse, çalıştığı programın mevcut komutunu bile çözemez (genellikle IR, "Talimat Kaydı" olarak adlandırılır).

Bu CPU'nun çalışma şekli ile ilgilidir. Bellek ve ALU arasında fiziksel bir yol yoktur; ALU’ya verilen tüm veriler bir şekilde bir kayıt defterinde tamponlanmalıdır. Farklı olabilir, ancak belleği doğrudan ALU'ya bağlamak için gereken devre çok karmaşık olabilir: yukarıda belirtilen veri yolu ile belirlenen şekilde kayıt dosyası yoluyla bellek ve ALU arasındaki tüm iletişimi sağlamak daha kolay ve daha verimlidir . Aslında, verilen bir talimat bir işlenen olarak bir hafıza pozisyonu belirlese bile ( doğrudan adresleme olarak bilinen bir adresleme modu ), karşılık gelen veri birimi MBR (bazen MDR olarak adlandırılan Hafıza Tampon Kaydı, Hafıza Veri Tamponu) olarak bilinen bir register içine yüklenir. ).

CPU açısından, bilgilerin (veri veya kod) ana bellekten mi yoksa önbellekten mi geldiğinin bir önemi yoktur, ancak ikincisi çok daha hızlıdır. Önbellekler performans nedenleriyle, kayıtlar CPU'nun tasarımı nedeniyle (yani veri yolu nedeniyle) mevcuttur. Akıllı programcılar (aslında akıllı derleyiciler) bellek erişimini en aza indirmek için yazmaç kullanımını en üst düzeye çıkarmaya çalışırlar (kayıtlar önbellek ya da bellekten daha hızlıdır). Bu haklıdır, çünkü kayıtlarda depolanan bilgiler birçok kez kullanılmaya meyillidir ve aslında bu RISC felsefesinin ilkelerinden biridir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.