Български English [beta]
Здравей, гостенино. (вход, регистрация)
Екип Партньори Ресурси Статистики За контакт
Добави в любимиПредложи статияКонкурсиЗа рекламодатели
Начало
Форум
Към Кратки
Всички статии
 Литература
 Музика
 Филми и анимация
 На малкия екран
 Публицистика
 Популярни
 Кулинария
 Игри
 Спорт
 Творчество
 Други
Ключови думи
Поредици
Бюлетин

Търсене

Сивостен :: Файлови системи (статия) - Компютри
Файлови системи

Поредици: Софтуер

Автор: Иван Ж. Атанасов, петък, 08 юни 2007.

Публикувано в Статии :: Популярни; Предложи Гледна точка

Намали размера на шрифтаУвеличи размера на шрифта

Накратко

Виж още: Компютри [28]

Много се чудех дали да започна да пиша тази статия, но след като ми зададоха дълбокомисления въпрос „Като си сменя FAT-ката на NTFS-ка ще ми се разбъркат ли директориите” реших, че е време да го направя. Пък навремето написах, че плаващите прозорци и съмнителната сигурност на Windows Vista не са някакъв гигантски еволюционен напредък, имайки предвид, че файловата система си остана добре познатата ни NTFS, която колкото и да е добра определено не е върхът на технологическия напредък в софтуерната индустрия.

Файловата система – що е то и за какво ни служи

Какво е файлова система? Накратко казано това е абстракция на данните на твърдия диск, на компактдиска, дискетата и т.н. Съгласете се, че е далеч по-удобно да знаем, че файлът е файл, вместо да си пишем на листче от кой до кой адрес е новата джитка и да имаме инструменти за копиране, местене, триене, защита на данните, вместо ръчно да задаваме на PC-то команди от вида копирай от този до този адрес, на областта започваща с този адрес. Освен, че ни лишава от това съмнително удоволствие, наличието на операционна система (и прилежащата към нея файлова такава) ни позволява да организираме файловете си в директории, гарантира ни целостта на данните, както и някои други „екстри”.

Файловата система – две лица. Логическа организация

Може би най-важното за една абстракция на данните са имената на файловете. Хубаво е да можем да разпознаваме типа на файла. Затова е прието типа да се изписва след името, като се разделя с „.”, например file.txt – за текстови, file.exe за изпълним и т.н. В DOS например, разширението е задължително, докато при *nix операционните системи, това е опционално.

Самите файлове могат да бъдат няколко различни вида – файл, директория (каталог, папка), специални файлове, програмни канали и т.н. Директориите ни служат за организация на файловете. Естествено от гледна точка на програмиста е най-лесно да бъде реализирано „всичко в един каталог”, но това освен, че е непригледно е и доста затрудняващо работата с данните от гледна точка на потребителя. Точно затова директориите се организират в йерархична структура. В DOS например се изгражда по едно дърво за всяко устройство, докато в *nix операционните системи има само един коренен каталог. При тази структура всеки лист на дървото е файл, а всеки вътрешен възел – директория.

Освен името всеки файл има някакви атрибут, като например флагове за read only – само за четене, за hidden, system и т.н, както и дата на създаване, собственик и др.

Файловата система – две лица. Физическа организация

След като е решен проблема с логическата организация на файловете естествено остава физическата страна. Та пионерите в минното дело в социалисти... опа, това беше от друга статия. Та пред първият човек, такова програмист, решил да надскочи сянката си и да напише файлова система са стояли 2 основни проблема – как да разпредели свободното място измежду напиращите да го заемат файлове и как да разпознава свободното от вече заетото място на диска.

Най-лесно е да разпределяме свободното пространство статично, тоест още при създаване на файла да се указва максималната му дължина, да му се разпредели това място и потребителя да се моли на господ, файла му да не се раздува повече от изначално зададеното. Това естествено е неудобно – създава излишества, ако фаловете не достигнат максималните си големини и недостици, ако ги надхвърлят. Второто е лесно разрешим проблем – просто може да се дава допълнителна област, в която файла да нараства, но първото си остава и в един момент на диска ще има достатъчно свободно място, което обаче не може да бъде разпределено на нови файлове, тъй като не е в една област. Затова и този подход се оказва неудачен.

