Датотечни системи ext2, ext3, XFS, ReiserFS, NTFS. Физичка организација ext2 Резултати од тестот Андреј

14 јун

Датотечни системи ext2, ext3, XFS, ReiserFS, NTFS

Датотечниот систем- ова е редоследот што го одредува начинот на организирање, складирање и именување на податоците на кој било електронски медиум за складирање во компјутерите.

Разновидноста на датотечните системи се објаснува со фактот дека секој е измислен за свој специфичен сет на задачи. Некои пишуваат многу брзо мали датотеки (да речеме, до 1 GB), но во исто време лошо комуницираат со големи датотеки или воопшто не работат со нив. Некои се добри од безбедносна гледна точка, други од гледна точка на брзина на читање/пишување. Секој датотечен систем има свои добрите, лошите страни, ранливости и карактеристични способности.

ВО LinuxНајчесто користени типови на датотечни системи се:

  1. ext2- се залага за Втор проширен датотечен систем(втор продолжен датотечен систем). Развиен од Remy Card во 1993 година како датотечен систем за Linux кернелот, од 1993 до 2001 година тој беше главниот датотечен систем Linux.
    Предноста е голема брзина на читање/запишување.
    Главниот недостаток на системот ext2е тоа што не е запишан, туку токму поради тоа има одлични перформанси ( сечае процес на дневник кој складира листа на промени што помага да се одржи интегритетот на датотечниот систем за време на разни дефекти на системот);
  2. ext3- се залага за Трет проширен датотечен систем(трета верзија на продолжениот датотечен систем). Развиен од Стивен Твиди во 2001 година, кој сè уште се користи денес во дистрибуции Linux. Роден е како подобрена ext2.
    Предноста на овој систем е во тоа што е журнал, односно неговата доверливост значително се зголемува во споредба со ext2.
    Недостаток се малку пониски перформанси и брзина на читање/запишување.
  3. XFS- Развиена од компанијата Силиконска графикаво 1993 година, беше додаден на јадрото Linuxкако датотечен систем во 2002 година низ целото семејство на дистрибуции Linux, во моментов се користи како „мајчин“ во дистрибуцијата Црвена капа.
    Предноста е присуството на евиденција на метаподатоци, висока оперативна стабилност, поддржана е дистрибуција на влезни/излезни текови во групи, високи брзини на читање/запишување, можно е дефрагментирање дури и кога партицијата е монтирана, а можете да ја зголемите големината на датотечен систем. Работи најефективно со големи датотеки.
    Недостаток е што големината на партицијата не може да се намали, процесот на обработка на метаподатоци не е толку брз и работи значително побавно со мали датотеки од другите типови датотечни системи.
  4. ReiserFS- развиен од компанијата Имињапод раководство на Ханс Рајзер во 2001 г. Се користи само на оперативни системи Linux. Тоа беше првиот датотечен систем со записи што беше усвоен во кернелот.
    Предноста на овој датотечен систем е што работи многу брзо со мали датотеки (брзината на читање/запишување е поголема од онаа на ext4), поддржува логирање.
    Негативната страна е што нејзиниот развој е забавен значително поради апсењето на неговиот водач Ханс Рајзер и нема шифрирање во позадина.
  5. NTFS- се залага за нова технологија датотечен систем(нова технологија датотечен систем). Развиена во јули 1993 година од страна на корпорацијата Мајкрософт. Широко се користи во различни оперативни системи, како и во различни медиуми за складирање.
    Предноста е вградената можност да се ограничи пристапот до податоци за различни корисници, како и да се постават ограничувања за максималниот простор на дискот, употребата на систем за дневник и голема брзина на читање/пишување на мали датотеки.
    Недостаток е што за стабилна работа потребна е голема RAM меморија на компјутер, работи бавно со големи датотеки, а должината на патеката до датотеките е ограничена (32.767 знаци на Уникод).

На овој едноставен начин сфативме „датотечни системи ext2, ext3, XFS, ReiserFS, NTFS«!

(Втор продолжен датотечен систем).

· Историја на развојот на датотечните системи Линукс

· Структура на партиција на дискот во ext2fs

·

· Каталози

· Датотеки на уредот

·

·

· Библиотека EXT2fs

· Системски алатки EXT2fs

· Пресметка на перформанси

Математички факултет

Софтверска програма

2 година 5 гр.

Чичиров Андреј

Лажен систем EXT2fs (Втор продолжен датотечен систем).

Историја на развојот на датотечните системи Линукс

Првите верзии на Linux беа развиени врз основа на оперативниот систем Minix. Би било полесно да се споделат дисковите помеѓу двата системи отколку да се развие нов датотечен систем, па Линус Торвалдс одлучи да воведе поддршка за Linux за датотечен систем Minix. Во тоа време, овој датотечен систем беше прилично ефикасен софтверски производ со релативно мал број на грешки.

Сепак, ограничувањата поврзани со структурата на датотечниот систем Minix беа доста високи, па почнаа да размислуваат за развој на нов датотечен систем за Linux.

За да се поедностави имплементацијата на новиот датотечен систем во кернелот Linux, беше развиен виртуелен датотечен систем (VFS). VFS првично беше напишан од Крис Провенцано, а потоа препишан од Линус Торвалдс пред да биде интегриран во кернелот.

По инсталирањето на VFS во кернелот, нов датотечен систем, EXTfs (Проширен датотечен систем), беше развиен во април 1992 година и додаден во верзијата на Linux 0.96c. Во новиот датотечен систем, беа отстранети две значајни ограничувања на системот Minix: неговата максимална големина може да достигне 2 гигабајти, а максималната должина на името на датотеката може да биде 255 знаци. Ова беше подобрување во однос на датотечниот систем Minix, иако некои проблеми сè уште беа присутни. Немаше поддршка за споделен пристап, модификација на дескрипторот на индексот и модификација на временски ќелии за промена на датотеки. Овој датотечен систем користеше поврзани списоци за да работи на слободни блокови и иноди, што во голема мера влијаеше на перформансите на системот: со текот на времето, списоците станаа неуредени и несортирани, што доведе до фрагментација на датотечниот систем.

Решението за овие проблеми беше објавувањето во јануари 1993 година на алфа верзии на два нови датотечни системи: Xia и EXT2fs (Втор продолжен датотечен систем). Во најголем дел, датотечниот систем Xia беше базиран на Minix, со додадени неколку нови функции. Ова беше главно способност за работа со долги имиња на датотеки, поддршка за поголеми партиции на дискот и поддршка за три ќелии за време на промена на датотеки. Од друга страна, EXT2fs се базираше на EXTfs со многу подобрувања и дополнувања. Имаше и можности за иден развој.

Кога овие два датотечни системи беа објавени, тие беа функционално приближно еднакви. Системот Xia беше посигурен од EXT2fs со минимизирање. Како што станаа пошироко користени, беа откриени грешки во системот EXT2fs и беа додадени голем број нови функции и подобрувања. Датотечниот систем EXT2fs сега е многу сигурен и стана де факто стандард за датотечен систем Линукс.

Следната табела дава општи информации за функционалноста обезбедена од различни датотечни системи.

Minix FS

Ext FS

Ext2FS

Xia FS

Максимална големина на датотечен систем

Максимална должина на датотеката

Максимална должина на името на датотеката

Поддршка за три ќелии за време на промена на датотеки

Проширливост

Големина на блок што може да се промени големината

Заштита на информации

Доколку е потребно, должината на името на датотеката во Екст 2може да се зголеми на 1012.

EXT2fs резервира одреден број блокови за root корисникот. Обично ова е 5% од вкупниот број, што му овозможува на системскиот администратор да избегне да остане без простор на тврдиот диск кога е исполнет со процеси на други корисници.

Структура на партиција на дискот во ext2fs

Производителите на хард дискови обично ги испорачуваат своите производи форматирани на ниско ниво. Колку што знам, тоа значи дека целиот простор на дискот е поделен на „сектори“ со големина од 512 бајти со помош на специјални ознаки. Таков диск (или партиција на диск) мора да биде подготвен за употреба на одреден оперативен систем. Во MS-DOS или Windows, постапката за подготовка се нарекува форматирање, а во Linux - создавање на датотечен систем. Креирање датотечен систем ext2fsсе состои од создавање на одредена логичка структура во партиција на дискот. Оваа структура е изградена на следниов начин. Прво, област за подигање е распределена на дискот. Областа за подигање е креирана на кој било датотечен систем. На примарната партиција, таа содржи запис за подигање - парче код што го иницира процесот на вчитување на оперативниот систем при стартување. Оваа област не се користи на други партиции. Остатокот од просторот на дискот е поделен на блокови. Блокот може да биде со големина од 1, 2 или 4 килобајти. Блокот е адресибилна единица простор на дискот. Датотеките се распределуваат во блокови, така што има компромиси при изборот на големината на блокот. Големата големина на блокот, по правило, го намалува бројот на пристапи на дискот при читање или пишување датотека, но ја зголемува количината на потрошениот простор, особено ако има голем број мали датотеки.

Блоковите во нивната област се комбинираат во групи блокови. Групите блокови во датотечен систем и блоковите во групата се нумерирани последователно, почнувајќи со 1. Првиот блок на дискот е нумериран со 1 и припаѓа на групата број 1. Вкупниот број на блокови на дискот (во партиција на дискот) е делител на капацитетот на дискот, изразен во сектори. И бројот на блок групи не мора да го дели бројот на блокови, бидејќи последната блок група може да не е целосна. Почетокот на секоја група блокови има адреса, која може да се добие како ((група број - 1)* (број на блокови во групата)).

Секоја група блокови има иста структура. Неговата структура е претставена во следната табела.

Структурата на диск партиција група на блокови во ext2fs

Првиот елемент на оваа структура (суперблок) е ист за сите групи, а сите останати се индивидуални за секоја група. Суперблокот се чува во првиот блок од секоја блок група (освен групата 1, која има запис за подигање во првиот блок). Суперблоке почетна точка на датотечниот систем. Има големина од 1024 бајти и Секогаш лоциран на офсет 1024 бајти од почетокот на датотечниот систем. Присуството на повеќе копии на суперблок се објаснува со екстремната важност на овој елемент од датотечниот систем. Суперблок дупликатите се користат при враќање на датотечен систем по неуспеси.

