32 bit işlemci ve 1 gb ram ile kaç tane bellek adresi alabiliriz?


12

32 bit işlemci ve 1 gb ram ile kaç bellek adresi ve 64 bit işlemci ile kaç bellek adresi alabiliriz?

Bunun böyle bir şey olduğunu düşünüyorum:

1 GB RAM 32 bit veya 4 bölünür? bellek adreslerinin sayısını almak için?

Ama emin değilim. Bu yüzden soruyorum.

Wikipedia'da 1 bellek adresinin 32 bit genişliğinde veya 4 sekizli (1 sekizli = 8 bit) olduğu kırmızıyken, 1 bit adresin veya 1 tamsayının 64 bit genişliğinde veya 8 sekizli olduğu 64 bit işlemciye kıyasla. Ama doğru anladım da bilmiyorum.


Hemen hemen tüm modern sistemler bayt-adreslidir, yani 32 bit yaklaşık 4 gigabayt (bu kadar RAM takılmışsa) adresleyebilir. Tarihsel olarak, "adres" 12, 15, 16, 17, 24, 32, 36 veya 48 bit ve muhtemelen bazılarının yanı sıra 4 veya 6 bit değerinde ondalık makineler olan kelime adresli şemalar olmuştur. birimi. Ancak, çoğu modern sistemin sanal bellek kullandığını, yani işlemcinin takılı olandan daha fazla belleği ele alabileceğini unutmayın.
Daniel R Hicks

@DanielRHicks Sanal bellek ne kadar RAM adreslenebileceğini etkilemez.
Jamie Hanrahan

@JamieHanrahan - Sanal belleğin çalışması için, sanal adres aralığını kapsayan (tek bir işlemin) bir adresleme mekanizması olmalıdır. Bu yazılım simülasyonu ile yapılabilir, ancak bu oldukça verimsizdir, bu nedenle çoğu sistemde işlemcinin adresleme aralığı, bir işlemin maksimum adres alanını içerecek kadar büyük hale getirilir.
Daniel R Hicks

@DanielRHicks Elbette, ancak bu ne kadar RAM'in ele alınabileceğini etkilemez . RAM sanal değil fiziksel bellektir. Sanal adresler RAM adresleri değildir ve sanal bellek RAM değildir.
Jamie Hanrahan

