oj sistemy k disku. Po umolchaniyu razmer kesha opredelyaetsya obshchim ob®emom operativnoj pamyati, no vy mozhete zadat' drugoe znachenie cherez opciyu pri zapuske Fsys.

Operacii chteniya yavlyayutsya sinhronnymi. Operacii zapisi, naprotiv, obychno yavlyayutsya asinhronnymi. Kogda dannye popadayut v kesh, Menedzher fajlovoj sistemy otvechaet klientu (funkciej Reply()), izveshchaya ego, chto dannye zapisany. Zatem vypolnyaetsya zapis' dannyh na disk s maksimal'no-vozmozhnoj skorost'yu, obychno ne pozdnee, chem cherez pyat' sekund.

Prilozheniya mogut izmenyat' mehanizm zapisi primenitel'no k konkretnym fajlam. Naprimer, prilozhenie, rabotayushchee s bazoj dannyh, mozhet potrebovat', chtoby zapis' v opredelennyj fajl proizvodilas' sinhronno. |to obespechit vysokij uroven' celostnosti fajla v sluchae apparatnogo ili programmnogo sboya.

Mnogopotokovaya obrabotka

Menedzher fajlovoj sistemy yavlyaetsya mnogopotokovym processom, i, takim obrazom, on mozhet obrabatyvat' neskol'ko zaprosov vvoda/vyvoda odnovremenno. |to pozvolyaet Menedzheru fajlovoj sistemy v polnoj mere realizovat' vozmozhnosti parallel'noj obrabotki, tak kak on v sostoyanii:

Klient-upravlyaemyj prioritet

Prioritet Menedzhera fajlovoj sistemy mozhet opredelyat'sya prioritetom processa, poslavshego emu zapros. V etom sluchae, kogda Menedzher fajlovoj sistemy poluchaet soobshchenie, ego prioritet ustanavlivaetsya ravnym prioritetu processa, poslavshego soobshchenie. Bolee podrobno ob etom govoritsya v razdele "Dispetcherizaciya processov" glavy "Mikroyadro".

Vremennye fajly

QNX predusmatrivaet vozmozhnost' otkrytiya vremennyh fajlov, t.e. fajlov, kotorye zapisyvayutsya i zatem chitayutsya v techenie korotkogo promezhutka vremeni. Dlya takih fajlov Menedzher fajlovoj sistemy staraetsya hranit' bloki dannyh v kesh-bufere i proizvodit zapis' blokov na disk tol'ko v sluchae krajnej neobhodimosti.

Psevdodiski

Menedzher fajlovoj sistemy soderzhit vstroennuyu vozmozhnost' podderzhki elektronnogo diska, pozvolyayushchuyu ispol'zovat' do 8 Megabajt operativnoj pamyati v kachestve psevdodiska. Tak kak Menedzher fajlovoj sistemy ispol'zuet vysokoeffektivnyj mehanizm sostavnyh soobshchenij, to dannye iz psevdodiska kopiruyutsya neposredstvenno v prilozhenie.

Menedzher fajlovoj sistemy v sostoyanii obojti keshirovanie, tak kak psevdodisk yavlyaetsya vstroennym, a ne realizovan kak otdel'nyj drajver. Dlya informacii ob obmene sostavnymi soobshcheniyami, smotri razdel "Dopolnitel'nye vozmozhnosti" v glave "Mikroyadro".

Tak kak psevdodiski isklyuchayut apparatnye zaderzhki i ne ispol'zuyut keshirovanie dannyh, poetomu oni obespechivayut bol'shij determinizm pri vypolnenii operacij vvoda/vyvoda po sravneniyu s zhestkimi diskami.

Nadezhnost' fajlovoj sistemy

V QNX vysokaya proizvoditel'nost' fajlovoj sistemy dostigaetsya ne za schet snizheniya nadezhnosti. |to obespechivaetsya neskol'kimi sposobami.

V to vremya kak bol'shaya chast' dannyh pomeshchaetsya v kesh-bufer i zapisyvaetsya s nebol'shoj zaderzhkoj, kriticheskie dlya fajlovoj sistemy dannye zapisyvayutsya nemedlenno. Obnovleniya katalogov, indeksnyh deskriptorov (inodes), blokov ekstentov i bitovoj karty proizvodyatsya bez zaderzhki, chtoby garantirovat' celostnost' struktury fajlovoj sistemy na diske (t.e. chto ne budet vnutrennego nesootvetstviya dannyh na diske).

Inogda vse perechislennye vyshe struktury dannyh dolzhny byt' obnovleny. Naprimer, esli vy peremeshchaete fajl v kataloge, poslednij ekstent kotorogo zapolnen, to katalog dolzhen vyrasti. V takih sluchayah poryadok operacij tshchatel'no podobran takim obrazom, chto dazhe esli proizojdet katastroficheskij sboj v moment, kogda operaciya eshche ne polnost'yu zavershena (naprimer, otklyuchenie pitaniya), to fajlovaya sistema posle perezapuska vse zhe sohranit rabotosposobnost'. V hudshem sluchae, nekotorye bloki budut vydeleny, no ne ispol'zovany. Ispravit' podobnuyu situaciyu mozhno, zapustiv utilitu chkfsys.

Vosstanovlenie fajlovoj sistemy

Dazhe samye nadezhnye sistemy ne zastrahovany ot avarijnyh situacij, takih kak:

