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.
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.
Hiç yorum yok:
Yorum Gönder