@JamieHanrahan - Bir anlam ifade etmiyorsun. Sanal adres alanındaki RAM sayfalarına hitap edemezseniz, RAM işe yaramaz. (Sanal belleğin nasıl çalıştığını çok iyi biliyorum, 1972'den beri sanal bellek tasarımları üzerinde çalıştı.)
Daniel R Hicks

Yanıtlar:


38

Kısa cevap: Kullanılabilir adreslerin sayısı bunlardan daha azına eşittir:

  • Bayt cinsinden bellek boyutu
  • CPU'nun makine kelimesinde kaydedilebilen en büyük işaretsiz tam sayı

Uzun cevap ve yukarıdakilerin açıklaması:

Bellek baytlardan (B) oluşur. Her bayt 8 bit (b) 'den oluşur.

1 B = 8 b

1 GB RAM aslında 1 GiB'dir (gibabayt değil, gibibit). Fark şu:

1 GB  = 10^9 B = 1 000 000 000 B
1 GiB = 2^30 B = 1 073 741 824 B

CPU makine kelimesi ne kadar büyük olursa olsun, her bellek baytının kendi adresi vardır. Örneğin. Intel 8086 CPU 16-bit idi ve belleği baytlara hitap ediyordu, modern 32-bit ve 64-bit CPU'lar da. Birinci sınırın nedeni budur - bellek baytlarından daha fazla adresiniz olamaz.

Bellek adresi, CPU'nun aradığı belleğe ulaşmak için belleğin başından atlaması gereken sadece bayt sayısıdır.

  • İlk bayta erişmek için 0 bayt atlaması gerekir, bu nedenle ilk baytın adresi 0'dır.
  • İkinci bayta erişmek için 1 bayt atlaması gerekir, böylece adresi 1 olur.
  • (vb.)
  • Son bayta erişmek için CPU 1073741823 baytı atlar, böylece adresi 1073741823 olur.

Şimdi 32-bit'in ne anlama geldiğini bilmek zorundasınız. Daha önce de belirttiğim gibi, bir makine kelimesinin boyutu.

Makine kelimesi CPU'nun sayıları tutmak için kullandığı bellek miktarıdır (RAM, önbellek veya dahili kayıtlarda). 32 bit CPU, sayıları tutmak için 32 bit (4 bayt) kullanır. Bellek adresleri de sayıdır, bu nedenle 32 bit CPU'da bellek adresi 32 bittir.

Şimdi şunu düşünün: Bir bitiniz varsa, üzerine iki değer kaydedebilirsiniz: 0 veya 1. Bir bit daha ekleyin ve dört değeriniz var: 0, 1, 2, 3. Üç bitte sekiz değer kaydedebilirsiniz : 0, 1, 2 ... 6, 7. Bu aslında bir ikili sistemdir ve şöyle çalisir:

Decimal Binary
0       0000
1       0001
2       0010
3       0011
4       0100
5       0101
6       0110
7       0111
8       1000
9       1001
10      1010
11      1011
12      1100
13      1101
14      1110
15      1111

Tam olarak her zamanki toplama gibi çalışır, ancak maksimum rakam 9 değil 9'dur. Ondalık 0 0000, daha sonra 1 ekler ve alırsınız 0001, bir kez daha eklersiniz 0010. Burada olan, ondalık sayıya sahip olmak 09ve bir tane eklemek gibidir: 9'dan 0'a değiştirir ve sonraki basamağı artırırsınız.

Yukarıdaki örnekte, her zaman sabit sayıda bit içeren bir sayıda tutabileceğiniz maksimum bir değer olduğunu görebilirsiniz - çünkü tüm bitler 1 olduğunda ve değeri 1 artırmaya çalıştığınızda, tüm bitler 0 olur ve böylece numara. Buna tamsayı taşması denir ve hem kullanıcılar hem de geliştiriciler için birçok hoş olmayan soruna neden olur.

   11111111    = 255
+         1
-----------
  100000000    = 0   (9 bits here, so 1 is trimmed)
  • 1 bit için en büyük değer 1'dir,
  • 2 bit - 3,
  • 3 bit - 7,
  • 4 bit - 15

Mümkün olan en büyük sayı her zaman 2 ^ N-1'dir, burada N bit sayısıdır. Daha önce söylediğim gibi, bir bellek adresi bir sayıdır ve aynı zamanda bir maksimum değere sahiptir. Bu yüzden makine kelimesinin boyutu da kullanılabilir bellek adreslerinin sayısı için bir sınırdır - bazen CPU'nuz daha fazla belleği ele alacak kadar büyük sayıları işleyemez.

32 bitte 0 ila 2 ^ 32-1 arasındaki sayıları tutabilirsiniz ve bu 4 294 967 295'dir. 1 GB RAM'deki en büyük adresten daha fazladır, bu nedenle özel durum miktarınızda RAM sınırlayıcı faktör olacaktır.

32 bit CPU için RAM sınırı teorik olarak 4 GB'dir (2 ^ 32) ve 64 bit CPU için 16 EB'dir (exabytes, 1 EB = 2 ^ 30 GB). Başka bir deyişle, 64-bit CPU tüm İnternet'e 200 kere hitap edebilir;) ( WolframAlpha tarafından tahmin edilmektedir ).

Ancak, gerçek hayattaki işletim sistemlerinde 32 bit CPU'lar yaklaşık 3 GiB RAM'e hitap edebilir. Bunun nedeni işletim sisteminin iç mimarisi - bazı adresler başka amaçlar için ayrılmıştır. Wikipedia'da bu sözde 3 GB engel hakkında daha fazla bilgi edinebilirsiniz . Bu sınırı Fiziksel Adres Uzantısı ile kaldırabilirsiniz .


Bellek adreslemesinden bahsetmem gereken birkaç şey var: sanal bellek , segmentasyon ve sayfalama .

Sanal bellek

@Daniel R Hicks'in başka bir cevapta belirttiği gibi, işletim sistemleri sanal bellek kullanıyor. Bunun anlamı, uygulamaların gerçek bellek adresleri üzerinde çalışmadığı, ancak OS tarafından sağlanan adresler üzerinde çalıştığıdır.

Bu teknik, işletim sisteminin bazı verileri RAM'den Pagefile (Windows) veya Swap (* NIX) olarak adlandırmasına izin verir. HDD, RAM'den daha az büyüklüktedir, ancak nadiren erişilen veriler için ciddi bir sorun değildir ve işletim sisteminin uygulamalara gerçekte kurduğunuzdan daha fazla RAM sağlamasına izin verir.

Çağrı

Şimdiye kadar bahsettiğimiz konuya düz adresleme şeması deniyor.

Sayfalama, düz modeldeki bir makine sözcüğü ile normalde yapabileceğiniz daha fazla belleği ele alan alternatif bir adresleme şemasıdır.

4 harfli kelimelerle dolu bir kitap düşünün. Her sayfada 1024 sayı olduğunu varsayalım. Bir numaraya hitap etmek için iki şey bilmeniz gerekir:

  • Sözcüğün yazdırıldığı sayfa sayısı.
  • Bu sayfadaki hangi kelime aradığınız kelime.

İşte şimdi modern x86 işlemcilerin belleği nasıl işlediği. 4 KiB sayfasına (her biri 1024 makine kelimesi) ayrılmıştır ve bu sayfaların sayıları vardır. (aslında sayfaları da 4 MiB büyük ya 2 MiB olabilir PAE ). Bellek hücresini adreslemek istediğinizde, o sayfadaki sayfa numarasına ve adrese ihtiyacınız vardır. Her bellek hücresine tam olarak bir çift sayı tarafından başvurulduğunu unutmayın; bu bölümleme için geçerli olmayacaktır.

segmantasyon

Bu, sayfalamaya oldukça benziyor. Intel 8086'da sadece bir örnek vermek için kullanıldı. Adres gruplarına artık sayfalar değil, bellek segmentleri deniyor. Fark, segmentlerin üst üste gelebilmesidir ve çok fazla örtüşmektedirler. Örneğin, 8086'da 4096 farklı segmentten çoğu bellek hücresi mevcuttu.


Bir örnek:

Diyelim ki 8 bayt belleğimiz var, 4. bayt hariç tümü 256 tane olan sıfırlar var.

Düz bellek modeli için örnek:

 _____
|  0  |
|  0  |
|  0  |
| 255 |
|  0  |
|  0  |
|  0  |
|  0  |
 -----

4 bayt sayfalar içeren disk belleği için örnek :

 PAGE0
 _____
|  0  |
|  0  |
|  0  |  PAGE1
| 255 |  _____
 -----  |  0  |
        |  0  |
        |  0  |
        |  0  |
         -----

1 baytlık kaydırılmış 4 baytlık segmentlere sahip bölümlenmiş bellek için örnek :

 SEG 0
 _____   SEG 1
|  0  |  _____   SEG 2
|  0  | |  0  |  _____   SEG 3
|  0  | |  0  | |  0  |  _____   SEG 4
| 255 | | 255 | | 255 | | 255 |  _____   SEG 5
 -----  |  0  | |  0  | |  0  | |  0  |  _____   SEG 6
         -----  |  0  | |  0  | |  0  | |  0  |  _____   SEG 7
                 -----  |  0  | |  0  | |  0  | |  0  |  _____
                         -----  |  0  | |  0  | |  0  | |  0  |
                                 -----   -----   -----   -----

Gördüğünüz gibi 4. bayt dört şekilde adreslenebilir: (0'dan adresleme)

  • Segment 0, ofset 3
  • Segment 1, ofset 2
  • Segment 2, ofset 1
  • Segment 3, ofset 0

Her zaman aynı bellek hücresidir.

Gerçek hayattaki uygulamalarda segmentler 1 bayttan fazla kaydırılır (8086 için 16 bayt).

Segmentasyon ile ilgili kötü olan şey karmaşık olmasıdır (ancak bence bunu zaten biliyorsunuz;) İyi olan, modüler programlar oluşturmak için bazı akıllı teknikler kullanabilmenizdir.

Örneğin, bir parçayı bir parçaya yükleyebilir, sonra parçanın gerçekte olduğundan daha küçük olduğunu (modülü tutacak kadar küçük), ardından sözde daha küçük olanla örtüşmeyen ilk parçayı seçip sonraki modülü yükleyebilirsiniz , ve bunun gibi. Temel olarak bu şekilde aldığınız şey, değişken boyutlu sayfalardır.


1
Bir işletim sistemi kullanıcı işlemine tam 4GiB sanal adres alanı (muhtemelen eksi bir sayfa - x86 için 4KiB) verebilir, ancak adres alanının değiştirilmesi gerektiğinden sistem çağrılarını daha pahalı hale getirir. PAE ve benzer mekanizmalarla, adresler hala 32 bit ile sınırlı olmasına rağmen, sistem tarafından adreslenebilen fiziksel bellek miktarı artırılabilir.
Paul A. Clayton

Aradığım şey bu değildi, ama yine de iyi bir bilgi! Maks. Değerin iyi açıklaması için teşekkür ederiz. ikili ve ondalık tablo karşılaştırması için basamak (1 = ikili 9'daki gibi maks.). Bunu düşünmenin iyi bir yolu. Yeni bir şey öğrendim. :) Teşekkürler!
johan smohan

Bu Gibi ve Giga çok kafa karıştırıcı ... Çünkü bazı sitelerde hafızanın Gibi'de ve diğerlerinde Giga'da ölçüldüğünü okudum ... İyi / güvenilir bir kaynağınız var mı?
johan smohan

Vikipedi'nin ikili önekler hakkında, tarihi bir geçmişi de dahil olmak üzere bir makalesi vardır . Donanımla ilgili çoğu sayı ondalık önek kullanır, en önemli istisnalar muhtemelen RAM ve belki renk skalasıdır - ör. 16M renkli LCD'lerde üç adet 8 bit renk kanalı bulunur (2 ^ 24). Sorunuzu doğrudan cevaplama: Bu durumda kullanılabilir adres sayısı bellek bayt sayısına eşittir, çünkü RAM bayt başına esasına göre adreslenir. 32 bit CPU, 2 ^ 32 B, 64 bit bir - 2 ^ 64'e kadar işleyebilir.
gronostaj

Teşekkürler! Okul sınavları için buna ihtiyacım var. :) Sanırım şimdi en çok şeyi anlıyorum. Beni hala rahatsız eden tek şey neden 2 ^ 32 B, 32 bit işlemci ve 32 bayt değilse?
johan smohan

3

Yukarıdakilere ek olarak, birden fazla adres alanı ile birlikte sanal adreslemenin kullanıldığını unutmayın . Bu nedenle, yalnızca 1GB RAM'iniz olsa bile, bir program kavramsal olarak 4GB'a kadar sanal bellek kullanabilir (ancak çoğu işletim sistemi bunu bundan daha azıyla sınırlar). Ve kavramsal olarak (neredeyse) sonsuz sayıda 4GB adres alanına sahip olabilirsiniz.

RAM boyutu, bir programın maksimum boyutunu veya çalıştırabileceğiniz program sayısını kısıtlamaz (çok). Gerçek bellek "aşırı kararlı" hale geldiğinde ve sistem RAM ile disk arasındaki performansın "sayfalarını" "değiştirdiğinden" çökmeye başlar.


2

1 GB RAM, 1024 * 1024 * 1024 bayt veya 1.073.741.824 bayt kaplar.

32 bit işlemcide her zaman 4 * 1024 * 1024 * 1024 bayt veya 4.294.967.296 bayt adres alanı bulunur Bu alanda 1Gbyte RAM görünür. Intel işlemcilerde kesinti vektörleri için adres 0'da bazı RAM'lerin görünmesi gerekir, bu nedenle fiziksel RAM 0 adresinden başlar ve artar.

Bu adres alanında BIOS ve seçenek ROM'lar (ilk 1Mbayt içindeki 384Kbayt'ın üst kısmında), G / Ç aygıtları (APIC gibi) ve video RAM gibi başka şeyler görünür. Bazı tuhaf şeyler, henüz tam olarak anlamadığım sistem yönetimi modu "SMRAM" ile de devam ediyor.

Bunun, çekirdeğin bakış açısından fiziksel adres alanı olduğunu unutmayın. MMU tüm bunları herhangi bir şekilde bir kullanıcı alanı işlemine yeniden düzenleyebilir.


Wikipedia'da 1 bellek adresinin 32 bit genişliğinde veya 4 sekizli (1 sekizli = 8 bit) olduğu kırmızıyken, 1 bit adresin veya 1 tamsayının 64 bit genişliğinde veya 8 sekizli olduğu 64 bit işlemciye kıyasla. 4 * 1024 * 1024 * 1024 bayt adres alanı hakkında haklısınız, ancak 1GB / 32 bit olduğunu düşündüğüm bellek adres alanını arıyordum, ancak hala doğru olup olmadığımı bilmiyorum. :) Cevabınız için teşekkür ederim!
johan smohan

Np. Intel CPU'ların iki adres alanı vardır: "Bellek" ve "G / Ç". RAM dışındaki şeyler "Bellek" alanında görünür. G / Ç aygıtları veya ROM gibi diğer şeyler RAM tarafından kullanılmayan noktalarda olabilir. Genellikle G / Ç adres alanında yalnızca G / Ç aygıtları görünür.
LawrenceC

@johansmohan Ne numaralarınız ne de Lawrence'ın cevabı doğru değil. Bir işlemcinin "bit genişliği" ile kullanabileceği RAM adreslerinin genişliği arasında sabit bir ilişki yoktur. Yalnızca 32 bit x86 işlemciler 64 GB RAM adresleyebilir. x64 işlemciler 40 bit fiziksel adres alanında başladı ve şu anda 52 bitte. Sanal adres alanına gelince, bu da farklı olabilir. X64'te, sanal adreslerin saklanması 64 bit alsa da, 64 bitten bekleyebileceğiniz 16 EiB yerine 256 TiB'lik bir VAS için yalnızca 48 bit uygulanır.
Jamie Hanrahan

0

32 bit işlemci en fazla 2 ^ 32 ayrı bayt belleğe (yaklaşık 4 GB) hitap edebilir, ancak 1 GB belleğe sahip olmak 1 * 1024 * 1024 * 1024 adreslenebilir bayt belleğini yapar (yine de muhtemelen 2 ^ 32 sanal adres alanınız olur) ). 64bit CPU, 2 ^ 64 ayrı bayta hitap edebilir, ancak çoğu sistemin üst sınırı yapan bellek adresleri için sadece 48 bit kullandığını düşünüyorum. adreslenebilir bayt 2 ^ 48.


