23 Mart 2012 Cuma

Dosya sistemi nedir? - II

Dosya sistemi nasıl çalışır? Tek sokaklı muhtarlık...


Aslında bu yazıyı yazmamın tek sebebi az sonra kullanacağım analojinin çok hoşuma gitmiş olması.

Dediğim gibi I/O yaparken disk bilgisayar için yalnızca uzuuun bir satırdır. Bilgisayar diske bana satırın 15. sırasındaki harfi ver der, disk verir. Bana 498567. sıradan 7893249. sıraya kadar ki harfleri ver der, disk verir. Diskin ne dosyalardan ne de dizinlerden haberi yoktur.

Şimdi diski uzun bir sokak, diskin üzerine yazılan verileri de bu sokakta ikamet eden insanlar olarak düşünelim. Dosya sistemi dediğimiz şey bu mahalledeki ikametgahları tutan muhtarlıktır. Mahalle dışından biri gelip birini bulmak istediğinde dosya sistemine sorar, dosya sistemi de sokağın neresinde olduğunu söyler. Bilgisayar bir dosyanın diskin kaçıncı sırasından başladığını, nerede bittiğini, ne kadar yer kapladığını dosya sistemi sayesinde bilebilmektedir.

Peki diski biçimlendirmek/formatlamak ne anlama gelmektedir? Diski formatlarken elimizde ne gibi seçeneklerimiz vardır? Farklı dosya sistemlerinin farkı nerededir?



Diski belli bir dosya sistemine göre biçimlendirirken dosya sisteminin en başına bir muhtarlık kuruyoruz. Bu muhtarlık sokağın üzerindeki evlerin numaralarını belirliyor. Aslında bir yandan evlerin boyutunu da (NTFS için clustersize, ext tipi fsler için blocksize) belirliyor diyebiliriz. Dizin ve dosya isimlerini de sülaleler ve aileler gibi düşünürsek, bu bilgilerin ne tür bir defter yapısı içinde tutulacağı da muhtarlığın tipine göre değişiyor.

Peki diyelim ki diskimizi formatladık, artık bir muhtarlığımız var. Muhtarlığın içinde, dolapta yepyeni klasörler, boş dosyalar, A4 boyutunda doldurulmamış ikametgah kağıtları hazır bekliyor. Sokaktaki evleri de her eve 256 kişi sığacak şekilde düzenledik, 256 kişilik haneler halinde birden başlayıp numaraladık. Şimdi ne olacak?

Dosya sistemine linkleri, kısayolları saymazsak iki şey yazabiliyoruz. Dizinler ve dosyalar.

Şimdi yeni formatlanmış diskimizde "Belgelerim" diye bir dizin oluşturup onun içinde de "notlar.txt" diye bir dosya oluşturduğumuzu farzedelim. Bu durumda işletim sistemimiz muhtarlığa gidip Belgelerim sülalesine mensup, notlar.txt isimli bir ailenin kaydını açmasını ve bu aileye bir ev tahsis etmesini istiyor. Diskimiz yeni formatlanmış olduğundan muhtarlık binasının yanındaki 1 numaralı evi verdiğini varsayalım.

Çok güzel. Şimdi notlar.txt dosyasını bir editörle açıp 50 karakterlik bir yazı yazdığımızı, sonra da kaydet tuşuna bastığımızı düşünelim. Bu durumda işletim sistemi muhtarlığa Belgelerim sülalesine mensup notlar.txt ailesinin nerede oturduğunu sorar. 1 cevabını alınca da diske bu 50 karakteri 1 numaralı evin bulunduğu yere sırasıyla yerleştirmesini söyler. Muhtarlık da notlar.txt ailesini 50 kişilik bir aile olarak not eder. Bundan sonra dosya içindeki bilgileri okumak istediğimizde yine muhtarlığa notlar.txt ailesinin ikametgahını sorulur, 1 nolu evin içindeki bilgiler disk tarafından yine sırayla bilgisayara aktarılır.