CHtoby posle takih situacij mozhno bylo vosstanovit' kak mozhno bol'she fajlov, na disk zapisyvayutsya unikal'nye "signatury" dlya avtomaticheskoj identifikacii i vosstanovleniya kriticheskih chastej fajlovoj sistemy. Fajl s indeksnymi deskriptorami (/.inodes), tak zhe kak i kazhdyj katalog, i blok ekstentov, vse soderzhat unikal'nye obrazcy dannyh, kotorye mogut byt' ispol'zovany utilitoj chkfsys dlya vosstanovleniya ser'ezno povrezhdennoj fajlovoj sistemy.

Bolee podrobnaya informaciya o vosstanovlenii fajlovoj sistemy soderzhitsya v dokumentacii k utilite chkfsys.

Rabota s diskami

Menedzher fajlovoj sistemy upravlyaet blok-orientirovannymi fajlami. |ti fajly opredelyayut diski i razdely diskov.

Diski i diskovye podsistemy

QNX schitaet kazhdyj fizicheskij disk na komp'yutere blok-orientirovannym fajlom. Kak blok-orientirovannyj fajl, disk rassmatrivaetsya fajlovoj sistemoj QNX kak posledovatel'nost' blokov razmerom po 512 bajt, nezavisimo ot razmera diska. Bloki numeruyutsya, nachinaya s pervogo bloka na diske (blok 1).

Tak kak kazhdyj disk yavlyaetsya blok-orientirovannym fajlom, on mozhet byt' otkryt kak odno celoe dlya nizkourovnevogo dostupa s ispol'zovaniem standartnyh POSIX Si funkcij, takih kak open(), read(), write() i close(). Na urovne blok-orientirovannogo fajla, kotoryj opredelyaet celyj disk, QNX ne delaet absolyutno nikakih predpolozhenij o kakih-libo strukturah dannyh, kotorye mogut sushchestvovat' na diske.

Komp'yuter pod upravleniem QNX mozhet imet' odnu ili neskol'ko diskovyh podsistem. Kazhdaya diskovaya podsistema sostoit iz kontrollera i odnogo ili bolee diskov. Vy zapuskaete drajver ustrojstva dlya kazhdoj diskovoj podsistemy, kotoraya dolzhna upravlyat'sya Menedzherom fajlovoj sistemy.

Razdely OS

QNX sootvetstvuet promyshlennomu standartu de-fakto, kotoryj pozvolyaet razlichnym operacionnym sistemam razdelyat' odin i tot zhe fizicheskij disk. V sootvetstvii s etim standartom, tablica razdelov mozhet opredelyat' do chetyreh pervichnyh razdelov na diske. Tablica hranitsya v pervom bloke diska.

Kazhdyj razdel dolzhen imet' "tip", uznavaemyj operacionnoj sistemoj, kotoraya dolzhna ispol'zovat' etot razdel. Sleduyushchij spisok soderzhit ispol'zuemye na dannyj moment tipy razdelov:
Tip: Operacionnaya sistema
1 DOS (12-bitnaya FAT)
4 DOS (16-bitnaya FAT; razdely <32Mbajt)
5 Rasshirennyj razdel DOS
6 DOS 4.0 (16-bitnaya FAT; razdel >=32Mbajt)
7 OS/2 HPFS
7 Predydushchaya versiya QNX 2 (do 1988)
8 QNX 1.x i 2.x ("qny")
9 QNX 1.x i 2.x ("qnz")
11 DOS 32-bitnaya FAT; razdely do 2047Gbajt
12 To zhe, chto tip 11, no ispol'zuet LBA rasshireniya preryvaniya Int 13h
14 To zhe, chto tip 6, no ispol'zuet LBA rasshireniya preryvaniya Int 13h
15 To zhe, chto tip 5, no ispol'zuet LBA rasshireniya preryvaniya Int 13h
77 QNX POSIX razdel
78 QNX POSIX razdel (vtorichnyj)
79 QNX POSIX razdel (vtorichnyj)
99 UNIX

Esli vy hotite imet' neskol'ko razdelov QNX 4.x na odnom fizicheskom diske, vam sleduet ispol'zovat' tip 77 dlya pervogo QNX razdela, tip 78 dlya vtorogo QNX razdela, i tip 79 dlya tret'ego. Vy mozhete ispol'zovat' drugie tipy dlya vtorogo i tret'ego QNX razdelov, no 78 i 79 predpochtitel'nee. CHtoby pometit' lyuboj iz etih razdelov kak zagruzochnyj, ispol'zujte utilitu fdisk.

