Sanal bellek nedir?


27

'Sanal Bellek' notlarımı iki kez kontrol ediyordum ve ders kitabımdaki tanım şöyle:

Ana belleğin bir parçası olarak çalışmak için ikincil bir depolama bölümünü tahsis etme işlemi

Nerede olarak Vikipedi diyor:

Sanal bellek, bir uygulama programına bitişik çalışma hafızası (adres alanı) olduğu izlenimini veren bir bilgisayar sistemi tekniğidir.

ve (Wikipedia da diyor ki)

"Sanal bellek" yalnızca "fiziksel bellek boyutunu genişletmek için disk alanı kullanmaktan" daha fazlasıdır.

Hangisi doğru olduğuna dair herhangi bir açıklamada bulunabilir mi?


Wikipedia'dan gelen notun, bitişik olan şeyler için neyin kullanıldığı konusunda bazı nitelikler içerdiğine inanıyorum.
JB King

Bu soru muhtemelen SO'da daha iyi bir cevap alacaktır.
Kaptan Segfault

2
Sanal hafızanın ne olduğu ile karıştırmayın. Vikipedi'nin ilk cümleyi, ne olduğunu tanımlamaktır. Kitabınız tipik olarak nasıl kullanıldığı hakkında konuşuyor. İnsanlar "sayfalardan" bahsettiklerinde, belirli bir sanal bellek uygulamasından bahsediyorlar.
Tony Lee

2
Ders kitabınız sadece yanlış. Sanal belleği olan ve hiçbir ikincil depolama alanı bulunmayan birçok makine var. Benzer şekilde, bir zamanlar ikincil depolamayı ana belleğin bir parçası olarak kullanabilen ancak sanal belleği desteklemeyen birçok makine vardı. "Sanal bellek", bellek olmayan ancak hafıza gibi erişilen bir şeydir. Ders kitabınız takas veya sayfalamayı tanımlamaktadır.
David Schwartz

1
Ders kitabı tamamen yanlış olarak tanımlamaktadır, ikincil depolama tanımın bir parçası değildir. Ve Wikipedia'nın bile “disk alanından fazlası” hakkındaki ifadesi yanıltıcıdır, çünkü diski içermeyebilir - bu ifade “diske belleği genişletmek” ve başka bir şey gibi geliyor.
Kelvin

Yanıtlar:


41
Note that "virtual memory" is more than just "using disk space to extend physical memory size"

Sanal bellek, her işlem için sağlanan bir soyutlama katmanıdır. Bilgisayar, 0 ile 2G arasında adreslenmiş 2GB fiziksel RAM'e sahip. Bir işlem, tamamen kendisine ait olan 4GB'lık bir adres alanını görebilir. Sanal adreslerden fiziksel adreslere eşleme, işletim sistemi tarafından yönetilen bir bellek yönetim birimi tarafından gerçekleştirilir. Genellikle bu 4KB "sayfa" da yapılır.

Bu çeşitli özellikler sunar:

  1. Bir işlem diğer işlemlerde belleği göremez (işletim sistemi istemediği sürece!)
  2. Belirli bir sanal adresteki bellek aynı fiziksel adreste bulunmayabilir
  3. Sanal adresteki bellek diske "disk belleği" eklenebilir ve daha sonra tekrar erişildiğinde "disk belleği" girebilir.

Ders kitabınız sanal belleği (yanlış) sadece # 3 olarak tanımlar.