Информациите зачувани во суперблокот се користат за организирање пристап до останатите податоци на дискот. Суперблокот ја одредува големината на датотечен систем, максималниот број на датотеки во партицијата, количината на слободен простор и содржи информации за тоа каде да барате нераспределени области. Кога ќе започне оперативниот систем, суперблокот се чита во меморијата и сите промени во датотечниот систем прво се рефлектираат во копија од суперблокот лоциран во ОС и се запишуваат на дискот само периодично. Ова ги подобрува перформансите на системот бидејќи многу корисници и процеси постојано ги ажурираат датотеките. Од друга страна, кога системот е исклучен, суперблокот мора да се запише на дискот, што не дозволува исклучување на компјутерот со едноставно исклучување на напојувањето. Во спротивно, следниот пат кога ќе се подигнете, информациите снимени во суперблокот нема да одговараат на вистинската состојба на датотечниот систем.

Суперблокот ја има следната структура

Име на теренот

Тип

Коментар

s_inodes_count

УЛОНГ

Број на иноди во датотечниот систем

s_blocks_count

УЛОНГ

Број на блокови во датотечниот систем

s_r_blocks_count

УЛОНГ

Број на блокови резервирани за суперкорисник

s_free_blocks_count

УЛОНГ

Бесплатен бројач на блокови

s_free_inodes_count

УЛОНГ

Бесплатен иноден бројач

s_first_data_block

УЛОНГ

Првиот блок што содржи податоци. Во зависност од големината на блокот, ова поле може да биде 0 или 1.

s_log_block_size

УЛОНГ

Индикатор за големина на логички блок: 0 = 1 KB; 1 = 2 KB; 2 = 4 KB.

s_log_frag_size

ДОЛГ

Индикатор за големина на фрагмент (се чини дека концептот на фрагмент моментално не се користи)

s_blocks_по_група

УЛОНГ

Број на блокови во секоја блок група

s_frags_по_група

УЛОНГ

Број на фрагменти во секоја блок група

s_inodes_по_група

УЛОНГ

Број на иноди во секоја блок група

s_mtime

УЛОНГ

Времето на последното монтирање на датотечниот систем.

s_wtime

УЛОНГ

Време кога последен пат бил напишан датотечниот систем

s_mnt_count

УШОРТ

Бројач на бројот на монтирања на датотечниот систем. Ако овој бројач ја достигне вредноста наведена во следното поле (s_max_mnt_count), датотечниот систем мора да се провери (ова се прави при рестартирање) и бројачот се ресетира на нула.

s_max_mnt_count

КРАТКО

Број кој одредува колку пати датотечниот систем може да се монтира

s_magic

УШОРТ

„Магичен број“ (0xEF53) што покажува дека датотечниот систем е од типот ex2fs

s_state

УШОРТ

Знамиња што ја покажуваат моменталната состојба на датотечниот систем (дали е чист, итн.)

s_грешки

УШОРТ

Знамиња кои специфицираат процедури за обработка на пораки за грешка (што да направите ако се најдат грешки).

s_pad

УШОРТ

Полнење

s_lastcheck

УЛОНГ

Време на последната проверка на датотечен систем

s_checkinterval

УЛОНГ

Максимален временски период помеѓу проверките на датотечниот систем

s_creator_os

УЛОНГ

Индикација за типот на ОС во кој е креиран датотечен систем

s_rev_level

УЛОНГ

Верзија (ниво на ревизија) на датотечен систем.

s_резервирано

УЛОНГ

Пополнување до 1024 бајти

По суперблокот е опис на групата блокови (Групни дескриптори). Овој опис е низа со следнава структура.

Име на теренот

Тип

Цел

bg_block_bitmap

УЛОНГ

Адреса на блокот што ја содржи битмапата на блокот на оваа група

bg_inode_bitmap

УЛОНГ

Адреса на блокот што ја содржи битмапата на инодата на оваа група

bg_inode_table

УЛОНГ

Адреса на блокот што ја содржи табелата со иноди од оваа група

bg_free_blocks_count

УШОРТ

Бројач на бројот на слободни блокови во оваа група

bg_free_inodes_count

УШОРТ

Број на бесплатни иноди во оваа група

bg_used_dirs_count

УШОРТ

Бројот на иноди во дадена група кои се директориуми

bg_pad

УШОРТ

Полнење

bg_резервирана

УЛОНГ

Полнење

Големината на описот на блок групата може да се пресмета како (block_group_size_in_ext2 * број_на_групи) / block_size(заокружено доколку е потребно).

Информациите зачувани во описот на групата се користат за лоцирање на битмапите на блокот и инодата, како и табелата за инода. Не заборавајте дека блоковите и групите блокови се нумерирани почнувајќи од 1.

Блок битмапа е структура во која секој бит покажува дали соодветниот блок е доделен на датотека. Ако битот е 1, тогаш блокот е зафатен. Оваа мапа се користи за пребарување на слободни блокови во случаи кога е неопходно да се одвои простор за датотека. Битмапата на блокот зафаќа број на блокови еднаков на (број_на_блокови_во_групата / 8) / блок_големина(заокружено ако е потребно).

Инодната битмапа врши слична функција како и табелата за инода: покажува кои иноди се користат.

Следната област во структурата на групата блок се користи за складирање на табелата на датотеката inode. Структурата на самата инода е подетално разгледана во следниот потсекција.

Па, и конечно, целиот преостанат простор во групата блокови е наменет за складирање на вистинските датотеки.

Датотечниот системлок 2 се карактеризира со:

  • хиерархиска структура,
  • координирана обработка на збирки на податоци,
  • динамична екстензија на датотека,
  • заштита на информации во датотеки,
  • третирање на периферните уреди (како што се терминали и уреди со лента) како датотеки.

Претставување на внатрешна датотека

Секоја датотека во системот Ext 2 има единствен индекс. Индексот ги содржи информациите потребни за кој било процес за пристап до датотеката. Обработува пристап до датотеките користејќи добро дефиниран сет на системски повици и идентификувајќи ја датотеката со низа знаци што делува како квалификувано име на датотека. Секое сложено име уникатно идентификува датотека, така што системското јадро го претвора ова име во индекс на датотека.Индексот вклучува табела со адреси каде што информациите за датотеката се наоѓаат на дискот. Бидејќи секој блок на дискот е адресиран со свој број, оваа табела складира збирка броеви на блокови на дискови. За да се зголеми флексибилноста, кернелот додава датотека еден блок во исто време, овозможувајќи информациите за датотеката да се расфрлаат низ датотечниот систем. Но, овој распоред ја комплицира задачата за пребарување на податоци. Табелата за адреси содржи листа на броеви на блокови кои содржат информации кои припаѓаат на датотека, но едноставните пресметки покажуваат дека линеарна листа на блокови на датотеки во индекс е тешко да се управува. Со цел мала структура на индекс да овозможи работа со големи датотеки, табелата со адреси на блокови на дискот е усогласена со структурата прикажана на Слика 1

Повеќето датотеки во Ext 2 систем не се поголеми од 10 KB или дури 1 KB!Бидејќи 10 KB од датотеката се наоѓаат во блокови за директни адреси, повеќето од податоците складирани во датотеките може да се пристапат со еден пристап на диск. Затоа, за разлика од пристапот до големи датотеки, работата со датотеки со стандардна големина е брза.

Датотека иноди

Секоја датотека на дискот е поврзана со една и само една датотека инода, која се идентификува со нејзиниот последователен број - индексот на датотеката. Ова значи дека бројот на датотеки што може да се креираат на датотечен систем е ограничен со бројот на иноди, кој е или експлицитно наведен кога датотечниот систем се креира или се пресметува врз основа на физичката големина на партицијата на дискот. Инодите постојат на дискот во статичка форма и кернелот ги чита во меморијата пред да работи со нив.

Датотеката inode ја има следнава структура:

Име на теренот

Тип

Опис

I_mode

УШОРТ

Видот и правата за пристап до оваа датотека.

I_uid

УШОРТ

Идентификатор на сопственик на датотека (Owner Uid).

I_size

УЛОНГ

Големина на датотеката во бајти.

I_atime

УЛОНГ

Време на последниот пристап до датотеката (Време за пристап).

I_ctime

УЛОНГ

Време на создавање датотека.

I_mtime

УЛОНГ

Време на последната модификација на датотеката.

I_dtime

УЛОНГ

Време на бришење датотека.

I_gid

УШОРТ

ИД на групата (GID).

Јас_бројам врски

УШОРТ

Врските се бројат.

I_blocks

УЛОНГ

Бројот на блокови окупирани од датотеката.

Јас_знамиња

УЛОНГ

Знамиња на датотеки (Знамиња на датотека)

Јас_резервиран1

УЛОНГ

Резервирано за ОС

I_block

УЛОНГ

Покажувачи на блокови во кои се запишани податоците за датотеката (пример за директно и индиректно адресирање на Сл. 1)

I_верзија

УЛОНГ

Верзија на датотека (за NFS)

I_file_acl

УЛОНГ

ACL датотека

I_dir_acl

УЛОНГ

Директориум ACL

I_faddr

УЛОНГ

Адреса на фрагмент

I_frag

УЧАР

Број на фрагмент

I_fsize

УЧАР

Големина на фрагмент

I_pad1

УШОРТ

Полнење

Јас_резервиран2

УЛОНГ

Резервирано

Полето за тип на датотека и права за пристап е збор од два бајти, од кој секој бит служи како знаменце што ја означува врската на датотеката со одреден тип или поставувањето на една специфична право на датотека.

Идентификатор

Значење

Цел на знамето (поле)

S_IFMT

F000

Маска за тип на датотека

S_IFSOCK

A000

Сокет за домен

S_IFLNK

C000

S_IFREG

8000

Редовна датотека

S_IFBLK

6000

Уред ориентиран кон блок

S_IFDIR

4000

Каталог

S_IFCHR

2000

Уред ориентиран кон бајти (карактер).

S_IFIFO

1000

Именувана цевка (fifo)

