Linux neden çekirdek yine de disk belleği / sanal belleği destekliyorsa takas bölümünü kullanıyor?


23

Sayfalamayı ve takas etmeyi anladığım kadarıyla onlar tamamen farklı kavramlar. Değiştirme, bir işlemin tamamen fiziksel bellekte veya sabit sürücüde olması anlamına gelirken, işlemin disk belleği bölümleri fiziksel bellekte olabilir ve diğer parçalar sabit sürücüde olabilir.

Peki neden Linux takas bölümüne ihtiyaç duyuyor? Fiziksel bellek doluysa, bazı işlemler sabit sürücüye taşınır ve yeni bir işlem sanal bellekten fiziksel belleğe eşlenir.

Neden birinin bir takas bölümüne (ya da genel olarak takas) ihtiyaç duyduğunu anlamıyorum?

Yoksa bu sadece bir terminoloji meselesi swap partition == virtual memorymi?


5
Bilgisayar mimarisindeki "sanal bellek" in bir teknik olduğunu unutmayın; MS Windows (hatalı IMO) ise "Sanal bellek, bilgisayarınızın rasgele erişim belleği (RAM) ile birlikte kullandığı bilgisayarınızın sabit diskindeki depolama alanıdır" olarak tanımlamaktadır . IE google windows "sanal bellek"
talaş

Yanıtlar:


25

Evet, sadece bir terminoloji meselesidir, çoğu durumda takas bölümü sanal bellek olarak kullanılır.

UNIX ve UNIX benzeri sistemlerin takas bölümlerini sayfa dosyalarına tercih etmelerinin nedeni, parçalanabilen bir sayfa dosyasına kıyasla daha düşük arama süreleriyle sonuçlanan bitişik olmalarıdır.


6
Bu sayede Linux kurulumları arasında tek bir takas bölümünü paylaşmak daha kolaydır.
oKtosiTe

3
genellikle ilk önyüklemede bir sayfa dosyası oluşturulur, bu nedenle parçalanmayacaktır (peki .. hala birkaç olasılık var ..)
AndreaCi

12
En eski UNIX'ler yalnızca sayfalamayı değiştirdi, çağrı yapmıyordu ve yalnızca ayrılmış bir bölüme geçebiliyorlardı. Disk belleği donanım desteklediği anda uygulandı, ancak “takas bölümü” adı takıldı. Bir dosyaya çağrı alma daha yenidir ve daha fazla işletim sistemi ek yükünün yanı sıra parçalanma riski de vardır, bu yüzden hala önerilmez.
zwol

1
"takas bölümü sanal bellek olarak kullanılıyor." - Yalnızca Microsoft Windows ikincil depolamayı (örn. Diskteki sayfa dosyası) "sanal hafıza" olarak tanımlar. Fakat onlar bile bu kullanımdan uzaklaşmaya çalışıyorlar. Google "sanal belleği" pencerelerini kullanmayı deneyin ve ilk sonucun özeti ("Sanal bellek depolama alanı ...") sayfa içeriğiyle eşleşmiyor. Doğru bir ifade "takas bölümü sanal bellek tarafından kullanılıyor" olacaktır .
talaş

14

“Takas etmenin anlamı, bir sürecin tamamen fiziksel bellekte veya sabit sürücüde olduğu” fikrini nereden aldığınızı bilmiyorum. Bu anlam birkaç yıldan beri kullanılmıyor. Vikipedi alıntı :

Tarihsel olarak, takas işlemi, bir defada bir bütün programın ikincil depodan içeri / dışarı taşınmasına, içeri alma / dışarı alma olarak bilinen bir şemaya değinmektedir. 1960'larda, sanal bellek kavramı tanıtıldıktan sonra - iki modelde, bölümler ya da sayfalar kullanılarak - takas etme terimi, sırasıyla disk ya da bellek arasında bölümlere ya da sayfalara hareket etmek için uygulandı. Bugün sanal bellek çoğunlukla bölümlere değil sayfalara dayanıyor, takas işlemi bir fark olsa da, oldukça yakın bir çağrılama ile eşanlamlı hale geldi. [Şüpheli - tartış]

