Neden öz ve üst bağlantıları (. Ve ..) dizin girişinde depolamalıyım?


11

Hiyerarşik bir dizin yapısında dosyaları depolamaktan biraz daha fazlasını yapan bazı yerleşik cihazları hedefleyen bir dosya sistemini düşünün. Bu dosya sistemi, unix ve Windows gibi sistemlerde kullanabileceğiniz işlemlerin çoğundan yoksundur (örneğin, erişim izinleri tamamen farklıdır ve dizinlerde depolanan meta verilere bağlı değildir). Bu dosya sistemi herhangi bir sabit bağlantıya veya yumuşak bağlantıya izin vermez, bu nedenle her dosya sıkı bir ağaç yapısında benzersiz bir ada sahiptir.

Bir dizinin kendisini ve üst dizinini bir dizini temsil eden diskteki veri yapısında depolamanın herhangi bir faydası var mı?

UNIX dosya sistemi var .ve ..diskteki girişleri. Neden bunları VFS (genel dosya sistemi sürücüsü) katmanında işlemiyorlar merak ediyorum. Bu tarihi bir eser mi? Bunun iyi bir nedeni var mı, eğer öyleyse, tam olarak, gömülü sistemimle alakalı olup olmadığını belirleyebilir miyim?


Ben her zaman sadece sanal olarak mevcut ve üst dizine kolayca erişebilir böylece orada olduklarını düşündüm. İlginç bir soru, ama buraya ait mi?
Raphael

@ Raphael Sorumu çok geniş (→ “gerçek bir soru değil”) ya da belki de “yapıcı değil” diye düşündüğünüzü anlayabiliyordum, çünkü bu biraz açık uçlu. Ama bunun konu dışı olduğuna katılmıyorum: dosya sistemi tasarımı ile ilgili, bilgisayar bilimi nasıl uygulanmıyor? Konu dışı olduğunu düşünüyorsanız, lütfen metada nedeninizi açıklayın.
Gilles 'SO- kötü olmayı kes

@ Raphael sorumu düzenledim, umarım benim bakış açımın gömülü bir OS tasarımcısı olduğunun açık olması gerekir. Yorumlarınız için teşekkürler.
Gilles 'SO- kötü olmayı bırak'

Yanıtlar:


2

Üst dizine bağlantılara sahip olmak benim için çok mantıklı. Onlara sahip değilseniz, her zaman bir dizin listesiyle çalışmanız gerekir. Yani, örneğin, /home/svick/Documents/olarak temsil edilmelidir { /, /home/, /home/svick/, /home/svick/Documents }. Bunu yapmadıysanız, üst dizini hiç bulamazsınız (veya çok pahalı olurdu). Bu sadece verimsiz değil, aynı zamanda tehlikelidir. Çakışan bu tür iki listeniz varsa, bir dizini taşıdıysanız kolayca senkronize edilemez.

Öte yandan, üst dizine bir referansınız varsa, daha verimli ve daha güvenlidir.

Aslında geçerli dizine bir bağlantı olması için herhangi bir neden görmüyorum. Bazı dizini temsil eden bir yapıya sahipseniz ve bu dizine erişmek istiyorsanız, kullanmak .her zaman tamamen gereksizdir. Bu nedenle, .bağlantının aslında dosya sistemi yapısında bulunmamasını ve yalnızca sanal olmasını beklerim.


2
Aynı açıklama: Neden VFS katmanından ziyade her dosya sisteminde? Çoğu Linux dosya sisteminin girişi .ve ..girişi vardır.
Gilles 'SO- kötü olmayı durdurun'

Dediğim gibi, bence daha verimli. Yalnızca geçerli dizinde çalışabilir ve ebeveynlerine yalnızca ihtiyacınız olduğunda erişebilirsiniz. Üst bağlantınız yoksa, her zaman tüm yoldaki tüm dizinleri kökten bellekte tutmanız gerekir. Ve kullandığınız her giriş için buna ihtiyacınız olacak.
Mart'ta

1
@svick: Gilles yok değil ebeveyn bağlantıları olmamasından ile ebeveyn bağlantılı olmakla karşılaştırın. Bunları gerçek dosya sisteminde bulundurmayı, gerçek dosya sistemi ile kullanıcı alanı arasında ara bir kod katmanı (vfs) ile simüle etmelerini karşılaştırır.
rgrig

2

Daha az özel durum elde edersiniz. Birçok durumda, VFS diğer dizin adlarını işlediğinden ".." işleyebilir.


3
Dizinler sanal ise, program (usermode I varsayıyorum) yine de başka bir dizin gibi işleyebilir. Depolama düzeyinde sunmak için bağlantılara ihtiyacınız yoktur.
Aryabhata

1
Evet, ama bunu neden VFS katmanında ele almıyorsunuz? Neden ilişkili depolama alanı olsun ki?
Gilles 'SO- kötü olmayı bırak'

Kullanıcılar neden ekle / kaldır işlevlerindeki boş liste durumuna bakmak yerine bağlı listeleri bir sentinel ile uyguluyor?
rgrig

@rgrig: Yalnızca, dikkate alınan bağlantılı liste uygulamasının arabirimi, tümevarımsal veri yapılarını (C, Java, vb.) işlemede son derece kötü bir dilde yazıldığında gerçekleşir. Bu sorun, VFS katmanına bir kullanıcı açısından doğrudan erişilemediğinden bu sorunla ilgili değildir.
Stéphane Gimenez

@ StéphaneGimenez: Bu sorun olduğunu VFS çünkü alakalı olan C ile yazılmış
rgrig

2

Hayal edebilmemin tek nedeni şu senaryo:

  1. Bir dosya sisteminin orijinal dizin uygulaması aynı dizin biçiminde mevcuttu, ancak dosya yolları ve alt dizin kavramları o zaman dikkate alınmadı (Bkz . PDP-7 Unix dosya sistemi ).

  2. Sonra insanlar yol çözümlemesinin ve alt dizinlerin yararlı olacağını düşündüler!

  3. Eski uygulamalarla bir miktar geriye dönük uyumluluk sağlamak için, .ve ..öğesinin diğer dizinler gibi diskte depolanmasına karar verildi.

Öyleyse, belki de 40 yıllık yazılımla geriye dönük uyumluluk uğruna, bu işe yaramaz eserlerle kalıyoruz? Güvenilir senaryo?


Not: Ayrıca, gerçek ana dizininizin inode numarasını yine de bir yerde saklamanız gerektiğinden (şu anda dizinlerdeki sabit bağlantılara izin verildiğini unutmayın) bu girişleri dizin listesine eklemek tamamen aptalca değildi ve kendi inode numarası iyi bir sağlık kontrolü olabilir.


1

Ben uygulamak için bir neden görmüyorum .ve ..oldukça diğerinden daha ya düzeyde. Ancak, gömülü sistemleri hedefliyorsanız, kaydedebileceğiniz herhangi bir katman dolar kazanabilir, bu nedenle her şeyi mümkün olduğunca düşük bir şekilde denemek ve uygulamak mantıklı olabilir.

Genel ihtiyaç gelince .ve ..onlar olmadan göreli yolları nasıl ifade edersiniz? En azından ..mevcut alt ağaçtan ayrılan yollar için vazgeçilmezdir. Bu tür yollara ihtiyacınız yoksa (belki ağaç erişim ayrıcalıklarını kodlamanın ilkel bir yoludur?) ...

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.