S_ISUID

0800

SUID - сменете го сопственикот

S_ISGID

0400

SGID - бит за промена на групата

S_ISVTX

0200

Бит за заштеда на задача (леплив бит)

S_IRWXU

01C0

Маска за правата на сопственикот на датотеката

S_IRUSR

0100

Право на читање

S_IWUSR

0080

Напиши правилно

S_IXUSR

0040

Право на извршување

S_IRWXG

0038

Маска за групни права

S_IRGRP

0020

Право на читање

S_IWGRP

0010

Напиши правилно

S_IXGRP

0008

Право на извршување

S_IRWXO

0007

Маска на правата на други корисници

S_IROTH

0004

Право на читање

S_IWOTH

0002

Напиши правилно

S_IXOTH

0001

Право на извршување

Меѓу инодите, има неколку иноди кои се резервирани за посебни намени и играат посебна улога во датотечниот систем. Ова се следните дескриптори

Идентификатор

Значење

Опис

EXT2_BAD_INO

Инод што ги наведува адресите на лошите блокови на дискот (Bad blocks inode)

EXT2_ROOT_INO

Инод на коренскиот директориум на датотечниот систем (Root inode)

EXT2_ACL_IDX_INO

ACL инода

EXT2_ACL_DATA_INO

ACL инода

EXT2_BOOT_LOADER_INO

Инод на подигнувач

EXT2_UNDEL_DIR_INO

Избришете го директориумот inode

EXT2_FIRST_INO

Прва безрезервна инода

Најважната рачка на оваа листа е рачката на root директориумот. Оваа рачка укажува на root директориумот, кој, како и сите директориуми, се состои од записи со следнава структура:

Име на полето

Тип

Опис

Инода

УЛОНГ

датотека иноден број

rec_len

УШОРТ

Должина на овој запис

име_лен

УШОРТ

Должина на името на датотеката

Име

ЦАР

Име на датотека

Индивидуален запис во директориумот не може да ја премине границата на блокот (односно, мора да биде целосно лоциран во еден блок). Затоа, ако следниот запис не се вклопува целосно во даден блок, тој се пренесува во следниот блок, а претходниот запис продолжува така што го пополнува блокот до крај.

Слика 1 Директни и индиректни адресни блокови во индексот

Слика 2 Големина на датотека во бајти со големина на блок од 1 KB

Слика 3. Пример за индекс на диск

Слика 3 го прикажува индексот на дискот на одредена датотека. Овој индекс припаѓа на обична датотека чиј сопственик е „mjb“ и чија големина е 6030 бајти. Системот му овозможува на корисникот „mjb“ да ја чита, пишува и извршува датотеката; На членовите на групата „os“ и на сите други корисници им е дозволено само да ја читаат или извршуваат датотеката, но не и да пишуваат податоци во неа. Досието последен пат е прочитано на 23 октомври 1984 година во 13:45 часот, а последен пат напишано на 22 октомври 1984 година во 10:30 часот. Индексот последен пат е изменет на 23 октомври 1984 година во 13:30 часот, иако во тој момент не била напишана информација во датотеката. Јадрото ги кодира сите горенаведени податоци во индекс. Забележете ја разликата во пишувањето на дискот на содржината на индексот и содржината на датотеката. Содржината на датотеката се менува само кога е направено запишување во датотеката. Содржината на индексот се менува и кога се менува содржината на датотеката и кога се менуваат сопственикот на датотеката, правата за пристап и множеството покажувачи. Промената на содржината на датотеката автоматски предизвикува прилагодување на индексот, но прилагодувањето на индексот не значи менување на содржината на датотеката.

Каталози

Директориуми се датотеки од кои е изградена хиерархиската структура на датотечен систем; тие играат важна улога во претворањето на името на датотеката во индексен број. Директориум е датотека чија содржина е збир на записи што се состои од бројот на индексот и името на датотеката вклучени во директориумот. Квалификувано име е низа од знаци што се завршуваат со нула знак и се одделени со коса црта („/“) на повеќе компоненти. Секоја компонента освен последната мора да биде име на директориум, но последната компонента може да биде име на датотека што не е директориум. Во верзијата V на UNIX, должината на секоја компонента е ограничена на 14 знаци; Така, заедно со 2 бајти доделени за бројот на индексот, големината на записот во директориумот е 16 бајти.

Поместување на бајти
внатре во директориумот

Број на индекс
(2 бајти)

Имедатотека

1798

во тоа

1276

fsck

clri

1268

motd

1799

монтирање

mknod

2114

passwd

1717

износ

1851

листа за проверка

fsdbld

конфигурација

1432

гети

несреќа

mkfs

Слика 4 /etc формат на директориумот

Слика 4 го прикажува форматот на директориумот „etc“. Секој директориум содржи датотеки чии имиња се означени со точка и две точки ("." и "..") и чии индексни броеви се совпаѓаат со индексните броеви на дадениот директориум и родителскиот именик, соодветно. Број на индекс за датотеката "." во директориумот „/etc“ има адреса со поместување 0 и вредност 83. Инодниот број за датотеката „..“ има адреса на поместување 16 од почетокот на директориумот и вредност 2. Записите во директориумот може да биде празен, но бројот на инодата е 0. На пример, записот на адресата 224 во директориумот „/etc“ е празен, и покрај фактот што некогаш содржел влезна точка за датотека наречена „crash“. Програмата mkfs го иницијализира датотечен систем така што инодните броеви за датотеките се "." и „..“ во root директориумот се исти со бројот на коренскиот индекс на датотечниот систем.

Јадрото складира податоци во директориум исто како што тоа го прави во обичен тип на датотека, користејќи структура на индекс и блокови со директни и индиректни нивоа на адресирање. Процесите можат да читаат податоци од директориуми на ист начин како што читаат обични датотеки, но ексклузивниот пристап за запишување до директориумот е резервиран од кернелот, осигурувајќи дека структурата на директориумот е точна. Дозволите за директориуми го имаат следното значење: дозволата за читање им дава можност на процесите да читаат податоци од директориумот; Дозволата за пишување му овозможува на процесот да креира нови записи во директориумот или да ги отстрани старите (користејќи ги системските операции creat, mknod, link и unlink), со што се менува содржината на директориумот; Правото на извршување му овозможува на процесот да пребарува директориум по име на датотека (бидејќи „извршувањето“ на директориумот е бесмислено).

Кога процесот користи патека на датотека, јадрото бара во директориумите за соодветниот број на инода. Откако името на датотеката ќе се конвертира во број на инода, инодата се става во меморијата и потоа се користи во следните барања.

Концептот на Unix датотечен систем го вклучува концептот на врска. Една инода може да се поврзе со повеќе имиња на датотеки. Описникот содржи поле кое го чува бројот со кој е поврзана датотеката. Додавањето врска се состои од создавање на запис во директориум каде што бројот на инодата покажува на друга инода и зголемување на бројачот на врски во инодата. Кога врската се отстранува, кернелот го намалува бројачот на врски и ја отстранува рачката ако бројачот стане нула.

Таквите врски се нарекуваат тврди врски и можат да се користат само во еден датотечен систем (не можете да креирате врска за датотека од друг датотечен систем). Покрај тоа, тврда врска може да укажува само на датотека (тврда врска до директориумот може да предизвика јамка во датотечниот систем).

На повеќето Unix системи постои друг тип на врска. Овие врски, кои го содржат само името на датотеката, се нарекуваат симболични. Кога кернелот обработува такви врски, при конвертирање на патеката на датотеката во инода, кернелот го заменува името на врската со содржината на инодата (т.е. името на дестинацијата на датотеката) и ја реинтерпретира патеката на датотеката. Бидејќи симболичната врска не укажува на инода, можно е да се креираат врски до датотеки лоцирани на друг датотечен систем. Овие врски може да укажуваат на секаков тип на датотека, дури и на непостоечки. Симболичките врски се широко користени бидејќи ги немаат истите ограничувања што ги имаат тврдите врски. Сепак, тие заземаат одреден простор на дискот каде што се наоѓаат блоковите на инодата и податоците. Нивната употреба може да резултира со некои одложувања во конвертирањето на патеката на датотеката во инода, поради фактот што кернелот мора да ја реинтерпретира патеката на датотеката кога обработува символна врска.

Датотеки на уредот

Во оперативните системи слични на Unix, до уредите се пристапува преку специјални датотеки. Таквата датотека не зазема простор во датотечниот систем. Тоа е само пристапна точка до двигателот на уредот.

Постојат два вида датотеки на уредот: знак и блок. Кога користите тип на знаци, можете да разменувате податоци само со уред во режим на знаци, додека датотеките на уредот со тип блок ви дозволуваат да разменувате блокови само со помош на бафер. Кога е поднесено барање за влез/излез до датотека на уред, барањето се препраќа до соодветниот двигател на уредот. Секоја таква датотека има главен број што го идентификува типот на уредот и помал број што го идентификува самиот уред.

Дополнителни карактеристики на EXT2fs

Покрај стандардните функции на Unix, EXT2fs обезбедува некои дополнителни функции кои обично не се поддржани од датотечните системи Unix.

Атрибутите на датотеката ви дозволуваат да го промените начинот на кој кернелот реагира кога работите со множества датотеки. Можете да поставите атрибути на датотека или директориум. Во вториот случај, датотеките создадени во овој директориум ги наследуваат овие атрибути.

За време на монтирањето на системот, може да се постават некои функции поврзани со атрибутите на датотеката. Опцијата за монтирање му овозможува на администраторот да избере како се креираат датотеките. Во датотечен систем специфичен за BSD, датотеките се креираат со истиот ID на групата како и родителскиот директориум. Карактеристиките на System V се нешто посложени. Ако директориумот има поставено бит setgid, тогаш креираните датотеки го наследуваат идентификаторот на групата на тој директориум, а поддиректориумите го наследуваат идентификаторот на групата и битот setgid. Во спротивно, датотеките и директориумите се креираат со примарната група ID на процесот на повикување.