Gerçekten de, Linux (veya bu konuda başka bir Unix sistemi) içeren herhangi bir bağlamda, çağrı ve yer değiştirme hemen hemen eş anlamlıdır. Her ikisi de, bir sayfa verisinin RAM veya diskte saklanabileceği sanal bellek kullanımına atıfta bulunur. (Bir sayfa, karşılaşmanız muhtemel herhangi bir cihazda 4kB'dir.) Bellek sayfasını kullanan program, verilerin nerede depolandığını umursamıyor veya hatta bilmiyor, sadece sanal adresi kullanmaya devam ediyor. Çekirdek, RAM ve disk arasında veri aktarımı yapar ve MMU tablolarını güncellerken, sanal adres girişi ya bellekteki fiziksel bir sayfaya işaret eder ya da işlemcinin bazı çekirdek kodlarını çalıştırmasına neden olan özel bir değer içerir. diskten uygun verileri yükler.

Çağrı , bu genel işlem anlamına gelir. Değiştirme takas alanına (swap bölümü veya takas dosyası): disk üzerindeki veri özel bir alanda olması durumunda karşılık gelir. Çağrı da RAM ve bir dosya arasında yapılabilir ve bu durumda genellikle olarak anılacaktır değil takas . Örneğin, bir programı yürüttüğünüzde, kodun yürütülebilmesi için belleğe yüklenmesi gerekir; Bir kod sayfasının başka bir şeye yer açmak için RAM'den çıkarılması gerekiyorsa, bu sayfayı program alanına geri yükleyebileceği için takas alanına bu sayfayı yazmaya gerek yoktur. (Bu sadece program kodu için değil, salt okunur veriler için yapılabilir.)

Fiziksel bellek (neredeyse) doluysa, çekirdek RAM'de son zamanlarda kullanılmamış bir sayfayı (bütün bir işlemi değil) arar. Bu sayfa bir disk dosyasının içeriğini yeniden üretirse (bunu belirtmek için çekirdekte tablolar vardır), sayfa yeniden oluşturulabilir. Değilse, sayfa takas için yazılır, daha sonra geri kazanılır. Her iki durumda da çekirdeği, işlemin sanal bellek tablosundaki (işlem yürütülürken MMU tablosu olur) girişi RAM'de değil olarak işaretlemek için günceller ve fiziksel sayfayı başka bir şey için (farklı bir program veya başka bir sayfa için yeniden kullanabilir) aynı program).


Cevabınızın ilk paragrafı ona fikri nereden aldığını gösterir: eski belgeler. (Değiştirme ve sayfalama arasında da bir fark olduğunu hatırlıyorum.)
RonJohn

9

Sanal bellek / çağrı tesisi bir çekirdeğin kullanıcı alanı işlemlerine belleği "sanallaştırmasını" sağlar. Çekirdek sayfalarını fiziksel bellekten alabilir ve disk belleği kullanarak düzenleyerek bir kullanıcı alanı işlemine bitişik görünmelerini sağlar.

Bir kullanıcı alanı işleminin hafızasında bir sınır belirlenebilir ve işlem bunun ötesine geçerse "sayfa hatası" oluşur ve bu durum çekirdeğe geri dönen bir CPU istisnasına neden olur. Bu, kullanıcı programı, çekirdeğin veya diğer programların çekirdeğin izni olmadan ayrılan belleğe karışmasını önler.

Tipik olarak, kullanıcı alanı programları iyi tanımlanmış arayüzler üzerinden bu uzatabilme çekirdek sormak (Cı işlevleri tarafından adlandırılan malloc()ve free()örneğin.). Çekirdek, bir programın ne kadar ve hangi belleğin tahsis edildiğini takip etmekten sorumludur.

