Dosya Sistemi Nedir? Fat Dosya Sistemi.

Ekim 21, 2009 at 1:30 am (Sistem Programlama) (, , , , )

Dosya sistemi işletim sistemlerinin olmazsa olmazıdır. Zaten dosya sistemi olmayan birşeye işletim sistemi demek de pek mantıklı değil.

Bellek yönetimi, koruma mekanizması gibi önemli konulara geçmeden önce, daha kolay anlaşılır bir konu olan dosya sistemini aradan çıkarayım : )

Öncelikle harddisklerin yapısı hakkında biraz bilgi verelim.

Disklerin okunması ve yazılması, okuma/yazma kafası sayesinde olur.  Bu kafa  ileri geri hareket ederek dönen diskin her sektörüne  erişebilirler.

kafalar

Çizimim biraz kötü ama kusura bakmayın: ) …………………………………………….

Disk, erişim kolaylığı açısından mantıksal bölümlere ayrılmıştır.

Bir diske yazılabilecek veya  okunabilecek en küçük veri kümesi bir sektördür.  1 baytlık bir veri yazılacak olsa bile diske en az bir sektör yazılır.

Disk, eş merkezli dairelere bölünmüştür ve her bir daireye  iz (track) denir.  İzler sektörlerden oluşur. Her izde eşit sayıda sektör bulunur.

sektor

Görüldüğü gibi en iç izde de en dış izde de aynı sayıda sektör bulunmakta. Farklı izler farklı çizgisel hızda döndükleri için bu gereklidir.

Ayrıca alt ata bulunan diskler deki aynı izler bir silindir oluşturur. Örneğin birinci diskteki 10. iz ve ikinci diskteki 10. iz toplamda bir silindir oluşturur.

Harddisk mantığını kavradıktan sonra Dosya sistemine neden ihtiyaç duyarız bundan bahsedelim.

Kullanıcılar diske mantıksal dosyalar üzerinden erişirler. Mesela bir klasör oluşturur, adına MP3 der ve müziklerinizi içine yerleştirsiniz. Başka bir klasör’e programlar der ve içine programları yerleştirirsiniz.

Bu iki klasör mantıksal olarak birbirinden farklı olmasına karşın,  işlemci açısından aralarında hiçbir fark yoktur. İşlemci harddiski bir sektör deryası olarak görür sadece.  Yani onun için dosya, mp3, program yoktur. xxxx numaralı sektör vardır.

Oysa kullanıcının hangi dosyasının kaçıncı sektörde olduğunu, devamının hangi sektörlerde bulunduğunu aklında tutamaz.

O halde bunları tutacak bir sistem programı yazılırsa biz sadece dosyanın ismiyle o dosyaya erişebiliriz.  İşte bu sistem programı dosya sistemidir.

Öyleyse dosya sistemi, dosyanın hangi sektörden başladığını, boyutunu, bir sektörden büyükse devamının hangi sektörlerde olduğunu, adını ve diğer bilgilerini tutan temel işletim sistemi yapısıdır.

Dosya sistemlerinin dosyaları tutma şekilleri farklılık gösterir. Ancak basitliği ve kullanışlılığı açısında FAT dosya sistemini burada anlatmak istiyorum.

Fat Dosya Sistemi

Fat dosya sistemi, fat tablosundaki her elemanın bit sayısına göre, fat 12, fat 16, fat 32  olarak üçe ayrılır.

Biz fat 12 sistemini inceleyeceğiz ancak hepsi aynı mantık.

Fat dosya sisteminin temel mantığı dosyaların  hangi bölümlerinin hangi sektörlerde olduğunun bir tabloda (Fat tablosu) tutulmasına dayanır.

Fat 12 dosya sisteminde bazı sektörler dosya sistemi tarafından özel amaçlarla kullanılır.

Boot sektör: Disk yapısı, dosya sistemi ile ilgili bilgiler boot sektörde saklanır.

1-9 arası sektörler       :  Burada Fat tablosu bulunur.

10-18 arası sektörler :  Burada yedek Fat tablosu bulunur.

19-32 arası sektörler : Burada da kök dizin bulunur..

Kalan tüm sektörler veri sektörleridir, özel anlamları yoktur.

Şimdi biraz daha ayrıntılı açıklayalım.

Boot sektör