Системот EXT2fs може да користи синхрона модификација на податоци слична на системот BSD. Опцијата за монтирање му овозможува на администраторот да одреди сите податоци (иноди, бит блокови, индиректни блокови и блокови на директориуми) да се запишуваат синхроно на дискот кога се менуваат. Ова може да се користи за да се постигне висок капацитет за снимање податоци, но исто така резултира со слаби перформанси. Во реалноста, оваа функција вообичаено не се користи бидејќи, покрај деградирањето на перформансите, може да доведе до губење на кориснички податоци што не се означени при проверка на датотечниот систем.

EXT2fs ви овозможува да ја изберете логичката големина на блокот кога креирате датотечен систем. Може да биде со големина од 1024, 2048 или 4096 бајти. Користењето на поголеми блокови резултира со побрзи I/O операции (бидејќи се помалку барања на дискот), а со тоа и помалку движење на главата. Од друга страна, користењето на големи блокови доведува до губење простор на дискот. Вообичаено, последниот блок од датотеката не се користи целосно за складирање на информации, па како што се зголемува големината на блокот, се зголемува количината на потрошениот простор на дискот.

EXT2fs ви овозможува да користите забрзани симболички врски. Кога користите такви врски, не се користат податочни блокови на датотечниот систем. Името на дестинацијата на датотеката не е зачувано во блокот за податоци, туку во самата inode. Оваа структура ви овозможува да заштедите простор на дискот и да ја забрзате обработката на симболични врски. Се разбира, просторот резервиран за рачка е ограничен, така што секоја врска не може да се претстави како забрзана врска. Максималната должина на името на датотеката во забрзана врска е 60 знаци. Во блиска иднина се планира да се прошири оваа шема за мали датотеки.

EXT2fs ја следи состојбата на датотечен систем. Јадрото користи посебно поле во суперблокот за да ја покаже состојбата на датотечниот систем. Ако датотечниот систем е монтиран во режим за читање/запишување, тогаш неговата состојба е поставена на „Не чист“. Ако се демонтира или повторно се монтира во режим само за читање, тогаш неговата состојба е поставена на „Чистење“. За време на проверките за подигање на системот и статусот на датотечниот систем, оваа информација се користи за да се утврди дали е неопходна проверка на датотечниот систем. Јадрото поставува и некои грешки во ова поле. Кога кернелот детектира несовпаѓање, датотечниот систем е означен како „Погрешен“. Проверката на датотечниот систем ги тестира овие информации за да го провери системот, дури и ако неговиот статус е всушност Чист.

Игнорирањето на тестирањето на датотечниот систем долго време понекогаш може да доведе до одредени потешкотии, така што EXT2fs вклучува два методи за редовна проверка на системот. Суперблокот го содржи бројачот за монтирање на системот. Овој бројач се зголемува секој пат кога системот е монтиран во режим за читање/запишување. Ако неговата вредност го достигне максимумот (исто така е зачувана во суперблок), тогаш програмата за тестирање на датотечниот систем започнува да ја проверува, дури и ако неговата состојба е „Чиста“. Времето на последната проверка и максималниот интервал помеѓу проверките се исто така зачувани во суперблокот. Кога ќе се достигне максималниот интервал помеѓу скенирањата, состојбата на датотечниот систем се игнорира и неговото скенирање започнува.

Системот EXT2fs содржи алатки за негово конфигурирање. Програмата tune2fs може да се користи за промена:

  • дејства кога е откриена грешка. Кога јадрото детектира несовпаѓање, датотечниот систем е означен како „Погрешен“ и може да се изврши една од следните три дејства: да се продолжи со извршувањето, да се монтира датотечниот систем во режим само за читање за да се избегне оштетување или да се рестартира системот за да се провери датотечен систем.
  • максимална вредност на монтирање.
  • максимален интервал помеѓу проверките.
  • број на логички блокови резервирани за root корисникот.

Опциите наведени на монтирање може да се користат и за промена на она што го прави кернелот кога ќе открие грешка.

Користењето атрибути им овозможува на корисниците да бришат чувствителни датотеки. Кога ќе се избрише таква датотека, случајните информации се запишуваат во блоковите што претходно биле користени за поставување на оваа датотека. Ова ги спречува аутсајдерите да добијат пристап до претходната содржина на оваа датотека користејќи уредувач на дискови.

Нови типови датотеки неодамна беа додадени во системот EXT2fs, преземени од датотечен систем 4.4 BSD. Датотеките од првиот тип може да се користат само за читање: никој нема право да ги менува или брише. Ова може да се користи за заштита на важни конфигурациски датотеки. Друг тип на датотека е датотека што може да се отвори во режим на запишување, а податоците може да се додадат само на крајот од датотеката. Датотеките од овој тип исто така не можат да се избришат или преименуваат. Тие можат да се користат како датотеки за дневници, кои можат да растат само во големина.

Оптимизација на перформансите

Системот EXT2fs содржи многу функции кои ги оптимизираат неговите перформанси, што доведува до зголемена брзина на размена на информации при читање и пишување датотеки.

EXT2fs активно го користи баферот на дискот. Кога блокот треба да се прочита, кернелот издава барање за I/O операција до неколку соседни блокови. Така, кернелот се обидува да се осигура дека следниот блок што треба да се прочита е веќе вчитан во баферот на дискот. Ваквите операции обично се вршат кога секвенцијално се читаат датотеките.

Системот EXT2fs содржи и голем број оптимизации за поставување информации. Блок групите се користат за групирање соодветни иноди и податочни блокови. Јадрото секогаш се обидува да ги смести податочните блокови на една датотека во истата група, како и неговиот дескриптор. Ова е наменето да го намали движењето на главите на погоните при читање на дескрипторот и неговите соодветни блокови на податоци.

Кога пишувате податоци во датотека, EXT2fs однапред доделува до 8 соседни блокови при доделување нов блок. Овој метод ви овозможува да постигнете високи перформанси при големо оптоварување на системот. Ова, исто така, овозможува да се сместат датотеките во соседни блокови, што го забрзува нивното последователно читање.

EXT2fs библиотека

За да се поедностави користењето на ресурсите EXT2fs и работата на контролните структури на овој датотечен систем, беше развиена библиотеката libext2fs. Оваа библиотека содржи функции што може да се користат за дефинирање и менување на податоците од датотечниот систем EXT2 со директно пристапување до физичкиот уред.

Повеќето алатки за EXT2fs (mke2fs, e2fsck, tune2fs, dumpe2fs, debugfs, итн.) ја користат оваа библиотека. Ова во голема мера ја поедноставува модификацијата на овие алатки, бидејќи сите промени за воведување дополнителни можности во датотечниот систем EXT2fs мора да се направат само во библиотеката EXT2fs.

Бидејќи интерфејсот на библиотеката EXT2fs е прилично широк и апстрактен, програмите кои бараат директен пристап до датотечниот систем може лесно да се напишат со негова помош. На пример, библиотеката EXT2fs се користеше за време на преносот на депонијата 4.4 BSD и обновувањето на некои комунални услуги. Беа потребни многу малку промени за да се приспособат овие алатки на Linux (моравме да замениме неколку функции за интеракција на датотечниот систем со повици до библиотеката EXT2fs).

Библиотеката EXT2fs обезбедува пристап до операциите на неколку класи. Првата класа е операции поврзани со датотечен систем. Секоја програма може да отвори или затвори датотечен систем, да чита или запише блок од битови или да создаде нов датотечен систем на дискот. Исто така, постојат функции за манипулирање со листа на лоши блокови на датотечниот систем.

Втората класа на операции работи со директориуми. Програма што ја користи библиотеката EXT2fs може да креира или прошири директориум, како и да додава или брише записи во директориумот. Постојат функции и за одредување на патеката до датотеката со помош на инода и за одредување на патеката до датотеката со помош на одреден дескриптор.

Последната класа на операции работи на рачки на индекси. Можно е да се чита табелата со дескриптори, да се чита или да се напише дескриптор и да се прегледаат сите блокови од наведениот дескриптор. Можно е да се користат функции за поставување и ослободување блокови и дескриптори.

Системски алатки EXT2fs

Развиени се моќни контроли за системот EXT2fs. Овие алатки се користат за креирање, менување и поправка на какви било недоследности во датотечните системи EXT2fs. Програмата mke2fs се користи за монтирање на партиција на диск што содржи празен датотечен систем EXT2fs.

Програмата tune2fs може да се користи за конфигурирање на параметрите на датотечниот систем.Со негова помош, можете да го промените одговорот на грешки, максималниот број на системски монтирања, максималниот интервал помеѓу системските проверки и бројот на логички блокови резервирани за root корисникот.

Можеби најинтересната алатка е проверката на датотечниот систем. E2fsck е дизајниран да ги елиминира недоследностите во датотечниот систем по неточно исклучување на целиот систем. Почетната верзија на програмата e2fsck се базира на програмата Linus Torvald fsck за датотечен систем Minix. Сепак, тековната верзија на програмата се препишува со помош на библиотеката EXT2fs и е побрза и може да коригира повеќе грешки во системот кога ја проверува, во споредба со оригиналната верзија.

Програмата e2fsck беше дизајнирана да работи со максимална брзина. Бидејќи програмите за проверка на датотечниот систем доведуваат до вчитување на дискот, алгоритмите e2fsck треба да се оптимизираат така што структурите на датотечниот систем се пристапуваат многу поретко. И, дополнително, редоследот на проверка на иноди и директориуми ќе се изврши по број на блок за да се намали времето потребно за преместување на главите на дисковите.

Во првиот премин, e2fsck поминува низ сите иноди на датотечниот систем и ја испитува секоја инода како посебен системски елемент. Така, другите објекти на датотечниот систем не се проверуваат за време на ова тестирање. Една од целите на ваквите проверки е да се провери постоењето на типот на датотеката што се проверува, како и кореспонденцијата на сите блокови во дескрипторот со блокови со постоечки броеви. Првиот премин ги проверува мапите на битови што укажува на употреба на блокови и дескриптори.

Ако e2fsck најде податочни блокови чии броеви се содржани во повеќе од еден дескриптор, тогаш премините 1B до 1D се извршуваат за да се реши несовпаѓањето, или со зголемување на блоковите што треба да се споделат или со отстранување на еден или повеќе дескриптори.

