Кіріспе
Қолданбалық бағдарламалау интерфейсі
Файл жүйесі API – бұл файл жүйесінің қызметтерін сұрау үшін пайдалы немесе пайдаланушы бағдарламасы арқылы қолданбалық бағдарламалау интерфейсі. Операциялық жүйе әртүрлі файл жүйелеріне түсінікті түрде қол жеткізу үшін абстракцияларды ұсынуы мүмкін. Кейбір файл жүйесі API-лері файл жүйесін жасау немесе бастапқылай қою, файл жүйесінің саяқтылығын тексеру және дефрагментация сияқты техникалық қызмет көрсету операциялары үшін интерфейстерді де қамтуы мүмкін. Әрбір операциялық жүйе өзі қолдайтын файл жүйелері үшін қажетті API-лерді қамтиды. Microsoft Windows жүйесінде NTFS және бірнеше FAT файл жүйелері үшін файл жүйесі API-лері бар. Linux жүйелері ext2, ext3, ReiserFS және Btrfs үшін API-лерді қамтуы мүмкін.
Жазу, оқу және орналастыру
Пайдаланушы деректерін файл жүйесіне жазу, пайдаланушы бағдарламасымен немесе орындалу уақыты кітапханасымен тікелей пайдалану үшін көзделген. Кейбір бағдарламалау тілдерінің орындалу уақыты кітапханасы дерек типін өзгерту, форматтау және блокқа бөлу мүмкіндіктерін ұсынуы мүмкін. Кейбір файл жүйелері жазбаларды кілт арқылы анықтауды қамтамасыз етеді және қанағаттандырылған жазбаны жаңарту мүмкіндігін де қамтуы мүмкін. Бұл операция кейде PUT немесе PUTX (жазба болған жағдайда) деп аталады. Пайдаланушы деректерін оқу, кейде GET деп аталады, бағытты (алға немесе кері) немесе кілтті файл жүйесі болған жағдайда, нақты кілтті қамтуы мүмкін. Жазу сияқты, орындалу уақыты кітапханалары пайдаланушы бағдарламасы үшін араласуы мүмкін. Орналасуды белгілеу келесі жазбаның орнын реттеуді қамтиды. Бұл алға немесе кері жылжуды, сондай-ақ файлдың басына немесе соңына орналасуды қамтиды.
Reading user data, sometimes called GET, may include a direction (forward or reverse) or in the case of a keyed file system, a specific key. As with writing run time libraries may intercede for the user program. Positioning includes adjusting the location of the next record. This may include skipping forward or reverse as well as positioning to the beginning or end of the file.
Каталогтарды басқару
Файлдың атын өзгерту, файлды (немесе кіші каталогты) бір каталогтан екіншісіне жылжыту және файлды жою – бұл файл жүйесінің каталогтарды басқаруға арналған операцияларының мысалдары. Әртүрлі пайдаланушылар немесе пайдаланушылар тобының каталогқа кіруіне рұқсат беру немесе шектеу сияқты метадеректер операциялары да әдетте осыған қосады.
Файл жүйелерін күтіп ұстау
Файл жүйесі каталогтарды, файлдар мен жазбаларды пайдалана отырып, қосылуы, жойылуы немесе өзгертілуі мүмкін. Бұл әдетте негізгі дерек құрылымдарының тиімсіздігіне әкеледі. Мұндай жағдайларда логикалық түрде тізбектелген блоктар, ақпарат сақтау құралдарында шамадан тыс орын ауыстыруға себеп болатын түрде шашырап жатуы мүмкін, сондай-ақ ішінара пайдаланылған, тіпті бос блоктар тізбекті құрылымдарға кіруі мүмкін. Құрылымның толық еместігі немесе басқа да қателіктер құрылғы немесе ақпарат сақтау құралының қателігінен, қуат жоғалуына дейін жеткіліксіз уақыттан, жүйенің дұрыс жабылмауынан немесе ақпарат сақтау құралын алып тастаудан, және өте сирек жағдайларда файл жүйесінің бағдарламалық қателігінен туындауы мүмкін. Файл жүйесіндегі арнайы процедуралар осы құрылымдарды оңтайландыру немесе жөндеу үшін қарастырылған. Олар әдетте пайдаланушылармен тікелей шақырылмайды, бірақ файл жүйесінің ішінде іске қосылады. Құрылымдардың деңгейлерінің саны мен енгізілген нысандардың саны бойынша ішкі тізілімдер шекті мәндермен салыстырылуы мүмкін. Бұл белгілі бір құрылымға қол жеткізуді тоқтатуға (әдетте пайдаланушылардың наразылығына) немесе төмендікпен асинхронды тапсырма ретінде іске қосуға немесе пайдаланушы белсенділігі төмен уақытқа кейінге қалдыруға әкелуі мүмкін. Кейде осы процедуралар жүйелік менеджермен шақырылады немесе жоспарланады, мысалы, дискіні дефрагментациялау кезінде.
Ядролық деңгейдегі API
API ядро деңгейінде болып табылады, егер ядро файлдық жүйелерді әзірлеушілерге интерфейстерді ғана емес, сонымен қатар файлдық жүйе коды орналасқан кеңістікті де ұсынса. Бұл ескі схемадан айырмашылығы, ядро файлдық жүйе драйверімен өзінің мүмкіндіктерін пайдаланып байланысады және керісінше, бұл ядроның файлдық жүйенің құрылымын басқаруына және файлдық жүйенің тікелей аппараттық құралдарға қол жеткізуіне қарама-қарсы. Бұл ең таза схема емес, бірақ ескі схеманың күрделі қайта жазу қиындықтарын шешеді. Модульдік ядролар кез келген ядролық модуль ретінде файлдық жүйелерді, тіпті үшінші тараптың файлдық жүйелерін қосуға мүмкіндік береді. Бірақ модульдік емес ядролар үшін, ядроны жаңа файлдық жүйе кодымен қайта компиляциялау қажет (және жабық кодты ядроларда бұл үшінші тараптың файлдық жүйесін мүмкін емес етеді). Unix және Unix-ке ұқсас, мысалы Linux жүйелері осы модульдік схеманы қолданды. MS-DOS (DOS 4.0 және одан кейінгі нұсқалары) және олармен үйлесімді жүйелерде CD-ROM және желілік файлдық жүйелерді қолдау үшін осы схеманың бір түрі қолданылады. Ескі схемадағыдай ядроға код қосудың немесе ядролық схемадағыдай ядроның мүмкіндіктерін пайдаланудың орнына, ол файлға жасалған барлық шақыруларды ұстап, оларды ядроның баламалы функциясына бағыттау керек пе, әлде нақты файлдық жүйе драйверімен өңдеу керек пе, соны анықтайды, ал файлдық жүйе драйвері төменгі деңгейдегі BIOS функцияларын пайдаланып дискінің мазмұнына «тікелей» кіреді.
Трейлерлік API
API ядро мүмкіндіктер ұсынғанда, бірақ файлдық жүйе коды ядродан толығымен тыс жерде орналасса (модульдік ядроның модулі ретінде де емес), онда API "драйверге негізделген" болып саналады. Бұл схема тазарақ, себебі файлдық жүйе коды толығымен тәуелсіз, ол жабық кодты ядролар үшін файлдық жүйелерді жасауға, сондай-ақ жүйеге файлдық жүйелерді онлайн қосуға немесе алып тастауға мүмкіндік береді. Осы схеманың мысалдары – Windows NT және OS/2 жүйелерінің IFS-тері.
Аралас ядролық драйверге негізделген АЖҚ
Бұл API-де барлық файлдық жүйелер ядрода орналасқан, ядролық API-лердегідей, бірақ олар операциялық жүйе арқылы драйверге негізделген тағы бір API-ға автоматты түрде бағытталады. Бұл схема Windows 3.1-де 32 биттік қорғалған режимде FAT файлдық жүйе драйверін қамтамасыз ету үшін қолданылды, сондай-ақ кэштелген (VFAT) нұсқасы ядродағы DOS FAT драйверін (MSDOS.SYS) толығымен айналып өтті. Кейін Windows 9x сериясында (95, 98 және Me) VFAT, ISO9660 файлдық жүйе драйвері (Joliet қоса), желілік бөлісімдер және үшінші тараптың файлдық жүйе драйверлері үшін де пайдаланылды. Бұған қоса, бастапқы DOS API-ына LFN API қосылды (IFS драйверлері бар болған DOS файлдық API-ларын ұстап қана қоймай, 32 биттік қорғалған режимдегі атқарылатын файл ішінде жаңаларын да қоса алады). Дегенмен, бұл API толыққанды құжатталмағандықтан, үшінші тараптар ядролық API-лерге қарағанда одан да қиын жағдайда – «өздері жасау» сценарийіне тап болды.
Пайдаланушы кеңістігі API
API пайдаланушы кеңістігінде болады, егер файлдық жүйе тікелей ядролық мүмкіндіктерді пайдаланбай, керісінше, жоғары деңгейдегі операциялық жүйе функцияларын қолдана отырып дискілерге қол жеткізеді және файлдық жүйеге қол жеткізу үшін бірқатар қосымша құралдар пайдаланатын кітапханадағы функцияларды ұсынады. Бұл дискілік кескіндермен жұмыс істеу үшін ыңғайлы. Артықшылығы – файлдық жүйе операциялық жүйелер арасында тасымалданатын болуы мүмкін, себебі ол қолданатын жоғары деңгейдегі операциялық жүйе функциялары ANSI C сияқты жиі кездесетін болуы мүмкін, бірақ кемшілігі – API әрбір қолданба үшін ерекше болады. Осы схеманың мысалдары – hfsutils және adflib.
Файл жүйелері API-лерінің өзара іс-қимылы
Барлық файлдық жүйелер (кем дегенде дискіліктері) ядро ұсынатын эквивалентті функцияларды қажет етеді, сондықтан файлдық жүйе кодын бір API-ден екіншісіне, тіпті олар әртүрлі типте болса да, оңай көшіруге болады. Мысалы, OS/2 үшін ext2 драйвері – Linux VFS-ін OS/2 IFS-іне және Linux ядролық ext2-ге айналдыратын қаптама ғана, ал OS/2 үшін HFS драйвері – hfsutils-ті OS/2 IFS-іне көшіру. Сондай-ақ, Linux-та NTFS-ті жұмыс істету үшін Windows NT IFS драйверін пайдаланатын жоба да бар.