Bu sektör diskin fiziksel bilgilerini, dosya sistemi hakkında temel bilgileri tutar. Ayrıca işletim sisteminin yüklenmesi bu sektör aracılığı ile olur. Dolayısıyla Diskteki en önemli sektördür.

Boot sektördeki önemli bilgiler ve yerleri şöyledir.

boot

Görüldüğü gibi boot sektör bir jmp komutu ile başlamaktadır. Bu komut ile bilgi amaçlı olan baytlar atlanarak işletim sistemini yükleyen koda geçilir.

Kök Dizin

Kök dizin, dosya adı, uzantısı, ilk sektör  gibi bilgileri tutan ana dizindir.  Bir dosya ismi alındığında başvurulan ilk yer kökdizindir.

Dosya ismi kök dizin girdileri arasında aranır ve bulunduktan sonra bu dosyanın ilk sektör numarası bulunur. Daha sonra Fat tablosuna başvurulur.

Dosya sisteminde dosyalar şu formda tutulur.

Dosya Adı               : 8 bayt

Dosya Uzantısı     : 3 bayt

Dosya özellikleri :  1 bayt

Ayrılmış baytlar : 10 bayt

Saat                          : 2 bayt

Tarih                        : 2 bayt

İlk  sektör              : 2 bayt

Dosya boyutu      : 4 bayt

Ayrıca dosya adının ilk karakteri de önemlidir,  ilk karakter 0 ise kök dizindeki o giriş kullanılmamaktadır ,  eğer 0x5 ise dosyanın ilk harfinin 0xE5 olduğu anlaşılır, eğer ilk karekter 0xE5 ise o dosya silinmiştir.

Fat tabloları

Dosyalara ait sektörlerin bağlı liste yapısıyla tutulduğu tablolardır. İlk tablo asıl kullanılan tablodur, 2. tablo ise yedektir ve kullanılmaz.

Bir dosya ismi ile dosyaya erişmeye çalıştığımızda öncelikle kök dizin girdileri arasında dosya ismi bulunur.  Daha sonra o dosyanın ilk sektör bulunur ve Fat tablosu ile sonraki sektörlere ulaşılır.

Her bir fat girdisi 12 bit uzunluğundadır. Bu fat girdilerinde bazı değerler özel anlam taşır. İlk iki fat elemanı (0,1) kullanılmaz.

Eğer fat elemanı içindeki değer 0 ise o sektör kullanılmıyordur, 0xFF0-0xFF6 ise ayrılmış sektördür,

0xFF7 ise bozuk olarak işaretlenmiş sektördür,

0xFF8-0xFFF ise o dosyadaki son sektördür.

Şimdi Fat tablosunun yapısını ayrıntılı olarak inceleyelim.  Fat tablosunun her elemanı dosya sistemindeki bir sektörü simgeler.  Yani her fat indexi o numaralı sektörü simgeler. Ancak içinde tuttuğu 12 bitlik değer ise birsonraki sektörün yerini gösterir.

Örneğin kök dizinden aldığımız sektör 100 olsun.  Bu durumda dosyanın 100 numaralı sektörden başladığı bellidir, dosyanın diğer sektörlerine erişmek için fat tablosundan 100 numaralı fat elemanı bulunur ve bu elemanın içerdiği değere bakılır. Örneğin bu değer 58 ise, dosyanın ilk parçası 100. ikinci parçası 58.  sektörde demektir.

Daha sonra 58 numaralı fat elemanına bakılır, bu değerde örneğin 0xFF8 değerini taşıyorsa o dosyanın sonuna gelinmiş demektir.  Demekki dosyamız 1 kb boyutundaymış.

Örneğin, asd.txt isimli dosyayı arıyoruz, öncelikle kök dizindeki girdiler taranarak bu isimli dosya bulunur. Daha sonra yine kök dizinden bu dosyanın ilk sektörü bulunur. Örneğin 60 olsun.  Daha sonra 60. fat elemanından sonraki sektör numarası alınır örneğin 86 olsun. Daha sonra 86 fat elemanından bir sonraki sektör numarası alınır örneğin 87. Son olarak 87. fat elemanından 0xFF8 değeri alınır ve artık dosya sonu oldugu anlaşılır.

Bu durumda da dosyamız, asd.txt dir ve 60,86,87 sektörlerde bulunur. Bu sektröler belleğe yerleştirilerek istenilen işlem yapılabilir.