Другият възможен подход е да нацепим диска на блокове с фиксиран размер и да разпределяме на файловете определено количество от тях, които не е задължително да са съседни. Звучи прекрасно, но се появява проблема с неефективния последователен достъп, който все пак е решим – хората са измислили и дефрагментиращи програми за тази работа.

Важно е и решението как да се съхранява информацията за свободните блокове на диска. Единият вариант е в първият свободен блок да има адреса на следващият, в следващият на по-следващият и т.н. Другият е да се съхранява в битова карта – един масив, в който 1 например означава зает, а 0 – свободен. Този подход ни дава една компактна структура, в която лесно се отчита физическото съседство на блоковете.

Остава да се реши проблема за съхраняването на информацията за заетите от даден файл блокове. В DOS, например, се използва картата на свободните блокове, която се разширява до File Allocation Table, в която ако блока е зает се записва не просто 1-ца, а номера на следващият блок на файла. Неудобството е в този случай е, че тази карта е винаги заредена в паметта и за големи дискове става голяма, което води до неефективно използване на оперативната памет. Съвсем естествено следва въпроса – не е ли по-добре да зареждаме само информация за отворените файлове? Да, по-добре е и е реализирано. В операционните системи страницата с информацията за заредения файл наричаме индекс.

Самият индекс може да бъде реализиран по няколко начина – като списък, което е удобно за последователен, но затруднява произволният достъп до файла. Може да бъде реализиран и като дърво, както е направено в UNIX/Linux операционните системи, а може да е и B+ дърво с няколко нива, в зависимост от фрагментацията на файла, какъвто подход са избрали разработчиците на HPFS – файловата система на OS/2.

Файловата система на DOS

Да преминем на малко конкретни примери за файлови системи. Да започнем с тази на MSDOS. Тя е реализирана по следният начин – дисковото пространство е разделено на сектори с размер 512 байта. Броят им зависи естествено от диска. За всяко устройство се изгражда отделен том (файлова система), който се състои от boot sector (програмите за първоначално зареждане на операционната система и данни за тома), FAT таблицата (заради критичността на този елемент има 2 копия), коренния каталог (както при s5fs и ext2 структурата е йерархична, но за всеки том има отделен коренен каталог) и накрая следват данните (всички файлове и директории).

FAT съдържа елементи с дължина 12 или 16 бита, като нулевият и първият са информацията за формата на тома, а следващите с кодове от 0 до максималният отбелязват следващите от веригата, свободните и заетите клъстъри, като 0 е за свободен, а максималният за край.

Файлова система на UNIX

При изграждане на s5fs дисковото пространство се разделя на boot блок, супер блок, индексна област и област за данни. Boot блока съдържа естествено програмите за първоначално зареждане на операционната система. Супер блокът от своя страна носи информация за физическата структура на файловата система. В индексната област са индексните описатели и в областта за данни - данните.

Нека видим какво се случва в индексната област. Там за всеки файл има индексен описател. Този описател съдържа данните за типа, размера, датата на създаване и последен достъп, както и собственика на файла. Ако файлът е специален (устройство) се съхранява идентификаторът на устройството.

В специално поле от тези записи се съхраняват 10 адреса на първите 10 блока заемани от файла, но както се досещате, един файл може да бъде и по-голям. Тогава в играта влиза косвеното адресиране - адресите на следващите блокове от файла се пазят в областта за данни. Възможна е двойна и тройна адресация, като този подход дава възможност при блок от 4 килобайта да съществува файл с големина 4 терабайта.

Суперблокът съдържа размера на индексната област, максималният блок, броят свободни блокове и т.н. Тъй като ОС няма как да разпознава свободен от зает блок има и един масив, глава на списък от свободни такива.

В суперблока са записани и определено количество свободни индексни описатели - един друг ресурс управляван от файловата система. За разлика от свободните блокове, свободните индексни описатели се разпознават лесно, затова не се пази информация за всички, а само за определено количество.

Файловата система на Linux

Файловата система на Linux се нарича ext2 и е базирана на разгледаната малко по-горе операционна система на UNIX s5fs. При изграждането на нова ext2 файлова система, дискът се разделя на boot block (къде без него) и известно количество групи, които съдържат в себе си собствени супер блокове, описатели, битови карти на свободните блокове и описатели, инексни области и данни.