Vo vremya zagruzki, zagruzchik QNX (opcional'no ustanavlivaemyj utilitoj fdisk) pozvolyaet vybirat' v tablice razdelov v kachestve zagruzochnogo drugoj razdel, ne yavlyayushchijsya zagruzochnym po umolchaniyu.

Vy mozhete ispol'zovat' utilitu fdisk dlya sozdaniya, modifikacii ili udaleniya razdelov.

Tak kak QNX rassmatrivaet kazhdyj razdel na diske kak blok-orientirovannyj fajl, to eto daet vozmozhnost' dostupa k sleduyushchemu:


fig: i/twodisks.gif


Dva fizicheskih diska. Pervyj soderzhit DOS, QNX i UNIX razdely. Vtoroj disk imeet DOS i QNX razdely.



Opredelenie blok-orientirovannyj fajlov

Imena vseh blok-orientirovannyh fajlov pomeshchayutsya v derevo prefiksov togo komp'yutera, na kotorom raspolozheny blok-orientirovannye fajly (derevo prefiksov rassmatrivaetsya v glave "Prostranstvo imen vvoda/vyvoda"). Kogda zapuskaetsya drajver kontrollera diskov, Menedzher fajlovoj sistemy avtomaticheski registriruet prefiksy, kotorye opredelyayut blok-orientirovannyj fajl dlya kazhdogo fizicheskogo diska, podklyuchennogo k kontrolleru. Utilita mount ispol'zuetsya dlya togo, chtoby zaregistrirovat' prefiks dlya blok-orientirovannogo fajla dlya kazhdogo razdela na diske.

Pust', naprimer, u vas imeetsya standartnyj kontroller Western Digital, k kotoromu podklyucheny dva diska. Na odnom diske vy hotite smontirovat' razdel DOS, razdel QNX i razdel UNIX. Na drugom diske vy hotite smontirovat' razdel DOS i razdel QNX.

Menedzher fajlovoj sistemy opredelit blok-orientirovannye fajly /dev/hd0 i /dev/hd1 dlya dvuh diskov, podklyuchennyh k kontrolleru.

Zatem vy ispol'zuete utilitu mount, chtoby opredelit' blok-orientirovannyj fajl dlya kazhdogo razdela. Naprimer:

mount -p /dev/hd0 -p /dev/hd1

opredelit sleduyushchie blok-orientirovannye fajly:
Razdel OS: Blok-orientirovannyj fajl:
Razdel DOS na diske hd0 /dev/hd0t4
Razdel QNX na diske hd0 /dev/hd0t77
Razdel UNIX na diske hd0 /dev/hd0t99
Razdel DOS na diske hd1 /dev/hd1t4
Razdel QNX na diske hd1 /dev/hd1t77

Zamet'te, chto oboznachenie tn ispol'zuetsya dlya oboznacheniya razdelov na diske, ispol'zuemyh opredelennymi operacionnymi sistemami. Naprimer, razdel DOS oboznachaetsya t4, razdel UNIX - eto t99 i t.d.

Montirovanie fajlovoj sistemy

Obychno fajlovaya sistema QNX montiruetsya na blok-orientirovannom fajle. Dlya etogo vy snova ispol'zuete utilitu mount - ona pozvolyaet zadat' prefiks, kotoryj identificiruet fajlovuyu sistemu. Naprimer:

mount /dev/hd0t77 /

montiruet fajlovuyu sistemu s prefiksom / na razdele, kotoryj opredelen blok-orientirovannym fajlom s imenem hd0t77.


Note: Esli disk razbit na razdely, to vy dolzhny smontirovat' blok-orientirovannyj fajl dlya razdela QNX 4.x (naprimer /dev/hd0t77), a ne osnovnoj blok-orientirovannyj fajl, kotoryj opredelyaet ves' disk (naprimer, /dev/hd0). Esli vy popytaetes' smontirovat' osnovnoj blok-orientirovannyj fajl dlya vsego diska, to pri popytke dostupa k fajlovoj sisteme poluchite soobshchenie "corrupt filesystem" (povrezhdennaya fajlovaya sistema).

Demontirovanie fajlovoj sistemy

CHtoby demontirovat' fajlovuyu sistemu, ispol'zujte utilitu umount. Tak, naprimer, sleduyushchaya komanda demontiruet fajlovuyu sistemu na pervichnom razdele QNX:

umount /dev/hd0t77

Posle togo, kak fajlovaya sistema demontirovana, fajly v etom razdele uzhe ne dostupny.

Klyuchevye komponenty QNX razdela

V nachale kazhdogo razdela QNX raspolagayutsya sleduyushchie klyuchevye komponenty:

|ti struktury sozdayutsya pri inicializacii fajlovoj sistemy utilitoj dinit.


fig: i/qnxpart.gif


Struktura fajlovoj sistemy QNX vnutri razdela diska.


Blok zagruzchika

|to pervyj fizicheskij blok razdela diska. |tot blok soderzhit kod, kotoryj zagruzhaetsya i zatem ispolnyaetsya BIOS komp'yutera dlya zagruzki operacionnoj sistemy iz razdela. Esli disk ne razbit na razdely (naprimer, gibkij disk), etot blok yavlyaetsya pervym fizicheskim blokom na diske.

Kornevoj blok

Kornevoj blok imeet tu zhe strukturu, chto i obychnyj katalog. On soderzhit informaciyu o chetyreh osobyh fajlah:

Fajly /.boot i /.altboot soderzhat obrazy operacionnoj sistemy, kotorye zagruzhayutsya programmoj nachal'noj zagruzki QNX.

Obychno zagruzchik QNX zagruzhaet obraz OS, hranyashchijsya v fajle /.boot. No esli fajl /.altboot ne pust, to vam budet predlozhena opciya zagruzki obraza, hranyashchegosya v fajle /.altboot.

Bitovaya karta

CHtoby raspredelyat' prostranstvo na diske, QNX ispol'zuet bitovuyu kartu, hranyashchuyusya v fajle /.bitmap. |tot fajl soderzhit bitovuyu masku dlya vseh blokov na diske, pokazyvayushchuyu, kakie bloki zanyaty. Kazhdomu bloku sootvetstvuet odin bit. Esli znachenie bita 1, to sootvetstvuyushchij blok na diske zanyat.

Kornevoj katalog

Kornevoj katalog razdela vedet sebya kak obychnyj katalog, za dvumya isklyucheniyami:

Menedzher fajlovoj sistemy DOS

V QNX prostranstvo imen vvoda/vyvoda upravlyaetsya cherez prefiksy, kotorye napravlyayut zaprosy sootvetstvuyushchim processam-menedzheram. Odnim iz takih processov yavlyaetsya Menedzher fajlovoj sistemy DOS (Dosfsys). Dosfsys registriruet prefiks /dos i predstavlyaet diski DOS vnutri prostranstva imen QNX kak "gostevye" fajlovye sistemy.

Dosfsys obespechivaet prozrachnyj dostup k diskam DOS, tak chto vy mozhete rassmatrivat' fajlovye sistemy DOS kak fajlovye sistemy QNX. Takaya prozrachnost' pozvolyaet processam rabotat' s fajlami DOS bez kakih-libo special'nyh znanij ili dejstvij. Standartnye bibliotechnye funkcii vvoda/vyvoda, takie kak open(), close(), read() i write() rabotayut s fajlom v razdele DOS tochno tak zhe, kak i s fajlom v razdele QNX. Naprimer, chtoby kopirovat' fajl iz razdela QNX v razdel DOS, dostatochno vypolnit' komandu:

cp /usr/luc/file.dat /dos/c/file.dat

Zamet'te, chto /dos/c - eto put' k DOS disku C. Komanda cp ne soderzhit kakogo-libo special'nogo koda dlya opredeleniya, nahoditsya li kopiruemyj fajl na diske DOS. Drugie komandy rabotayut s takoj zhe prozrachnost'yu (naprimer, utility cd, ls i mkdir).

Esli ne sushchestvuet ekvivalenta DOS dlya funkcii QNX, takoj kak mkfifo() ili link(), to Dosfsys vozvrashchaet sootvetstvuyushchij kod oshibki (t.e. errno).

Dosfsys rabotaet kak s gibkimi diskami, tak i s razdelami zhestkih diskov. Ves' trebuemyj dostup k disku na nizkom urovne proizvoditsya cherez standartnye funkcii Menedzhera fajlovoj sistemy. Poetomu, bez dostupa k kodu nizkogo urovnya, Dosfsys sposoben obespechit' prozrachnyj interfejs mezhdu prilozheniyami QNX i fajlovoj sistemoj DOS.

Fajlovaya sistema CD-ROM

Fajlovaya sistema CD-ROM, Iso9660fsys, obespechivaet prozrachnyj dostup k nositelyam CD-ROM, takim obrazom mozhno rabotat' s fajlovymi sistemami CD-ROM, kak budto eto fajlovye sistemy POSIX. Takaya prozrachnost' obespechivaet processam dostup k fajlam na CD-ROM standartnymi sredstvami.

Menedzher Iso9660fsys realizuet standart ISO 9660, vklyuchaya rasshireniya Rock Ridge. |tomu standartu sootvetstvuyut kompakt-diski DOS i Windows. V dopolnenie k obychnym fajlam, Iso9660fsys takzhe podderzhivaet audio.

Fajlovaya sistema flesh

Menedzher fajlovoj sistemy flesh Efsys.* byl special'no razrabotan dlya raboty, kak so vstroennoj, tak i so smennoj flesh-pamyat'yu. Fajly, zapisannye na smennye nositeli flesh (karty PC-Card), perenosimy v drugie sistemy, kotorye takzhe podderzhivayut etot standart.

Menedzher Efsys.* sochetaet funkcii menedzhera fajlovoj sistemy i drajvera ustrojstva. Tak kak Efsys.* soderzhit drajver ustrojstva, to sushchestvuyut otdel'nye versii Efsys.* dlya razlichnyh vidov oborudovaniya vstraivaemyh sistem. Naprimer:

Ogranicheniya

Funkcional'nost' fajlovoj sistemy ogranichena ispol'zuemymi ustrojstvami pamyati. Naprimer, dlya ustrojstv ROM fajlovaya sistema dostupna tol'ko dlya chteniya.

Dlya ustrojstv flesh-pamyati sushchestvuyut ogranicheniya na zapis' fajlov. Vy mozhete tol'ko dozapisyvat' fajl. Krome togo, ne obnovlyaetsya vremya poslednego dostupa k fajlu. V nastoyashchij moment eti ogranicheniya rasprostranyayutsya dazhe na SRAM ustrojstva.

Vosstanovlenie svobodnogo prostranstva

Menedzher Efsys.* hranit katalogi i fajly, ispol'zuya svyaznye (svyaznye - imeyushchie pryamye/obratnye ukazateli) spiski struktur dannyh, a ne bloki fiksirovannogo razmera, kak na diske, ispol'zuemye v tradicionnyh fajlovyh sistemah s vrashchayushchimsya nositelem. Pri udalenii kataloga ili fajla, prinadlezhashchie emu struktury dannyh pomechayutsya kak udalennye, no ne stirayutsya, chtoby izbezhat' nepreryvnogo stiraniya i perezapisi (i tem samym poter' vremeni na eti operacii).

