Когато говорим за това как информацията се съхранява и премества в компютъра, обикновено се сещаме само за твърдия диск или RAM паметта. Но под всичко това стои цяла система. архитектура на съхранение с нива, кешове, файлови системи и дялове Това определя колко бързо и сигурно работим с данни. Разбирането на тази анатомия е ключово, ако изучавате системи, управлявате екипи или просто искате да знаете какво се случва, когато запазите файл или диск се повреди.
В цялата тази статия ще разгледаме стъпка по стъпка, Как е организирано съхранението от процесора до вторичното хранилищеТози курс обхваща: ролята на кеш паметта, как работи кешът на файловата система в Windows, какво е файл, как са организирани директориите, различните видове файлови системи (FAT, NTFS, ext, APFS и др.) и как да се разделят твърди дискове с помощта на MBR. Всичко това с практичен подход и примери от реалния свят.
Обща анатомия на паметта в компютърна система
Във всеки съвременен компютър има няколко нива на памет, всяко от които има различна скорост, капацитет и функцияОт горе до долу можем да ги организираме по следния начин:
- Records процесор.
- Кеш памет (L1, L2, L3) интегрирани или близо до процесора.
- Основна памет (RAM).
- Вторична памет (твърди дискове, SSD и др.).
- Спомагателна памет (USB, външни твърди дискове, оптични устройства и др.).
Регистрите са изключително бърза памет, която може да съхранява само един или няколко елемента от данните на регистър. Те функционират като вътрешни променливи на процесораНапример, програмният брояч (PC) съхранява адреса на следващата инструкция, която ще бъде изпълнена, и се променя с всяка стъпка. Те се идентифицират по име (PC, RI, AX и др.), са променливи и са базирани на полупроводникова технология.
Основната памет (RAM) се състои от клетки с еднакъв размер, наречени думи (32, 64 или 128 бита, в зависимост от архитектурата). За достъп до клетка от паметта се използва нейният адрес, който се предава чрез адресната шина. Подобно на регистрите, RAM паметта е енергонезависима: ако захранването бъде прекъснато, съдържанието ѝ се губи. Въпреки това, тя има много по-голям капацитет от регистрите и е мястото, където се изпълняват програми и се зареждат данни по време на изпълнение.
Кеш памет и кеширани данни: ускоряване на достъпа
Между процесора и основната памет се намира кеш паметта, предназначена за преместете най-често използваните данни по-близо до процесора и намалява латентността. Той също използва полупроводникова технология и е разделен на клетки, но е по-бърз от RAM и значително по-скъп, така че капацитетът му е по-нисък.
Идеята зад кеширането е винаги една и съща, независимо дали говорим за Кеш на процесора, кеш на диска или кеш на браузъра: временно съхранява информация, която вече е била консултирана, така че ако е необходима отново, тя да може да бъде извлечена от по-бързо място от оригиналния източник (диск, мрежа и др.).
Концепцията за кеширани данни Това важи и на ниво приложение, сървър и уеб браузър. Браузърът, например, кешира изображения, скриптове, CSS и HTML файлове при първото посещение на страница. По този начин, когато се върнете на този сайт, не е необходимо да изтегляте всичко отново; вместо това, той използва повторно локалните данни и изисква само това, което се е променило, което значително подобрява времето за зареждане.
Този механизъм за временно съхранение се използва и в други компоненти: DNS сървърите кешират записи на имена на домейни За да ускорят решенията, CDN (мрежи за доставяне на съдържание) репликират и кешират статично съдържание на възли, разпределени по целия свят, за да намалят латентността за крайните потребители.
Вторична памет: блоково и секторно съхранение
Основната памет е бърза, но има два проблема: Той е нестабилен и няма достатъчен капацитет. да съхраняваме цялата информация, с която обработваме (документи, бази данни, видеоклипове, резервни копия и др.). Ето защо се нуждаем от вторично и спомагателно съхранение: твърди дискове, SSD дискове и стандарти като UFSUSB устройства, оптични дискове и др. Те са устойчиви, по-евтини на единица памет и имат голям капацитет.
Тези устройства не са организирани в малки клетки като RAM паметта, а в физически блокове, наречени секториТрадиционно, типичният размер на сектора е бил 512 байта. Операциите за четене и запис се извършват поне на ниво сектор: не можете да четете или записвате количество данни, по-малко от един сектор, нито можете да адресирате част от сектор.
С увеличаването на капацитета на диска се наложи групирането на няколко сектора, за да се управлява по-добре пространството. Така се появиха секторите. клъстери или разпределителни единициТова са групи сектори, които файловата система използва като най-малката единица за разпределение на файлове. Това опростява управлението, но има последици за загубата на пространство, както ще видим по-късно.
Файлове и файлова система: логиката на диска
За да се възползва от устройствата за съхранение, операционната система се нуждае от логически слой, който дефинира как информацията се съхранява, организира и контролира в тези физически блокове. Този слой е файловата система.
От логическа гледна точка, файловата система се основава на две основни концепции: архив и папка или директорияФайлът е поредица от байтове, съхранена на външен носител, която се счита за логическа единица: PDF документ, изображение, видеоклип, база данни и др. Всеки файл има име и обикновено разширение, което помага да се идентифицира типът съдържание (например .png, .txt, .pdf).
Папката или директорията е просто начин за групови файлове и други директории според критериите на потребителя или системата, за да се улесни организацията. Вътрешно, за самата файлова система, директорията е просто специален файл, който съхранява информация за това какви елементи съдържа и как са структурирани.
Файловата система обработва критични задачи, като например присвояване на сектори и клъстери на файловетеПоддържайте контрол върху това кои блокове принадлежат на всеки файл, предлагайте операции за създаване, преименуване, промяна и изтриване, поддържайте йерархичната структура на директориите, контролирайте кои сектори са свободни и кои са заети, както и управлявайте разрешенията и сигурността на достъпа до данни.
Обичайна практика е всяко семейство операционни системи да има свои собствени файлови системи, въпреки че има нарастваща кръстосана съвместимост или поддръжка чрез специфични инструменти, включително начини за достъп до услуги за съхранение в облак. Данни, получени от комуникационна линия или специално устройство Те могат да бъдат изложени и като файлове, въпреки че всъщност се генерират динамично (например устройства в /dev в GNU/Linux).
Атрибути, разрешения и ACL във файловата система
За да може операционната система да контролира кой има достъп до какво, всеки ресурс (файлове, директории, принтери, мрежови ресурси и др.) обикновено има свързан със списък за контрол на достъпа (ACL)Този списък показва потребителите или групите, които имат достъп до него, и с какви разрешения: четене, писане, изпълнение и т.н.
В допълнение към разрешенията, файлът може да има атрибути, които описват неговата природа или специалното му третиране От гледна точка на системата: системен файл, скрит, само за четене, криптиран, директория, временен и др. Тези атрибути влияят на начина, по който файлът се показва на потребителя и какви операции са разрешени.
Маршрути, имена и заместващи символи
Почти всички съвременни файлови системи организират данните йерархично под формата на дърво на директориитеЗа да се локализира уникално файл или директория, се използва неговият път, който описва пътя, който трябва да се следва в дървото: поредица от директории, разделени от специален символ, последният елемент от които е самият файл или папка.
В Unix-подобни системи (GNU/Linux, macOS в основата си), абсолютният път започва с наклонена черта напред / представляваща главната директорияПример: /home/Alicia/Documents/report.odt. В системите на Microsoft буквата на устройството се предшества от двоеточие (:) и обратни наклонени черти: C:\Users\Alicia\Documents\report.odt.
Можем също да използваме относителни пътища, които започват от текущата потребителска директорияНапример, ../../Jacinto/Documentos/memoria.odt показва „преминаване с две нива нагоре и след това надолу до Jacinto/Documentos/memoria.odt“. В Unix има специални заместващи символи за пътища: . (текуща директория), .. (родителска директория) и ~ (домашна директория на потребителя).
Операционните системи предлагат заместващи символи, за да се отнасят до един или повече файлове, без да се знаят пълните им имена. Звездичката (*) представлява всяка комбинация от знацидори липсата на символи; въпросителният знак (?) представлява един символ. Например, *image*.png може да съвпада с My_image.png, image.png, image1.png и image21.png, докато image??.png ще съвпада само с имена от шест символа, последвани от .png, като например image21.png.
От файла в RAM паметта към файла на диска
Когато създавате файл от приложение, данните първоначално се намират само в основната памет. Ако отворите Notepad, въведете името си и все още не сте го запазили, информацията е в... паметта на процеса notepad.exeНяма файл на диска, свързан с това съдържание.
В момента, в който щракнете върху „Запазване“ и изберете път, операционната система създава файл във файловата система и присвоява един или повече клъстери на устройството за съхранение да съхранява тази информация. От този момент нататък системата трябва да знае по всяко време кои блокове са резервирани за този файл и в какъв ред трябва да бъдат прочетени.
Един любопитен детайл: често логическият размер на файла (в байтове данни) е много по-малък от действителното дисково пространство, което заемаНапример, текстов файл, съдържащ думата „Javier“ в ASCII, заема 6 байта съдържание, но в система, където размерът на клъстера е 4 KiB, този файл ще заема 4096 байта на диска, защото клъстерът е най-малката присвоима единица (ако сте загрижени за това поведение, вижте Какво да направите, ако вътрешната памет изглежда пълна).
Кеш на системните файлове в Windows
В Windows операционната система реализира кеш на системните файлове който действа като посредник между входно/изходните операции и физическия диск. По подразбиране, когато програма чете или записва във файл, тя всъщност чете или записва в паметта, в област, управлявана от кеш мениджъра.
Когато се извършва операция за четене, данните първо се зареждат от диска в област от системната памет, запазена като файлов кеш. Оттам процесите в потребителски режим копират тези данни в собственото си адресно пространство. Ако същата област от файла бъде прочетена отново по-късноСистемата може да го обслужва директно от кеша, без да има повторен достъп до диска, което значително ускорява производителността.
При операциите за запис, данните първоначално се съхраняват в кеша на файловете на системата, вместо да се записват веднага на диска. Този механизъм е известен като кеш за обратно записване и презаписванеМениджърът на кеша периодично изпразва тази памет, записвайки модифицираните блокове на физическия диск и освобождавайки място в кеша. Времето на изпразяване зависи от това колко дълго данните са били в кеша и колко време е било използвано за последен път.
Тази политика на отлагане на записа на диск има предимства по отношение на производителността, но носи и риск: ако възникне прекъсване на захранването или внезапна повреда, преди кешът да бъде изчистенДанните, които все още не са записани на диска, могат да бъдат загубени. За да балансира производителността и надеждността, Windows стартира процес, наречен отложен запис, всяка секунда, който поставя на опашка част от страниците, чакащи запис на диска, и динамично регулира количеството данни, които записва.
Има приложения (например, антивирусен софтуер или системи за управление на бази данниТе трябва да гарантират, че записите се записват на диска незабавно. За да се постигне това, Windows предлага режим на запис през диска: ако се отвори файл с флаг FILE_FLAG_WRITE_THROUGH, данните се записват в кеша, но мениджърът на кеша ги изпраща на диска без забавяне. Освен това, функции като FlushFileBuffers позволяват принудително изчистване на метаданни и чакащо съдържание.
В някои сценарии с масивни входно/изходни операции с много големи блокове, кеширането може да влоши производителността. В такива случаи е възможно да се отварят файлове с флага FILE_FLAG_NO_BUFFERING, така че Четенето и записването се извършват директно на физическия диск., заобикаляйки кеша на файловете (въпреки че някои метаданни все още може да са кеширани).
Видове файлови системи и функции
Най-често използваните файлови системи са тясно свързани със семейството операционни системи, за които са проектирани, въпреки че много от тях са се превърнали в почти де факто стандарти поради съвместимостта. Нека разгледаме най-важните от тях.
Файлови системи на семейството на Microsoft
В света на Windows можем да различим основно две големи семейства: FAT и NTFSFAT (Таблица за разпределение на файлове) е прост и много стар дизайн, докато NTFS (Файлова система с нова технология) е по-модерен, стабилен и богат на функции.
FAT разчита на таблица, която показва за всеки клъстер към кой файл принадлежи и кой е следващият клъстер във файловата верига. Най-забележителните му версии саFAT12 (началото на 80-те години на миналия век, с обеми до 32 MB и 8.3 конвенции за именуване), FAT16 (до около 90 GB с 32 KiB клъстери), VFAT (поддръжка на 32-битов защитен режим и конвенции за дълги имена в Windows 3.11/95) и FAT32 (въведен в Windows 95 OSR2, с теоретичен капацитет от почти 8 TB, но ограничен от Microsoft до по-малки размери и с максимален размер на файла от 4 GB). По-късно се появи exFAT, оптимизиран за USB устройства и флаш памети, с по-малко ограничения за размера на файла.
FAT има няколко недостатъка: Структурите им лесно причиняват фрагментация.Той не имплементира разширени разрешения или журналиране и за да бъде бърз, цялата FAT таблица обикновено се зарежда в RAM паметта, консумирайки значително количество памет. На много големи дискове, ако само част от таблицата е кеширана, достъпът до силно фрагментирани файлове може да включва много прескачания на диска само за четене на FAT фрагменти.
NTFS, от своя страна, въвежда подобрения в производителността, безопасността и надеждносттаПоддържа подробни разрешения, ACL, криптиране, компресия, журналиране и автоматично възстановяване от определени грешки. Базиран е на HPFS (разработен за OS/2) и може да обработва огромни обеми (до десетки терабайти в типични реализации). Издадени са няколко версии: от NT 3.1 (v1.0) до 3.x версиите, използвани от Windows 2000 и XP нататък.
Файлови системи в Apple
Компютрите Apple са преминали през няколко поколения файлови системи, всяка от които е била адаптирана към технологиите на времето. Най-представителните са: MFS, HFS, HFS+ и APFS.
MFS (Macintosh File System) е първата файлова система за оригиналния Macintosh през 1984 г. Тя позволява имена на файлове до 255 знака, въпреки че индексира само първите 63, и обработва томове до 256 MB. Тъй като капацитетът за съхранение нараства бързо, скоро е заменена от HFS (Йерархична файлова система), известен още като Mac OS Standard, който въведе истинска йерархична организация и поддържаше томове до 2 TB (с отделни файлове до 2 GB).
По-късно се появи HFS Plus (HFS+) или Mac OS Extended, с Поддръжка за журналиране, Unicode имена и томове до 8 екзабайтаТова е основната файлова система на Mac компютрите в продължение на много години. С появата на SSD дисковете и необходимостта от съвременно криптиране и моментни снимки, Apple разработи APFS (Apple File System), специално оптимизирана за флаш памет и поддържана от macOS Sierra и iOS 10.3. APFS подобрява управлението на пространството, клонирането на файлове и производителността при интензивни операции.
Файлови системи в GNU/Linux и Unix
GNU/Linux поддържа голямо разнообразие от файлови системи, но най-разпространените са семействата ext (ext2, ext3, ext4), ReiserFS, XFS и ZFS (последното чрез външни модули).
ext2 беше представен през 1993 г. като подобрен наследник на ext, с поддръжка на томове до 16 TB и файлове до 2 TB, както и имена на файлове с дължина 256 символа. ext3, издаден през 2001 г., добави журналиране и разчита на по-ефективни структури като балансирани двоични дървета, като същевременно запази съвместимостта с ext2. ext4, издаден през 2006 г., подобри скоростта, използването на процесора и увеличи максималния капацитет до 1 екзабайт за томове и файлове до 16 TB.
ReiserFS беше една от първите системи за журналиране, поддържани от ядрото на Linux, предлагайки добра производителност с малки файлове. XFS, първоначално от IRIX и портирана за Linux, също реализира журналиране и се отличава с максималния си размер на тома и производителност във високопроизводителни среди, способна да обработва до 16 екзабайта.
ZFS, първоначално разработена от Sun Microsystems за Solaris, въвежда комбиниран подход към файлова система и мениджър на томове. Позволява файлове до 16 екзабайта и гигантски обеми, с разширени функции като моментни снимки, проверка на целостта с помощта на контролни суми, самотестване и автоматично поправяне на тихи повреди.
Как файловите системи адресират блокове: inodes и extents
В Unix-подобни системи, файлови системи като ext2 и ext3 използват структура, наречена иноден код за представяне на всеки файл. Индексният възел (in-ode) съхранява метаданни (разрешения, собственик, размер, времеви отпечатъци и др.) и серия от указатели към блокове с данни.
В ext3, всеки inode съдържа 12 директни указателя към блокове данни, плюс три индиректни указателя: един единичен, един двоен и един троен. С директните указатели Дванадесет блока данни могат да бъдат достъпни директно. Ако размерът на блока е 4096 байта, това е еквивалентно на 48 KiB данни (12 × 4096).
Ако файлът надхвърли този лимит, се задейства простият индиректен указател, който сочи към специален блок, съдържащ само адреси на други блокове с данни. Ако приемем 32-битови думи (4 байта), блок от 4096 байта може да съдържа 1024 адреса. Това се равнява на допълнителни 4 MiB. (1024 × 4096 байта). За още по-големи файлове се използват двойни и тройни индиректни указатели, които свързват няколко нива на адресни блокове, достигайки капацитет до 4 GiB (двойни) и 4 TiB (тройни) на файл.
Сумата от възможностите, предоставени от 12-те директни указателя, единичния индиректен указател, двойния и тройния указател, ни дава теоретичен максимален размер на файла в ext3: 48 KiB + 4 MiB + 4 GiB + 4 TiB, приблизително.
В ext4 тази структура е преработена: указателите стават 48-битови, за да поддържат по-големи устройства (до 1 EiB) и вместо това се използват блокове за индирекция. екстензииЕкстентът описва диапазон от съседни блокове, използвайки две стойности: началния блок и броя на блоковете. 60-те байта, които ext3 използва за адреси, се използват повторно в ext4 за съхраняване на множество екстенти и заглавна част. Ако даден файл е силно фрагментиран и изисква повече екстенти, се организира дърво (HTree), като коренът се съхранява в inode, а крайните възли съдържат допълнителните екстенти.
Тази структура, базирана на екстенции, има за цел да намаляване на фрагментацията и подобряване на производителносттазащото работи с големи съседни диапазони, вместо с дълги списъци от отделни блокове.
Други специфични и виртуални файлови системи
В допълнение към дисковите и мрежовите файлови системи, има системи, предназначени за много специфични цели или за функциониране във виртуален режим. Някои забележителни примери:
- swap: дискова област, запазена за виртуална памет, където страниците се разменят, когато RAM паметта свърши.
- archfs: файлова система в потребителското пространство (FUSE), която позволява преглеждане на хранилища на rdiff-backup.
- cdfs: виртуална файлова система в Linux за достъп до отделни данни или аудио записи на компактдискове.
- udev и devfs: използват се в GNU/Linux за управление на файлове на устройства в /dev.
- ftpfs и nntpfs: Системи за потребителско пространство (FUSE), които предоставят достъп до данни чрез FTP или NNTP, сякаш са локална файлова система.
FUSE (Файлова система в потребителско пространство), включена в ядрото на Linux от версия 2.6.14, позволява Непривилегировани потребители разработват и инсталират файлови системи Тези програми се изпълняват в потребителско пространство, като модул на ядрото действа като посредник. Това значително увеличава разнообразието от налични файлови системи (NTFS, EncFS и др.), като дори позволява монтирането на виртуални дискове (като .vdi файлове), сякаш са физически дискове. Недостатъкът е, че постоянното превключване между режим на ядрото и потребителски режим води до известно намаляване на производителността.
Отдолу всичко разчита на VFS (Виртуална файлова система), слой на абстракция, който Той унифицира достъпа до файлови системи с много различни архитектури.така че приложенията да виждат общ интерфейс, независимо от конкретния тип система, която се използва.
Транзакции и журналиране във файлови системи
Една транзакция е една последователност от операции, които трябва да се изпълнят атомарноИли всички операции са завършени успешно, или ако нещо се обърка, системата трябва да бъде възстановена в първоначалното си състояние. Тази концепция се отнася за бази данни, но също и за файлови системи чрез журналиране.
Воденето на дневник или записването в дневник се състои в воденето на дневник, в който се отбелязват планираните модификации, преди да бъдат приложени към действителната файлова система. Ако възникне прекъсване на захранването или неочакван проблем по време на запис, журналът се проверява при рестартиране на системата: непълните транзакции се отменят или преизпълняват в зависимост от режима на работа, като се гарантира, че структурата на файловата система остава последователна и се предотвратяват сериозни повреди.
Дялове, MBR и организация на логическите дискове
Твърд диск или SSD рядко се използва като неразделен монолитен блок. Нормалното нещо, което трябва да направите, е да създадете дяловеТова са съседни сегменти на диска, разделени от начален сектор и краен сектор. Всеки дял може да съдържа различна файлова система, което позволява например инсталирането на Windows и Linux на един и същ диск или разделянето на системните данни от потребителските данни.
От гледна точка на операционната система, всеки дял може да се обработва като независима логическа единицаВ Windows той има своя собствена буква на устройството (C:, D: и т.н.); в GNU/Linux е монтиран в специфични директории (/home, /var и т.н.). Това осигурява гъвкавост и улеснява задачи като преинсталиране на операционна система, без да се докосва дялът с данни.
В класическите схеми за разделяне на MBR, информацията за дяловете се съхранява в таблица на дяловете, съхранявана в сектор 0 на диска, известен точно като MBR (Master Boot Record). MBR включва три основни елемента: малка програма за зареждане (bootloader, която отговаря за стартирането на операционната система или по-сложен loader), таблица на дяловете (с до четири записа) и 16-битов „магически код“, обикновено 0x55AA, който показва, че MBR е валиден.
Таблицата с дялове на MBR поддържа само четири първични дяловеЗа да се преодолее това ограничение, бяха дефинирани два допълнителни типа: разширени дялове и логически дялове. Разширеният дял всъщност е специален тип първичен дял, който не съдържа директно данни, а по-скоро Той съдържа множество логически дялове в себе сиПо този начин можем да имаме максимум четири записа в MBR (например три основни и един разширен) и в рамките на разширения толкова логически записи, колкото са ни необходими.
На практика, когато нов диск няма инициализиран MBR, инструменти като gparted го откриват. Няма разпознаваем етикет или магически код 0x55AA и да показват предупреждения. Първата стъпка обикновено е създаването на нова таблица на дяловете (например, тип MSDOS за MBR). Оттам се създават първични дялове и ако са необходими повече от четири файлови системи, се създава разширен дял, за да се поберат допълнителни логически дялове.
По време на планирането е препоръчително да се реши предварително какъв размер и тип ще има всеки дял: например, голям първичен дял за данни в NTFS, друг в ext4 за Linux, FAT32 за swap и разширен дял с няколко логически дяла, или конвертирайте твърдия си диск за други цели. Ако четирите първични избори са изчерпани, без да е резервиран удължен такъвЩе трябва да изтрием някои дялове, за да възстановим структурата правилно.
В административни или обучителни среди е обичайно да се използва Live дистрибуция, като например SystemRescue, да се стартира в графичен режим (използвайки startx) и да се използват инструменти като gparted за създаване, преоразмеряване и форматиране на дялове с различни файлови системи (NTFS, FAT32, ext3, ext4 и др.), като по пътя се проверява как се инициализира MBR и как промените се отразяват в таблицата на дяловете.
Цялата тази мрежа от регистри, кешове, основна памет, дискове, файлови системи, журналиране и дялове означава, че когато натиснете „Запазване“, Данните се прехвърлят от регистъра на процесора до определен блок на физически диск. преминаване през няколко слоя кеш и логически структури. Разбирането как всички тези части се съчетават позволява по-добро разбиране на проблеми с производителността, грешки на диска, съобщения за повреда на файлове или решения за проектиране, като например размер на клъстера или избор на файлова система за всеки случай на употреба, както и избор на... безплатни услуги за съхранение в облак според нуждите.