Yanıtlar:
Bunun nedeni, Unix yürütülürken yürütülebilir bir dosyayı kilitlememesi veya Linux gibi olsa bile bu kilit dosya adı için değil inode için geçerlidir. Bu, açık kalmasını sağlayan bir işlem, dosya silindikten sonra bile (eski olarak bağlanmış) aynı (eski) verilere erişmek ve aslında bir paket güncellemesinin yapması gereken aynı adla yeni bir taneyle değiştirilmek anlamına gelir.
Unix ve Windows arasındaki ana farklardan biri budur. İkincisi, genellikle tam bir yeniden başlatma gerektiren bazı paketleri güncellemek veya hatta yüklemek için büyük bir güçlük yaratan dosya adları ve inode'lar arasında bir katman eksik olduğundan, kilitli bir dosyayı güncelleyemez.
Yürütülebilir dosyalar, genellikle bir kez açılır, bir dosya tanıtıcısına eklenir ve tek bir çalıştırma süresi boyunca yeniden açılan ikili dosyalarına sahip bir dosya tanıtıcısına sahip değildir. Örneğin, yürütürseniz bash
, exec()
genellikle yalnızca bir /bin/bash
kez işaretlendiğinde inode için bir dosya tanıtıcısı oluşturur - başlatma sırasında.
Bu genellikle, yürütme sırasında kendilerini yeniden okumaya çalışmayan basit ikili dosyalar için (çağrıldıkları yolu kullanarak), önbelleğe alınan içeriğin sarkan bir inode olarak geçerli kalması anlamına gelir. Bu, aslında çalıştırılabilir sürümün önceki sürümünün bir kopyası olduğu anlamına gelir.
Daha karmaşık durumlarda, bu sorunlara neden olabilir. Örneğin, bir yapılandırma dosyası yükseltilebilir ve daha sonra yeniden okunabilir veya program, yürütüldüğü yolla yeniden çalıştırılabilir. Programlar birbirine bağlıysa ve biri yükseltme işleminden önce, diğeri sonra (muhtemelen ilk program tarafından) yürütülürse de sorunlar olabilir. Bu, bazı kütüphaneler için de geçerlidir.
Basit kullanım durumlarında, işlemi yeniden başlatmadan yükseltmek güvenlidir.
bash
ikili yaklaşık 4 4 sayfadır, hepsinin ortalama bir oturumda kullanıldığından emin değildir.
ialloc()
Sayfaların kendi hafıza haritalamalarından değil, okuma üzerine bir çekirdek yapısına girmekten bahsediyordum . Modern ext * dosya sistemlerinde, inode'un çekirdek içinde (ve VM alt sisteminin içinde) tutarlı olduğunu düşünmedim mi?