So vremenem svobodnoe mesto zakonchitsya, i menedzheru fajlovoj sistemy pridetsya vypolnit' vosstanovlenie svobodnogo prostranstva (inogda etu operaciyu nazyvayut eshche "uborka musora"). Vo vremya etoj procedury Efsys.* vosstanavlivaet svobodnoe mesto, zanimaemoe udalennymi fajlami i katalogami. Dlya provedeniya etoj operacii menedzheru fajlovoj sistemy trebuetsya hotya by odin svobodnyj blok. Utilita mkffs avtomaticheski rezerviruet dlya etoj celi odin blok pri sozdanii fajlovoj sistemy.

Szhatie i raspakovka

Menedzher Efsys.* podderzhivaet raspakovku, chto uvelichivaet ob®em dannyh, kotoryj mozhet hranit'sya na nositele. Raspakovka vypolnyaetsya menedzherom fajlovoj sistemy dlya prilozhenij prozrachno.

Dlya etogo fajly dolzhny byt', pered zapuskom utility mkffs, predvaritel'no szhaty s pomoshch'yu utility bpe. Esli zhe kopirovat' szhatyj fajl v uzhe sozdannuyu fajlovuyu sistemu flesh, to on ostanetsya szhatym i pri chtenii.

Dostup k fajlam

