"Sanal bellek" ve "takas alanı" arasındaki fark nedir?


85

Herhangi biri lütfen bana sanal bellek ile takas alanı arasındaki farkın ne olduğunu açıklayabilir mi?

Ve neden 32 bitlik bir makine için erişilebilen maksimum sanal belleğin yalnızca 4 GB olduğunu söylüyoruz?



@startblue sizin tarafınızdan verilen bağlantı sorumun cevabıdır ..
algo-geeks

@ algo-geeks - Gerçekten bir cevap değil, ama bence bu konu için oldukça yararlı olabilecek bir cevaba bağlı. Ve yorumda, tam olarak olması gerektiği yerde, imho yazılmıştır. :)
Muhamed Huseinbašić

Yanıtlar:


113

Süper kullanıcı üzerinde mükemmel bir sanal bellek açıklaması var .

Basitçe söylemek gerekirse, sanal bellek, çalışan işlemlerin kullanabileceği bir RAM ve disk alanı kombinasyonudur.

Takas alanı, sanal belleğin sabit diskte bulunan ve RAM dolu olduğunda kullanılan kısmıdır.

32bit CPU'nun neden 4gb sanal bellek ile sınırlı olduğuna gelince, burada iyi bir şekilde ele alınmıştır :

Tanım olarak, 32 bit işlemci, belleğin her baytının konumunu belirtmek için 32 bit kullanır. 2 ^ 32 = 4,2 milyar, bu 32 bit uzunluğundaki bir bellek adresinin yalnızca 4,2 milyar benzersiz konumu (yani 4 GB) ifade edebileceği anlamına gelir.


1
Öyleyse gerçek RAM = sanal - takas mı?
user48956

4
Bu cevap tamamen yanlış. Bir kişi 1 GB'lık bir dosyayı 100 kez belleğe eşleyebilir ve yalnızca 1 GB RAM'e sahip bir makinede 100 GB sanal belleği kullanabilir. Kullanımda olacak 100 GB sanal belleği elde etmek için RAM ve disk alanı eklemenin bir yolu yoktur.
David Schwartz

@DavidSchwartz pek değil. Bellek eşlemesi bir dosyayı belleğe yüklemez. Bu nedenle, 1 GB'lık bir dosyayı 100 kez değiştirmek, 100 GB'lık hiçbir şey kullanmayacaktır.
Felix

1
@Felix yanılıyorsunuz. Bunu "belleğe yüklemiyor" dediğinizde, "bellek" sözcüğünü fiziksel bellek, yani RAM anlamında kullanıyorsunuz. Fiziksel bellekten değil sanal bellekten bahsediyoruz . Sanal bellek genellikle gerektiğinde ve gerektiğinde oluşturulur, fiziksel bellek gibi sabit bir havuzdan alınmaz.
David Schwartz

Öyleyse bu sadece bir raporlama sorusu mu? Ne kadar bellek kullanıldığını saymak hiç mantıklı geliyor mu? Asla bu kadar fazla kullanmayacağınız için, ister RAM ister takas olsun.
Felix

60

Sanal Bellek terimi ile ilgili bazı karışıklıklar var ve aslında aşağıdaki iki farklı kavramı ifade ediyor

  1. Bir bilgisayarın sahip olduğu kavramsal fiziksel bellek miktarını artırmak için disk sayfalarını kullanma - Bunun için doğru terim aslında Sayfalandırmadır
  2. Ayrı bir bitişik adres alanında çalışan her işlemin yanılsamasını yaratmak için çeşitli işletim sistemleri / CPU'lar tarafından kullanılan bir soyutlama.

Takas alanı, OTOH, kullanılmadığında ek RAM sayfalarını depolamak için kullanılan disk bölümünün adıdır.

Yapılması gereken önemli bir fark, ikincisinin donanım ve işletim sistemi desteği nedeniyle ilkinin şeffaf bir şekilde mümkün olduğudur.

