Ֆայլային համակարգ

Ֆայլային համակարգը՝ հաշվիչ տեխնիկայում այն մեթոդն է, որի միջոցով պահվում և կազմակերպվում են համակարգչային ֆայլերը և նրանց պարունակած տվյալները և հեշտացվում է նրանց փնտրումը ու հասանելիությունը։ Ֆայլային համակարգերը կարող են օգտագործել տվյալների կրիչներ, ինչպիսիք են կոշտ սկավառակը (HDD-hard disk drive) կամ օպտիկական սկավառակը (ODD optical disk drive ) և ներառում են ֆայլերի գտնվելու ֆիզիկական դիրքը։ Նրանք կարող են ապահովել հասանելիություն ֆայլային սերվերի վրա գտնվող տվյալներին՝ տանելով ցանցային արձանագրության (օրինակ՝ NFS, SNB կամ 9P) կլիենտի դեր կամ լինել վիրտուալ և հանդիսանալ միայն որպես վիրտուալ տվյալների հասանելիության մեթոդ։
Ընդհանուր առմամբ ֆայլային համակարգը հատուկ նպատակ ունեցող տվյալների բազա է տվյալների պահման, կազմակերպման, մշակման և ստացման համար։
Ֆայլային համակարգերի մեծ մասը օգտագործում են տվյալների պահպանման բլոկային մեխանիզմներ, որոնք երբեմն կոչվում են սեկտորներ՝ սովորաբար 2-ի աստիճան չափի (512 բայթ կամ 1, 2, 4 կիլոբայթ)։ Ֆայլային համակարգի ծրագրային ապահովումը պատասխանատու է այս սեկտորների վերածմանը ֆայլերի և պետք է իմանա, թե որ սեկտորը, որ ֆայլին է պատկանում և որ սկետորները չեն օգտագործվում։ Շատ ֆայլային համակարգեր տվյալները հասցեավորում են ֆիքսած չափի միավորներով, որոնք կոչվում են կլաստերներ կամ բլոկեր, որոնք էլ պարունակում են որոշակի դիսկի սեկտորներ (սովորաբար 1-64)։
Կլաստերը դիսկային տարածության ամենափոքր միավորն է, որը կարող է տրամադրվել ֆայլին։


== Ֆայլային անուններ ==
Ֆայլային համակարգերը ունեն ֆոլդերային կառուցվածք, որոնք համապատասխանեցնում են ֆայլերի անունները ֆայլերի հետ՝ սովորաբար կապելով ֆայլի անունը որոշակի տիպի ֆայլային աղյուսակի ինդեքսի հետ, ինչպիսիք են, օրինակ, FAT-ը DOS ֆայլային համակարգում կամ inode-ը Unix-ականում։ Ֆոլդերային կառուցվածքները կարող են լինել ողորկ, կամ ունենալ հիերարխիկ կառուցվածք, որտեղ ֆոլդերները կարող են պարունակել ենթաֆոլդերներ։ Որոշ ֆայլային համակարգերում ֆայլերի անունները կազմվում են ընդլայնումներով և վերսիայի համարով։ Այլ համակարգերում ֆայլերի անունները պարզ տողեր են, և յուրաքանչյուր ֆայլի մետադատան պահվում է այլ տեղում։


== Մետադատա (Metadata) ==
Սովորաբար ֆայլային համակարգում ֆայլերի հետ ասոցացվում են լրացուցիչ տվյալներ, ինչպիսիք են, օրինակ, ֆայլին հատկացված բլոկերի թիվը կամ ուղղակիորեն բայթերի քանակությունը։ Ֆայլի վերջին փոփոխության ամսաթիվը կարող է պահվել որպես ֆայլի timestamp։ Որոշ ֆայլային համակարգեր կարող են պահել ֆայլի ստեղծման, վերջին դիմումի և մետադատայի փոփոխման ամսաթվերը։ Այլ ինֆորմացիան կարող է իրենից ներկայացնել ֆայլի սարքավորման տիպը, user ID, group ID և հասանելիության թույլատվությունները։