Esli zapretit' rasshireniya POSIX, to vladel'cem fajlov vsegda budet schitat'sya root, a bity rezhima vsegda budut ustanovleny v rwx. Komandy chgrp, chmod i chown v etom sluchae ne budut rabotat'.

Montirovanie

Mozhet proizvodit'sya tol'ko pri inicializacii razdelov ili pri zapuske menedzhera fajlovoj sistemy.

Dostup na nizkom urovne

Pri zapuske Efsys.*, on sozdaet dlya kazhdogo ustrojstva pamyati special'nyj fajl v kataloge /dev. V sisteme s dvumya ustrojstvami pamyati Efsys.* sozdast fajly /dev/skt1 i /dev/skt2. Special'nye ustrojstva ignoriruyut razbienie na razdely, pozvolyaya dostup k nositelyam na nizkom urovne.

Dostup k razdelu, soderzhashchemu obraz fajlovoj sistemy, vozmozhen tol'ko na nizkom urovne (kak k "syromu" ustrojstvu). Dlya kazhdogo takogo razdela Efsys.* sozdaet special'nyj fajl vida /dev/sktXimgY, gde X - eto nomer gnezda (socket), a Y - nomer razdela na etom nositele.

Fajlovaya sistema NFS

Pervonachal'no razrabotannaya kompaniej Sun Microsystems, NFS (Network File System - Setevaya Fajlovaya Sistema) yavlyaetsya TCP/IP prilozheniem, kotoroe s teh por bylo realizovano na bol'shinstve DOS i UNIX sistem. Ego realizaciya v QNX ne zamenima dlya prozrachnogo dostupa k fajlovym sistemam drugih OS, podderzhivayushchih NFS.


Note: QNX iznachal'no podderzhivaet setevye fajlovye sistemy. Ispol'zovat' NFS neobhodimo tol'ko dlya dostupa k ne-QNX NFS fajlovym sistemam, libo esli vy hotite otkryt' NFS-klientam dostup k fajlam QNX.

NFS pozvolyaet otobrazhat' udalennye fajlovye sistemy - polnost'yu ili chastichno - v lokal'noe prostranstvo imen. Katalogi na udalennoj sisteme vyglyadyat kak chast' lokal'noj fajlovoj sistemy, i vse utility raboty s fajlami (ls, cp i mv) rabotayut s udalennymi fajlami tak zhe, kak i s lokal'nymi.


Note: V QNX 4 dlya NFS trebuetsya menedzher Socket, kotoryj podderzhivaet setevye protokoly TCP/IP. Zamet'te, chto ego "oblegchennyj" variant, Socklet, mozhet ispol'zovat'sya, esli ne nuzhna NFS.

Fajlovaya sistema SMB

SMBfsys realizuet protokol SMB (Server Message Block) sovmestnogo ispol'zovaniya fajlov, kotoryj ispol'zuetsya razlichnymi serverami, takimi kak Windows NT, Windows 95, Windows for Workgroups, LAN Manager, Samba. SMBfsys obespechivaet QNX-klientu prozrachnyj dostup k udalennym diskam takih serverov.

SMBfsys realizuet etot protokol, ispol'zuya tol'ko NetBIOS poverh TCP/IP, ne NetBEUI. Sootvetstvenno, neobhodimo, chtoby TCP/IP byl ustanovlen, kak na QNX-mashine, tak i na udalennom servere. Posle togo, kak zapushchen SMBfsys i smontirovan udalennyj server, fajlovaya sistema servera poyavlyaetsya v lokal'nom dereve katalog.

Menedzher ustrojstv

|ta glava ohvatyvaet sleduyushchie temy:

Vvedenie

Menedzher ustrojstv QNX (Dev) yavlyaetsya interfejsom mezhdu processami i terminal'nymi ustrojstvami. |ti terminal'nye ustrojstva raspolagayutsya v prostranstve imen vvoda/vyvoda s imenami, nachinayushchimisya s /dev. Naprimer, konsol'noe ustrojstvo v QNX budet imet' imya:

/dev/con1

Obsluzhivanie ustrojstv

Programmy v QNX poluchayut dostup k terminal'nym ustrojstvam, ispol'zuya standartnye funkcii open(), close(), read() i write(). Dlya processa QNX terminal'noe (okonechnoe) ustrojstvo predstavlyaetsya dvunapravlennym potokom bajt, kotoryj mozhet schityvat'sya i zapisyvat'sya processom.

Menedzher ustrojstv reguliruet potok dannyh mezhdu prilozheniem i ustrojstvom. Dev vypolnyaet nekotoruyu obrabotku etih dannyh v sootvetstvii s parametrami upravlyayushchej struktury terminala (nazyvaemoj termios), kotoraya sushchestvuet dlya kazhdogo ustrojstva. Pol'zovateli mogut zaprashivat' i/ili izmenyat' eti parametry s pomoshch'yu utility stty; programmy mogut ispol'zovat' funkcii tcgetattr() i tcsetattr().

Parametry struktury termios upravlyayut funkcional'nost'yu nizkogo urovnya, takoj kak:

Menedzher ustrojstv takzhe predostavlyaet nabor dopolnitel'nyh uslug, dostupnyh processam dlya raboty s terminal'nym ustrojstvom. V sleduyushchej tablice privedeny nekotorye iz etih uslug.
Process mozhet: Funkciya Si:
Vypolnyat' operacii chteniya s kontrolem vremeni dev_read() ili read() i tcsetattr()
Poluchat' asinhronnoe izveshchenie o dostupnyh dannyh dev_arm()
Na odnom ili bolee ustrojstvah vvoda zhdat' polnogo zaversheniya operacii vyvoda tcdrain()
Posylat' komandu Break po kanalu svyazi tcsendbreak()
Razorvat' soedinenie tcdropline()
Vstavit' vhodnye dannye dev_insert_chars()
Vypolnyat' neblokiruyushchiesya chtenie i zapis' open() i fcntl() (O_NONBLOCK mode)

Rezhim redaktiruemogo vvoda

Naibolee vazhnyj rezhim raboty ustrojstva upravlyaetsya bitom ICANON v upravlyayushchej strukture termios. Esli etot upravlyayushchij bit ustanovlen, to Menedzher ustrojstv vypolnyaet funkcii redaktirovaniya stroki dlya prinimaemyh simvolov. Takim obrazom, tol'ko kogda stroka "vvedena" - obychno, kogda poluchen simvol perevoda karetki (CR), - dannye stanut dostupny dlya prikladnyh processov. Takoj rezhim raboty nazyvaetsya redaktiruemym - ot anglijskogo edited. |tot rezhim eshche nazyvayut canonical (kanonicheskim) i inogda cooked (prigotovitel'nym).

Bol'shinstvo nepolnoekrannyh prilozhenij vypolnyayutsya v redaktiruemom rezhime. Tipichnym primerom yavlyaetsya komandnyj interpretator (Shell).

Sleduyushchaya tablica pokazyvaet, kak Dev obrabatyvaet nekotorye special'nye upravlyayushchie simvoly, esli sootvetstvuyushchie parametry ustanovleny v strukture termios.
Dev vypolnit: Kogda poluchit simvol:
Sdvig kursora na odin simvol vlevo LEFT
Sdvig kursora na odin simvol vpravo RIGHT
Sdvig kursora v nachalo stroki HOME
Sdvig kursora v konec stroki END
Udalenie simvola sleva ot kursora ERASE
Udalenie simvola v tekushchej pozicii kursora DEL
Udalenie vsej stroki vvoda KILL
Stiranie tekushchej stroki i vosstanovlenie predydushchej UP
Stiranie tekushchej stroki i vosstanovlenie sleduyushchej DOWN
Pereklyuchenie mezhdu rezhimami vstavki i zamenyINS

Simvoly redaktirovaniya stroki otlichayutsya dlya razlichnyh terminalov. Pri zapuske konsoli QNX vsegda opredelen polnyj nabor redaktiruyushchih simvolov.

Esli terminal podklyuchen k QNX cherez posledovatel'nyj kanal, neobhodimo ustanovit' redaktiruyushchie simvoly, kotorye budut ispol'zovat'sya dlya dannogo konkretnogo terminala. Dlya etogo vy mozhete ispol'zovat' utilitu stty. Naprimer, esli terminal VT100 podklyuchen k posledovatel'nomu portu (/dev/ser1), to sleduyushchaya komanda izvlechet sootvetstvuyushchie redaktiruyushchie simvoly iz bazy dannyh terminfo i primenit ih k /dev/ser1:

stty term=vt100 </dev/ser1

Esli zhe k etomu posledovatel'nomu portu podklyuchen modem, dlya svyazi s drugoj QNX sistemoj s pomoshch'yu utility qtalk, redaktiruyushchie simvoly sleduet ustanovit' tak:

stty term=qnx </dev/ser1

Rezhim neobrabatyvaemogo vvoda

Kogda bit ICANON ne ustanovlen, to govoryat, chto ustrojstvo nahoditsya v neobrabatyvaemom ("syrom", anglijskij termin raw) rezhime. V etom rezhime ne proizvoditsya nikakoe redaktirovanie vvoda, a vse poluchaemye dannye nemedlenno stanovyatsya dostupnymi dlya QNX-processov.

Polnoekrannye programmy i kommunikacionnye programmy yavlyayutsya primerami prilozhenij, kotorye perevodyat ustrojstvo v syroj rezhim.

Pri chtenii iz syrogo ustrojstva prilozhenie mozhet zadat' usloviya, pri kotoryh budet udovletvoren zapros na vvod dannyh. Kriterii, ispol'zuemye pri prieme syryh dannyh, baziruyutsya na dvuh parametrah struktury termios: MIN i TIME. Prilozhenie mozhet opredelit' eshche odin dopolnitel'nyj parametr pri vyzove funkcii dev_read(). |tot parametr, TIMEOUT, ispol'zuetsya pri napisanii protokolov ili prilozhenij real'nogo vremeni. Uchtite, chto dlya funkcii read() TIMEOUT vsegda 0.