Битовите карти естествено описват ресурсите описатели и блокове за данни. Индексните описатели пък са с дължина 15 блока, като реализацията им е като при s5fs по схемата 12 + 1 + 1 + 1. Тук обаче има и описатели на групите. Те съдържат адресите на битовите карти, на първият блок на индексната област, броят свобони блокове, брой директории.

Също така освен характерните за почти всяка файлова система флагове на файловете, при ext2 имаме и флагове като undelete, secure deletion и т.н.

Файловата система на OS/2

Адресируемата единица в HPFS е сектор с дължина 512 байта. При изграждането на нова HPFS дискът се дели на до болка познатият boot блок, super блок, spare блок и групи от по 8 MB.

Супер блокът съдържа адресите на битовите карти, адрес на списъка с лошите сектори, адрес на каталожната група, адрес на f-node на коренния каталог, дата и час на последна проверка за коректност на файловата система.

Spare блокът бог да ме убие ако знам какво е и дали се яде или се пие.

В представянето на всеки файл в HPFS има една забележителна структура наречена f-node. Добре де, не е толкова забележителна, но пък съдържа важни данни, като размер на файла, флагове, първите 15 символа от името, атрибути, права за достъп.

От гледна точка на описанието на физическата структура на файла, той се явява последователност от непрекъснати области на от диска, наричани екстенти, като всеки екстент се описва от своя страна с 2 числа - първи сектор и брой сектори. Това става в структура, която в зависимост от размера на файла има различен формат. Ако е до 8 екстента цалото описание влиза в f-node на файла, ако е повече може да бъде B+ дърво с 2 нива или В+ дърво с 3 нива.

Каталозите се представят като файловете с тази разлика, че това става в каталожната област.

Файлова система на Windows NT, 2000, XP, 2003, Vista (и во век и веков, да се свети името и)

Иначе казано - NTFS. Да си поговорим за клъстърите - това са адресируемите единици в тази файлова система. Клъстърите имат логически и виртуални номера - в зависимост от това дали са съответно от началото на тома или от началото на файла. Но да оставим това и видим къде е ключът от палатката на тази файлова система. Той се намира там, където е дошло решението всичко по диска да бъде файл, като основният файл да бъде MFT.

При изграждане на нова NTFS дискът се дели на boot file, MFT file, MFT зона, свободно пространство, системни файлове, отново свободно пространство и копие на boot файла, който за пореден път съдържа програми за първоначално зареждане на операционната система.

MFT файла е индекс на всички файлове на тома. MFT зоната - буфер на MFT файла, който осигурява пространство за нарастване като се избягва фрагментацията. Естествено тази зона не е статична и като намалява свободното място на диска намалява и тя.

Както казахме в MFT файла е описан всеки файл от диска. Както има и запазени места в театъра, така и тук има запазени записи за системните файлове - първите 24 записа са за MFT файла, boot файла, log файла и т.н.

Всеки файл се съхранява като сбор от атрибути и значения. Данните например са от тези атрибути, както и името, стандартната информация и т.н. Атрибутите се делят на резидентни и нерезидентни - съхранявани изцяло в MFT файла или разпределени в клъстъри извън него. Както при HPFS и при NTFS на файла се разпределят екстенти, с тази разлика, че адресната информация се съхранява в непрекъсната структура, а не в В+ дърво.

Папките се съхраняват по същият начин както и файловете, с тази разлика, че записите са реализирани в В+ дърво.

И тъй, може не разбрахме дали като си сменим FAT-ката на NTFS-ка ще ни се объркат директориите, но се надявам да сме разбрали що е то файлова система и яде ли се, пие ли се или се изгражда първоначално на диска.

--
За коментари: http://www.sivosten.com/forum/viewtopic.php?t=6928






Допадна ли ви този материал? (12) (1) 9770 прочит(а)

 Добави коментар 
Ако сте регистрирани във форума можете да коментирате и тук

Име:
Текст:
Код:        

 Покажи/скрий коментарите (28) 



AdSense
Нови Кратки @ Сивостен


Реклама


Подобни статии

Случаен избор


Сивостен, v.5.3.0b
© Сивостен, 2003-2011, Всички права запазени
Препечатването на материали е нежелателно. Ако имате интерес към някои от материалите,
собственост на сп. "Сивостен" и неговите автори, моля, свържете се с редакционната колегия.