Разследвани устройство FAT12 файлова система
Добър ден, скъпи читатели! Аз ще се опитам да се дъвче подробно вътрешната структура на FAT12 файлова система, която е най-простият на семейството FAT устройството и. Тази система се използва главно за дискети. В следващата статия Смятам да изобретяваме колелото на базата на системата и се напише програма за DCPU (измислен компютърна игра от 0x10c), това ще форматирате дискета в велосипед файлова система. (Флопидисково устройство и спецификация не е обявена официално, но те се намират в 0x10c DevKit). Така че, ако проявявате интерес да се разбере как баща ни, и аз открих, се съхраняват на диска, вие сте добре дошли при среза.
Трябва да се отбележи, че системата е остаряла и почти не се използват, но това бе тя е била избрана по две причини: това е много лесно да се разбере и тя може да бъде много полезен за такова просто устройство, като DCPU.
Сега премахване на деца и бременни жени от екраните, защото ние ще трябва да се справят с байтове в най-чистата му форма.
За да започнете да се определи дискета. А именно, с обикновената дискетата 3.5 "с 1,44 на борда, което всички знаем толкова добре. Така че, всичко на мястото на флопи диска е разделен на сектори, всеки размер сектор е 512 байта. Сектор са струпани, но на дискета не е твърде много сектори (2848), следователно, всяка група съдържа само един сектор.
По този начин, файловата система. Първият сектор на дискета (нула) се дава под Boot сектор - сектора за начално зареждане. Тя съхранява всички видове полезна и важна информация. Веднага последвано от таблицата на FAT. FAT щандове за файла AllocationTable - Таблица за разпределение на файловете. Обикновено, тази таблица се дублира с цел повишаване надеждността. Първият и вторият маси заети 1-9 и 10-18, съответно сектор. След няколко маси сектор (на дискета е 14sht) са разпределени в главната директория. И след всичко, което дойде със съдържанието на секторите на файловете.
Сега, първите неща, на първо място.
Стартиращ Сектор - Boot сектор
Този сектор е с нулев сектор на дискета. Той съдържа много важна информация за устройството на файловата система. Следван от брой байтове в сектора и това, което се съхранява в тях:
- 0-10 - игнорира
- 11-12 - броя байтове във всеки сектор
- 13 - броя на секторите в всяка група
- 14-15 - броят на резервираните сектори
- 16 - броят на FAT маси
- 17-18 - максималният брой на файлове и папки в главната директория
- 19-20 - Общият брой сектори
- 21 - игнорира
- 22-23 - броят на сектори се изисква за всяка таблица FAT
- 24-25 - броя на секторите на писта (в диск сектор флопи дойде заедно в пистата)
- 26-27 - броят на главите
- 28-31 - игнорира
- 32-35 - се игнорира в FAT12
- 36-37 - игнорира
- 38 - обувка подпис - обувка подпис
- 39-42 - обем ID
- 43-53 - етикет обем
- 54-61 - вида на файловата система
- 62 - оттам и байтове не се използват преди края на сектора за начално зареждане
Ако в полето байт обувка е настроен на 0x29, а след това след 3 области са налице.
Id се използва като сериен номер обем. Обикновено, той се извлича от времето за създаване на обем.
Етикетът на тома - това е името му. По подразбиране е зададен на «NO NAMEnbspnbspnbspnbsp».
типът на файловата система - за FAT12, низ «FAT12nbspnbspnbsp». Всъщност, повечето шофьори не определят типа на система от този низ, както и въз основа на броя на секторите, в носача (FAT12 избран, ако превозвачът не е повече от 2 ^ 12 = 4096 сектори)
FAT таблица
FAT таблица е много подобен на масив, чиито елементи, които се състоят от 2 байта. Всеки елемент отговаря на сектор с данните, но тук ние не използваме реални и логически сектори. Тяхната разлика е, че те са номерирани, започвайки от началото на дискетата, а от началото на зоната за данни. Това означава, че в този пример, първите 33 сектори на дискети (0-32), ангажирани Boot сектор, FAT таблици и в главната директория, т.е. самите данни започва в 33 сектора. Таблиците с FAT нула и първия елемент, са запазени, така че ние започваме с втората. Така втората влизането FAT в таблицата съответства на 33 сектора на дискета или логически сектор 0, и, например, на петия елемент - 36mu и 3mu логиката. Стойността на елемента може да бъде 3 вида:
- Стойност, обозначаваща, че секторът е най-новото в даден файл
- Стойност, обозначаваща, че секторът не се използва в момента
- Поредният номер на следващия сектор файл
Ето един по-подробен списък на ценности и какво означават те:
- 0x000 - сектор не се използва
- 0xFF0-0xFF6 - резервиран сектор
- 0xFF7 - лош сектор
- 0xFF8-0xFFF - последния сектор във файла
- всички други ценности - поредният номер на следващия сектор логично файл
Малка пример. Представете си, че имаме на диск 2 файла. Тя text.txt, която обхваща 4 сектора и picture.png, който заема 2 сектори. Нека text.txt отнема 0, 2, 4 и 5, логическата сектор в областта на данни (като се брои от нула) и picture.png - 1 и 3. След това масата за FAT ще изглежда по следния начин:
R 0x0000
R 0x0000 - първите 2 елементи са запазени, помниш ли?
0 0x0002 - text.txt началото на файла, а след това се съхранява указател към text.txt файл следващия сектор
1 0x0003 - picture.png начало и показалеца на продължаване
2 0x0004 - продължение text.txt
3 0x0FFF - последния сектор picture.png
4 0x0005 - предпоследната text.txt сектор
5 0x0FFF - последния сектор text.txt
Броят преди стойност показва какво логическата сектор, свързан с този елемент. В писмото на «R» стои пред запазени, т.е. неизползваните елементи.
указател
Directory (включително основата), се съхраняват на диск, както и да предприемат една или повече сектори. Всеки сектор директория (512 байта) съдържа указатели към файлове 16, т.е. 32 байта на показалеца. Този индекс описва вградени директория или файл на диска и се отнася за него. Така набор от насоки, напълно описва вътрешните съдържанието на папката. Нека разгледаме по-подробно тези насоки. номера Byte и тяхното съдържание:
- 0-7 - име на файла
- 8-10 - разширяване
- 11 - атрибути
- 12-13 - запазени следователно игнорирани
- 14-15 - създаването на
- 16-17 - Създаден
- 18-19 - датата на последното използване
- 20-21 - се игнорира в FAT12
- 22-23 - последната дата,
- 24-25 - последна промяна на времето
- 26-27 - препратка към първата логична сектора на даден файл или директория
- размер на файла в байтове - 28-31
Ако първият байт на името е на стойност 0x29, а след това на показалеца е празен (т.е., когато файлът е бил изтрит), но след това все още има указатели. Ако първият байт на името - 0x00, показалецът е празна, а след това всички индекси също празна.
Байт атрибут описва свойствата на файла. Тук позволените стойности:
- 0x01 - само за четене
- 0x02 - скрит
- 0x04 - система
- 0x08 - Volume Label (I не разбра какво е)
- 0x10 - това означава, че файлът е папка
- 0x20 - архив (Архив, също не разбирам)
- 0x40 - не се използва
- 0x80 - не се използва
Стойностите могат да бъдат комбинирани. Например, ако искаме нашият файл е скрит системната папка, тогава ние задайте стойността байт 0x16, следователно, че 0x16 = 0x02 + 0x04 + 0x10.
Името на файла и разширението
В FAT12 се разпределя до 8 символа за име на файла и 3 символа за разширението. Ако името на файла отнема по-малко от 8-символи, останалите помещения са пълни (ASCII 32 или 0x20). Същото нещо с разширение. Също така, всички имена и разширения, се съхраняват в главни букви. Директорът, между другото, може да бъде и разширяване. В същата папка не може да се намира на множество файлове или папки със същите имена и разширения. Ето няколко примера за това в ляво, които се съхраняват на диска, както и правото имената, които сме давали файл. Долна черта ( "_"), аз заменя пространство за по-голяма яснота:
- «FOO_____BAR» - «foo.bar»
- «FOO_____BAR» - «Foo.Bar»
- «FOO_____BAR» - «FOO.BAR»
- «FOO________» - «Foo»
- «FOO________» - «. Foo»
- «PICKLE__A__» - «PICKLE.A»
- «PRETTYBGBIG» - «prettybg.big»
име на файла ".big" е неправилно, защото имената не могат да започват с една точка.