20Aug

Bilgisayarımdaki RAM Kalan hafıza adreslerini tutabilir mi?

click fraud protection

Günün birinde bilgisayar deneyiminin yüzey seviyesine bakmak eğlenceli, diğer günlerde ise iç işleve girmeyi öğrenmek eğlencelidir. Bugün, bilgisayar belleğinin yapısına ve bir RAM çubuğuna ne kadar çok şey ekleyebileceğinize bakıyoruz.

Bugünkü Soru &Yanıt oturumu bize Q & A web sitelerinin topluluk temelli bir gruplandırması olan Stack Exchange'in bir alt bölümü olan SuperUser nezaketen geliyor.

Soru

SuperUser okuyucu Johan Smohan, toplam işlem sayısı sağlamak için işlemci türünün ve bellek boyutunun birlikte nasıl çalıştığını kavradı.O şöyle yazıyor:

Birkaç saniye içinde 32-bit işlemci ve 1GB koçla kaç tane hafıza adresi, 64-bit işlemciyle kaç adres alabiliriz?

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

1GB RAM, bellek adresleri sayısını elde etmek için 32 bitlik 4 bitlik( ?) Bölü?

Ben 1 bellek adresleri 32 bit genişliğinde veya 4 oktet( 1 oktet = 8 bit), 1 bellek adresleri veya 1 tamsayı 64 bit genişliğinde veya 8 sekizli bir 64 bit işlemci karşılaştırıldığında Wikipedia okuyun. Ama doğru olarak anlamış mıyım bilmiyorum.

instagram viewer

Gece meraklı bir geek yaşatabilecek soruların türleri bunlar. Johan'ın varsayımsal sistemlerinin her birinde kaç tane adres var?

Cevap

SuperUser katkıda bulunan Gronostaj, RAM'in nasıl bölündüğü ve kullanıldığı konusunda bazı bilgiler sunar:

Kısa cevap: Mevcut adreslerin sayısı, bunlardan küçük olana eşittir:

  • Bellek boyutu( bayt cinsinden)
  • Kaydedilebilen en büyük imzasız tamsayıCPU'nun makine sözcüğü

'de Yukarıdaki uzun cevap ve açıklama:

Bellek bayttan( B) oluşur. Her bayt 8 bitten oluşur( b).

1 B = 8 b

1 GB RAM aslında 1 GiB'dir( gibibit, gigabayt değil).Aradaki fark:

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

Her CPU baytı kendi adresine sahiptir, CPU makine kelimesi ne kadar büyük olursa olsun.Örneğin. Intel 8086 CPU 16 bitti ve belleği bayt olarak, modern 32 bit ve 64 bit CPU'ları kullanıyordu.İlk sınırın nedeni budur - bellek baytından daha fazla adres veremezsiniz.

Bellek adresi, CPU'nun aradıklarına ulaşmak için belleğin başından atlaması gereken sadece bir bayt bayramıdır.

  • İlk bayt erişmek için 0 bayt atlamak zorunda, bu nedenle ilk bayt adresi 0'dır.
  • İkinci bayt erişmek için 1 bayt, adresini 1 atlamak zorunda.
  • ( ve benzeri. ..)
  • son bayta, CPU 1073741823 bayt atlar, bu nedenle adresi 1073741823'tür.

Şimdi, 32-bit'in ne anlama geldiğini bilmeniz gerekir. Daha önce de belirttiğim gibi, bir makine kelimesi büyüklüğü.

Makine sözcüğü CPU'nun numaraları tutmak için( RAM, önbellek veya dahili kayıtlarda) kullandığı bellek miktarını belirtir.32-bit CPU sayıları tutmak için 32 bit( 4 bayt) kullanır. Bellek adresleri de sayılardır, bu nedenle 32 bitlik CPU'da bellek adresi 32 bitten oluşur.

Ş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 olur: 0, 1, 2, 3. Üç bitte sekizi kaydedebilirsinizdeğerler: 0, 1, 2. .. 6, 7. Bu aslında bir ikili sistemdir ve şu şekilde çalışır:

İkili Ondalık 0 0000 1 0001 2 0010 3 0011 4 0100 5 0101 6 0110 7 0111 8 1000 9 1001 10 1010 111011 12 1100 13 1101 14 1110 15 1111

Her zamanki gibi ek olarak çalışır, ancak maksimum basamak 1 değil 9'dur, Ondalık 0 0000'dır, o zaman 1 eklersiniz ve 0001 alırsınız, bir kez daha eklerseniz ve 0010'ınız var demektir.happend burada 09 ile ondalık olması ve bir tane ekleme gibidir: 9'dan 0'a değişir ve bir sonraki basamağı artırırsınız.

Yukarıdaki örnekte sabit bit sayısı ile bir sayıda tutabileceğin maksimum bir değerin her zaman olduğunu görebilirsiniz - çünkü tüm bitler 1 olduğunda ve değeri 1 artırmaya çalışırsanız, tüm bitler 0 olur, böylece kırılırlarnumara. Buna tam sayı taşması denir ve kullanıcılar ve geliştiriciler için çok hoş olmayan sorunlara neden olur.