== Հարմարություններ ==
Ավանդական ֆայլային համակարգերը տրամադրում են ֆայլի ստեղծման, տեղափոխման, ջնջելու հարմարություներ։ Դրանք չունեն ֆայլերին լրացուցիչ հղումներ ստեղծելու հարմարություններ։ Ավանդական ֆայլային համակարգերը նույնպես տրամադրում են ֆայլը կրճատելու, լրացնելու և տեղում փոփոխելու հարմարություններ։


== Ֆայլային համակարգերի տեսակները ==
Ֆայլային համակարգի ընդհանուր տեսակները հետևյալն են՝ 

դիսկային ֆայլային համակարգ
ցանցային ֆայլային համակարգ
հատուկ նշանակության ֆայլային համակարգ


=== Դիսկային ֆայլային համակարգ ===
Դիսկային ֆայլային համակարգը նախագծված է համակարգչին ուղղակիորեն կամ անուղղակիորեն միացված դիսկային սարքավորման վրա ֆայլերը պահելու համար։ Օրինակներ կարող են հանդիսանալ FAT12, FAT16, FAT32, NTFS, HFS+, ext2, ext3։ Որոշակի դիսկային ֆայլային համակարգեր հանդիսանում են մատյանային, տարբերակային (versioning) ֆայլային համակարգեր։


=== Ֆլեշային ֆայլային համակարգ ===
Ֆլեշ ֆայլային համակարգը նախագծված է ֆլեշ հիշողության վրա ֆայլերը պահելու համար։ Վերջիններիս դերը մեծանում է շարժական հիշող սարքերի քանակության մեծացման հետ մեկտեղ, որոնց ծավալները համեմատական են դառնում կոշտ սկավառակի ծավալներին։ 
Մինչդեռ բլոկային սարքավորումը կարող է էմուլացնել դիսկային սարքավորում՝ թույլատրելով դիսկային ֆայլային համակարգի կիրառումը, սա այնքան էլ օպտիմալ չէ մի շարք պատճառներով՝

Բլոկերի ջնջում. ֆլեշ հիշողության վրա բլոկերը պետք է նախապես ջնջվեն, մինչդեռ դրանք կարող են նորից գրվել։ Բլոկերի ջնջման վրա ծախսվող ժամանակը զգալի է, այդ պատճառով ձեռնտու է ջնջել բլոկերը, քանի դեռ սարքավորումը idle (չօգտագործվող) վիճակում է։
Պատահական հասանելիություն. դիսկային ֆայլային համակարգերը օպտիմիզացված են դիսկի վրա հնարավորության դեպքում փնտրումից խուսափելու համար, մինչդեռ ֆլեշ հիշողության վրա փնտրման անհրաժեշտություն ընդհանրապես չկա։
Մաշվածության կուտակում. ֆլեշ հիշողության սարքավորումները մաշվում են, երբ նույն բլոկը բազմակի անգամ վերագրանցվում է։ Ֆլեշ ֆայլային համակարգերը նախատեսված են գրանցումները հավասարապես պլանավորելու համար։


=== Տվյալների բազաների ֆայլային համակարգ ===
Ֆայլային կառավարման նոր հասկացողությունը տվյալների բազաների վրա հիմնված ֆայլային համակարգերի հասկացողությունն է։ Ֆայլերը իդենտիֆիկացվում են նրանց բնութագրերով, ինչպիսին են, օրինակ, ֆայլի տիպը, հեղինակը կամ մետադատան։


=== Տրանզակցիոն ֆայլային համակարգ ===
Դիսկի վրա յուրաքանչյուր գործողություն կարող է ներառել մի շարք ֆայլերի և կառուցվածքների փոփոխություն։ Բազմաթիվ դեպքերում փոփոխությունները կապակցված են, այսինքն՝ կարևոր է, որ նրանք բոլորն իրականցվեն միաժամանակ։ Օրինակ, եթե մի բանկ մյուսին ուղարկում է որոշակի գումար։ Այս դեպքում բանկի համակարգիչը կուղարկի փոխանցման հրահանգը մյուս բանկին և միաժամանակ կթարմացնի իր գրառումները, որպեսզի նշի փոխանցման մասին։ Եթե որևէ պատճառով համակարգիչը խափանվի մինչ գրառումների թարմացումը, ապա արդյունքում բանկը կկորցնի որոշակի գումար։
Տրանզակցիոն մշակումը տրամադրում է երաշխիք, որ ընթացքի ցանկացած պահի տրանզակցիան կարող է կամ ամբողջովին ավարտվել կամ ամբողջովին վերադարձվել նախնական վիճակի։ Սա նշանակում է, որ եթե տեղի ունենա խափանում կամ հզորության անկում, վերականգնումից հետո պահված վիճակը կլինի կայուն։