1 * 1024 * 1024 değil, 1024 * 1024 * 1024 demek istediniz değil mi?
johan smohan

32 bit işlemci en fazla 2 ^ 32 oktete veya bit'e hitap edebilir mi? Sadece kontrol ediyorum, çünkü kesin olarak bilmeliyim.
johan smohan

@johan smohan Doğru, 1 * 1024 * 1024 * 1024
AcId

@johan smohan 32 bit işlemci en fazla 2 ^ 32 bayta hitap edebilir, bir bayt 8 bittir (bir sekizli bit)
AcId

0

Kabul edilen cevap iyi bir açıklama verir. Ama bunun cevap olduğunu sanmıyorum. Adres veriyolu hakkında hiçbir şey içermiyor . Ve boyutu aslında bellek kısıtlamalarının ana nedenidir. Örneğin 8080, 8 bit işlemcidir ( veri yolunun boyutu 8 bittir), ancak 16 bit adres veriyoluna sahiptir. 2 ^ 16 = (2 ^ 6) * (2 ^ 10) = 64 * 1024 bayt = 64KB'yi adresleyebilir.

Daha fazlasını burada (32 bit) "Teknik geçmiş" bölümünde bulabilirsiniz.


Katılıyorum. 16-bit PDP-11'in sonraki modellerinde 22-bit adres veriyolu bulunduğunu (ve 4 MB RAM'e hitap edebileceğini) unutmayın, HP 1000MX, ayrıca "16-bit", sonunda 16 MB RAM'e (24 -bit adresleri); VAX, 32 bit CPU'ydu ancak 30 bit fiziksel adres alanına sahipti, ancak yarısı 512 MB RAM sınırı için I / O alanı için ayrıldı; "16 bit" 8086, 1 MB; "16 bit" 80286, 16 MB; vb. PAE, Pentium Pro ile tanıtıldığında, 32 bit x86, 64 GB RAM'e kadar (24 bit fiziksel adres alanı, ancak düşük dereceli üç bit aslında hiçbir zaman CPU'dan çıkamaz) adreslenebilir.
Jamie Hanrahan