11111111 = 255 + 1 ----------- 100000000 = 0( 9 bit burada, 1 kesilir)
  • 1 bit için en büyük değer 1,
  • 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 de söylediğim gibi bir bellek adresi bir sayıdır ve ayrıca maksimum bir değere sahiptir. Bu, makine sözcüklerinin boyutunun kullanılabilir bellek adresleri için bir sınır olması sebebidir - bazen CPU'unuz daha fazla bellek adreslemeye yetecek kadar büyük sayılar işleyemez.

32 bitte sayıları 0 ile 2 ^ 32-1 arasında tutabilirsiniz ve bu da 4 294 967 295'tir. 1 GB RAM'deki en büyük adresden daha fazlaydı, bu nedenle özel durumunuzda RAM miktarı 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).Diğer bir deyişle, 64-bit CPU internetin tamamını adresleyebilir. .. 200 kez;)( WolframAlpha tarafından tahmin edilir).

Ancak, gerçek hayatta olan işletim sistemlerinde 32-bit CPU'lar yaklaşık 3 GiB RAM adresleyebilir.İşletim sisteminin iç mimarisi nedeniyle - bazı adresler başka amaçlar için ayrılmıştır. Vikipedi üzerinde sözde 3 GB bariyeri hakkında daha fazla bilgi bulabilirsiniz. Fiziksel Adres Uzantısı ile bu limiti kaldırabilirsiniz.

Bellek adresleme hakkında konuşurken söylemem gereken birkaç şey var: sanal belleği , bölütleme ve sayfalama .

Sanal bellek

@Daniel R Hicks'in söylediği gibi başka bir cevapta OSes sanal bellek kullanıyor. Bunun anlamı, uygulamaların aslında gerçek bellek adresleri üzerinde değil OS tarafından sağlanan adreslerle çalışmasıdır.

Bu teknik işletim sisteminin bazı verileri RAM'den Pagefile( Windows) veya Swap( * NIX) olarak adlandırılan bir yere taşımasına izin verir. HDD, RAM'den birkaç büyüklük daha yavaş, ancak nadiren erişilen veriler için ciddi bir sorun değildir ve OS, uygulamaların yüklü olduğundan daha fazla RAM sağlamasına olanak tanır.

Sayfalama

Şimdiye kadar konuştuğumuz düz adresleme düzeni olarak adlandırılır.

Sayfalama, düz modelde normalde bir makine sözcüğüyle yapabildiğiniz daha fazla bellek adreslemeye izin veren 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 şeyi bilmelisiniz:

  • Bu kelimenin basıldığı sayfa sayısı.
  • Bu sayfada bulunan aradığınız kelime.

Şimdi modern x86 CPU'ların bellekleri tam olarak işleyişleri budur. Bu, 4 KiB sayfasına bölünmüştür( her biri 1024 makine kelimesi) ve bu sayfaların numaraları vardır.(Aslında sayfalar 4 MiB büyük veya PAE ile 2 MiB olabilir).Bellek hücresini ele almak istediğinizde, o sayfadaki sayfa numarasına ve adresine ihtiyacınız vardır. Her bir bellek hücresine, tam olarak bir çift sayı ile başvurulduğunu unutmayın; bu, segmentasyon için geçerli değildir.

Bölümlendirme

Bu, oldukça disk belleği benzeri bir işlemdir. Intel 8086'da sadece bir örnek vermek için kullanıldı.Adres gruplarına artık sayfa değil bellek bölümleri deniyor. Farklar, bölümlerin çakışabileceği ve çok fazla çakıştığının farkındadır.Örneğin, 8086'da, çoğu bellek hücresi 4096 farklı segmentten edinilebilirdi.

Bir örnek:

Diyelim ki, 255'e eşit olan 4. bayt haricinde hepsi sıfırlar olan 8 bayt bellek var.

Düz hafıza modeli için illüstrasyon:

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

4 bayt sayfalı disk belleği için resimleme:

PAGE0 _____ |0 ||0 ||0 |SAYFA 1 |255 |_____ ----- |0 ||0 ||0 ||0 |-----

4 baytlık bölümler 1 ile kaydırılmış 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 hayatta yapılan uygulamalarda, bölümler 1 bayttan fazla kaydırılmıştır( 8086 için 16 bayt).

Bölümlendirmeyle ilgili kötü olan şey bunun karmaşık olmasıdır( ancak bunu zaten bildiğinizi düşünüyorum;) Neyin iyi, modüler programlar oluşturmak için bazı akıllı teknikleri kullanabilir misiniz?

Örneğin, bir modülün bir segmente yüklenebilmesi, ardından segmentin gerçekten( modülü tutacak kadar küçük) taklit edip daha sonra sözde daha küçük olan modül ile örtüşmeyen ilk segmenti seçipsonraki modül, vb. Temelde, bu şekilde olsun değişken boyut sayfalarıdır.

Açıklamaya eklemek için bir şey var mı?Açıklamalarda ses çıkıyor. Diğer teknik uzman Stack Exchange kullanıcılarından daha fazla cevap okumak ister misiniz? Buradaki tam tartışma dizinine göz atın.