=== Ցանցային ֆայլային համակարգ ===
Ցանցային ֆայլային համակարգը հանդիսանում է կլիենտ հեռացված ֆայլերի դիմման արձանգրության համար՝ տրամադրելով սերվերի վրա գտնվող ֆայլերին
հասանելիություն։ Ցանցային ֆայլային համակարգի օրինակներ են NFS, AFS, SMB արձանգրությունների կլիենտները և FTP և WebDAV-ի ֆայլային համակարգատիպ կլիենտները։
Ցանցային ֆայլային համակարգի արդյունավետության հիմնական չափանիշն է ծառայության հարցման բավարման վրա ծախսվող ժամանակամիջոցը։ 
Սովորական համակարգերում այս ժամանակը բաղկացած է դիսկի դիմման և պրոցեսորի կողմից մշակման չնչին ժամանակի գումարից։ Սակայն ցանցային ֆայլային համակարգում հեռացված դիմումն (remote access) ունի լրացուցիչ ժամանակային ծախսեր բաշխված կառուցվածքի պատճառով։ Սա ներառում է հարցման հասնելը սերվերին, պատասխանի հասնելը կլիենտին և երկու ուղղություններով էլ կապի արձանագրության ծրագրային ապահովման կատարման ժամանակածախսը։
Իդեալական դեպքում ցանցային ֆայլային համակարգի արդյունավետությունը կլինի համեմատական սովորական ֆայլային համակարգի արդյունավետությանը։


=== Հատուկ նշանակության ֆայլային համակարգեր ===
Հատուկ նշանակության ֆայլային համակարգ կարող է կոչվել ցանկացած ֆայլային համակարգ, որը ցանցային կամ դիսկային չէ։ Այս համակարգերը մեծ մասամբ օգտագործվում են ֆայլակենտրոն օպերացիոն համակարգերի կողմից, ինչպիսին է, օրինակ, Unix-ը։


== Ֆայլային և օպերացիոն համակարգեր ==
Որոշ հին օպերացիոն համակարգեր ունեին ֆայլային համակարգերը մշակելու համար առանձին բաղադրիչ, որը կոչվում էր DOS (Disk Operting System)։ Որոշ միկրոկոմպյուտերների վրա DOS-ը բեռնվում էր օպերացիոն համակարգից առանձին։ Հին օպերացիոն համակարգերը սպասարկում էին միայն մեկ անանուն սեփական ֆայլային համակարգ։ Այս պատճառով առաջացավ օգտագործողի և ֆայլային համակարգի միջև օպերացիոն համակարգի ծրագրային ապահովման կողմից տրամադրվող ինտերֆեյսի անհրաժեշտություն։ Այս ինտերֆեյսը կարող է լինել տեքստային (օրինակ՝ Unix-ի Shell-ը) կամ գրաֆիկական (օրինակ File Browser)։ Գրաֆիկականի դեպքում օգտագործվում է ֆոլդերային մոդելը, որը պարունակում է փաստաթղթեր, այլ ֆայլեր և ներդրված ֆոլդերներ։


=== Ողորկ (flat) ֆայլային համակարգ ===
Ողորկ ֆայլային համակարգում չկան ֆայլային ենթաֆոլդերներ. ամեն ինչ պահվում է կրիչի նույն (root) մակարդակի վրա, լինի դա կոշտ սկավաոակ, floppy disk և այլն։ Լինելով պարզ՝ այս համակարգը արագորեն դառում է անարդյունավետ, երբ ֆայլերի թիվը մեծանում է և օգտագործողների համար դժվար է դառնում դասակարգել տվյալները կապակցված խմբերում։ Այսպիսի համակարգի մոդել էր Macintosh File System-ը, որտեղ դիսկի վրա յուրաքանչյուր ֆայլ պետք է ունենար իր եզակի անունը նույնիսկ, եթե այն առանձին ֆոլդերում էր։ MFS-ը արագորեն փոխարինվեց հիերարխիկ ֆայլային համակարգով, որը տրամադրում էր իրական դիրեկտորիաներ։


