Разследвани устройство 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 вида:

  1. Стойност, обозначаваща, че секторът е най-новото в даден файл
  2. Стойност, обозначаваща, че секторът не се използва в момента
  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" е неправилно, защото имената не могат да започват с една точка.