-2

Bu görüşmede en temel bilgilerin kaybolduğuna inanıyorum, işte cevabım:

"Bu bir 32 bit işlemci" demek, CPU'nun bir anda anlayabileceği ve çalışabileceği komut boyutu veya komut boyutu 32 bit demektir. Aynı şekilde 64 bit işlemcilerle: en fazla 64 bitlik talimatları işleyebilirler.

Bunu eski bir mekanik hesap makinesi gibi düşünün: sadece çok fazla rakamınız var, bu yüzden artık daha fazla sayı giremezsiniz.

Şimdi, bir CPU'nun kullanabileceği bir adres de aynı alana sığmalıdır, bu yüzden 32 bit işlemci için kullandığı adres de en fazla 32 bit olabilir. Böylece, buradan maksimum adres sayısını (yani, CPU tarafından kullanılabilecek maksimum RAM miktarını) hesaplayabiliriz:

2 ^ 32 = 4294967296 (= 4 GB)

veya

2 ^ 64 = 18446744073709551616 (= daha fazla;)

Ya da eğlenceli bir örnek olarak, eski Commodore 64'ümün 16 bit CPU'su vardı, bu yüzden aşağıdakilerin bir hafızasını yönetebiliyordu:

2 ^ 16 = 65536 bayt (= 64 KB)