=== Unix-ատիպ օպերացիոն համակարգերի ներքո ֆայլային համակարգեր ===
Unix-ատիպ օպերացիոն համակարգերը ստեղծում են վիրտուալ ֆայլային համակարգ, որում բոլոր սարքավորումների վրա գոյություն ունեցող ֆայլերը հայտնվում են մեկ հիերարխիկ ծառում։ Սա նշանակում է որ այս համակարգերում կա մեկ root դիրեկտորիա, և համակարգում գոնություն ունեցող յուրաքանչյուր ֆայլ տեղադրված է դրանում ինչ-որ մի տեղ։ Ավելին, պարտադրի չէ, որ root դիրեկտորիան գտնվի որևէ ֆիզիկական տեղում։ Այն կարող է չլինել համակարգչի առաջին տրամաբանական սկավառակի վրա, այն կարող է նույնիսկ չլինել համակարգչի վրա։ Unix-ատիպ համակարգերը կարող են օգտագործել ցանցային բաշխված ռեսուրսը որպես root դիրեկտորիա։
Unix-ատիպ համակարգերը յուրաքանչյուր սարքավորման վերագրում են անուն, բայց սա կախված չէ նրանից, թե ինչպես է իրականացվում այդ սարքավորման վրա գտնվող ֆայլերին հասանելիությունը։ Այլ սարքավորման վրա ֆայլերին դիմելու համար պետք է նախապես տեղեկացնել օպերացիոն համակարգին, թե դիրեկտորիաների ծառում որտեղ ես ցանկանում տեսնել այդ ֆայլերը։ Այս պրոցեսը կոչվում է ֆայլային համակարգի mounting։ Օպերացիոն համակարգին տրվող դիրեկտորիան կոչվում է mount-ի կետ (mount point), օրինակ, /media։ Այդ դիրեկտորիան գոյություն ունի շատ Unix համակարգերում, և օգտագործվում է որպես mount point այնպիսի շարժական կրիչների համար, ինչպիսիք են CD/DVD-ները և floppy-ատիպ դիսկերը։ Այն կարող է լինել դատարկ կամ կարող է պարունակել ենթադիրեկտորիաներ առանձին սարքավորումների համար։ Սովորաբար միայն ադմինիստրատորը իրավունք ունի mount անել ֆայլային համակարգեր։
Unix-ատիպ օպերացիոն համակարգերը հաճախ տրամադրում են ծրագրային ապահովում, որն աջակցում է mount-ի պրոցեսին և տրամադրում լրացուցիչ ֆունկցիոնալություն։ Այսպիսի ռազմավարություններից մեկն է auto-mounting-ը։
Microsoft Windows օպերացիոն համակարգում mount-ին համարժեք գործողությունը հայտնի է որպես mapping a drive։ Այս համակարգին հասանելի բոլոր ֆայլերը և դիրեկտորիաները պահվում են root դիրեկտորիայի (\) նկատմամբ, անկախ նրանից, թե այդ դիրեկտորիաները նույն մեքենայի վրա են, թե չէ։


=== Microsoft Windows օպերացիոն համակարգերի ներքո ֆայլային համակարգեր ===
Microsoft Windows օպերացիոն համակարգը օգտագործում է FAT և NTFS ֆայլային համակարգերը։ 
FAT ֆայլային համակարգը, որն առկա է Windows-ի բոլոր տարբերակներում, ծնունդ է առել դեռևս MS-DOS պրոյեկտից։ Տարիների ընթացքում այն ապրել է մեծ փոփոխություններ։
NTFS ֆայլային համակարգը ներկայացվել է Windows NT օպերացիոն համակարգի հետ։ Այն տրամադրում է թույլատվությունների ղեկավարում, կոշտ հղումներ (hard link), բազմաթիվ ֆայլային հոսքեր, ատրիբուտների ինդեքսավորում, կոմպրեսիա և այլ համակարգերի mount point- եր։
Ի տարբերություն այլ օպերացիոն համակարգերի՝ Windows-ը օգտագործում է սարքավորման տառ աբստրակցիան օգտագործողի մակարդակում։ C տառը սովորաբար օգտագործվում է կոշտ սկավառակի հիմանական բաժինը նշելու համար, որի վրա գրանցվում է Windows-ը և բեռնվում այնտեղից։ C-ի վրա Windows տեղադրելը դարձել է ավանդույթ, որի հետ կապված կան հնագույն bug-եր։