Bu arada şunu da belirteyim. Her fat girdisi 12 bit(1,5 bayt) olduğu için örneğin 10. fat elemanı 15. bayttadır. Bu yüzden fat elemanına erişilirken bu dönüşümün yapılması gereklidir.

Fat elemanı indexi = ilk sektör * 3 /2

Dönüşümü yapılarak doğru indek bulunur.

Aslında fat 12 sisteminde bulunan bu indexlere eklemeler yapılır, her fat elemanının içerdiği değeri bulmak için bazı dönüşümler yapılır, bulunan sektör sayısına 31 eklenir vs. Bu tür ufak tefek matematik hesabı yapmak gerekir ancak fat dosya sisteminin temel mantığı böyledir.  Bu bahsettiğim düzeltmeleri filan burada anlatmamın bir mantığı yok.  Daha sonra kod yazarken bu işlemleri mecburen yapacağımız için ayrıntısıyla bahsedeceğim.

Yine de burada anlattığım sektör bulma olayının (sayısal anlamda) tam doğru olmadığını bilin. Aradaki matematiksel hesapları önemsemeyin : ).

Artık harrdiskte bölünme (fragmentation) ve cluster  kavramlarından bahsetme zamanı geldi sanırım.

Diskte parçalanma (fragmentation) ve Cluster kavramı.

Örneğin 120 kb boyutunda bir dosyamız olsun. Bu dosyayı ardarda diske yazdığımızı düşünelim.  Peşinden birçok dosya daha eklediğimizi düşünelim.

Daha sonra 120kb lik dosyayı silmemiz gerekti ve sildik. Doğal olarak harddiskimizde 120kb lik bir boşluk oluştu. Sonra elimizdeki 130kb lik dosyayı yeniden diske yazmak istediğimizde 120kb lik boşluğa sığmayacağı için yeni bir bölgeye yazılması gerekecek. Yani 120 kb lik boşluğu ondan daha büyük dosyalar için kullanamayacağız.

İşte bu şekilde küçük boşluklar biriktikçe diskimizin %50 si dolu olduğu halde diskimizin %80-90 lık bölümünü kullanamayız. Bu soruna parçalanma (fragmentation) denilmektedir.

Bu sorunun çözümü cluster yöntemi ile çözülür. Bu yöntemde harddisk 4-8 veya daha fazla sektörden oluşan ve cluster denilen atomik parçalara ayrılır.

Yani diske yazılabilecek en küçük veri artık bir sektör değil bir cluster dir. Genelde bir cluster boyu 8 sektör yani 4 kb dir.

Harddisk 4 kb lik bölümlere ayrıldığı için 1 baytlık bir veri bile yazacak olsak bir cluster yazmış oluruz.

Bu durumda büyük bir dosya harddiske yazılmadan önce clusterlere ayrılır ve her bir clusteri harddiskteki boş clusterlere yerleştirilir. Daha sonra dosya sistemine bu clusterlerin yerleri girilir.

Deminki parçalanma sorununa dönelim, cluster yöntemini kullandığımızda veri 120kb lik tek parça değil 30 tane cluster olarak uygun boşluklara yazılır. Daha sonra bu veri silindiğinde tekrar yazılacak olan 130 kb lik dosyanın ilk 30 clusteri silinen dosyadan kalan boşluğa yerleştirilir ve sadece kalan 3 cluster yeni bir bölgeye yazılır. Böylece parçalanma sorunu ortadan kalkar ve harddisk son derece verimli kullanılmış olur.

Peki bir cluster boyu kaç sektör olmalıdır. Cluster boyutu çok küçük olursa dosya birçok küçük parçaya ayrılacağından dosyaya erişmeye çalıştığımızda harddisk kafası fazla hareket eder ve dosyaya erişim yavaş olur.

Cluster boyu çok büyük olduğunda ise  dosya sonunda kalan boşluklar çok fazla olur ve harddisk verimsiz kullanılmış olur.

Örneğin bir cluster boyu 60 sektör yani 30 kb olsun. Harddiske yazacağımız veri ise 31 kb olsun. Bu durumda 30 kb ilk clustere 1 kb ise ikinci clustere yazılır. Yani 1 kb lik bir veri için 30 kb lik alan işgal edilmiş olur. Dosya sayısı arttıkça bu alanlar hatırı sayılır değerlere ulaşmaya başlar. Ayrıca 512 baytlık bir metin dosyası için de 60 katı yer ayrılması iyi bir çözüm değildir.