Првото поминување одзема најмногу време, бидејќи сите иноди мора да се прочитаат во меморијата и да се проверат. За да се намали времето на I/O операции во следните премини, сите потребни информации остануваат во баферот. Карактеристична карактеристика на оваа шема е пребарувањето за сите блокови на директориуми на датотечниот систем. За да се добијат овие информации, во вториот премин се читаат повторно структурите на дескриптори на сите директориуми во датотечниот систем.

Во вториот премин, директориумите се проверуваат како посебни елементи на датотечен систем. Секој блок на директориуми се проверува посебно, без повикување на други блокови на директориуми. Ова му овозможува на e2fsck да ги сортира сите блокови на директориуми по број на блок и да ги провери во растечки редослед, со што се намалува времето за пристап на дискот. Блоковите на директориуми се тестираат за да се осигура дека нивните записи се валидни и дека содржат референци за рачки со постоечки броеви (како што е утврдено во првиот премин).

За првиот блок на директориуми во секој дескриптор на директориуми, се проверува постоењето на записи ".". и „..“, и дека бројот на дескрипторот за записот „." одговара на тековниот директориум. (Бројот на дескрипторот за записот „..“ не се тестира до третото поминување.)

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

Треба да се забележи дека до крајот на второто поминување, речиси сите I/O операции на дискот се завршени. Сите информации потребни за третото, четвртото и петтото поминување се содржани во меморијата, меѓутоа, преостанатите поминувања го вчитуваат процесорот и заземаат помалку од 5-10% од вкупното време на извршување e2fsck.

Во третиот премин, се проверуваат врските со директориуми. E2fsck ги проверува патеките на секој директориум кон коренот користејќи ги информациите добиени за време на вториот премин. Овде се проверува записот „..“ за секој директориум. Сите директориуми идентификувани по проверка и немаат врска со root директориумот се сместени во директориумот /lost+found.

Во четвртиот премин, e2fsck ги проверува броевите на референци за секоја инода со поминување низ сите иноди и споредување на броењето на референци (оваа информација е зачувана од првото поминување) со внатрешните бројачи кои биле пресметани за време на вториот и третиот премин. ov. Сите неизбришани датотеки со референтен број нула се исто така сместени во директориумот /lost+found.

Конечно, во петтиот премин, e2fsck проверува дали сите информации за датотечниот систем се совпаѓаат. Овде, битмапите на блоковите и дескрипторите што беа добиени во претходните премини се споредуваат со вистинските вредности и, доколку е потребно, информациите на дискот соодветно се прилагодуваат.

Друга корисна алатка е дебагерот на датотечниот систем. Debugfs е моќна програма која ви овозможува да ја одредите и поставите состојбата на датотечен систем. Во суштина, тоа е интерактивен интерфејс за библиотеката EXT2fs, односно, ги преведува напишаните команди во повици до функциите на библиотеката.

Дебагфовите може да се користат за одредување на внатрешната структура на датотечен систем, рачно поправка на оштетен систем или создавање условни тестови за e2fsck. За жал, оваа програма може да го оштети датотечен систем ако не знаете како да ја користите. Користејќи ја оваа алатка, можете едноставно да го уништите датотечен систем. Затоа, debugfs стандардно го отвора датотечниот систем во режим само за читање. За да пристапите во режим за читање/запишување, наведете ја опцијата -w.

Пресметка на перформанси

Резултатите од тестот Бони може да се видат од следната табела:

Снимање карактер по знак (Kb/s)

Блокирај снимање (Kb/s)

Синхронизирање (Kb/s)

Читање карактер по знак (Kb/s)

Блокирај прочитано (Kb/s)

BSD Async

BSD Sync

Ext2fs

1237

1033

Xia fs

Резултатите се доста добри за блок I/O: системот EXT2fs ги надминува другите системи во однос на перформансите. Ова се должи на оптимизациите вклучени во процедурите за поставување. Снимањето исто така се случува доста брзо, поради фактот што се прави во групен режим. Големата брзина на читање се должи на фактот што блоковите се доделени на датотеката, така што главите на погонот не се движат помеѓу две читања и оптимизацијата за претходно читање е целосно оперативна.

Од друга страна, системот FreeBSD има повисоки перформанси за симболично I/O. Ова може да се должи на фактот дека FreeBSD и Linux користат различни процедури за соодветните C библиотеки. Покрај тоа, FreeBSD најверојатно има пооптимизирана симболична библиотека за читање и затоа перформансите се малку подобри овде.

Резултати од тестот Ендру

Резултатите од тестот на Ендрју може да се видат од следната табела:

Пасус 1 Создавање

Поминете 2 Копирај

Премин 3 Проверка на статусот

Поминете проверка од 4 бајт-по-бајт

Пасус 5 Компилација

2203

7391

6319

17466

75314

BSD Sync

2330

7732

6317

17499

75681

Ext2fs

Резултатите од првите две поминувања покажуваат дека Linux победува со асинхрона размена на податоци. Кога креирате директориуми и датотеки, системот BSD синхроно запишува рачки на директориуми и записи во директориумот. Постојат шпекулации дека асинхроната поддршка за FreeBSD сè уште не е целосно имплементирана.

Во третиот премин, вредностите за Linux и BSD се многу слични. Додека BSD работи подобро, додавањето бафер за име на датотека во Linux VFS го елиминира овој проблем.

Во четвртиот и петтиот премин, Linux е побрз од FreeBSD, главно поради употребата на унифицирано управување со баферот. Големината на баферот може да расте по потреба и да зафаќа повеќе меморија од FreeBSD, која користи фиксна големина. Споредбата на резултатите од системите EXT2fs и Xia fs покажува дека оптимизациите вклучени во EXT2fs всушност се користат: разликата во перформансите на овие системи е околу 5-10%.

Заклучок

Датотечниот систем EXT2 е најшироко користен меѓу корисниците на Линукс. Обезбедува стандардни функции на Unix и дополнителни функции. Покрај тоа, благодарение на оптимизацијата вклучена во кернелот, тој покажува одлични резултати во изведбата.

Системот EXT2fs вклучува функции кои ви дозволуваат да додавате нови можности. Некои луѓе работат на развивање екстензии на вистинскиот датотечен систем: списоци за контрола на пристап во согласност со Posix, обновување на избришани датотеки и компресија на датотеки во реално време.

Прво, системот EXT2fs беше интегриран во кернелот Линукс, а сега активно се пренесува на други оперативни системи. EXT2fs е исто така важна компонента на оперативниот систем Masix, кој моментално го развива еден од авторите.

Како и кај секој датотечен систем UNIX, ext2 ги вклучува следните компоненти:

− блокови и групи блокови;

− дескриптор на индекс;

− суперблок.

Целиот простор на партицијата на дискот е поделен на блокови со фиксна големина, множители на големината на секторот: 1024, 2048, 4096 или 8192 бајти. Големината на блокот се одредува кога датотечниот систем е креиран на партицијата на дискот. Помала големина на блок заштедува простор на тврдиот диск, но исто така ја ограничува максималната големина на датотечниот систем. Сите блокови имаат сериски броеви. Со цел да се намали фрагментацијата и бројот на движења на главите на тврдиот диск при читање големи количини на податоци, блоковите се комбинираат во групи блокови.

Основниот концепт на датотечен систем е индексен дескриптор или инода (англиски информативен јазол). Ова е посебна структура која содржи информации за атрибутите и физичката локација на датотеката. Инодите се организирани во табела, која е содржана на почетокот на секоја блок група.

Слика 10 - Генерализиран блок дијаграм на ext2 FS

Superblock е главниот елемент на датотечен систем ext2. Содржи општи информации за датотечниот систем:

вкупниот број на блокови и иноди во датотечниот систем,

број на слободни блокови и иноди во датотечниот систем,

големина на блок на датотечниот систем,

број на блокови и иноди во блок група,

инодна големина,

идентификатор на датотечен систем.

Суперблокот е 1024 бајти од почетокот на делот. Интегритетот на суперблокот директно влијае на перформансите на датотечниот систем. Оперативниот систем создава неколку резервни копии од суперблокот во случај партицијата да биде оштетена. Во следниот блок по суперблокот има глобална табела со дескриптори - опис на блок групи, што е низа која содржи општи информации за сите блок групи во делот.

Сите блокови од партицијата ext2 се поделени во групи блокови. За секоја група, се креира посебен запис во глобалната табела со дескриптори, која ги складира главните параметри:

број на блок во битмапата на блокот,

број на блок во битмапата на инодата,

број на блок во табелата со иноди,

број на бесплатни блокови во групата,

број на иноди кои содржат директориуми.

Блок битмапа е структура во која секој бит покажува дали соодветниот блок е доделен на датотека. Ако битот е 1, тогаш блокот е зафатен. Слична функција врши и инодата битмапа, која покажува кои иноди се зафатени, а кои не. Линукс кернелот, користејќи го бројот на иноди што содржат директориуми, се обидува рамномерно да ги дистрибуира инодите на директориумите во групи и се обидува да ги премести инодите на датотеките, ако е можно, во групата со родителскиот директориум. Целиот преостанат простор, означен како податоци во табелата, е наменет за складирање на датотеки.

Датотечниот систем ext2 ја користи следнава шема за адресирање на блок датотеки. За да се зачува адресата на датотеката, се доделуваат 15 полиња, од кои секое се состои од 4 бајти. Ако датотеката се вклопува во 12 блокови, тогаш броевите на соодветните кластери се директно наведени во првите дванаесет полиња од адресата. Ако големината на датотеката надминува 12 блока, тогаш следното поле ја содржи адресата на кластерот во кој може да се лоцираат броевите на следните блокови од датотеката. Така, 13-тото поле се користи за индиректно адресирање.

Со максимална големина на блок од 4096 бајти, кластерот што одговара на 13-тото поле може да содржи до 1024 броеви од следните блокови на датотеки. Ако големината на датотеката надминува 12+1024 блокови, тогаш се користи 14-тото поле кое ја содржи адресата на кластерот кој содржи 1024 кластерски броеви, од кои секој се однесува на 1024 блокови од датотеката. Тука веќе се користи двојно индиректно адресирање. Конечно, ако датотеката содржи повеќе од 12+1024+1048576 блокови, тогаш последното 15-то поле се користи за тројно индиректирање.

