Biz ilişkin ayrıntılarını ele Önce pdflush
, kjournald, and
kswapd`, ilk tam olarak Linux Çekirdeğinin açısından bahsettiğinizi bağlamında biraz arka plan alalım.
GNU / Linux mimarisi
GNU / Linux mimarisi 2 alan olarak düşünülebilir:
Arasında Kullanıcı Uzay ve Çekirdek Uzay GNU C kütüphanesi oturur ( glibc
). Bu, çekirdeği kullanıcı alanı uygulamalarına bağlayan sistem çağrısı arabirimini sağlar.
Çekirdek Alanı ayrıca 3 seviyeye ayrılabilir:
- Sistem Çağrı Arayüzü
- Mimari Bağımsız Çekirdek Kodu
- Mimari Bağımlı Kod
Sistem Çağrı Arayüzü adından da anlaşılacağı gibi, glibc
çekirdek ile çekirdek arasında bir arayüz sağlayın . Mimari Bağımsız Çekirdek Kod böyle VFS'nin (Sanal Dosya Sistemi) ve VMM (Sanal Bellek Yönetimi) olarak mantıksal birimlerinden oluşur. Mimari Bağımlı kod verilen bir donanım mimarisine işlemci ve platforma özel kodu olan bileşenleri.
GNU / Linux Mimarisi Diyagramı
Bu makalenin geri kalanında dikkatimizi Çekirdek Alanı içindeki VFS ve VMM mantıksal birimlerine odaklayacağız.
GNU / Linux Çekirdeğinin Alt Sistemleri
VFS Alt Sistemi
GNU / Linux çekirdeğinin nasıl yapılandırıldığına dair üst düzey bir kavramla, VFS alt sistemine biraz daha derinlemesine bakabiliriz. Bu bileşen, fiziksel bir aygıtta (HDD / vb.) Bir dosya sistemine (ext3 / ext4 / vb.) Eşlenen çeşitli blok depolama aygıtlarına erişim sağlamaktan sorumludur.
VFS diyagramı
Bu şema, write()
bir kullanıcının işleminden gelen bir VFS'nin VFS'yi nasıl geçtiğini ve nihayetinde fiziksel depolama ortamına yazıldığı aygıt sürücüsüne nasıl gittiğini gösterir. İlk karşılaştığımız yer burası pdflush
. Bu, kirli verilerin ve meta veri tampon bloklarının arka plandaki depolama ortamına yıkanmasından sorumlu bir daemon'dur. Şema bunu göstermiyor, ancak kjournald
yan tarafta oturan pdflush
, kirli günlük bloklarını diske yazarken benzer bir görevi yerine getiren başka bir arka plan programı var . NOT: Günlük blokları, ext4 ve JFS gibi dosya sistemlerinin bu değişikliklerden önce bir dosyadaki diskteki değişiklikleri nasıl izlediğidir.
Yukarıdaki ayrıntılar bu makalede daha ayrıntılı olarak ele alınmaktadır .
Genel Bakış write()
adımlar
G / Ç sybsystem işlemlerine basit bir genel bakış sağlamak için, işlevin write()
Kullanıcı Alanı uygulaması tarafından çağrıldığı bir örnek kullanacağız .
- İşlem,
write()
sistem çağrısı yoluyla bir dosya yazmak ister .
- Çekirdek, dosyayla eşlenen sayfa önbelleğini günceller.
- Bir pdflush çekirdek iş parçacığı, sayfa önbelleğinin diske yıkanmasını sağlar.
- Dosya sistemi katmanı her blok arabelleğini bir araya getirir
bio struct
( bkz. 1.4.3, “Blok katmanı” sayfa 23 ) ve blok aygıt katmanına bir yazma isteği gönderir.
- Blok aygıt katmanı üst katmanlardan istek alır ve bir G / Ç yükseltme işlemi gerçekleştirir ve istekleri G / Ç istek kuyruğuna koyar.
- SCSI veya diğer aygıta özel sürücüler gibi bir aygıt sürücüsü yazma işlemiyle ilgilenir.
- Bir disk aygıtı ürün yazılımı, tabağın üzerindeki sektöre arama kafası, döndürme ve veri aktarımı gibi donanım işlemleri gerçekleştirir.
VMM Alt Sistemi
Daha derin dalışlarımıza devam ederek, artık VMM alt sistemine bakabiliriz. Bu bileşen, ana bellek (RAM), takas ve fiziksel depolama ortamı arasındaki tutarlılığı sağlamaktan sorumludur. Tutarlılığı korumak için birincil mekanizmadır bdflush
. Bellek sayfaları kirli olduğu için, depolama ortamındaki verilerle senkronize edilmesi gerekir. bu verileri depolama ortamıyla senkronize bdflush
etmek için pdflush
arka plan programı ile koordinasyon sağlar .
VMM diyagramı
takas
Sistem belleği azaldığında veya çekirdek değiştirme zamanlayıcısı sona erdiğinde, kswapd
arka plan programı sayfaları boşaltmaya çalışır. Yani uzun serbest sayfaların sayısı yukarıda kaldığı sürece free_pages_high
, kswapd
hiçbir şey yapacağız. Ancak, boş sayfa sayısı aşağıya düşerse kswapd
, sayfa geri kazanma işlemini başlatır. Sonra kswapd
tehcir için işaretlenen sayfaları vardır bdflush
aracılığıyla, depolama ortamına ödenmemiş değişiklikleri senkronize etmek ilgilenirpdflush
cinleri.
Kaynaklar ve Diğer Kaynaklar