== Բաշխված ֆայլային համակարգեր ==
Բաշխված ֆայլային համակարգի նպատակն է օգտագործողից ամբողջովին թաքցնել տվյալների ֆիզիկական տեղը։ Այլ կերպ՝ ֆայլային համակարգը տրամադրում է եզակի, կայուն անունների տարածություն։ Սա նշանակում է, որ միայն ֆայլի pathname-ը բավարար է ֆայլին նկարագրելու համար։ Օգտագործողին պետք չէ իմանալ ֆայլի ֆիզիկական տեղի մասին։ Այս նպատակով բաշխված ֆայլային համակարգերը տրամադրում են առանձին client-side և server-side բաղադրիչներ ցանցային ֆայլային համակարգերի նման։ Սակայն օգտագործողին տրամադրվող ինտերֆեյսը ղեկավարվում է հատուկ ծրագրային ապահովման կողմից, որը բացակայում է ցանցային ֆայլային համակարգում։ Վերջինս ստեղծում է եզակի վիրտուալ root directory, որում mount է արվում ամբողջ ֆայլային հիերարխիան։
Բաշխված ֆայլային համակարգի օրինակ է IBM/Transarc-ի կողմից տրամադրված AFS-ը կամ DCE/DFS։
Բաշխված ֆայլային համակարգի հետաքրքիր օրինակ է Բերկլիի կողմից առաջարկված xFS ֆայլային համակարգը, որն առաջարկում է առանց սերվեր մոտեցում, որտեղ բոլոր ֆայլային ծառայությունները տրամադրվում են համագործակցող աշխատանքային կայանների կողմից։ Համակարգում ցանկացած մեքենա կարող է քեշավորել կամ ղեկավարել տվյալի կամայական բլոկ։


== Զարգացման չափանիշները ==
Կենտրոնացված ֆայլային համակարգերը թույլ են տալիս բազմաթիվ օգտագործողների պահել ֆայլերը լոկալ կրիչների վրա։ Ցանցային և բաշխված ֆայլային համակարգերը ընդլայնում են լոկալի հնարավորություններրը՝ թույլատրելով օգտագործողներին բաշխել ֆայլերը որևէ հաղորդակցության կապով միացված մեքենաների միջև։ Ցանցային և բաշխված ֆայլային համակարգերը կախված եմ հայտնի կլիենտ-սերվեր հասկացությունից։ Տվյալ միջավայրում այս կամ այն ֆայլային համակարգի կարևորությունը գնահատելու համար ստեղծվել է հետևյալ ցանկը՝