Овој систем за адреси ви овозможува да имате датотеки поголеми од 2 TB со максимална големина на блок од 4096 бајти.

ext3 или ext3fs е датотечен систем за журнал што се користи во оперативните системи базирани на кернелот Линукс. Врз основа на датотечен систем ext2.

Главната разлика од ext2 е тоа што ext3 е дневник, односно предвидува снимање на некои податоци што ви овозможуваат да го вратите датотечниот систем во случај на дефекти на компјутерот.

Стандардот обезбедува три начини на логирање:

запишување: само метаподатоците на датотечниот систем, односно информациите за неговите промени, се запишуваат во дневникот. Не може да гарантира интегритет на податоците, но веќе значително го намалува времето за верификација во споредба со ext2;

нарачано: исто како запишување, но се гарантира дека податоците ќе бидат запишани во датотека пред да се запишат информациите за промените во оваа датотека. Малку ги намалува перформансите, а исто така не може да гарантира интегритет на податоците (иако ја зголемува веројатноста за нивна безбедност кога се додава на крајот на постоечка датотека);

списание: целосно евидентирање и на метаподатоци за FS и на кориснички податоци. Најспор, но и најбезбеден режим; може да гарантира интегритет на податоците при складирање на дневникот на посебна партиција (или уште подобро, на посебен хард диск).

Датотечниот систем ext3 може да поддржува датотеки со големина до 1 TB. Со кернелот Linux 2.4, големината на датотечниот систем е ограничена со максималната големина на блок-уредот, што е 2 терабајти. Во Linux 2.6 (за 32-битни процесори), максималната големина на блок уред е 16 TB, но ext3 поддржува само до 4 TB.

ext4 е датотечен систем базиран на ext3 и компатибилен со него (напред и назад). Се разликува од ext3 по поддршка на размери, групи на соседни физички блокови управувани како една целина; зголемена брзина на проверка на интегритетот и голем број други подобрувања.

Нови карактеристики на ext4 (во споредба со ext3):

Користење на размери. Во датотечниот систем ext3, адресирањето на податоците се изведуваше на традиционален начин, блок по блок. Овој метод на адресирање станува помалку ефикасен како што расте големината на датотеките. Проширувањата ви дозволуваат да адресирате голем број (до 128 MB) секвенцијални блокови со еден дескриптор. Може да се постават директно во инодата до 4 покажувачи до размери, што е доволно за мали до средни датотеки.

48-битни блок броеви. Со големина на блок од 4K, ова овозможува да се адресира до еден егзабајт (2 48 *4KB = 2 50 *1KB = 2 60 B = 1 EB).

Распределба на блокови во групи (распределба на повеќе блокови). Датотечниот систем складира не само информации за локацијата на слободните блокови, туку и бројот на слободни блокови кои следат еден по друг. При доделување простор, датотечниот систем наоѓа фрагмент во кој податоците може да се запишат без фрагментација. Ова го намалува нивото на фрагментација на датотечниот систем како целина.

Одложена распределба на блокови. Распределбата на блокови за складирање на податоците од датотеката се случува непосредно пред физичкото запишување на дискот (на пример, при повикување синхронизација), а не при повикување на запишување. Како резултат на тоа, операциите за распределба на блокови може да се прават не едно по едно, туку во групи, што пак ја минимизира фрагментацијата и го забрзува процесот на распределба на блокови. Од друга страна, го зголемува ризикот од губење на податоци во случај на ненадеен прекин на напојувањето.

Границата од 32.000 директориуми е надмината.

Резервирање иноди при креирање директориум (резервација на иноди на директориумот) При креирање директориум се резервирани неколку иноди. Последователно, при креирање на датотеки во овој директориум, прво се користат резервираните иноди, а доколку не останат, се врши нормалната процедура.

инодна големина. Големината на инодата (стандардно) се зголеми од 128 на 256 бајти. Ова овозможи да се реализираат придобивките наведени подолу.

Временски печати од наносекунда. Поголема прецизност на времињата складирани во inode. Опсегот на складирани времиња е исто така проширен: ако претходно горната граница на складираното време беше 18 јануари 2038 година, сега е 25 април 2514 година.

инодна верзија. Во инодата се појави број, кој се зголемува секој пат кога се менува инодата на датотеката.

Складирање на проширени атрибути во inode (EA во inode). Складирањето на проширени атрибути како што се ACL, SELinux атрибути и други може да ги подобри перформансите. Атрибутите за кои нема доволно простор во инодата се складираат во посебен блок од 4KB.

Проверка на дневник. Пријавете се проверки на трансакции. Ви овозможува подобро да ги пронајдете и (понекогаш) да ги исправите грешките при проверка на интегритетот на системот по дефект.

Постојана прераспределба. Сега, за да се гарантира дека апликацијата зафаќа простор во датотечниот систем, таа ја пополнува со нули. Во ext4, стана можно да се резервира многу блокови за пишување и да не се троши дополнително време за иницијализација. Ако апликацијата се обиде да ги прочита податоците, ќе добие порака дека не е иницијализирана. Така, нема да биде можно неовластено да се читаат избришаните податоци.

Дефрагментација без демонтажа (онлајн Дефрагментација).

Неиницијализирани групи. Ви овозможува да ја забрзате проверката на датотечниот систем. Единиците означени како неискористени се проверуваат групно, а детален преглед се врши само доколку од прегледот на групата се покаже дека внатре има оштетувања.

Предавање 12.

Тема: Директориумски системи

Врската помеѓу системот за управување со датотеки и збир на датотеки е директориум со датотеки. Наједноставната форма на систем за директориуми е тоа што има еден директориум кој ги содржи сите датотеки. Директориумот содржи информации за датотеките, вклучувајќи атрибути, локација, сопственост. Корисниците пристапуваат до датотеките со симболични имиња. Меѓутоа, човечката меморија го ограничува бројот на имиња на објекти на кои корисникот може да се повика по име. Хиерархиската организација на именскиот простор ни овозможува значително да ги прошириме овие граници. Ова е причината зошто каталошките системи имаат хиерархиска структура. Графикот што ја опишува хиерархијата на директориумот може да биде дрво или мрежа. Директориумите формираат дрво ако датотеката е дозволено да биде вклучена само во еден директориум (сл. 7.11), и мрежа ако датотеката може да се вклучи во неколку директориуми.

На пример, во Ms-Dos и Windows, директориумите формираат структура на дрво, додека во UNIX тие формираат мрежна структура. Општо земено, компјутерскиот систем може да има неколку уреди со диск, дури и компјутерот секогаш има неколку дискови: флопи, хард диск, ЦД-РОМ (ДВД). Како да организирате складирање датотеки во овој случај?

Ориз. Каталошки системи

Првото решение е да се хостира офлајн датотечен систем на секој уред, т.е. датотеките лоцирани на овој уред се опишани со дрво на директориуми кое на никаков начин не е поврзано со стеблата на директориумите на други уреди. Во овој случај, за уникатно да ја идентификува датотеката, корисникот мора да го наведе логичкиот идентификатор на уредот заедно со сложеното симболично име на датотеката. Пример за такво автономно постоење е MS-DOS, Windows 95/98/Me/XP.

Друго решение е да се организира складирање на датотеки на таков начин што на корисникот му се дава можност да ги комбинира датотечните системи лоцирани на различни уреди во еден датотечен систем опишан со едно дрво на директориуми. Оваа операција се нарекува монтирање.

Во UNIX OS, монтирањето се врши на следниов начин. Меѓу сите достапни уреди со логички диск, се издвојува еден, наречен системски. Нека има два датотечни системи лоцирани на различни логички дискови, а еден од дисковите е системскиот погон (сл. 7.12).

Датотечниот систем лоциран на системскиот диск се нарекува root. За да се поврзат хиерархиите на датотеки во root датотечен систем, се избира постоечки директориум, во овој пример loc директориумот. Откако ќе заврши монтирањето, избраниот loc директориум станува root директориум на вториот датотечен систем. Преку овој директориум, монтираниот датотечен систем е прикачен како поддрво на целокупното стебло.

Ориз. Монтирање

Атрибут

Концептот на датотека ги вклучува не само податоците и името што ги складира, туку и информациите што ги опишуваат својствата на датотеката. Оваа информација ги сочинува атрибутите на датотеката. Списокот на атрибути може да варира на различни оперативни системи. Пример за можни атрибути е прикажан подолу.

Атрибут Значење
Тип на датотека Редовен, Каталог, Специјален, итн.
Сопственик на датотека Тековен сопственик
Создавач на датотеки ID на корисникот кој ја создал датотеката
Лозинка Лозинка за пристап до датотеката
Време Создадено, последен пристап, последен пат изменето
Тековна големина на датотека Број на бајти во записот
Максимална големина Број на бајти до кои може да се зголеми големината на датотеката
Знаме само за читање 0 – читање/пишување, 1 – само за читање
„Скриено“ знаме 0 – нормално, 1 – не се прикажуваат во списокот со датотеки со директориуми
Знаме на системот 0 - нормално, 1 - систем
Знаме „Архива“. 0 – архивирано, 1 – потребно е архивирање
ASCII/бинарно знаме 0 – ASCII, 1 – бинарен
Знаме за случаен пристап 0 – само последователен пристап, 1 – случаен пристап
Знаме „привремено“ 0 – нормално, 1 – бришење по завршувањето на процесот
Клучна позиција Поместување за внесување евиденција
Должина на клучот Број на бајти во полето за клучеви

Корисникот може да пристапи до атрибутите користејќи ги погодностите предвидени за оваа намена од датотечниот систем. Вообичаено, можете да ја прочитате вредноста на сите атрибути, но да промените само некои.

Вредностите на атрибутот на датотеката можат да бидат содржани во директориуми, како што се прави, на пример, во MS-DOS (сл. 7.7). Друга опција е да се постават атрибути во посебни табели, во тој случај каталозите содржат врски до овие табели.

Ориз. 7. Атрибути на MS DOS-датотеки