Kogda process zaprashivaet vvod n bajt dannyh, eti tri parametra opredelyayut, kogda dolzhen byt' udovletvoren zapros:
MINTIMETIMEOUT Opisanie:
000 Vernut' nemedlenno stol'ko bajt, skol'ko dostupno v dannyj moment (no ne bolee n bajt)
M00 Vernut' ne bolee n bajt tol'ko togda, kogda dostupny, po men'shej mere, M bajt
0T0 Vernut' ne bolee n bajt tol'ko togda, kogda dostupen hotya by odin bajt libo isteklo T x .1 sekund.
MT0 Vernut' ne bolee n bajt tol'ko togda, libo kogda budut dostupny M bajt, libo budet prinyat hotya by odin bajt i interval mezhdu lyubymi posledovatel'no prinyatymi simvolami prevysil T x .1 sekund.
00t Zarezervirovano.
M0 tVernut' ne bolee n bajt tol'ko togda, kogda dostupny M bajt libo isteklo t x .1 sekund.
0Tt Zarezervirovano.
MTt Vernut' ne bolee n bajt tol'ko togda, kogda dostupny M bajt, libo isteklo t x .1 sekund i ne byl poluchen ni odin simvol, libo byl prinyat hotya by odin bajt i interval mezhdu lyubymi posledovatel'no prinyatymi simvolami prevysil T x .1 sekund.

Drajvery ustrojstv

Na risunke pokazana tipichnaya podsistema ustrojstv v QNX.

Figure showing a typical QNX device subsystem

Menedzher ustrojstv (Dev) organizuet obmen dannymi mezhdu ustrojstvami i prikladnymi programmami. Apparatnyj interfejs upravlyaetsya individual'nymi processami drajverami. Dev, dlya kazhdogo iz ustrojstv, obmenivaetsya dannymi s drajverami cherez ocheredi v razdelyaemoj pamyati.


Note: Ispol'zovanie razdelyaemoj pamyati trebuet, chtoby Dev i drajvery nahodilis' na odnom i tom zhe fizicheskom komp'yutere, preimushchestvom zhe yavlyaetsya povyshennaya proizvoditel'nost'.

Dlya kazhdogo terminal'nogo ustrojstva ispol'zuyutsya tri ocheredi. Kazhdaya ochered' realizovana na osnove mehanizma "pervyj voshel - pervyj vyshel". Kazhdoj ocheredi takzhe sootvetstvuet svoya upravlyayushchaya struktura.

Prinimaemye dannye pomeshchayutsya drajverom v ochered' syrogo vvoda, i Dev izvlekaet ih, tol'ko kogda prikladnye programmy zaprashivayut dannye. Obrabotchiki preryvanij vnutri drajverov obychno vyzyvayut proverennuyu bibliotechnuyu proceduru vnutri Dev dlya dobavleniya dannyh v etu ochered' - eto obespechivaet edinoobraznyj poryadok vvoda i sushchestvenno minimiziruet otvetstvennost' drajvera.

Dev pomeshchaet vyvodimye dannye v ochered' vyvoda; dannye izvlekayutsya drajverom po mere togo, kak simvoly fizicheski peredayutsya ustrojstvu. Dev vyzyvaet proverennuyu proceduru vnutri drajvera kazhdyj raz, kogda dobavlyayutsya novye dannye, takim obrazom on "podtalkivaet" drajver k rabote (v sluchae, esli on ne byl zanyat). Blagodarya ispol'zovaniyu ocheredej vyvoda Dev realizuet buferizovannuyu zapis' (write-behind) dlya vseh terminal'nyh ustrojstv. Tol'ko kogda bufery vyvoda zapolneny, Dev vyzyvaet blokirovanie processa pri zapisi.

Redaktiruemaya ochered' polnost'yu upravlyaetsya Dev i ispol'zuetsya pri vvode dannyh v redaktiruemom rezhime. Razmer etoj ocheredi opredelyaet maksimal'nyj razmer stroki redaktiruemogo vvoda dlya konkretnogo ustrojstva.

Razmery vseh etih ocheredej mogut konfigurirovat'sya sistemnym administratorom; edinstvennoe ogranichenie sostoit v tom, chto obshchij summarnyj razmer vseh treh ocheredej ne mozhet prevyshat' 64K. Znachenij po umolchaniyu obychno bolee chem dostatochno dlya bol'shinstva apparatnyh konfiguracij, no vy mozhete "nastraivat'" ih, libo dlya umen'sheniya obshchej potrebnosti sistemy v pamyati, libo v sluchae nestandartnyh apparatnyh konfiguracij.

Upravlenie ustrojstvami

Drajvery ustrojstv prosto dobavlyayut poluchaemye dannye v ochered' syrogo vvoda ili izvlekayut i peredayut dannye iz ocheredi vyvoda. Dev reshaet, kogda vyvod dolzhen byt' priostanovlen, dolzhno li byt' "eho" prinimaemyh dannyh i t.d.

CHtoby obespechit' horoshuyu reakciyu na vhodnye sobytiya, Dev dolzhen vypolnyat'sya s dostatochno vysokim prioritetom. Dev obychno malo zagruzhen rabotoj, poetomu on redko snizhaet obshchuyu proizvoditel'nost' sistemy. Sami drajvery, kak i lyubye drugie processy v QNX, mogut vypolnyat'sya s razlichnymi prioritetami v zavisimosti ot haraktera obsluzhivaemyh ustrojstv.

Sami drajvery, kak i lyubye drugie processy v QNX, mogut vypolnyat'sya s razlichnymi prioritetami v zavisimosti ot haraktera obsluzhivaemyh ustrojstv.

Upravlenie ustrojstvami na nizkom urovne vypolnyaetsya cherez dal'nij vyzov vhodnoj tochki ioctl vnutri kazhdogo drajvera. Obshchij nabor ioctl komand podderzhivaetsya neposredstvenno Dev. Specificheskie dlya ustrojstva ioctl komandy mogut byt' poslany QNX processami drajveru cherez funkciyu Si qnx_ioctl().