Ցանցային թափանցիկություն (Network transparency)՝ Կլիենտները պետք է հնարավորություն ունենան լոկալ գործողությունների միջոցով դիմել հեռացված ֆայլերի։
Դիրքի թափանցիկություն (Location transparency)՝ Ֆայլի անունը չպետք է բացահայտի ֆայլի դիրքը ցանցում։
Դիրքի անկախություն (Location independence)՝ Ֆայլի անունը չպետք է փոփոխվի նրա ֆիզիկական դիրքը փոխելուց։
Օգտագործողների շարժունակություն (User mobility)՝ Օգտագործողները պետք է ի վիճակի լինեն դիմել բաշխված ֆայլերին ցանցի ցանկացած կետից։
Խափանումների թույլատրելիություն (Fault tolerance)՝ Ֆայլային համակարգը պետք է մնա գործունյա որևէ բաղադրիչի խափանումից հետո։
Ընդլայնվելու ընդունակություն (Scalability)՝ Համակարգը պետք է կարողանա ընդլայնվել իր ծանրաբեռնվածության մեծացմանը զուգահեռ։ Պետք է նաև հնարավոր լինի ավելացնել նոր կոմպոնենտներ։
Ֆայլերի տեղափոխելիություն (File Mobility)՝ Պետք է հնարավոր լինի տեղափոխել ֆայլերը մի ֆիզիկական դիքից մյուսը համակարգի աշխատանքի ընթացքում։Վերը նշված բոլոր համակարգերում տվյալներ կրող սարքավորումները միշտ ուղղակիորեն են միացված սերվերին, որն իր մեջ արդեն պրոբլեմ ունի՝ կենտրոնական ղեկավարում նշանակում է խափանման մեկ աղբյուր։ Հաջորդ քայլը կլինի կրիչի առանձնացումը սերվերից և նրա միացումը իրենց սեփական ցանցին, որը սովորաբար անվանվում է ֆաբրիկ։ Սա բերում է Storage Area Network-ի գաղափարին։
Բաշխվող ֆայլային համակարգերը, որոնք օգտագործում էին ցանցերին կից պահպանում, նոր չեն։ Այս տեսակի տեխնոլոգիայի օրինակներից են Cray SFS, DEC Vaxcluster Oracle և Parallel Server։ Սրանք բոլորն էլ մատակարարում են առանց սերվերի բաշխված ֆայլային համակարգեր։ Այնուամենայնիվ, դրանք հիմնվում են ցանցին կից պահպանման կամ թանկ, հատուկ պատրաստված ինտերֆեյսների վրա, ինչպիսին է HiPPI-ը։ Այն ամենը, որ անհրաժեշտ է իսկական Network Attached Storage-ի համար, առանց սերվեր ֆայլային համակարգն է, որն ամբողջովին օգտագործում է նոր ինտերֆեյսներ, ինչպիսին է Fibre Channel-ը։ Այս մոտեցումը թույլ կտա բոլոր կլիենտ մեքենաներին ունենալ լրիվ հասանելիություն ցանցի բոլոր պահպանման սարքերին՝ դարձնելով հասանելիությունն ավելի հուսալի և արդյունավետ։ Ճկուն ցանցային պահպանման ինտերֆեյսները, ինչպիսիններից է Fibre Channel-ը, թույլ կտա համակարգիչ ստեղծողներին նախագծել բազմաթիվ պահպանման բաշխված սարքավորումներով համակարգեր՝ մեծացնելով նախագծման արտադրողականությունը և հուսալիությունը։


== Հաջորդ սերունդը ==
Այսպիսի լուծումներից մեկը գլոբալ ֆայլերի համակարգն է (Global File System - GFS)՝ ստեղծված GFS Group-ի կողմից և հովանավորված այնպիսի ընկերությունների կողմից, ինչպիսիք են Brocade Communication Systems, NASA, Seagate Technology և Veritas։ GFS-ը նախապես նախագծված և իրագործված էր SGI hardware exploiting Fibre Channel-ի տեխնոլոգիայով մեծ գիտական տվյալները մշակելու համար։ GFS Group-y ի վերջո որոշեց տեղադրել իրենց IRIX կոդը open source Linux-ում (IRIX-ը closed source է, և ավելի դժվար է դարնում GFS-ը ինտեգրել միջուկին)։ Բաշխված համակարգերում [Soltis, Ruwart, O’Keefe]- ի կողմից ստեղծված տարբերությունը մի կողմից հաղորդագրությունների վրա հիմնված բաշխումն է, մյուս կողմից՝ բաշխված պահպանումը։ Ընդհանուր դեպքում տվյալները բաշխվում են ցանցում մեքենաների միջև հաղորդակցության միջոցով, ընդ որում՝ տվյալները պահվում են տեղայնորեն՝ յուրաքանչյուր մեքենայում։ Սրա օրինակ է NFS-ը (RPC-ն UDP կամ TCP դեյտագրամների վերևում)։ 
Այս ճարտարագիտության ուժը կայանում է դրա ընդլայնվելու ունակության մեջ։ Դրանք այնքան էլաստիկ են, որքան այն ցանցային արձանագրությունը, որը նրանք օգտագործում են։
Ֆայլային համակարգերը և պահման տեխնոլոգիան շարժվում են Fibre Channel-ին և Gigabit Ethernet-ին միացված պահպանման սարքավորումների ուղղությամբ։ Սա կարող է պահանջել գոյություն ունեցող տարբեր ֆայլային համակարգերի և պահպանման ձևերի վերադիտարկում։