ext2(исто така наречено како ext2fs) - Втор проширен датотечен систем(Втор продолжен датотечен систем) е датотечен систем изграден на кернелот Линукс. Креатор и развивач на ext2 е Remy Card. Датотечниот систем ext2 бил изграден од него за да ја замени старата, претходната верзија - ext.

Во однос на брзината и перформансите, овој датотечен систем може да послужи како репер. Ова е потврдено од резултатите од тестовите за перформансите на датотечниот систем. На пример, во секвенцијалните тестови за брзина на читање и запишување на Dell Tech Center, датотечниот систем ext2 го надминува ext3 и е втор само по помодерниот ext4 по брзина на читање.

Главниот недостаток на ext2 е тоа што не е датотечен систем за журнал. Сепак, овој недостаток беше елиминиран во следниот датотечен систем - ext3.

ext2 се користи на флеш картички и дискови со цврста состојба (SSD), бидејќи недостатокот на дневник е предност кога работите со дискови со ограничувања на циклусот за пишување.

Историја на создавањето ext2

За време на брзиот развој на системот Linux, тој го користеше датотечен систем Minix OS. Беше доста стабилен, но во исто време беше и 16-битен. Како резултат на тоа, имаше строга граница од 64 Mb по партиција. Покрај тоа, имаше ограничување на максималната должина на името на датотеката, која беше 14 знаци.

