Unix dosya sistemi karmaşık bir yapıya sahip.
Per Process File Table
Her uygulamanın açık tuttuğu file descriptorları sakladığı bir tablo var. Buna "Per Process File Table" deniliyor.
Tablodaki her satır ise işletim sistemin çekirdeğinde bulunan "System Open File Table" tablosundaki bir satırı işaret ediyor. Aşağıda şekili
buradan aldım ve uygulama ile çekirdek arasındaki bağlantıyı gösteriyor.
Per Process File Table ve fork()
Unix üzerinde çalışan bir process
fork()
sistem çağrısını kullanınca yeni yaratılan process, onu yaratan process
ile birebir aynı file descriptorlara sahip oluyor. Aşağıda bunun bir
örneğini görebilirsiniz.
İki farklı process aynı dosyaları nasıl paylaşıyor ?
Bunun
cevabı işletim sistemi tarafından yönetilen "Open File Table" veri
yapısında saklı. Bir dosyayı open() komutuyla açınca bize verilen sayı
aslında "Open File Table veri yapısına erişmek için verilen bir indeks.
Aşağıdaki şekli
buradan aldım ve durumu çok güzel özetliyor.
fork()
ile process file descriptor yeni yaratılan uygulamaya aktarılıyor. Eğer
yeni uygulama bu dosya'dan okuma yaparsa, onu yaratan uygulama da kendi
file descriptor'ının değiştiğini görecektir. Sebebi ise yukarıdaki veri
yapısıdır.