Bu temel mantıktır, ancak daha önce de belirtildiği gibi, sanal adres alanları, bellek eşleme vb. Gibi bu sınırlamanın etrafında yollar vardır.


2
32 ve 64 bit işlemciler arasındaki önemli fark adres aralığıdır (sanal adres alanını "gerçek" ten daha fazla etkiler). İşlemciler o kadar çok numara kullanır ki, çoğu durumda gerçek veri yolu genişliğinin ne olduğunu söylemek zor. Ve komut uzunluğu, işlemci "genişliği" ile büyük ölçüde ilişkisizdir.
Daniel R Hicks

Açıklama mükemmel doğrudur. "İşlemci genişliği" derken gerçek yonga boyutunu santimetre cinsinden kastetmediğinizi varsayarsak, bu durumda ilgisiz olduğunu söylerken doğru olur, fiziksel bellek adreslemeli bellek haritalama tekniklerini / sanal adres alanlarını yanlış kullanıyorsunuzdur. Dahası, söylediğiniz şey çekirdek uygulamaları ile ilgilidir, PAE linux çekirdeklerini kontrol etmek isteyebilirsiniz.
Tuncay Göncüoğlu

2
Bir talimatın uzunluğunun, modern sistemlerde işlemcinin "genişliği" ile hiçbir ilişkisi yoktur. En alakalı değerler, kayıtların genişliği (aldatıcı olabilir), işlemci ve bellek arasındaki aktarım yolundaki genişlik ve bir bellek adresinin bit cinsinden boyutudur. Ancak bu 3 değer birbirinden kolayca farklı olabilir.
Daniel R Hicks

1
@DanielRHicks Daniel Hicks doğru. CPU'nun "bit genişliği" nin "komut boyutu veya komut boyutu" ile bir ilgisi olması gerekmez. Bu şekilde inşa edilmiş CPU'lar var, ancak bugünün emtia işlemcileri (x86 / x64) bunlar arasında değil.
Jamie Hanrahan
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.