Konsol' QNX

Sistemnye konsoli podderzhivayutsya drajverom Dev.con. |kran, adapter displeya i sistemnaya klaviatura - vmeste nazyvayutsya konsol'yu.

QNX pozvolyaet parallel'noe vypolnenie mnozhestva sessij na konsolyah posredstvom virtual'nyh konsolej. Drajver Dev.con obychno podderzhivaet bolee odnogo nabora ocheredej vvoda/vyvoda k Dev, kotorye dostupny pol'zovatel'skim processam kak mnozhestvo terminal'nyh ustrojstv s imenami vida /dev/con1, /dev/con2 i t.d. S tochki zreniya prilozheniya, eto "nastoyashchie" dostupnye konsoli.

Konechno, sushchestvuet tol'ko odin fizicheskij ekran i klaviatura, i poetomu tol'ko odna iz etih virtual'nyh konsolej dejstvitel'no pokazyvaetsya v kazhdyj moment vremeni. Klaviatura "podklyuchena" k toj virtual'noj konsoli, kotoraya vidima v tekushchij moment.

Funkcii, specifichnye dlya konsoli

V dopolnenie k realizacii standartnogo terminala QNX (opisan v Rukovodstve pol'zovatelya), drajver konsoli takzhe obespechivaet nabor specificheskih dlya konsoli funkcij, kotorye pozvolyayut prilozheniyam neposredstvenno vzaimodejstvovat' s drajverom konsoli putem obmena soobshcheniyami. Svyaz' ustanavlivaetsya vyzovom funkcii Si console_open(). Posle togo kak svyaz' ustanovlena, process imeet dostup k sleduyushchim vozmozhnostyam:
Process mozhet:CHerez funkciyu Si:
CHitat' neposredstvenno s ekrana konsoli console_read()
Pisat' neposredstvenno na ekran konsoli console_write()
Poluchat' asinhronnoe izveshchenie o vazhnyh sobytiyah (naprimer, izmenenie polozheniya kursora, razmera displeya, pereklyuchenie konsoli i t.d.) console_arm()
Upravlyat' razmerami konsoli console_size()
Pereklyuchat' vidimuyu konsol' console_active()

Drajver konsoli QNX vypolnyaetsya kak normal'nyj process QNX. Vvodimye s klaviatury simvoly pomeshchayutsya obrabotchikom preryvaniya klaviatury neposredstvenno v ochered' vvoda. Vyvodimye dannye otobrazhayutsya Dev.con v to vremya, kogda on vypolnyaetsya kak process.

Posledovatel'nye ustrojstva

Posledovatel'nye kanaly svyazi obsluzhivayutsya drajverom Dev.ser. |tot drajver mozhet obsluzhivat' bolee odnogo fizicheskogo kanala; on obespechivaet terminal'nye ustrojstva s imenami vida /dev/ser1, /dev/ser2 i t.d.

Pri zapuske Dev.ser vy mozhete zadat' argumenty komandnoj stroki, kotorye opredelyayut, kakie - i skol'ko - posledovatel'nye porty ustanovleny. CHtoby uvidet' dostupnye posledovatel'nye porty, ispol'zujte utilitu ls:

ls /dev/ser*

Dev.ser yavlyaetsya primerom upravlyaemogo preryvaniyami servera vvoda/vyvoda. Posle inicializacii oborudovaniya sam process perehodit v sostoyanie ozhidaniya ("zasypaet"). Preryvaniya pomeshchayut vhodnye dannye neposredstvenno v ochered' vvoda. Pervyj vyvodimyj simvol peredaetsya ustrojstvu, kogda Dev "podtalkivaet" drajver. Posleduyushchie simvoly peredayutsya pri obrabotke sootvetstvuyushchego preryvaniya.

Parallel'nye ustrojstva

Parallel'nye porty printera obsluzhivayutsya drajverom Dev.par. Pri zapuske Dev.par vy mozhete zadat' argument komandnoj stroki, kotoryj opredelyaet, kakoj posledovatel'nyj port ustanovlen. CHtoby uvidet', dostupen li posledovatel'nyj port, ispol'zujte utilitu ls:

ls /dev/par*

Dev.par yavlyaetsya tol'ko vyvodyashchim drajverom, poetomu u nego net ocheredej vvoda. Vy mozhete konfigurirovat' razmer bufera vyvoda s pomoshch'yu argumentov komandnoj stroki pri zapuske Dev.par. Bufer vyvoda mozhet byt' sdelan ochen' bol'shim, esli vy hotite obespechit' programmnyj bufer pechati.

Dev.par yavlyaetsya primerom servera vvoda/vyvoda, ne ispol'zuyushchim preryvaniya. |tot process normal'no nahoditsya v sostoyanii RECEIVE-blokirovan, ozhidaya poyavleniya dannyh v ocheredi vyvoda i "tolchka" ot Dev. Kogda dostupny dannye dlya vyvoda na pechat', Dev.par vypolnyaetsya v cikle rabota-ozhidanie (s otnositel'no nizkim adaptivnym prioritetom), ozhidaya, kogda simvoly budut prinyaty printerom. Takoj nizkoprioritetnyj cikl rabota-ozhidanie ne vliyaet na obshchuyu proizvoditel'nost' sistemy i, v to zhe vremya, dostigaet maksimal'no vozmozhnuyu propusknuyu sposobnost' k parallel'nomu ustrojstvu.

Proizvoditel'nost' podsistemy ustrojstv

Potok sobytij vnutri podsistemy ustrojstv skonstruirovan tak, chtoby min