Овие ограничувања заедно доведоа до развој на „проширен датотечен систем“ (оттука и терминот „ Проширен датотечен систем"). Таа имаше задача да реши два од клучните проблеми на Миникс. Новиот датотечен систем беше претставен во април 1992 година. Тоа беше Ext, кој ги прошири ограничувањата на големината на датотеката на 2 гигабајти и постави ограничување на должината на името на датотеката од 255 знаци.

Сепак, и покрај успехот на новиот датотечен систем, сè уште имаше доста нерешени проблеми. На пример, немаше поддршка за посебен пристап, немаше временски печати за измена на податоците. Потребата за решавање на овие проблеми послужи како мотивација за создавање на следната верзија на проширениот датотечен систем ext2 (“ Втор проширен датотечен систем"). ext2 беше развиен во јануари 1993 година и исто така имплементираше ACL во согласност со POSIX и проширени атрибути на датотеки.

ext2 логичка организација

Графикот на хиерархија на директориумот ext2 е претставен како мрежа. Ова се должи на фактот дека една датотека може да биде вклучена во неколку директориуми одеднаш.

Сите типови на датотеки имаат симболични имиња. Хиерархиски организираните датотечни системи обично користат три типа на имиња: едноставни, сложени и релативни. Истото во ext2. Во случај на едноставно име, ограничувањето е дека неговата должина не треба да надминува 255 знаци, покрај тоа, името не треба да содржи NULL знак и коса црта.

Што се однесува до знакот NULL, ограничувањата се поврзани со претставувањето на стринговите во јазикот C; во случајот со коса црта, сето тоа лежи во фактот што се користи како раздвојувачки знак помеѓу директориумите.

Целосното име е синџир од едноставни симболични имиња на сите директориуми низ кои минува патеката од коренот до дадената датотека. Во ext2, датотеката може да припаѓа на неколку директориуми, што значи дека може да има неколку целосни имиња (една датотека - неколку целосни имиња). Но, на еден или друг начин, целосното име ја одредува датотеката.

ext2 атрибути:

  • тип на датотека и права за пристап,
  • сопственик, група за пристап,
  • информации за дозволените операции,
  • време на создавање, датум на последен пристап, последен датум на измена и последно избришано време,
  • моментална големина на датотека,
  • спецификација на датотека:
    • редовна датотека
    • каталог,
    • датотека на уред ориентирана кон бајти,
    • блок-ориентирана датотека на уред,
    • именувана цевка,
    • симболична врска,
  • број на зафатени блокови,
  • други

Атрибутите на датотеките се содржани во посебни табели, а не во директориуми, како што е обично случај во едноставни датотечни системи. Како резултат на тоа, директориумот има многу едноставна структура, која се состои од два дела: бројот на инодата и името.

Физичка организација ext2

Структура на партиција на дискот

Следното може да се разликува како дел од ext2:

  • блокови и групи блокови;
  • инода;
  • суперблок.

Целиот простор на партицијата на дискот е поделен на блокови со фиксна големина, а блоковите се множител на големината на секторот (1024, 2048, 4096 или 8192 бајти). Големината на блокот се одредува кога датотечниот систем е креиран на партицијата на дискот. На сите блокови им се доделуваат сериски броеви. За да се намали фрагментацијата и бројот на движења на главите на тврдиот диск при читање големи количини на податоци, блоковите се комбинираат во групи.

Основниот концепт на датотечен систем е инодата (исто така наречена инода - информативен јазол). Ова е посебна структура која содржи информации за атрибутите и физичката локација на датотеката. Декрипторите на индексот се комбинираат во табела содржана на почетокот на секоја блок група. Суперблокот е главниот елемент на датотечен систем ext2. Содржи општи информации за датотечен систем. Суперблокот се наоѓа на 1024 бајти од почетокот на делот. Интегритетот на суперблокот го одредува здравјето на датотечен систем. ОС создава неколку резервни копии од суперблокот во случај партицијата да биде оштетена. Во следниот блок по суперблокот има глобална табела со дескриптори - опис на блок групи во форма на низа со општи информации за сите блок групи.

Блокирај група

Сите блокови од партицијата ext2 се поделени во групи. За секоја група се креира посебен запис во табелата со глобални дескриптори. Овој запис ги складира основните параметри, како што се: бројот на блокот во битмапи и табели, бројот на слободни блокови во групата, бројот на иноди што содржат директориуми.

Блокирај битмапае систем во кој секој бит информира дали соодветниот блок е доделен на датотека. Ако битот е 1, тогаш блокот е зафатен. Инодната битмапа врши слична функција: покажува кои иноди се зафатени, а кои не. Линукс кернелот се обидува рамномерно да ги дистрибуира инодите на директориумите низ групите и да ги премести инодите на датотеките во групата со родителскиот директориум. Целиот преостанат простор, кој се појавува во табелата како податоци, е наменет за складирање на датотеки.

Систем за адресирање на податоци

Системот за адресирање на податоци е една од најсериозните и клучните компоненти на датотечниот систем. Благодарение на него, саканата датотека се наоѓа меѓу многуте празни или зафатени блокови на дискот.

ext2 ја користи следнава шема за адресирање на блок датотеки. За да се зачува адресата на датотеката, се доделуваат 15 полиња, од кои секое се состои од 4 бајти. Ако датотеката се вклопува во 12 блокови, тогаш броевите на соодветните кластери се наведени во првите дванаесет полиња од адресата. Ако големината на датотеката надминува 12 блока, тогаш следното поле ја содржи адресата на кластерот во кој може да се лоцираат броевите на следните блокови од датотеката. Така, тринаесеттото поле се користи за индиректно адресирање.

Со максимална големина на блок од 4096 бајти, кластерот што одговара на 13-тото поле може да содржи до 1024 броеви од следните блокови на датотеки. Ако големината на датотеката надминува 12+1024 блокови, тогаш се користи 14-тото поле кое ја содржи адресата на кластерот кој содржи 1024 кластерски броеви, од кои секој се однесува на 1024 блокови од датотеката. Тука веќе се користи двојно индиректно адресирање. И ако датотеката вклучува повеќе од 12+1024+1048576 блокови, тогаш последното 15-то поле се применува за тројно индиректно адресирање.

Овој систем за адреси ви овозможува да имате датотеки поголеми од 2 TB со максимална големина на блок од 4096 бајти.

Сега ќе го опишеме најпопуларниот датотечен систем на дискови Linux - ext2. Првото издание на Linux го користеше датотечен систем MINIX 1, кој имаше кратки имиња на датотеки и максимална големина на датотека од 64 MB. Датотечниот систем MINIX 1 на крајот беше заменет со првиот проширен датотечен систем, ext, кој дозволи подолги имиња на датотеки и поголеми големини на датотеки. Поради неговата ниска ефикасност (во однос на перформансите), системот ext беше заменет со неговиот наследник ext2, кој и денес е широко користен.

Партицијата на дискот ext2 го содржи датотечен систем прикажан на сл. 10.17 распоред. Блокот 0 не се користи од системот Линукс и содржи код за подигање на компјутерот. По блокот 0, партицијата на дискот е поделена на групи блокови (без да се земат предвид границите на цилиндрите на дискот). Секоја група е организирана на следниов начин.


Првиот блок е суперблок, кој складира информации за распоредот на датотечниот систем, вклучувајќи го бројот на i-јазли, бројот на блокови на дискот и почетокот на листата на бесплатни блокови на дискови (обично неколку стотици елементи). Потоа следи дескриптор на група кој содржи информации за локацијата на битмапите, бројот на слободни блокови и i-јазли во групата и бројот на директориуми во групата. Оваа информација е важна затоа што датотечниот систем ext2 се обидува рамномерно да ги дистрибуира директориумите низ дискот.

Два битмапи ги следат слободните блокови и бесплатните i-јазли (ова е исто така наследено од датотечен систем MINIX 1 и се разликува од повеќето датотечни системи UNIX, кои користат листа за бесплатни блокови). Големината на секоја битмапа е еден блок. За големина на блок од 1 KB, оваа шема ја ограничува големината на блок групата на 8192 блокови и 8192 i-јазли. Првиот број е вистинско ограничување, но вториот практично не е. Со блокови од 4 KB, бројките се четири пати поголеми.

Потоа се наоѓаат самите i-јазли. Тие се нумерирани од 1 до одреден максимум. Големината на секој i-node е 128 бајти и опишува точно една датотека. i-node содржи сметководствени информации (вклучувајќи ги сите вратени од повикот на статистиката, кој едноставно ги зема од i-node), како и доволно информации за лоцирање на сите блокови на дискот што ги содржат податоците за датотеката.

По i-јазлите се податочни блокови. Сите датотеки и директориуми се зачувани овде. Ако датотеката или директориумот се состои од повеќе од еден блок, тогаш тие блокови не мора да бидат соседни на дискот. Во реалноста, блоковите од голема датотека најверојатно ќе бидат расфрлани низ дискот.

i-јазлите што одговараат на директориумите се расфрлани низ сите групи на диск блокови. Ext2 се обидува да постави редовни датотеки во истата блок група како родителскиот директориум, а датотеките со податоци во истиот блок како и i-node на изворната датотека (претпоставувајќи дека има доволно простор таму). Оваа идеја беше позајмена од Брзиот датотечен систем Беркли (McKusick et al., 1984). Битмапите се користат за донесување брзи одлуки за распределба

простор за нови податоци за датотечен систем.

Кога се доделуваат нови блокови на датотеки, ext2 исто така предодвојува неколку (осум) дополнителни блокови на истата датотека (за да се минимизира фрагментацијата на датотеката поради идни запишувања). Оваа шема го дистрибуира датотечниот систем низ целиот диск. Исто така, има добри перформанси (благодарение на неговите тенденции за приближување и намалената фрагментација).

За да пристапите до датотека, прво мора да користите еден од системските повици на Linux (како што е отворено), што бара од вас да ја наведете патеката до датотеката. Оваа патека се анализира и нејзините составни директориуми се извлекуваат. Ако е наведена релативна патека, пребарувањето започнува од тековниот директориум за процеси, во спротивно - од root директориумот. Во секој случај, i-јазолот за првиот директориум е лесно да се најде: има покажувач кон него во дескрипторот на процесите или (во случајот со root директориумот) се складира во одреден блок на дискот.

Директориумот дозволува имиња на датотеки до 255 знаци (Слика 10.18). Секој директориум се состои од голем број блокови на дискови (така што директориумот може да се запише на дискот атомски). Во директориумот, елементите за датотеките и директориумите се во несортиран редослед (секој елемент веднаш по претходниот). Елементите не можат да ги преминат границите на блоковите, така што обично има одреден број на неискористени бајти на крајот од секој блок на дискот.


Секој запис во директориумот на Сл. 10.18 се состои од четири полиња со фиксна должина и едно поле со променлива должина. Првото поле е бројот на i-node, кој е 19 за колосален, 42 за обемен и 88 за bigdir. Следно е полето rec_len, кое ја дава големината во бајти на целиот запис во директориумот (можеби заедно со дополнителни бајти за полнење по името). Ова поле е потребно за да се најде следниот запис (во случај кога името на датотеката е пополнето со непознат број бајти). На сликата, ова поле е означено со стрелка. Следува поле од тип датотека, директориум, итн. Последното поле со фиксна должина ја содржи должината на името на датотеката во бајти (8, 10 и 6 за овој пример). Конечно, тука е самото име на датотеката, што завршува со нула бајт и е поместено до 32-битната граница. Може да биде проследено со дополнителни бајти за полнење.

На сл. Слика 10.18б го прикажува истиот директориум откако ќе се отстрани записот за обемна. Сè што прави во директориумот е дека бројот во полето за големина на внесување на претходната колосална датотека се зголемува, а бајтите во записот во директориумот за оддалечената обемна датотека се претвораат во места за запис за првиот запис. Овие бајти подоцна може да се користат за пишување при креирање нова датотека.

Бидејќи директориумите се пребаруваат линеарно, пребарувањето за запис што е на крајот од голем директориум може да потрае долго време. Затоа, системот одржува кеш од неодамна пристапените директориуми. Кешот се пребарува според името на датотеката и ако се најде, тогаш веќе не е потребно скапо линеарно пребарување. Објектот за заби се внесува во кешот за влез во директориумот за секоја од компонентите на патеката, и (преку неговиот i-јазол) директориумот се бара за следните записи на патеката (додека не се најде вистинскиот i-јазол на датотеката).

На пример, за да пронајдете датотека одредена со апсолутна патека (како што е /usr/ast/file), треба да ги следите овие чекори. Прво, системот го наоѓа root директориумот, кој обично користи i-node број 2 (особено кога i-node број 1 е резервиран за справување со лоши блокови). Го става соодветниот елемент во кешот на ставката во директориумот (за идни пребарувања на root директориумот). Потоа го пребарува root директориумот за низата „usr“ за да го добие бројот на i-node за директориумот /usr (кој исто така е кеширан за записите во директориумот). Овој i-јазол потоа се чита и од него се преземаат блокови на дискови, за да можете да го прочитате директориумот /usr и да ја барате низата „ast“ во него. Откако ќе се најде соодветниот елемент, од него може да се одреди бројот на i-node за директориумот /usr/ast. Со оглед на овој број на i-node, тој може да се чита и да се најдат блокови на директориуми. Конечно, бараме „датотека“ и го наоѓаме нејзиниот број на i-node. Така, користењето на релативна патека не само што е попогодно за корисникот, туку и го намалува обемот на работа за системот.

Ако датотеката е достапна, системот го враќа бројот на i-node и го користи како индекс во табелата i-node (на дискот) за да го пронајде соодветниот i-node и да го прочита во меморијата. Овој i-јазол е сместен во i-node табела, структура на податоци на јадрото што ги содржи сите i-јазли за моментално отворените датотеки и директориуми. Форматот на елементот i-node мора да ги содржи (минимум) сите полиња што ги враќа статистичкиот системски повик за да функционира повикот за статистика (види Табела 10.10). Во табелата Слика 10.13 прикажува некои од полињата на структурата на i-node поддржана во датотечен систем Linux. Вистинската структура на i-node содржи многу повеќе полиња, бидејќи истата структура се користи за претставување директориуми, уреди и други специјални датотеки. Структурата i-node исто така содржи полиња резервирани за идна употреба. Историјата покажа дека неискористените битови не седат долго наоколу.

Сега да видиме како системот ја чита датотеката. Ќе се потсетите дека типичен повик за библиотечна процедура за активирање на системскиот повик за читање изгледа вака:

n = читање (fd, бафер, nbytes);


Кога кернелот ќе ја преземе контролата, сè што треба да започне се овие три параметри и информациите во неговите внатрешни табели (кои се однесуваат на корисникот). Еден од елементите на овие внатрешни табели е низа од дескриптори на датотеки. Тој е индексиран со дескриптори на датотеки и содржи еден елемент по отворена датотека (до одреден максимален број, стандардниот обично е 32).

Идејата е да се започне со овој дескриптор на датотека и да се заврши со соодветниот јазол. Ајде да погледнеме една можна шема: ставете покажувач на јазол во табелата со дескриптори на датотеки. И покрај неговата едноставност, овој метод (за жал) не функционира. Проблемот е ова. Секој дескриптор на датотека мора да има поврзан покажувач на датотека што го одредува бајтот во датотеката во кој ќе започне следната операција за читање или запишување. Каде треба да се чува овој покажувач? Една опција е да го поставите во табелата Јазли. Сепак, овој пристап нема да работи ако неколку неповрзани процеси ја отворат истата датотека во исто време, бидејќи секој процес мора да има свој покажувач.

Второто решение е да го поставите покажувачот во табелата со дескриптори на датотеки. Во овој случај, секој процес што отвора датотека има своја позиција во датотеката. За жал, оваа шема исто така не функционира, но причината за неуспехот во овој случај не е толку очигледна и е поврзана со природата на споделување датотеки во системот Линукс. Размислете за скрипта за школка 5, која се состои од две команди (p1 и p2) кои мора да се извршат за возврат. Ако скриптата се повика од командната линија

тогаш се очекува командата p1 да го запише својот излез во датотеката x, а потоа командата p2 исто така ќе го запише својот излез во датотеката x, почнувајќи од местото каде што застана командата p1.

Кога школката ќе го започне процесот p1, датотеката x првично ќе биде празна, така што командата на p1 едноставно ќе почне да пишува во датотеката на позиција 0. Меѓутоа, кога p1 ќе заврши со работа, ќе биде потребен некој механизам за да се осигура дека процесот p2 ја гледа почетната позиција како нешто различно од 0. токму тоа ќе се случи ако позицијата во датотеката е зачувана во табелата со дескриптори на датотеката), и вредноста на која запре пи.

Како се прави ова е прикажано на сл. 10.19. Трикот е да се воведе нова табела - отворена табела за опис на датотека - помеѓу табелата со дескриптори на датотеки и табелата i-node и да се зачува покажувачот на датотеката (како и битот за читање/запишување) во неа. На сликата, родителскиот процес е школка, а детето процес е прво процес pi, а потоа процес p2. Кога школка создава процес pi, нејзината корисничка структура (вклучувајќи ја и табелата за дескриптори на датотеки) е точна копија од истата структура на школка, така што и двете содржат покажувачи кон истата табела со дескриптори на отворени датотеки. Кога процесот pi ќе излезе, дескрипторот на датотеката на школката продолжува да покажува кон отворената табела за опис на датотеката, која ја содржи позицијата на процесот p1 во датотеката. Кога школката сега го создава процесот p2, новиот дете процес автоматски ја наследува позицијата на датотеката, без ниту новиот процес ниту школката да треба да ја знае моменталната вредност на таа позиција.


Ако некој надворешен процес отвори датотека, таа ќе добие свој запис во табелата за опис на отворената датотека со нејзината позиција во датотеката, што е токму она што е потребно. Така, целта на отворената табела за опис на датотека е да им овозможи на родителските и детските процеси да споделат еден покажувач на датотека, но да распределат приватни покажувачи на други процеси.

Значи (враќајќи се на проблемот со извршувањето на читањето), покажавме како се одредуваат позицијата на датотеката и i-node. I-јазолот ги содржи адресите на дискот на првите 12 блокови од датотеката. Ако позицијата во датотеката спаѓа во првите 12 блока, тогаш саканиот блок од датотеката се чита и податоците се копираат на корисникот. За датотеки подолги од 12 блока, i-node ја содржи адресата на дискот на еден индиректен блок (Слика 10.19). Овој блок ги содржи адресите на дискот на дополнителни блокови на дискови. На пример, ако големината на блокот е 1 KB и адресата на дискот зафаќа 4 бајти, тогаш еден индиректен блок може да складира до 256 адреси на дискот. Оваа шема ви овозможува да поддржувате датотеки со големина до 268 KB.