Tüm bunları daha iyi anlamak için, "Sanal Belleğin" (tanım 2'deki gibi) CPU ve işletim sistemi tarafından nasıl desteklendiğini düşünmelisiniz.

32 bitlik bir işaretçiniz olduğunu varsayalım (64 bit noktalar benzerdir, ancak biraz farklı mekanizmalar kullanın). "Sanal Bellek" etkinleştirildiğinde, işlemci bu işaretçinin üç parça olarak yapıldığını düşünür.

  • En yüksek 10 bit, Sayfa Dizini Girişidir
  • Aşağıdaki 10 bit bir Sayfa Tablosu Girişidir
  • Son 12 bit, Sayfa Ofsetini oluşturur

Şimdi, CPU bir göstericinin içeriğine erişmeye çalıştığında, önce Sayfa Dizini tablosuna başvurur - 1024 girişten oluşan bir tablo (X86 mimarisinde konumu CR3 kaydı tarafından işaret edilir). 10 bitlik Sayfa Dizini Girişi, bu tablodaki Sayfa Tablosunun fiziksel konumuna işaret eden bir dizindir . Bu da, her biri fiziksel bellekte bir işaretçi ve birkaç önemli kontrol biti olan 1024 girdiden oluşan başka bir tablodur. (Bunlara daha sonra geri döneceğiz). Bir sayfa bulunduğunda, son 12 bit o sayfadaki bir adresi bulmak için kullanılır.

Orada birçok daha fazla detay (TLBs, Büyük Sayfalar, PAE, Seçiciler, Sayfa Koruma) ama şeylerin özü yakalamaları yukarıda kısa bir açıklama.

Bu çeviri mekanizmasını kullanarak, bir işletim sistemi her işlem için farklı bir fiziksel sayfa seti kullanabilir, böylece her işleme kendi hafızasına sahip olduğu yanılsamasını verir (her işlem kendi Sayfa Dizini'ni alırken)

Bu Sanal Belleğin üzerine , işletim sistemi Çağrı Merkezi kavramını da ekleyebilir . Daha önce tartışılan kontrol bitlerinden biri, bir girişin "Mevcut" olup olmadığını belirlemeye izin verir. Mevcut değilse, bu girişe erişme girişimi bir Sayfa Hatası istisnasına neden olur. İşletim sistemi bu istisnayı yakalayabilir ve buna göre hareket edebilir. Takas / sayfalamayı destekleyen işletim sistemleri, böylece Takas Alanından bir sayfa yüklemeye , çeviri tablolarını düzeltmeye ve ardından bellek erişimini yeniden vermeye karar verebilir .

Bu, iki terimin birleştiği yerdir; Sanal Belleği ve Sayfalamayı destekleyen bir işletim sistemi, işlemlere, takas alanına sayfalandırma (değiştirme) yoluyla gerçekte mevcut olandan daha fazla belleğe sahip olma yanılsamasını verebilir.

Son sorunuza gelince (Neden 32 bit CPU'nun 4GB Sanal Bellek ile sınırlı olduğu söyleniyor). Bu, tanım 2'deki "Sanal Bellek" ile ilgilidir ve işaretçi boyutunun anlık bir sonucudur. CPU yalnızca 32 bit işaretçileri kullanabiliyorsa, farklı adresleri ifade etmek için yalnızca 32 bitiniz vardır, bu size 2 ^ 32 = 4GB adreslenebilir bellek sağlar.

Umarım bu, işleri biraz daha netleştirir.


12

IMHO Takas alanı kavramını sanal belleğe eşdeğer olarak kullanmak son derece yanıltıcıdır. VM, takas alanından çok daha genel bir kavramdır. Diğer şeylerin yanı sıra, VM, işlemlerin yürütme sırasında donanım ve sayfa tablolarının desteğiyle fiziksel adreslere çevrilen sanal adreslere başvurmasına izin verir. Bu nedenle süreçler, sistemin ne kadar fiziksel belleğe sahip olduğu veya talimatın veya verilerin fiilen fiziksel bellek hiyerarşisinde nerede bulunduğu ile ilgilenmez. VM bu eşlemeye izin verir. Başvurulan öğe (talimat veya veri) L1 veya L2'de veya RAM'de veya son olarak diskte bulunabilir, bu durumda ana belleğe yüklenir.

Takas alanı, sayfaların pasif olduklarında saklandıkları ikincil bellekte yalnızca bir yerdir. Yeterli RAM yoksa, işletim sistemi diğer işlem sayfalarına yer açmak için bir işlemin sayfalarını değiştirmeye karar verebilir. İşlemci asla direkt olarak takas alanından talimat veya okuma / yazma vermez.

VM olmayan bir sistemde takas alanına sahip olmanın mümkün olacağına dikkat edin. Diğer bir deyişle, doğrudan fiziksel adreslere erişen işlemler, yine de diskte bazı bölümlerine sahip olabilir.


5

Konu oldukça eski olmasına ve zaten yanıtlanmış olmasına rağmen. Şimdiye kadar bulduğum en basit açıklama olduğu için yine de bu bağlantıyı paylaşmak istiyorum. Aşağıdaki bağlantı daha iyi görselleştirme için diyagramlara sahiptir.

Anahtar Fark: Sanal bellek, ana belleğin bir soyutlamasıdır. İçerik RAM'inin etkin olmayan kısımlarını bir diskte depolayarak bilgisayarın kullanılabilir belleğini genişletir. İçeriğe ihtiyaç duyulduğunda, onu RAM'e geri getirir. Takas belleği veya takas alanı, sanal bellek için kullanılan sabit disk sürücüsünün bir parçasıdır. Böylece, ikisi de birbirinin yerine kullanılır.

Sanal bellek, fiziksel bellekten oldukça farklıdır. Programcılar, fiziksel bellek yerine sanal belleğe doğrudan erişim elde ederler. Sanal bellek, ana belleğin bir soyutlamasıdır. Sistemin gerçek fiziksel belleğinin bilgilerini gizlemek için kullanılır. RAM içeriğinin aktif olmayan kısımlarını bir diskte depolayarak bilgisayarın kullanılabilir belleğini genişletir. İçerik gerekli olduğunda, onu RAM'e geri getirir. Sanal bellek, sıfır ile başlayan adreslerle tüm bir adres alanının yanılsamasını yaratır. Alan ihtiyacını azaltan optimizasyon özelliği ile daha çok tercih edilmektedir. Mevcut RAM ve disk alanından oluşur.

Takas belleği genellikle takas alanı olarak adlandırılır. Takas alanı, sanal belleğin geçici bir depolama konumu olarak ayrılan kısmını ifade eder. Takas alanı, mevcut RAM sistem belleği gereksinimlerini karşılayamadığında kullanılır. Örneğin, Linux bellek sisteminde çekirdek, her sayfayı fiziksel bellekte veya takas alanında bulur. Çekirdek ayrıca, fiziksel bellekteki takas sayfalara ve sayfalara ilişkin bilgilerin tutulduğu bir tablo tutar. Uzun zamandır erişilemeyen sayfalar takas alanına gönderilir. İşlem, takas olarak adlandırılır. Aynı sayfanın gerekli olması durumunda, farklı bir sayfa değiştirilerek fiziksel bellekte değiştirilir. Böylece,

sanal bellek ve takas belleği arasındaki fark


Bu bağlantı soruyu cevaplayabilirken, cevabın temel kısımlarını buraya eklemek ve referans için bağlantıyı sağlamak daha iyidir. Bağlantılı sayfa değişirse yalnızca bağlantı yanıtları geçersiz hale gelebilir. - Yorumdan
coatless

Teşekkürler, gönderiyi geliştirdim.
ram619

0

"Sanal bellek" genel bir terimdir. Windows'ta buna Sayfalama veya sayfalama denir. Linux'ta buna Swap denir.

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.