Herhangi bir değişim olmadan bile, özellikle DMA (doğrudan hafızaya erişim) yapan bir cihaz için bir aygıt sürücüsü yazarsanız sanal belleğin farkında olmanız gerekir. Sürücü kodunuz CPU üzerinde çalışır, bu hafıza erişiminin MMU (sanal) üzerinden olduğu anlamına gelir. Cihaz muhtemelen gelmez değil ham fiziksel adresleri görmez böylece, MMU'nun geçer. Bu yüzden bir sürücü yazarı olarak şunlardan emin olmanız gerekir:

  1. Donanıma ilettiğiniz tüm ham bellek adresleri sanal değil sanaldır.
  2. Gönderdiğiniz büyük (çok sayfalı) bellek blokları fiziksel olarak bitişiktir. Bir 8K dizisi neredeyse bitişik (MMU aracılığıyla) fakat iki fiziksel olarak ayrı sayfa olabilir. Cihaza, bu dizinin başlangıcına karşılık gelen fiziksel adrese 8K veri yazmasını söylerseniz, ilk 4K’yı yazacağınız yere yazar, ancak ikinci 4K bir belleği bir yere bozar. :-(

4

Yavaş yavaş başlamaya çalışacağım ve sonra bunları sizin için bir araya getireceğim. Bunun gibi:

Yaygın olarak kullanılan sanal bellek, "çağrı" anlamına gelir. Adından da anlaşılacağı gibi, çağrı bir insan not defteri gibi.

Basit toplamları hesaplarken veya basit bilgiler öğrenirken, hepsini kafanızda yapın: sadece tüm bilgileri yüklüyorsunuz, işlemden geçiriyor ve cevabı alıyorsunuz. Bu, sabit diskten dosya yükleyen bir bilgisayar gibidir - programları veya resimleri veya "gerçek belleğine" (veya "fiziksel belleğe") çalışması için ihtiyaç duyduğu diğer bilgileri yükler ve üzerlerinde "beyin" ile çalışır ( işlemcisi).

Ancak, karmaşık bilgileri öğrenirken veya karmaşık toplamlarla çalışırken, tüm bunları bir defada kafanızda tutamayabilirsiniz. Kafanız karışıyor, yavaşlamaya başlıyorsunuz, hepsini aynı anda orada tutmakta başarısız oluyorsunuz ve başka bir şeyi hatırlamak için bir şeyi unutmak zorundasınız.

İnsanın çözümü bir not defteri kullanmaktır. Sayfalara bir kerede hatırlayamadığımız her şeyi not alıyoruz, ancak toplamları yaparken bunlara bakın. Ayın satış rakamlarının büyük bir listesini hatırlayamayabiliriz, ancak sayfalara bakabilir, bilgileri bir kerede bir miktar alabilir ve her bir işlemi işleyebiliriz. Bu, bilgisayarın hafızasına "sayfa atması" anlamına gelir - sayfaları bilgi dolu yazma ve daha sonra başvurmak üzere "sanal belleğe koyma" ve bir sayfaya ihtiyaç duyduğunu farketme ve bu sayfayı sanal bellekten gerçek belleğe yükleme gibi. Linux ve unix'te, bu sayfaların saklandığı yer tam anlamıyla "sayfa dosyası" olarak adlandırılır ve bellekteki veri sayfalarının tam anlamıyla "sayfalar" olarak adlandırılır. Farklı sistemler bu şeyler için farklı isimlere sahiptir, ancak genel kavram aynıdır.

Yani, gerçekten, çağrı çok basit. Bilgi sayfalarının tümü belleğe sığmadığından, bazı sayfalar diske yerleştirilir ve daha sonra tekrar yüklenir.

Şimdi daha da karmaşık hale gelen şey şu ki, modern sistemler genellikle bilgisayarda aynı donanım sistemi tarafından kullanılan bellek haritalaması ve bellek korumasına sahiptir: bellek yönetim birimi veya MMU.

Aynı anda birçok programı çalıştırabilen ve bellek korumasına sahip (modern) bir çok görevli bilgisayarda, her program genellikle aynı sistemde çalışan diğer programlardan ayrılır. Bu şekilde, bir program başka bir programı yalnızca belleğine erişerek değiştiremez - MMU bir programın adres alanını fiziksel olarak diğerlerinden ayırır. Başka bir deyişle, kullanıcının programları diğer kullanıcıların programlarını ve hatta diğer programları görmez. "Gerçek hafızayı" görmezler - kendi "sanal hafızasını" görürler.

Şimdi, bu bellek izolasyonu kavramı ve sayfa dosyası konsepti kavramsal olarak iki farklı şeydir, bu yüzden muhtemelen kafanız karışıyor. Ancak, anahtar, her ikisini de MMU - kullanarak bellek sayfalara ayıran ve sayfaları sanal bir adres alanına eşleyen bellek yönetim birimi kullanılarak çalışır.

Bu nedenle, bir program belirli bir "hafıza adresinde" hafıza istediğinde, gerçekte olan şey, o program için hafıza sayfalarının ve bunlara karşılık gelen adreslerin (programın "adres alanı") aranması ve buna karşılık gelen sayfanın aranmasıdır. bu hafıza bloğu bulundu. Bu sayfa gerçek belleğe herhangi bir yere yüklenebilir, bu durumda programa erişim verilir veya bir diske disk belleği eklenebilir. Sayfalanmışsa, bir "sayfa hatası" tetikler - diske erişilir ve sayfa belleğe yüklenir. Bu nedenle, program yeterli bellek olmadığında bile çalışır, ancak normalde çok hızlı bir bellek erişimi için disk kullanmak zorunda kalırsa, YAVAŞ çalışır.

Şimdi, o sayfayı belleğe yüklemek için yeterli alan yoksa, o zaman bir sorununuz olur. Bu durumda, hafızada bulunan bazı OTHER sayfalarının diske "takılması" gerekir, bu nedenle ilk programın sayfası yüklenebilir. Ya da aynı programdan aynı sayfalar olabilirler. Bunu bazen grafik programlarında, örneğin, yoğun yüklü sistemlerde, resmin bir kısmı yavaşça yüklenip hızlıca çekildiğinde, bir sonraki kısım aynı anda yavaşça yüklenip hızlıca çekildiğinde ve ilk çalışmaya başladığınızda Bölüm, TEKRAR yavaş. Bunun sebebi üzerinde çalışmak üzere yüklendikleri, sonra tekrar değiştirildikleri için başka bir şey üzerinde çalışılabilirler. Açıkçası, bu çalışmak için çok yavaş bir yol ve gerçekten ihtiyacınız olan şey GERÇEK hafıza.


% 100 bu cevaba katılmıyorum. "Sanal bellek" sayfalandırmaya değinirse, sayfa olmayan (örneğin, takas veya sayfa dosyaları etkin olmayan) bir sistem sanal belleği destekleyemez. Ama bu açıkça delilik.
David Schwartz

@DavidSchwartz - Başlangıçta seninkine benzer bir tepki aldım, ama cevabı daha ayrıntılı okurken, bunun o kadar da kötü olduğunu sanmıyorum. Düşünün Vikipedi / sanal bellek / Sayfalanmış "sanal bellek bölünmenin Neredeyse tüm uygulamalarda sayfalarında, bitişik sanal bellek adresleri blokları içine sanal adres alanı" diyor. Yani geniş anlamda yok, "çağrı" dir değil bir sayfa gerektiren dosyayı , ancak fiziksel adreslere içine sanal adresin haritasını ifade eder.
ToolmakerSteve

1
Hmm, diğer taraftan, Lee, "Bilgi sayfalarının tümü belleğe sığmıyor, bu yüzden bazı sayfalar tekrar diske yerleştirilmiş ve daha sonra yeniden yüklendi." Diyor, bu yüzden David haklı: Bu cevap asıl gerçeği özlüyor disk belleği olan sadece diske çağrı ibaret değildir . Artı tarafta, Lee, sanal belleğin diğer faydalarından bahsetmeye devam ediyor (bellek izolasyonu). Bu cevap "sanal belleğin sayfalarını eşleştirme" ile "diske disk belleği" koymaktan ödün verilmemişse, daha yararlı olacaktır.
ToolmakerSteve

@ToolmakerSteve Sorun şu ki bu çok yaygın bir yanılgı ve bu yanılgıyı güçlendiren herhangi bir şey, IMO'nun kötü bir şey olması. Bu cevap, basit kavramları çok basit bir konuda çok temel kavramları açıklamaya çalışırken özellikle kötü - işte ortak bir yanılgıya dayanarak temel atmamak en önemli şey!
David Schwartz

@DavidSchwartz - Katılıyorum. Haklısın, o edilmektedir edilir değil "bir sayfa dosyası nasıl çalıştığını", diye tanımlıyor "sanal bellek" tanımlayan. İlk başta, sorunun yalnızca Lee'nin "sayfalama = bellek sayfalarını sanaldan fiziksel" e karşı "sayfa dosyası = sayfaların diske haritalanması" arasında ayırt edemediğini düşünmüştüm, ancak yeniden okuduktan sonra gerçekten sadece konuşuyordu. diske eşleme hakkında. (Gördüğümüz gibi, ders kitabının teklifinden, Kaptan'ın dışındaki diğer tüm cevaplardan ve bir google araştırmasından, iki kavramın bu şekilde birleşmesi çok yaygın. Eminim ki suçlu bulundum.)
ToolmakerSteve