Bu "sayfa hatası" mekanizması aynı zamanda, çekirdeğin belleğe aşırı koruma sağlaması durumunda (ve hem Windows hem de Linux bunu destekliyorsa) bu nedenle neden takas olarak adlandırılıyorsa, çekirdeğin işlemden birini diskten erişmeye çalıştığı sayfayı değiştirmesine de izin verebilir. Eğer hafıza erişimi gerçekten geçersiz ise (yani süreç önce sormadığı hafızaya erişmeye çalışıyorsa), o zaman tipik olarak bir SIGSEGV ile öldürülecektir.

Bu nedenle "takas", sanal belleğe / sayfalamaya bağlı olan ancak sadece bir CPU'nun sanal belleğe / sayfalamaya sahip olması gerekmeyen ek bir özelliktir (Linux'ta isterseniz tamamen devre dışı bırakabilirsiniz). Kavramlar aynı değildir ancak takas, var olan disk belleği / sanal belleğe bağlıdır.


Ayrıca, sorunuzu daha yakından okuduktan sonra, "disk belleği" bazen "takas" için bir eşanlamlı olarak da kullanılır - ancak tüm işlemin hafızasının değiştirildiği anlamına gelen "takas" anlamını hiç duymamıştım. değiştirildi.

Peki neden Linux takas bölümüne ihtiyaç duyuyor? Fiziksel bellek doluysa, bazı işlemler sabit sürücüye taşınır ve yeni bir işlem sanal bellekten fiziksel belleğe eşlenir.

"Sanal bellek" olduğunu sadece fiziksel bellek, "remapped." MMU donanımı hiçbir depolama aygıtına doğrudan eşlenemez. MMU, çekirdeğe sahip olması gerekmeyen bir belleğe erişmeye çalıştığı bir işlemin çekirdeğe söyleyebileceği bir hataya neden olabilir - ve çekirdek, bir işlemin bellekte olduğu düşünülen bir şeyi geri almak istediğini görmek için bu mekanizmayı kullanabilir ve " takas". Mesele şu ki, sayfaları diske kaydetmeye karar veren işletim sistemidir, böylece bu sayfaları donanımı değil diğer işlemler için kullanabilir.


2

Genelde takas bölümü sanal belleğe eşit değildir.

İşlemler gerçek fiziksel bellekten daha fazla belleğe ihtiyaç duyabilir; bu nedenle işletim sistemi geliştiricileri, sistemde "sanal bellek" olarak adlandırılan daha fazla bellek olduğunu varsaymaya karar verdi.

Bu sanal bellek temel olarak fiziksel bellektir ve diskin bir parçasıdır. Diskin bu bölümüne Linux'ta "takas" adı verilir.

Ayrıca geliştiriciler, sabit diskte bulunan sanal belleğin bir kısmının kullanımının mümkün olduğu kadar düşük olması gerektiğini önerdiler. Bunun uğruna, tüm sanal bellek "sayfalar" adı verilen küçük bölümlere bölündü. Çok sayıda sayfa düşük oranda kullanılıyor, bu sayfaların sabit diskteki sanal belleğin bir bölümüne yazılması gerekiyor. Bu işleme "takas etme" denir. İşletim sistemi, gerektiğinde onları bulmak için hangi sayfaların fiziksel bellekte bulunmadığını takip etmelidir. Bir program, değiştirilen belleğin bir bölümünü yazmak / okumak istediğinde sayfa hatası meydana gelir.

Sorunuzu cevaplamak için: Linux bazı bellek sayfalarını değiştirmek için takas bölümlerine ihtiyaç duyar ve sanal bellek kullanım istatistiklerini görebilirsiniz vmstat:

procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r  b   swpd   free   buff  cache    si   so    bi    bo   in   cs us sy id wa
2  0  35424 524560 134164 1858728    0    0    13    11   55   42  5  1 94  0
0  0  35424 526720 134164 1857872    0    0     0     0 2774 5224  7  2 91  0
1  0  35424 516328 134172 1870116    0    0     0     6 3464 6561 13  3 84  0
0  0  35424 522992 134212 1862676    0    0     0   125 4135 7135 12  4 84  1

'Değişim' sütunu değiş tokuş ve istatistiki olarak gösterir. Ayrıca bu bağlantı sanal belleği ve kullanım şeklini de açıklar vmstat.

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.