Linux bellek düzeni

Önce Linux bellek düzenine bakalım, bu resim daha önce yazdığım makaledeki düzenden daha detaylı.

Linux'ta, her süreç, süreci depolayan süreç tanımlayıcı adı verilen görev_yapısı yapısına soyutlanmıştır.

Bilginin çeşitli yönleri; açık dosyalar, sinyaller ve bellek, vb .; ve daha sonra görev_yapısının bir mm_struct özniteliği, işlemin tüm sanal belleğini, bellek tanımlayıcısı adı verilen yönetir. Mm_struct yapısında, işlemin her bellek bölümünün başlangıcı ve sonu, yukarıdaki şekilde gösterildiği gibi saklanır; bu işlem tarafından kullanılan fiziksel bellek, yani yerleşik RSS sayfalarının sayısı, bu bellek tarafından kullanılan sanal adres alanı VSZ sayfalarının sayısı ve Bu işlemin sanal bellek alanı koleksiyonu ve sayfa tablosu.

Yukarıdaki şekilden görülebileceği gibi, işlemin bir kod bölümü Metin bölümü, veri bölümü (başlatılmış global, statik değişkenler), BSS bölümü (başlatılmamış global, statik değişkenler), yığın, bellek haritalama alanı ve yığını vardır;

Her sanal bellek alanı (VMA), üzerine asla yazılmayan bitişik bir sanal adresten oluşur. Bir vm_area_struct örneği, bu bellek alanının başlangıç ve bitiş adresleri de dahil olmak üzere bir bellek alanını tanımlar; bayraklar bu belleğin erişim haklarını ve davranışını belirler; vm_file, bu bellek tarafından hangi dosyanın eşleştirildiğini belirler. Dosya eşlemesi yoksa, O zaman bu hafıza anonimdir (anonimdir). Yukarıdaki şekilde bahsedilen her bir bellek bölümü bir vm_area_struct yapısına karşılık gelir. Aşağıda gösterildiği gibi

Yukarıdaki resim / bin / gonzo işleminin bellek düzenidir. Programın ikili dosyası, kod segmenti ve veri segmentiyle eşlenir.Kod segmenti salt okunurdur ve yalnızca yürütülebilir ve değiştirilemez; genel ve statik başlatılmamış değişkenler, anonim bir eşleme olan BSS segmentiyle eşlenir ve öbek ve yığın da anonim olarak eşlenir çünkü karşılık gelen bir şey yoktur. Dosya eşleme; bellek haritalama alanı, paylaşılan kitaplıklar, dosyalar ve anonim haritalama ile eşleştirilebilir, böylece bu bellek bölümü dosya eşleme veya anonim eşleme olabilir. Ve farklı dosyalar, farklı vm_area_struct alanlarına eşlenir.

Bu vm_area_struct koleksiyonları tekil bağlantılı bir listede ve kırmızı-siyah ağaçta mm_struct'ta saklanır; / proc / pid / maps dosyasını çıkarırken, sadece bağlantılı listeyi geçmeniz gerekir. Kırmızı-siyah ağaç esas olarak belirli bir bellek bloğunun hızlı bir şekilde yerini belirlemek için kullanılır ve kırmızı-siyah ağacın kökü mm_rb alanında depolanır.

Daha önce belirtildiği gibi, doğrusal adreslerin fiziksel adreslere dönüştürülmesi için sayfa tablosundan geçmesi gerekir. Her işlemin bellek tanımlayıcısı ayrıca işlem sayfa tablosu işaretçisini pgd kaydeder ve her sanal bellek sayfası, sayfa tablosundaki belirli bir öğeye karşılık gelir.

Sanal bellek herhangi bir veri depolamaz, sadece adres alanını fiziksel belleğe eşler. Fiziksel bellek çekirdek ortak sistemi tarafından tahsis edilir.Bir fiziksel bellek parçası eşlenmezse, ortak sistem tarafından sanal belleğe tahsis edilebilir. Yeni ayrılan fiziksel bellek yaprak kutusu anonim olabilir ve işlem verilerini depolayabilir veya ayrıca dosyayı önbelleğe alabilir ve depolayabilir veya cihaz verilerini engelleyebilir. Bir sanal bellek vm_area_struct bloğu parçası, sürekli sanal bellek sayfalarından oluşur ve bu sanal bellek blokları tarafından eşlenen fiziksel bellek, aşağıdaki şekilde gösterildiği gibi mutlaka sürekli değildir:

Yukarıdaki şekilde gösterildiği gibi, fiziksel belleğe eşlenen üç sayfa vardır ve iki sayfa eşlenmez, bu nedenle yerleşik bellek RSS'si 12kb'dir ve sanal bellek boyutu 20kb'dir. Fiziksel belleğe eşlenen üç sayfalı sayfa tablosu girişleri için, PTE'nin Mevcut bayrağı 1'e ayarlanır ve fiziksel bellek eşleştirilmemiş iki sanal bellek sayfa tablosu girişinin Mevcut bitleri temizlenir. Bu nedenle, şu anda bu iki belleğe erişmek anormal bir sayfa hatasına neden olacaktır.

vma, uygulama ile çekirdek arasındaki bir sözleşme gibidir. Bir uygulama bellek veya dosya eşleme için başvurduğunda, çekirdek önce bu isteğe yanıt verir ve sanal belleği tahsis eder veya günceller; ancak bu sanal bellek gerçek fiziksel belleğe eşlenmez. Bunun yerine, fiziksel bellek, bellek erişimi anormal bir sayfa hatası oluşturduğunda fiilen eşlenir. Yani, eşlenmemiş sanal belleğe erişirken, sayfa tablosu girişinin Mevcut biti ayarlanmadığından, bu zamanda bir sayfa hatası istisnası üretilecektir. Hem vma kayıtları hem de sayfa tablosu girişleri, bellek sayfası eksikliklerini çözmede, belleği serbest bırakmada ve bellek takas etmede önemli bir rol oynar. Aşağıdaki şekil yukarıdaki durumu göstermektedir:

1. Başlangıçta, yığın içinde yalnızca 8kb bellek vardı ve hepsi fiziksel belleğe eşlenmişti;

2. Yığını genişletmek için brk () işlevi çağrıldığında, yeni sayfa fiziksel belleğe eşlenmez.

3. İşlemcinin bir adrese erişmesi gerektiğinde ve bu adres yukarıda tahsis edilen sanal bellekte olduğunda, bu sırada bir sayfa hatası istisnası üretilir;

4. Bu sırada, işlem ortak sistemden bir fiziksel bellek sayfası için geçerlidir, onu bu sanal bellek parçasıyla eşler, sayfa tablosu girişleri ekler ve Sunum bitini ayarlar.

O zamandan beri, bu bellek yönetimi şimdilik burada duracak. Özetlemek:

1. Linux işleminin bellek düzeninin her segmenti bir vm_area_struct'a sahiptir ve bu örnek ardışık sanal bellek adreslerinden oluşur;

2. Bellek talep ederken, önce vm_area_struct'ı genişletin veya yeni bir vm_area_struct tahsis edin, ancak fiziksel belleği eşlemeyin Yalnızca bu belleğe erişildiğinde, bir sayfa hatası oluşur, çekirdek fiziksel belleği ayırır.

[Söylenti Kırıcı] Bebek homurdanmak, sağlıklı uyumak anlamına mı geliyor? Mırıldanmanın arkasında aslında bir sır yok
önceki
Kırmızı bayrak nihayet yükseldi ve yeni Coupe SUV CX4'ten daha güzel, Tiguan CRV ağlıyor
Sonraki
120.000 Güneydoğu DX7 Prime Zhilian Star Edition hakkında ne düşünüyorsunuz?
Zotye
Farklı kıyafet kombinasyonları arasında hasar açısından çok fark var mı? Veriler, LOL koca ağızlı en yüksek hasarı ölçtü
İyi ürünler için 5 ay daha bekleyin. Geç kalmaktan korkmayın. Bu başkanlık arabası sadece iç mekânla Tiguan ihtişamını kazanabilir.
Ev için hangisini seçmeli 100.000-150.000 kaliteli araba
Moutai, likör pazarını patlatarak yeniden yükselişe geçti, acele et ve bu kaseleri iyi şaraplarla kurutmalısın!
Çin tarzı karanlık oyunların envanteri, o dönemde ölen klasikler
Land Rover, sedan Road Rover'ı zorlayacak veya Maserati'yi alacak
Avrupa'daki yedi kişilik büyük Ford Turio, bu her yönden MPV arabası!
AI smart SUV BAIC Saab X55'i 100.000'e satın almayı seçer miydiniz?
Highlander'dan daha büyük, fiyatı ondan daha düşük ve kalitesi Lexus'tan daha iyi. İyi satamayacak kadar kibirli mi?
Piyasa, tatili planlanandan önce kutluyor ve fonlar korunmaya hevesli
To Top