Peki her bir ev 256 kişi barındırıyor demiştik. notlar.txt dosyasının boyutu 256 karakteri geçerse ne olur?

Bu durumda bu aile artık eve sığmadığından muhtarlık devreye girerek bu aileye ikametgah olarak sokaktaki ikinci evi de verir. Dosyayı okurken 256 karakterlik bilgiyi aldıktan sonra muhtarlığın adetine göre ya evdeki son kişi ailenin kalanının 2 numarada oturduğunu söyler, ya tekrar muhtarlığa gidip ailenin (dosyanın) kalanının nerede oturduğu sorulur ya da başka bir şekilde dosyanın kalanının ikamet ettiği eve yönlendirilir. Bu tamamen dosya sisteminin dosya içeriklerini depolamada kullandığı veri yapısı ile ilgilidir. Biz evdeki son kişinin ailenin devamının oturduğu yeri söylediği, içeriğin linked list şeklinde tutulduğu bir dosya sistemi kullandığımızı varsayalım.

Şimdi diyelim ki notlar.txt dosyasına yazdık da yazdık. 5 evi doldurduk. Yeni bir dosya açtık işler.txt diye, dosya sistemi bu aileye de (yani dosyaya) 6 nolu evi verdi. O dosyaya da yazdık yazdık, iki evi doldurduk. Şimdi tekrar notlar.txt'ye yazdığımızda ve 5. evi de doldurduğumuz da ne olacak? 6. eve girip işler.txt dosyasının üzerine yazmamamız lazım.

Bu durumda dosya sistemi 5. evin sonuna dosyanın devamının 8. evde olduğunu yazar ve notlar.txt ailesinin devamını 8. eve yerleştirir ve devam eder. Yeni bir dosya oluşturulduğunda yine ilk boşluktan ev verilir. Diski okurken de dosya sisteminin yönlendirmesi ile okunan dosyanın (ailenin) bulunduğu evler sırasıyla gezilip içlerindeki bilgiler alınır.

Bir dosyayı sildiğimizde aile adı muhtarlık kayıtlarından silinir. Yeni bir dosya geldiğinde büyük olasılıkla silinen ailenin ikamet ettiği evlerden birine yerleştirilecektir. Yine bir dosyanın boyu küçüldüğünde dosyanın artık kullanmadığı evler boş olarak işaretlenir, yeni dosyalar geldiğinde bu evlere yerleştirilirler.

Peki dizinler ve dosya isimleri değişirse ne oluyor? Yani diske yeni bir veri yazmıyoruz da, notlar.txt dosyasını Belgelerim dizinden Eski Yazılar dizinine taşıyoruz diyelim. Bu durumda evlerde oturanlar açısından hiç bir değişiklik olmamaktadır. Yalnızca muhtarlık kayıtlarında notlar.txt ailesinin bağlı olduğu sülale/soyağıcında değişiklik yapılır ve notlar.txt ailesinin Belgelerim sülalesindeki kaydı silinir, Eski Yazılar sülalesine kaydedilir. Veriler diskin üzerinden silinmez, başka evlere taşınmaz. Aynı şekilde dizinleri de taşıdığımızda dosya sisteminin tuttuğu soyağacı içinde yerleri değişmektedir yalnızca. Bir dosya ismini değiştirdiğimizde de yine yalnızca muhtarlık kayıtlarındaki aile ismi değişir, veriler aynı evlerinde oturmaya devam ederler.

İşte bu şekilde diskin ortasındaki bir dosyaya eriştiğimizde yerini bulabiliriz, silinen dosyaların bulunduğu alanları başka dosyaların üstüne yazma tehlikesi olmadan kullanabiliriz, diskteki dosyaları istediğimiz zaman hızlıca listeletebiliriz. Devamı...

Hiç yorum yok:

Yorum Gönder