16, 32 ve 64 bit sistemlerde bellek sınırları


17

16, 32 ve 64 bit makinelerde teorik bellek sınırları aşağıdaki gibidir:

  • 16 bit = 65.536 bayt (64 Kilobayt)

  • 32 bit = 4.294.967.296 bayt (4 Gigabyte)

  • 64 bit = 18,446,744,073,709,551,616 (16 Exabayt)

DOS / Windows 3.11 günlerinden, 16 bitlik belleğin bölümlere ayrılabileceğini hatırlıyorum, böylece 16 bitlik bir makine 64 Kilobayttan daha fazla belleğe erişebiliyordu.

16GB belleğe sahip bir makinem var ve 32bit işletim sistemi ve 64bit işletim sistemini çift önyükleme yapıyorum. Tüm 16GB'lara 64bit'ten, ancak 32bit'te sadece 3.21GB'a erişebiliyorum.

Benim sorum şu, eğer 16bit işletim sistemleri bellek bölümleme nedeniyle 64KB bellek erişiminden daha fazla izin veriyorsa, 32bit makineler neden aynı pricipal'i takip etmiyor?

Yanıtlar:


15

Yaparlar, sisteme Fiziksel Adres Uzantısı (PAE) denir . İşte Windows işletim sistemlerinin ve maksimum belleklerinin bir listesi, 4GB'tan fazla RAM'e izin veren herhangi bir 32 bit sistem, belleğe erişmek için PAE kullanıyor (Örneğin, Windows 2003 R2 Datacenter 32 bit 128GB ram'a izin veriyor).


Aslında Windows 8 , minimum gereksinimlerinde PAE özellikli bir CPU gerektirir .


32 bit işletim sisteminizin neden varsa ram'e erişemediğine ilişkin "sorulmamış" sorunuza yanıt vermek için: Lisanslama. Bir veri merkezi sürümü için ödeme yapmazsanız RAM'in 32 bit işletim sistemleri için 4GB'ın üzerine çıkmasına izin vermemeyi seçerler (bu yüzden bir veri merkezi sürümü satıyorlar, bu kadar koça ihtiyacınız varsa , muhtemelen daha fazla harcama yapabilirsiniz bir işletim sisteminde para).


Ah PAE'yi daha önce duymuştum ama hiç araştırmadım. Sunucu mimarisinde büyük ölçüde kullanılıyor gibi görünüyor, bu yüzden liste W7x86'nın sadece 4GB'a kadar izin verdiğini belirttiği için bir Windows 7 32bit yüklemesi için geçerli görünmüyor
Matthew Layton

1
@ 0xC0000022L dürüst olmak gerekirse, yorumundan sonra bir düzenleme olarak lisans bölümünü ekledim, ancak 4 dakika düzenleme penceresi nedeniyle yorumu göndermeden önce yayınladığım gibi görünüyor.
Scott Chamberlain

1
PAE, sayfa tablosu switcheroo'nun çalışmasını gerektirir ve bu da performans açısından pahalıdır.
vonbrand

3
Bu bir efsane. PAE nedeniyle ek yük küçüktür. Ve PAE'den hoşlanmıyorsanız, x64'ten gerçekten nefret etmelisiniz, çünkü x64'teki sayfa tablosu yapısı tıpkı PAE'ye benziyor, tıpkı PxE'lerde PFN'ler için üste ve daha fazla bit eklenmiş başka bir tablo seviyesi ile.
Jamie Hanrahan

1
PAE "artık gerekmediği için Windows 7'de kaldırılmadı", Windows 7 x86'da hala mevcut
seçenek

13

Kendim açıklamak yerine, PAE desteği ile bir çekirdeği korumak zorunda olan birinin büyüleyici yollarıyla konuşmasına izin vereceğim, Linus Torvalds

Ayrıca, Windows 32bit sürümlerindeki PAE desteğinin çok para kazandığını unutmayın. XP normalde tam 4 GiB RAM'den bile yararlanamayacaktır, çünkü MS üzerinde PAE özelliklerini etkinleştirmemeyi seçmiştir. Yakından ilişkili bir çekirdek olan Windows 2003 Server, PAE'yi destekler. Bununla birlikte, "Standart sürümünüz" bile sadece 4 GiB'yi destekleyecektir (ancak BIOS bellek deliği etrafında çalışacaktır), oysa daha pahalı sürümler 64 GiB RAM'e izin verecektir. Aynı şey 32 bit Vista için de geçerli .

Ancak, her durumda Windows tarafından uygulanan bu sınırlama yoktur. Öyle olsaydı, PAE özellikli bir Linux çekirdeğini önyüklemek yine de tam 4 GiB'yi (veya daha fazlasını) kullanmanızı sağlayacaktır. Öyle değil, bazı donanım üreticileri CPU ve yonga seti PAE'yi işleyebilmesine rağmen, bu sınırlamayı BIOS düzeyinde uygulamayı seçti.


Sadece bir yan not: mevcut x86 tabanlı 64bit işlemcilerin hiçbiri 64bit adres alanının tamamını fiziksel olarak ele alamaz (referans için bu soruya ve cevaplara bakın).


Hmm, neden Linus'un HIGHMEM.SYS ve PAE'den gerçekten nefret ettiği izlenimini edindim? : P
Karan

2
PAE'nin birkaç çalışma kümesinden daha fazlasına ihtiyaç duyan herhangi bir kod ve 2 konserlik birden fazla görevi yönetmesi gereken sistem düzeyinde kod için bir sıkıntı olacağını anlıyorum, ancak tek bir uygulama 2'den fazla ihtiyaç duymadıkça konserler PAE'nin şeffaf olmasını beklerdim. Ayrıca, 3 g genel amaçlı RAM artı büyük bir disk önbellek veya geçici depolama sürücüsüne ihtiyaç duyan durumlarda PAE'nin 64 bit işaretçilerin küresel kullanımından daha iyi olacağını düşünürüm.
supercat

Linus'un yorumları garip. Himem.sys nasıl çalışır ve PAE nasıl çalışır arasında bir ilişki yoktur. İnsanların x64 için ve PAE adreslemesine karşı tartıştıklarını görmek çok eğlencelidir ... x64 uzun modu sadece PAE şemasını alır ve bir sayfa düzeyi daha ekler!
Jamie Hanrahan

@JamieHanrahan: ... yeni sistemlerde en az iki (sanallaştırma nedeniyle), bu da bazı heyecan verici olanaklar sunuyor. Onun (Linus ') karşılaştırmaları tamamen doğru değil, ama yabancı bir kavramsa, metaforlar yardımcı olabilir :) ... Sanırım bu yüzden onu anlatmak için seçti.
0xC0000022L

2

8 bit CPU'larda genellikle 16 bit adres veriyolu bulunur. (Motorola'nın birleşik bir adres veriyolu, RAM ve çevresel G / Ç aynı adres alanını paylaştı, Intel ikisini bölmeyi seçti. Intel durumunda 8088 ve 8086'nın IO adres sınırları 8080 ve 8085 CPU.)

Intel'in 8088 ve 8086 modellerinde 20 bit bellek adres yolu (1MB) bulunurken, Motorola 68000'de 24 bit adres yolu (16 MB) vardı. IIRC, [80] 286 bir 24-bit adres veriyoluna atladı. Her ikisi de daha sonra sırasıyla [80] 386 ve 68020 ile 32 bit adres veriyoluna genişletildi.) Pentium yongaları ile adres veriyolu 64 bite genişletildi. (Sanırım Motorola / IBM girişim PowerPC çipleri de 64 bit adres veriyoluna gitti.)

Aşağıda ve doğrudan CPU tarafından erişilebilecek maksimum kapasiteye kadar olan bellek yalnızca destekleyici donanım yongaları (yonga seti) ve işletim sistemi tarafından sınırlandırılmıştır. Bill Gates geçmişte kimsenin 640K'dan fazla RAM'e ihtiyaç duymadığını söylemekle meşhurdu, bu nedenle DOS asla daha fazla RAM'e erişmek için evrimleşmedi. HiMem.sys ve EMM386 ile DOS, daha fazla "üst" belleğe erişmek için genişletildi; EMM386, kullanılabilir tüm RAM'lere doğrudan erişmek için kullanıldı. HiMem.sys daha az esnekliğe sahipti ve temel olarak depolama için fazladan RAM kullanabilir.

Bu sınırı aşan bir bellek, belleği bölümlere ayırmak ve CPU'nun adreslenebilir bellek alanına eşlemek için bir MMU (Bellek Yönetim Birimi) gerektirir. CoCo 3, Commodore 128 ve diğer 8 bit bilgisayarlar 64K'dan fazla RAM'e nasıl erişebilirdi.

Şimdi daha elverişli olan, OS tarafından dayatılan sınırlar da dahil olmak üzere, geçmiş fiziksel bellek sınırlarını genişletmek için sanal belleği kullanmaktır.


1

Çünkü bunu yapmak için pratik bir neden yok. Fiziksel Adres Uzantıları aynı işlevselliğe izin verir ve kullanıcılar arasında kullanımları hala çok sınırlıdır. Windows 3.1 günlerinde bugün mevcut olmayan kısıtlamalar vardı.


1
Bu, ifadelerinizi yedeklemek için yeterli bilgiye sahip değildir. Windows 3.1, 16 bit işletim sistemidir. 1992'de 2MB belleğin 300 doların üzerinde olduğunu hatırlamak gerekir .
Ramhound

22 Şubat yorumunuz var ve Scott Chamberlin'in açıklaması neredeyse sürdüğüm şeyi kapsıyor. DOS / Win16'da genişletilebilir bölümlenmiş sayfalamanın neden kullanıldığına, ancak daha sonraki Windows'ta kullanılmadığına ilişkin açıklamaları dışarıda bırakırlar. Bunu dahil etmedim, çünkü OP'nin sorusuna doğrudan cevap vermeyecekti.
OCDtech

Cevapların benim görüşüme göre tek başına durması gerekir. Yorumunuz, yanıtınızla ilgili sorunlarımı çözmek için yeterli bilgi ekliyor.
Ramhound

1
@OCDtech: 8086 bölümlü model, nesne yönelimli bir dilin 16 baytlık sınırlarda hizalanmış nesneleri tanımlamak için 2 baytlık nesne referanslarını kullanmasına izin verir, ancak diller segmentleri etkili bir şekilde kullanmak için iyi donanımlı değildir. 80286 modeli, bu tür programlara korkunç derecede daha büyük bir yük getiriyor ve 80386'da genişletilme şekli, nesne başına segment şemasını tamamen işe yaramaz hale getirecekti.
supercat

0

16, 32 ve 64 bit makinelerde teorik bellek limitleri aşağıdaki gibidir ...

Buradaki temel kusur, genellikle makinenin genel amaçlı kayıtlarının boyutu olan işlemcinin "bit genişliğinin" mutlaka RAM adreslerinin genişliği ile aynı olduğu düşüncesidir.

Disk belleği etkin, ancak PAE içermeyen x86'da, program ve işletim sistemi kodunun kullandığı adresler Intel tarafından "doğrusal adresler" olarak adlandırılır - bunlara genellikle "sanal adresler" diyoruz. 32 bit genişliğinde. Bu, 4 GiB sanal adres alanına izin verir.

Ancak bu, aşağı yukarı rastlantıdır, yalnızca sayfa tablosu girişleri biçiminin fiziksel (RAM) adres boyutunun da 32 bit olmasıdır.

PAE ile ikincisi 36 bittir (ilk başta ... sonraki uygulamalarda daha geniş). Yani, örneğin, "32 bitlik bir makine", fiziksel bellek adreslerinin 32 bit ile sınırlı olduğu anlamına gelmez.

Endüstrinin, "bit genişliği" maksimum fiziksel adres boyutlarıyla eşleşmeyen uzun bir makine geçmişi vardır . Örneğin, VAX mimarisi 32 bitlik bir makine tanımlar ve sanal adresler (adres çevirisi açıldıktan sonra kod tarafından kullanılan adreslerdir) gerçekten 32 bit genişliğindedir ... ancak VAX'ın fiziksel adresleri sadece 30 bit genişliğindedir - fiziksel adres alanının yarısı G / Ç cihaz kayıtlarına ayrılmıştır, bu nedenle maksimum RAM yalnızca 512 MiB'dir.

Adres çeviri donanımı olmasa bile, makinenin "bit genişliği" nin maksimum RAM adresini tanımlaması zorunlu değildir. Örnek: CDC "üst 3000" serisi 36 bitlik makinelerdi. 64 GiB RAM'e hitap edebileceklerini düşünüyor musunuz? Pek değil! Bu makineler 60'ların ortasında çıktı! Heck, o günlerde 64 GB disk alanımız bile yoktu . (CDC 6000 serisi 60 bitlik makinelerdi. Devam etmem gerekiyor mu?)


RAM hücresi başına 8 bit kullanmayan sistemleri de unutmayın. (EG: 16/16 = 128 K maks, 32/32 = 16 G Maks, 32/64 = 32
G
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.