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.
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:
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".
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.
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.
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.
Menedzher fajlovoj sistemy upravlyaet blok-orientirovannymi fajlami. |ti fajly opredelyayut diski i razdely diskov.
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.
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:
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.
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.
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.
V nachale kazhdogo razdela QNX raspolagayutsya sleduyushchie klyuchevye komponenty:
|ti struktury sozdayutsya pri inicializacii fajlovoj sistemy utilitoj dinit.
Struktura fajlovoj sistemy QNX vnutri razdela diska.
|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 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.
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 razdela vedet sebya kak obychnyj katalog, za dvumya isklyucheniyami:
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, 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.
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:
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.
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.
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'.
Mozhet proizvodit'sya tol'ko pri inicializacii razdelov ili pri zapuske menedzhera fajlovoj sistemy.
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.
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.
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.
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. |
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.
|ta glava ohvatyvaet sleduyushchie temy:
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
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) |
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 zameny | INS |
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
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:
MIN | TIME | TIMEOUT | Opisanie: |
---|---|---|---|
0 | 0 | 0 | Vernut' nemedlenno stol'ko bajt, skol'ko dostupno v dannyj moment (no ne bolee n bajt) |
M | 0 | 0 | Vernut' ne bolee n bajt tol'ko togda, kogda dostupny, po men'shej mere, M bajt |
0 | T | 0 | Vernut' ne bolee n bajt tol'ko togda, kogda dostupen hotya by odin bajt libo isteklo T x .1 sekund. |
M | T | 0 | 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. |
0 | 0 | t | Zarezervirovano. |
M | 0 | t | Vernut' ne bolee n bajt tol'ko togda, kogda dostupny M bajt libo isteklo t x .1 sekund. |
0 | T | t | Zarezervirovano. |
M | T | t | 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. |
Na risunke pokazana tipichnaya podsistema ustrojstv v QNX.
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.
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.
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().
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 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 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.
Potok sobytij vnutri podsistemy ustrojstv skonstruirovan tak, chtoby min