0

Çok geç olduğunu biliyorum .... ama yine de faydalı olduğunu düşündüm.

  • Hepsi farklı bakış açılarına göre doğrudur.
  • Sanal bellek bir bellek yönetimi tekniğidir, takas belleği disk sürücüsündeki alandır. Hafızayı değiştir genellikle takas alanı olarak adlandırılır. Takas alanı, sanal belleğin geçici bir saklama yeri olarak ayrılan bölümünü ifade eder. Takas alanından yararlanılabilir RAM, sistemin belleğinin ihtiyacını karşılayamadığında kullanılır
  • Daha fazla bilgi için aşağıdaki linke başvurabilirsiniz.

-2

Sanal kelimesini anlarsak, bunun hafızayla nasıl ilişkili olduğunu anlayabileceğimizi düşünüyorum.

Google'da tanımlandığı gibi "sanal": "bilgisayar yazılımı tarafından geçici olarak simüle edilmiş veya genişletilmiş: RAM'de bir sanal disk, bir sabit diskte sanal bellek."

Sanal Bellek durumunda, sistem daha yavaş bellek kaynaklarını kullanarak sistem belleğini simüle eder (örneğin, sabit disk, başparmak sürücüsü vb.) ayarladığınız sürücüyü veya kaynağı kullanın. Bu, uygulamanızın yaptığı işe devam edebilmesi için sistem belleğini boşaltır.