İşte bunun için en uygun değer 4 kb yani 8 sektördür.

Windows Xp sisteminde de bir cluster 4 kb dir. Bunun bellek yönetimi açısından avantajları da vardır.  Çünkü bellek sayfaları da 4 kb dir ve bir program disk üzerinde 30 cluster ise bellek üzerinde de 30 sayfa olmaktadır.

Ayrıca XP de cluster boyunu test etmek için şu işlemi yapabilrisiniz.

Masaüstünde yeni bir metin dosyası oluşturun ve içine bir kaç harf yazın. Dosyayı kaydediğ özelliklerine baktığınızda gerçek boy x(kaç harf yazdıysan) bayt diskteki boyut 4096 bayt yazar.

.txt dosyasının içine 4095 bayt yazarsanız diskteki boyut 4 kb, iki harf daha ekleyip 4097 bayt yazarsanız diskteki boyut 8 kb olacaktır. Yani ikinci clustere geçilecektir.

Dosya sistemi hakkında bilmemiz gerekenler şimdilik bu kadar, sonraki yazılarda artık bellek yönetimi ve korumalı mod mimarisine geçeceğiz.

9 Yorum

  1. emretinaztepe said,

    On numara:)

  2. kutalmis said,

    Teşekkür ederim dostum :)

  3. İbrahim Akgül said,

    Teşekkürler dostum güzel bilgiler için. Aynı makalenin bide NTFS’lisinden isteriz :)

  4. kutalmis said,

    NTFS sistemini hiç bilmiyorum ancak kaan hocanın dediğine göre çok daha karmaşıkmış ve henüz tam dökümante edilmemiş.
    Ama kendi dosya sistemimi yazmayı düşünmüyor değilim :)

  5. İbrahim Akgül said,

    Microsoftun pis huylarından biri işte. Undocumented olayını çok seviyor , sanırım dünyayı ele geçirecek bir os yazmayı hayal ettiğiden bilgilerinin gizli kalmasını istiyor :) Allah’tan bizim gibilerde çözüp document etmeyi bi o kadar seviyor. Ntfs için http://www.ntfs.com/ çok iyi bir kaynak. İnş tez zamanda merak sarar konuyu yalayıp yutup bize bu güzel anlatımınla terkrar ntfs hakkında makale yazarsın. Zihin açıklığı ve zaman mefhumunu en iyi şekilde değerlendirmeni diler saygılarımı sunarım.

  6. kutalmis said,

    Çok sağol hocam, Fat 12 disketlerde kullanıldığı için mecburen öğrendim ama Windows ile pek ilgilenmemiştim bugüne kadar. Dolayısıyla ntfs yi de pek inceleme şansım olmamıştı :).
    Link için teşekkür ederim en kısa zamanda inceleyecem. Zaman meselesine gelirsek, eskiden makalelerini zevkle okuduğum ve saygı duyduğum abilerin hepsi zaman bulalamaktan şikayetçi ve iş güç yüzünden artık bu işlerle ilgilenemiyor. bu yüzden ben de henüz öğrenciyken öğrenebileceğim kadar şey öğrenmek istiyorum.

  7. Tolga ERDEM said,

    Merhaba arkadaşlar,
    Güzel anlatım için teşekkür ederim. Bir noktayı tam anlamadım:
    Cluster sectorlerden oluşuyorsa bi clusteri oluşturan sectorler ardışık mı?
    FAT tablosunda bir clusteri oluşturan sektorler için verilen bilgilerde her sektor bir sonrakini mi gösteriyor?
    Daha da açarsam:
    1 cluster = 8 sector (bu sectorler yanyana mı, yoksa rastgele mi seçiliyor?)
    Bu 1 cluster yani 8 sector için fat tablosunda 8 entry var. Sectorler eger yanyana ise bu entryler hep bi sonrakini mi gösteriyor?
    Teşekkür ederim.

  8. akl said,

    yani dosya sistemi işletim sisteminin bir bölümüdür ve dolayısıyla bir sistem yazılımı mıdır?

  9. Misafir said,

    Emegine saglik sayende fat 12 ve parçalanmayı biraz olsun anlamış olduk

Misafir için bir cevap yazın Cevabı iptal et