Değişim devam eden bir işlemdir ve bu nedenle belleğinizi yükseltirseniz, sistemin belleğin yavaşlatılması için değiştirilmesinin gerekmemesi gerektiğinden, performans artışı görmeniz gerekir.


-2

Sanal bellek, bilgisayarın veri sayfalarını geçici olarak rasgele erişim belleğinden (RAM) disk depolamasına aktararak fiziksel bellek yetersizliğini telafi etmesini sağlayan bir işletim sisteminin (OS) bir özelliğidir.

Yani, bilgisayarı biçimlendirmeden İşletim sistemlerini denemek için sanal makinede veya sanal kutuda kullanılan bir ayna veya örnek bellek gibidir.


Hayır, bu çağrı.
David Schwartz

-4

Sanal Bellek, sabit RAM'inizin, sistemin fiziksel RAM'in yanı sıra bir disk belleği dosyası olarak kullandığı bir bloktur.

Zorlaşır ve bazen yavaşlar, çünkü Windows sabit sürücünüzün bu bölümünü BİRDİRMEMEKTEDİR.

Size önerebileceğim en iyi 2 ipucu: 1) Virt Mem, fiziksel Belleğinizin yaklaşık 1.5X değerinde hem minimum hem de maksimum olarak ayarlanmalıdır. ex. 2GB RAM = 3070MB Virt. 2) Birleştirirken, disk belleği dosyanızı kapatın. 2x'i birleştirin ve tekrar orijinal numarasına sıfırlayın. Bu, temiz bir sürücü dilimi verir ve disk belleği dosyasının hızını artırır.


1
Bu tamamen doğru değil - modern bellek yöneticileri TÜM sistem belleğini sanallaştırıyor. İşlemin ayrılmasına izin veren şey budur - her işlem yalnızca kendi belleğine dokunabilir. Bellek yöneticisi bu sanal sayfaları gerçek depolamaya ve isteğe bağlı olarak sabit bir diske eşlemekten sorumludur.
Anthony Giorgio

1
"Windows, sabit sürücünüzün bu bölümünü birleştirmiyor." basitçe nuke pagefile.sys, yeniden başlatın, diski birleştirin ve disk belleği yeniden etkinleştirin, voilá, taze ve bitişik bir sayfa dosyası! ancak, Sysinternals'ın PageDefrag'ı, sayfa dosyasını sürücü / bölümün başına daha iyi performans için yerleştireceği için daha iyi bir iş çıkarır.

1
Bu cevap doğru olsaydı, sayfa dosyası yapılandırılmamış bir Windows sistemi sanal bellek desteği sağlayamazdı. Ancak bu açıkça yanlıştır. Böyle bir sistem, örneğin, dosyaları sanal bir bellek örneği olan fiziksel RAM fazlalığı üzerindeki işlem adres alanına eşleyebilir.
David Schwartz
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.