imizirovat' izbytochnost' i dostich' maksimal'noj propusknoj sposobnosti, kogda ustrojstvo rabotaet v syrom rezhime. S etoj cel'yu ispol'zuyutsya sleduyushchie pravila:

|ti pravila - v sochetanii s isklyuchitel'no malen'kimi zaderzhkami preryvaniya i dispetcherizacii v QNX - obespechivayut ochen' effektivnuyu model' vvoda.

Menedzher seti

|ta glava ohvatyvaet sleduyushchie temy:

Vvedenie

Menedzher seti (Net) daet pol'zovatelyam QNX prozrachnoe rasshirenie moshchnyh vozmozhnostej mehanizma peredachi soobshchenij. Vzaimodejstvuya neposredstvenno s Mikroyadrom, Menedzher seti usilivaet mehanizm IPC na osnove obmena soobshcheniyami, peredavaya soobshcheniya na udalennye komp'yutery. Krome togo, Menedzher seti obespechivaet:

Obyazannosti Menedzhera seti

Menedzher seti otvechaet za rasprostranenie primitivov peredachi soobshchenij QNX v predelah lokal'noj seti. Standartnye primitivy peredachi soobshchenij ispol'zuyutsya bez izmeneniya dlya svyazi s udalennym komp'yuterom. Drugimi slovami, ne sushchestvuet osobyh "setevyh" Send(), Receive() ili Reply().

Nezavisimyj modul'

Menedzher seti ne dolzhen byt' obyazatel'no vstroen v obraz operacionnoj sistemy. On mozhet byt' zapushchen i ostanovlen v lyuboe vremya, chtoby obespechit' ili udalit' setevye vozmozhnosti peredachi soobshchenij.

Pri zapuske Menedzher seti registriruetsya u Menedzhera processov i YAdra. |to aktiviziruet kod vnutri poslednih, kotoryj vzaimodejstvuet s Menedzherom seti. |to oznachaet, chto peredacha soobshchenij po seti i sozdanie udalennyh processov - eto ne prosto dobavlyaemyj poverh operacionnoj sistemy sloj. Setevye vozmozhnosti integrirovany v samuyu serdcevinu primitivov peredachi soobshchenij i upravleniya processami.

Takaya glubokaya integraciya na samom nizhnem urovne obespechivaet QNX setevuyu prozrachnost' i delaet ee polnost'yu raspredelennoj operacionnoj sistemoj. Poskol'ku prilozheniya zaprashivayut i poluchayut dostup ko vsem obsluzhivayushchim programmam posredstvom soobshchenij i Menedzher seti obespechivaet prozrachnoe prohozhdenie soobshchenij po seti, to uzly QNX funkcioniruyut vmeste kak edinyj logicheskij komp'yuter.

Poskol'ku Menedzher seti i Mikroyadro otdeleny drug ot druga, Mikroyadro mozhet dostich' nezavisimosti ot setevogo oborudovaniya, a komp'yutery, ne podklyuchennye k seti, mogut vyigrat' za schet men'shego ob®ema koda.

Interfejs Mikroyadro/Menedzher seti

Mikroyadro i Menedzher processov vzaimodejstvuyut s Menedzherom seti cherez special'nuyu neblokiruyushchuyu ochered' v pamyati. |ta ochered' predstavlyaet soboj spisok peredach, kotorye dolzhen vypolnit' Menedzher seti. |lementy ocheredi soderzhat vsyu informaciyu o konkretnoj operacii (naprimer, Send(), Reply(), sozdanie virtual'nogo kanala (VC), peredacha udalennogo signala i t.d.).

Drugim resursom operacionnoj sistemy, ispol'zuemym dlya obespecheniya prozrachnoj peredachi soobshchenij, yavlyaetsya bufer virtual'nogo kanala. Vydelyaemyj pri sozdanii VC processom, bufer virtual'nogo kanala hranit dannye do zaversheniya operacii peredachi soobshcheniya na drugoj uzel.

Nizhe privedeny diagrammy, illyustriruyushchie process posylki i priema udalennyh soobshchenij.

Posylka soobshcheniya na udalennyj uzel


fig: i/sendrmot.gif


Process vyzyvaet Send() ili Reply() k udalennomu uzlu.


V sluchae vyzova Send() ili Reply() k udalennomu uzlu, imeyut mesto sleduyushchie sobytiya:

  1. Process vyzyvaet Send() ili Reply(), i Mikroyadro kopiruet dannye iz oblasti dannyh processa v bufer virtual'nogo kanala.
  2. Mikroyadro dobavlyaet v ochered' Menedzhera seti element, soderzhashchij identifikatory otpravitelya, udalennogo poluchatelya i ukazatel' na dannye v bufere virtual'nogo kanala. Esli pered etim ochered' byla pusta, to Menedzher seti poluchaet proksi, izveshchayushchee o tom, chto poyavilas' novaya rabota.
  3. Menedzher seti izvlekaet element iz ocheredi.
  4. Menedzher seti posylaet element sootvetstvuyushchemu setevomu drajveru.
  5. Menedzher seti nachinaet peredachu dannyh po seti i otvechaet za dostavku.

V sluchae rasprostraneniya signala ili sozdaniya VC, Menedzher processov, a ne Mikroyadro, dobavlyaet upravlyayushchij paket v ochered' . Kak i v predydushchem sluchae, Menedzher seti peredast paket po naznacheniyu.

Poluchenie soobshcheniya s udalennogo uzla


fig: i/recvrmot.gif


Process poluchaet udalennyj Send() ili Reply().


Dopustim, chto udalennyj uzel poslal soobshchenie, kak opisano vyshe. V etom sluchae na prinimayushchem uzle imeyut mesto sleduyushchie sobytiya:

  1. Setevoj drajver pomeshchaet postupivshie po seti dannye v sootvetstvuyushchij bufer virtual'nogo kanala.
  2. Setevoj drajver informiruet Menedzher seti o tom, chto priem zavershen.
  3. Menedzher seti ispol'zuet chastnyj vyzov YAdra, izveshchaya ego o tom, chto priem zavershen.
  4. Mikroyadro kopiruet dannye iz bufera virtual'nogo kanala v bufer processa (pri uslovii, chto on RECEIVE- ili REPLY-blokirovan na etom virtual'nom kanale).

Lyubye upravlyayushchie pakety, kotorye poluchaet Menedzher seti, nemedlenno perepravlyayutsya Menedzheru processov cherez standartnyj primitiv Send(). |ti upravlyayushchie pakety ispol'zuyutsya dlya rasprostraneniya signalov i sozdaniya virtual'nyh kanalov.

Setevye drajvery

Podobno Menedzheru fajlovoj sistemy i Menedzheru ustrojstv, Menedzher seti ne soderzhit apparatno-zavisimogo koda. |ta funkcional'nost' obespechivaetsya drajverami setevyh plat. Menedzher seti mozhet podderzhivat' odnovremenno neskol'ko setevyh drajverov. Kazhdyj drajver obychno obsluzhivaet odnu setevuyu platu. Vy mozhete imet' drajvery/platy odnogo i togo zhe tipa ili razlichnyh tipov - naprimer, dva drajvera/platy Ethernet ili, dopustim, drajver/platu Ethernet i drajver/platu Arcnet.

Interfejs mezhdu Menedzherom seti i drajverami realizovan cherez ocheredi v razdelyaemoj pamyati. |tot interfejs razrabotan takim obrazom, chtoby dostich' maksimal'no vozmozhnoj proizvoditel'nosti. Drajver opredelyaet protokol, podhodyashchij dlya dannogo setevogo nositelya.

Drajver otvechaet za formirovanie paketov, organizaciyu posledovatel'nosti i v sluchae, kogda trebuetsya garantirovannaya dostavka dannyh udalennomu uzlu, povtornuyu peredachu. Takaya arhitektura pozvolyaet QNX legko podderzhivat' novoe setevoe oborudovanie i protokoly za schet napisaniya ili modifikacii tol'ko setevogo drajvera.

Identifikatory uzla i seti

Kazhdyj uzel v lokal'noj seti identificiruetsya dvumya chislami:

Fizicheskij ID uzla

Fizicheskij ID uzla opredelyaetsya oborudovaniem. Setevye platy obmenivayutsya dannymi drug s drugom, ukazyvaya fizicheskij ID udalennogo uzla, s kotorym dolzhna byt' ustanovlena svyaz'. V sluchae seti Ethernet ili Token Ring - eto bol'shoe chislo, kotorym neudobno operirovat' lyudyam i utilitam. Naprimer, kazhdaya plata Ethernet ili Token Ring imeet unikal'nyj 48-bitnyj fizicheskij ID uzla v sootvetstvii so standartom IEEE 802. Platy Arcnet, naprotiv, imeyut vsego lish' 8-bitnyj ID.

Ispol'zovanie fizicheskogo ID uzla imeet sushchestvennyj nedostatok: pri soedinenii nekotoryh setej mozhet vozniknut' konflikt adresov (osobenno v sluchae Arcnet), ili format adresov mozhet radikal'no otlichat'sya.

Logicheskij ID uzla

CHtoby obojti nazvannye vyshe problemy, voznikayushchie pri ispol'zovanii fizicheskih ID uzlov, kazhdomu uzlu QNX prisvaivaetsya logicheskij ID uzla. Vse processy QNX operiruyut logicheskimi ID uzlov. Fizicheskie ID uzlov skryty ot processov, vypolnyayushchihsya v QNX.

Ispol'zovanie logicheskih ID uzlov uproshchaet licenzirovanie. Takzhe oni pozvolyayut utilitam, kotorye oprashivayut set', ispol'zovat' prostoj cikl, v kotorom logicheskij ID uzla izmenyaetsya ot 1 do kolichestva uzlov.

Sootvetstvie mezhdu logicheskimi i fizicheskimi ID uzlov ustanavlivaetsya Menedzherom seti. Menedzher seti, kogda poruchaet drajveru peredat' dannye na drugoj uzel, peredaet emu fizicheskij ID etogo uzla.

Logicheskie ID uzlov obychno prisvaivayutsya po poryadku, nachinaya s 1. Naprimer, uzel, imeyushchij platu Ethernet, mozhet poluchit' logicheskij ID 2, kotoryj budet sootvetstvovat' fizicheskomu ID uzla 00:00:c0:46:93:30.

Logicheskie ID uzlov dolzhny byt' unikal'ny dlya vseh uzlov vo vseh soedinennyh QNX-setyah, chtoby sdelat' vozmozhnym funkcionirovanie mostov.

Logicheskij ID seti

ID seti identificiruet konkretnuyu logicheskuyu set'. Logicheskaya set' - eto lyuboe oborudovanie, kotoroe pozvolyaet setevomu drajveru neposredstvenno vzaimodejstvovat' s setevym drajverom na drugom uzle. |to mozhet byt' kak prosto posledovatel'nyj port, tak i slozhnaya set' Ethernet s apparatnymi mostami.

Na sleduyushchej diagramme uzel 7 imeet dve setevye platy, kotorye pozvolyayut emu imet' dostup k uzlam v logicheskih setyah 1 i 2. Uzly 8 i 9 imeyut po tri platy, podklyuchayushchie ih k setyam 1, 2 i 3.

Zamet'te, chto vse logicheskie ID uzlov unikal'ny dlya vseh treh logicheskih uzlov.


Note: Logicheskie ID uzlov seti naznachayutsya sistemnym administratorom. Bolee podrobno sm. v glave "Ustanovka seti" v knige Rukovodstve pol'zovatelya.


fig: i/multinet.gif


Neskol'ko fizicheskih setej sosushchestvuyut posredstvom logicheskih setej.


Vybor seti

V sluchae, kogda uzly soedineny bolee chem odnoj logicheskoj set'yu, Menedzher seti mozhet vybirat', kakuyu iz setej ispol'zovat' dlya peredachi k udalennomu uzlu. Naprimer, na privedennom vyshe risunke uzel 7 mozhet peredavat' dannomu uzlu 8, ispol'zuya libo set' 1, libo set' 2.

Raspredelenie nagruzki

Propusknaya sposobnost' seti opredelyaetsya sovokupnost'yu skorosti komp'yutera i skorosti seti. Esli komp'yuter mozhet vydavat' dannye bystree, chem set' mozhet ih peredavat', to set' budet ogranichivat' propusknuyu sposobnost'.

Naprimer, dva komp'yutera Pentium, soedinennye set'yu 10BASE-T Ethernet, budut ogranicheny 1.1 millionom bajt v sekundu, to est' skorost'yu peredachi dannyh, obespechivaemoj setevym oborudovaniem. Odnako esli pomestit' po dve platy Ethernet v kazhdyj iz komp'yuterov i soedinit' ih otdel'nymi kabelyami, to Menedzher seti smozhet peredavat' dannye po obeim setyam odnovremenno. Pri bol'shoj nagruzke eto obespechit uvelichenie propusknoj sposobnosti v dva raza po sravneniyu s odnoj set'yu.

Menedzher seti budet pytat'sya sbalansirovat' nagruzku, vybiraya setevoj drajver. V rassmotrennom vyshe primere, esli proizvoditsya peredacha s uzla 7 na uzel 8 po seti 1 i drugaya peredacha na uzel 8 iniciiruetsya na uzle 7, to set' 2 budet avtomaticheski vybrana dlya peredachi dannyh.

Otkazoustojchivost'

Kogda uzly soedineny dvumya i bolee setyami, to sushchestvuet bol'she chem odin vozmozhnyj put' dlya svyazi. V sluchae otkaza platy v odnoj iz setej, kogda svyaz' po etoj seti nevozmozhna, Menedzher seti avtomaticheski perenapravit vse dannye cherez druguyu set'. |to proishodit na letu bez kakogo-libo vmeshatel'stva so storony prikladnyh programm i obespechivaet prozrachnuyu otkazoustojchivost' seti. Esli kabeli razlichnyh setej prolozheny razdel'no, to vy takzhe budete zashchishcheny ot sluchajnogo obryva kabelya.

Vy takzhe mozhete proektirovat' sistemy-"tandemy", v kotoryh dve mashiny soedineny vysokoskorostnoj set'yu dlya normal'noj raboty i drugoj, bolee deshevoj i medlennoj set'yu (naprimer, po posledovatel'nomu kanalu), kotoraya sluzhit rezervom. V sluchae otkaza pervoj seti soedinenie ne oborvetsya, hotya propusknaya sposobnost', konechno zhe, snizitsya.

Mosty mezhdu setyami QNX

Menedzher seti pozvolyaet lyubomu uzlu igrat' rol' mosta mezhdu dvumya otdel'nymi setyami QNX, baziruyushchimisya na standarte IEEE 802.


Note: Tak kak QNX ispol'zuet odinakovyj format paketov i protokol na vseh IEEE 802 setyah, mozhno sozdavat' mosty mezhdu setyami Ethernet, Token Ring i FDDI.

Dlya setej Arcnet nel'zya sozdavat' mosty.


Rassmotrim sleduyushchuyu diagrammu, gde odnoj seti prinadlezhat uzly 17 i 18, a drugoj - uzly 18 i 19:


fig: i/relay.gif


Most mezhdu dvumya IEEE 802 QNX setyami.


Uzly 17 i 18 nahodyatsya v odnoj seti, poetomu oni mogut obshchat'sya drug s drugom napryamuyu. To zhe spravedlivo dlya uzlov 18 i 19. No kak mogut obshchat'sya uzly 17 i 19?

Tak kak obe lokal'nye seti baziruyutsya na IEEE 802, uzel 18 avtomaticheski perenapravlyaet pakety, pozvolyaya uzlam 17 i 18 sozdat' virtual'nyj kanal. Hotya oni i ne podklyucheny k odnoj i toj zhe lokal'noj seti, uzly 17 i 19, tem ne menee, mogut obshchat'sya drug s drugom.

Set' TCP/IP

Prisushchaya QNX podderzhka seti realizuet lokal'nuyu set' na osnove sobstvennogo chastnogo protokola i optimizirovana dlya organizacii interfejsa mezhdu QNX komp'yuterami. No dlya svyazi s ne-QNX sistemami, QNX ispol'zuet stavshij promyshlennym standartom nabor protokolov, nazyvaemyj TCP/IP.

Po mere togo kak Internet stal zanimat' vse bol'shee mesto v nashej povsemestnoj zhizni, protokol, na kotorom on osnovan - IP (Internet Protocol) - priobretaet vse bol'shee znachenie. Dazhe esli vy ne podklyuchaetes' neposredstvenno k Internet kak k takovomu, IP protokol i svyazannyj s nim instrumentarij poistine vezdesushchi, delaya IP standartom "de-fakto" dlya mnogih chastnyh setej.

IP ispol'zuetsya vezde, nachinaya ot prostyh zadach (naprimer, udalennyj vhod v sistemu (login)) i do bolee slozhnyh (naprimer, otslezhivanie birzhevyh kotirovok v real'nom vremeni). Vse bol'she i bol'she kompanij ispol'zuyut World Wide Web ("vsemirnuyu pautinu"), osnovannuyu na IP, dlya perepiski s klientami, reklamy i drugoj delovoj aktivnosti.

Menedzher TCP/IP

Menedzher TCP/IP v QNX proishodit iz Berkley BSD 4.3, kotoryj yavlyaetsya naibolee rasprostranennym stekom TCP/IP v Internet i ispol'zovan kak osnova dlya mnogih sistem.

Soket API

Biblioteka BSD soketa API byla ochevidnym vyborom dlya QNX 4. Soket API yavlyaetsya standartnym API dlya programmirovaniya TCP/IP v srede Unix. V srede Windows, Winsock API baziruetsya na BSD sokete API. |to oblegchaet perehod mezhdu nimi.

Imeyutsya vse procedury, kotorye mogut ponadobit'sya prikladnym programmistam:

accept()
bind()
bindresvport()
connect()
dn_comp()
dn_expand()
endprotoent()
endservent()
gethostbyaddr()
gethostbyname()
getpeername()
getprotobyname()
getprotobynumber()
getprotoent()
getservbyname()
getservent()
getsockname()
getsockopt()
herror()
hstrerror()
htonl()
htons()
h_errlist()
h_errno()
h_nerr()
inet_addr()
inet_aton()
inet_lnaof()
inet_makeaddr()
inet_netof()
inet_network()
inet_ntoa()
ioctl()
listen()
ntohl()
ntohs()
recv()
recvfrom()
res_init()
res_mkquery()
res_query()
res_querydomain()
res_search()
res_send()
select()
send()
sendto()
setprotoent()
setservent()
setsockopt()
shutdown()
socket()

Rasprostranennye utility i demony iz Internet mogut byt' legko pereneseny ili prosto perekompilirovany v takoj srede. |to oblegchaet ispol'zovanie imeyushchihsya gotovyh narabotok.

Vozmozhnost' vzaimodejstviya setej

Pri razrabotke Menedzhera TCP/IP v QNX v pervuyu ochered' prinimalas' vo vnimanie vozmozhnost' vzaimodejstviya setej. Uchityvalis' kak trebovaniya RFC, tak i real'nye usloviya. Menedzher TCP/IP ohvatyvaet vsyu funkcional'nost', predlagaemuyu RFC 1122. Takzhe podderzhivayutsya protokoly ARP, IP, ICMP, UDP i TCP.

NFS

Network File System (NFS) yavlyaetsya prilozheniem TCP/IP, realizovannym na bol'shinstve DOS i Unix sistem. NFS pozvolyaet otobrazhat' udalennye fajlovye sistemy - ili ih chasti - v lokal'noe prostranstve imen. Fajly na udalennoj sisteme pokazyvayutsya kak chast' lokal'noj fajlovoj sistemy QNX.


Note: V QNX 4 dlya podderzhki NFS trebuetsya menedzher Socket. Uchtite, chto "oblegchennaya" versiya menedzhera, Socklet, mozhet byt' ispol'zovana, esli net neobhodimosti v NFS.

SMB

Server Message Block (SMB), kotoryj ispol'zuetsya mnogimi razlichnymi serverami, takimi kak Windows NT, Windows 95, Windows for Workgroups, LAN Manager i Samba. SMBfsys pozvolyaet klientu QNX prozrachnyj dostup k udalennym diskam na takih serverah.

Okonnaya sistema Photon microGUI

|ta glava ohvatyvaet sleduyushchie temy:

Graficheskoe mikroyadro

Mnogie vstroennye sistemy nuzhdayutsya v pol'zovatel'skom interfejse. Dlya slozhnyh prilozhenij ili dlya maksimal'noj prostoty ispol'zovaniya, estestvennym vyborom yavlyaetsya graficheskaya okonnaya sistema. Odnako okonnye sistemy nastol'nyh PK trebuyut slishkom mnogo sistemnyh resursov dlya prakticheskogo primeneniya vo vstroennyh sistemah, gde pamyat' i stoimost' ogranicheny.

Pri sozdanii okonnoj sistemy Photon microGUI byla primenena arhitektura mikroyadra, uspeshno voploshchennaya v QNX dlya sozdaniya POSIX OS dlya vstroennyh sistem.

Dlya uspeshnoj realizacii OS na osnove mikroyadra v pervuyu ochered' bylo neobhodimo dobit'sya maksimal'noj effektivnosti IPC (tak kak ot IPC zavisit proizvoditel'nost' vsej OS). Blagodarya voploshchennomu v QNX mehanizmu IPC s nizkimi izderzhkami, stalo vozmozhnym sozdanie struktury GUI kak graficheskogo "mikroyadra", okruzhennogo komandoj vzaimodejstvuyushchih processov, obshchayushchihsya cherez IPC.

Hotya na pervyj vzglyad eto mozhet pokazat'sya pohozhim na postroenie graficheskoj sistemy po klassicheskoj sheme klient/server, ispol'zuemoj v X Window System, arhitektura Photon otlichaetsya za schet ogranicheniya funkcional'nosti, realizuemoj vnutri samogo graficheskogo mikroyadra (ili servera), i raspredeleniya bol'shej chasti funkcij GUI mezhdu vzaimodejstvuyushchimi processami.

Mikroyadro Photon vypolnyaetsya kak malen'kij process (razmer koda 45K), realizuya tol'ko neskol'ko fundamental'nyh primitivov, kotorye vneshnie opcional'nye processy ispol'zuyut dlya postroeniya bolee vysokogo urovnya funkcional'nosti okonnoj sistemy. Po ironii, dlya samogo mikroyadra Photon "okna" ne sushchestvuyut. Mikroyadro Photon ne mozhet takzhe "risovat'" chto-libo ili upravlyat' mysh'yu libo klaviaturoj.

Dlya upravleniya sredoj GUI, Photon sozdaet 3-mernoe "prostranstvo sobytij" i ogranichivaetsya tol'ko operirovaniem regionami i vypolneniem otsecheniya i napravleniya razlichnyh sobytij po mere ih prohozhdeniya skvoz' regiony v etom prostranstve sobytij.

|ta abstrakciya napominaet koncepciyu mikroyadra OS, kotoroe ne podderzhivaet funkcii vvoda/vyvoda dlya ustrojstv ili fajlovoj sistemy, a polagaetsya na vneshnie processy, predostavlyayushchie eti uslugi vysokogo urovnya. |to obespechivaet masshtabiruemost' OS i GUI, postroennyh na osnove mikroyadra, po razmeru i funkcional'nosti .

V osnove "abstrakcii" mikroyadra Photon lezhit voobrazhaemoe graficheskoe prostranstvo sobytij, v kotoroe drugie processy mogut pomeshchat' regiony. Ispol'zuya QNX IPC dlya svyazi s mikroyadrom Photon, eti processy upravlyayut svoimi regionami dlya predostavleniya graficheskih servisnyh funkcij vysokogo urovnya ili dlya vypolneniya funkcij pol'zovatel'skih prilozhenij. Dlya sistem s ogranichennymi resursami Photon mozhet masshtabirovat'sya "vniz" za schet udaleniya processov, predostavlyayushchih servisnye funkcii, a za schet dobavleniya processov, predostavlyayushchih servisnye funkcii, Photon mozhet masshtabirovat'sya "vverh" do polnofunkcional'noj nastol'noj sistemy.

Prostranstvo sobytij Photon

"Prostranstvo sobytij" mozhno predstavit' kak pustoe trehmernoe prostranstvo s "kornevym regionom" na zadnem plane. Pol'zovateli kak budto "smotryat vnutr'" etogo prostranstva sobytij. Prilozheniya pomeshchayut regiony v trehmernoe prostranstvo mezhdu kornevym regionom i pol'zovatelem; oni ispol'zuyut eti regiony dlya generacii i priema razlichnyh tipov sobytij v etom prostranstve.

Processy, kotorye vypolnyayushchie obsluzhivanie drajverov ustrojstv, pomeshchayut regiony na perednij plan prostranstva sobytij. V dopolnenie k upravleniyu prostranstvom sobytij i kornevym regionom, mikroyadro Photon podderzhivaet ekrannyj ukazatel' (kursor), proeciruemyj kak sobytiya risovaniya po napravleniyu k pol'zovatelyu.


fig: i/regions.gif


Photon ispol'zuet posledovatel'nost' regionov, nachinaya ot kornevogo regiona na zadnem plane prostranstva sobytij do graficheskogo regiona speredi. Sobytiya risovaniya dvigayutsya ot regionov prilozhenij k graficheskomu regionu. Sobytiya vvoda voznikayut v regione kursora/klaviatury i dvigayutsya po napravleniyu k kornevomu regionu.


Dvigayushchiesya v prostranstve sobytij sobytiya mozhno predstavit' sebe kak "fotony" (chto i dalo nazvanie okonnoj sisteme). Sami sobytiya sostoyat iz nabora pryamougol'nyh oblastej i prikreplennyh k nim dannyh. Po mere dvizheniya sobytij v prostranstve sobytij ih pryamougol'niki peresekayut regiony, prinadlezhashchie razlichnym processam (prilozheniyam).

Pro sobytiya, kotorye dvigayutsya ot kornevogo regiona, govoryat, chto oni peremeshchayutsya naruzhu (po napravleniyu k pol'zovatelyu), v to vremya kak pro sobytiya ot pol'zovatelya govoryat, chto oni dvigayutsya vnutr', po napravleniyu k kornevomu regionu.

Vzaimodejstvie mezhdu sobytiyami i regionami lezhit v osnove vvoda i vyvoda v Photon. Sobytiya myshi, klaviatury i svetovogo pera dvigayutsya ot pol'zovatelya k kornevomu regionu, s "prikreplennym" k nim polozheniem kursora. Sobytiya risovaniya voznikayut v regionah i dvigayutsya po napravleniyu k regionu ustrojstva i pol'zovatelyu.

Regiony

Kazhdomu regionu sootvetstvuet pryamougol'naya oblast', opredelyayushchaya ego polozhenie v 3-mernom prostranstve sobytij. Region takzhe imeet atributy, opredelyayushchie, kak on vzaimodejstvuet s razlichnymi klassami sobytij pri peresechenii imi regiona. Vzaimodejstvie regiona s sobytiyami opredelyaetsya dvumya bitovymi maskami:

Maska chuvstvitel'nosti opredelyaet, dolzhen li process-vladelec regiona opoveshchat'sya o peresechenii regiona tem ili inym sobytiem. Kazhdyj bit maski chuvstvitel'nosti opredelyaet, chuvstvitelen li region k opredelennomu tipu sobytij. Kogda sobytie peresekaet region, dlya kotorogo ustanovlen bit (raven 1), kopiya etogo sobytiya pomeshchaetsya v ochered' processa-vladel'ca regiona, izveshchaya prilozhenie o prohozhdenii sobytiya cherez region. Takoe izveshchenie nikak ne izmenyaet samo sobytie.

Maska neprozrachnosti opredelyaet prozrachnost' regiona dlya teh ili inyh sobytij. Kazhdyj bit etoj maski opredelyaet, yavlyaetsya li region prozrachnym dlya opredelennogo tipa sobytiya. Pri prohozhdenii sobytiya skvoz' "neprozrachnyj" region, ono modificiruetsya.

|ti dve bitovye maski mogut byt' sovmestno ispol'zovany dlya dostizheniya razlichnyh rezul'tatov. Vozmozhny sleduyushchie chetyre sochetaniya dlya regiona:
Sochetanie bitovyh masok: Opisanie:
Nechuvstvitel'nyj, prozrachnyj. Pri prohozhdenii sobytiya cherez region, ono ne modificiruetsya, i vladelec regiona ne izveshchaetsya. Process-vladelec regiona prosto ne interesuetsya sobytiem.
Nechuvstvitel'nyj, neprozrachnyj. Pri prohozhdenii sobytiya cherez region, ono otsekaetsya; vladelec regiona ne izveshchaetsya. Bol'shinstvo prilozhenij ispol'zuyut takuyu kombinaciyu atributov dlya otsecheniya sobytij risovaniya, chtoby izbezhat' pererisovki okna sobytiyami risovaniya, ishodyashchimi ot lezhashchih pod nim okon.
CHuvstvitel'nyj, prozrachnyj. Kopiya sobytiya napravlyaetsya vladel'cu regiona; sobytie prodolzhit dvizhenie v prostranstve sobytij, ne izmenyayas'. Process, zhelayushchij registrirovat' prohozhdenie vseh sobytij, mozhet ispol'zovat' takuyu kombinaciyu.
CHuvstvitel'nyj, neprozrachnyj. Kopiya sobytiya napravlyaetsya vladel'cu regiona; sobytie otsekaetsya regionom. Ustanoviv takuyu kombinaciyu masok, sobytie mozhet igrat' rol' fil'tra ili preobrazovatelya. Prilozhenie mozhet obrabotat' lyuboe poluchennoe sobytie, regenerirovat' ego i pri neobhodimosti preobrazovat' ego kakim-libo obrazom pri etom, vozmozhno, izmeniv napravlenie dvizheniya ili koordinaty. Naprimer, region mozhet pogloshchat' sobytiya svetovogo pera, vypolnyat' raspoznavanie pocherka, a zatem generirovat' ekvivalentnye sobytiya nazhatiya klavish.

Sobytiya

Podobno regionam, sobytiya mogut otnosit'sya k razlichnym klassam i imet' razlichnye atributy, kak, naprimer:

V otlichie ot bol'shinstva okonnyh sistem, Photon klassificiruet ne tol'ko vvod (pero, mysh', klaviatura t.d.), no i vyvod (zaprosy risovaniya) kak sobytiya. Sobytiya mogut generirovat'sya kak regionami, kotorye processy pomestili v prostranstvo sobytij, tak i samim mikroyadrom Photon. Opredeleny sleduyushchie tipy sobytij:

Prilozheniya mogut libo zhdat' nastupleniya sobytij, i pri etom blokirovat'sya, libo poluchat' asinhronnye izveshcheniya o prihode sobytiya.

Spisok pryamougol'nikov, prikreplennyj k sobytiyu, mozhet opredelyat' odnu ili bolee pryamougol'nyh oblastej, libo "ishodnuyu tochku" - edinstvennyj pryamougol'nik, u kotorogo koordinaty verhnego levogo i nizhnego pravogo uglov sovpadayut.

Pri peresechenii sobytiem neprozrachnogo regiona, pryamougol'nik regiona "vyrezaetsya" iz spiska pryamougol'nikov sobytiya tak, chto spisok opisyvaet teper' tol'ko vidimuyu chast' sobytiya.

Luchshe vsego illyustriruet takoe otsechenie to, kak izmenyaetsya spisok pryamougol'nikov sobytiya risovaniya po mere ego prohozhdeniya skvoz' razlichnye regiony. Kogda sobytie risovaniya generiruetsya, spisok pryamougol'nikov soderzhit edinstvennyj pryamougol'nik, opisyvayushchij porodivshij sobytie region.

Esli sobytie prohodit cherez region, kotoryj otsekaet, naprimer, verhnij levyj ugol sobytiya risovaniya, to spisok pryamougol'nikov modificiruetsya i budet soderzhat' uzhe dva pryamougol'nika, kotorye opredelyayut oblast', podlezhashchuyu otrisovke. |ti rezul'tiruyushchie pryamougol'niki nazyvayutsya "plitki" (tiles).

Podobnym obrazom, kazhdyj raz pri peresechenii sobytiem risovaniya neprozrachnogo regiona, spisok pryamougol'nikov budet modificirovat'sya takim obrazom, chtoby opisyvat' oblast', ostavshuyusya vidimoj posle "vyrezaniya" neprozrachnogo regiona. Kogda, nakonec, sobytie risovaniya dostignet graficheskogo drajvera, to spisok pryamougol'nikov budet tochno opisyvat' tol'ko ego vidimuyu chast'.


fig: i/clipping.gif


Neprozrachnye dlya sobytiya risovaniya regiony vyrezayutsya, v rezul'tate chego poluchaetsya oblast', sostoyashchaya iz pryamougol'nyh "plitok".


V tom sluchae, esli sobytie risovaniya celikom otsekaetsya pri peresechenii s regionom, ono prekrashchaet sushchestvovanie. |tot mehanizm "neprozrachnyh" okon, izmenyayushchih spisok pryamougol'nikov sobytiya risovaniya, obespechivaet pravil'noe otsechenie sobytij risovaniya po mere ih prodvizheniya ot ishodnogo regiona (i svyazannogo s nim processa) k pol'zovatelyu.

Graficheskie drajvery

Graficheskie drajvery realizovany kak processy, kotorye pomeshchayut region na perednem plane prostranstva sobytij. Region graficheskogo drajvera chuvstvitelen k sobytiyam risovaniya, ishodyashchim iz prostranstva sobytij. Graficheskij drajver poluchaet sobytiya risovaniya, kogda oni peresekayut ego region. Mozhno predstavit' sebe, chto region pokryt "fosforom", kotoryj svetitsya pri popadanii "fotonov".

Tak kak API risovaniya Photon nakaplivaet zaprosy risovaniya v pakety, posylaemye kak odno sobytie risovaniya, to kazhdoe sobytie risovaniya, poluchaemoe drajverom, soderzhit spisok graficheskih primitivov, podlezhashchih otrisovke. K momentu peresecheniya sobytiem risovaniya regiona drajvera, spisok pryamougol'nikov budet soderzhat' takzhe "spisok otsechenij", opisyvayushchij, kakie imenno chasti spiska risovaniya dolzhny otobrazhat'sya na displee. Rabota drajvera zaklyuchaetsya v tom, chtoby preobrazovat' rezul'tiruyushchij spisok v vizual'noe otobrazhenie na kontroliruemom graficheskom oborudovanii.

Odno iz preimushchestv ispol'zovaniya spiska pryamougol'nikov vnutri sobytiya sostoit v tom, chto kazhdoe peredavaemoe drajveru sobytie predstavlyaet soboj fakticheski "paket" zaprosov. Po mere sovershenstvovaniya graficheskogo oborudovaniya, vse bol'she i bol'she takoj "paketnoj" raboty mozhet peredavat'sya neposredstvenno oborudovaniyu. Mnogie videoadaptery uzhe podderzhivayut apparatno odnu oblast' otsecheniya, a nekotorye podderzhivayut i neskol'ko oblastej.

Hotya ispol'zovanie mehanizma QNX IPC dlya peredachi zaprosov risovaniya ot prilozhenij k graficheskomu drajveru i mozhet pokazat'sya nepriemlemoj izbytochnost'yu, testy proizvoditel'nosti pokazyvayut, chto proizvoditel'nost' v dannom variante ne huzhe, chem v sluchae, kogda prilozheniya vypolnyayut pryamye vyzovy drajvera. Odnoj iz prichin yavlyaetsya to, chto pri ispol'zovanii sobytij mnogochislennye zaprosy risovaniya gruppiruyutsya, chto umen'shaet kolichestvo posylaemyh soobshchenij po sravneniyu s kolichestvom pryamyh vyzovov drajvera.

Neskol'ko graficheskih drajverov

Iz togo, chto graficheskij drajver prosto pomeshchaet region v prostranstvo sobytij Photon, estestvenno sleduet, chto odnovremenno mogut byt' zapushcheny neskol'ko graficheskih drajverov dlya neskol'kih videoadapterov, pri etom kazhdyj drajver budet imet' svoj, chuvstvitel'nyj k sobytiyam risovaniya, region.

|ti regiony mogut byt' raspolozheny ryadom, libo perekryvat' drug druga proizvol'nym obrazom. Tak kak Photon nasleduet ot QNX setevuyu prozrachnost', to prilozheniya ili drajvery Photon mogut vypolnyat'sya na lyubom uzle seti, pozvolyaya, takim obrazom, dopolnitel'nym graficheskim drajveram rasshiryat' graficheskoe prostranstvo Photon za schet fizicheskih displeev drugih komp'yuterov v seti. Za schet perekrytiya regionov graficheskih drajverov, sobytiya risovaniya mogut dublirovat'sya na neskol'kih ekranah.

Mnogie interesnye prilozheniya stali vozmozhny blagodarya etim svojstvam Photon. Naprimer, na zavode operator s portativnym komp'yuterom, imeyushchim besprovodnoe podklyuchenie k seti, mozhet podojti k rabochej stancii i "peretashchit'" panel' upravleniya s ee monitora na ekran portativnogo komp'yutera, a zatem perejti v ceh i osushchestvlyat' upravlenie.

V drugih prilozheniyah vstroennaya sistema bez pol'zovatel'skogo interfejsa mozhet proecirovat' displej na lyuboj iz uzlov seti. Krome togo, stanovitsya vozmozhnym kollektivnyj rezhim raboty - neskol'ko chelovek, nahodyas' za svoimi komp'yuterami, mogut odnovremenno videt' odni i te zhe okna i rabotat' s odnim i tem zhe prilozheniem.

S tochki zreniya prilozheniya, eto vyglyadit kak odno edinoe graficheskoe prostranstvo. S tochki zreniya pol'zovatelya, eto vyglyadit kak gruppa soedinennyh komp'yuterov, gde mozhno peretaskivat' okna s odnogo fizicheskogo ekrana na drugoj.

Cvetovaya model'

Dlya predstavleniya cvetov ispol'zuetsya 24-bitnaya RGB model' (po 8 bit dlya krasnogo, zelenogo i sinego), chto obespechivaet 16,777,216 cvetov. V zavisimosti ot ispol'zuemogo tipa oborudovaniya, drajver libo neposredstvenno otobrazhaet 24-bitnyj cvet, libo ispol'zuet razlichnye varianty smeshivaniya cvetov, chtoby otobrazit' trebuemyj cvet na oborudovanii, podderzhivayushchem men'shee chislo cvetov.

Tak kak graficheskie drajvery ispol'zuyut apparatno-nezavisimoe predstavlenie cvetov, to prilozheniya mogut rabotat' bez izmeneniya na razlichnom oborudovanii, nezavisimo ot togo, kakuyu cvetovuyu model' ono podderzhivaet. |to pozvolyaet "peretaskivat'" prilozheniya s odnogo monitora na drugoj, ne zadumyvayas' o tom, kakaya cvetovaya model' apparatno realizovana v kazhdom konkretnom sluchae.

Masshtabiruemye shrifty

V dopolnenie k podderzhke rastrovyh shriftov, Photon takzhe predlagaet masshtabiruemye shrifty. |ti shrifty mogut masshtabirovat'sya prakticheski s lyubym razmerom tochki i ispol'zovat' tehnologiyu sglazhivaniya (16 ottenkov) dlya chetkogo i yasnogo otobrazheniya na ekrane s lyubym razresheniem.

Masshtabiruemye shrifty v Photon podderzhivayutsya bystrodejstvuyushchim serverom shriftov, kotoryj zagruzhaet opisaniya shriftov, hranyashchiesya v szhatom vide v fajlah *.pfr (Portable Font Resource, resursy perenosimyh shriftov), i zatem privodit vid simvolov v sootvetstvie s lyubym razmerom tochki i razresheniem. Stoit otmetit', chto format PFR obespechivaet bolee chem v dva raza luchshee szhatie po sravneniyu s PostScript shriftami.

Nabory shriftov

Osnovnoj latinskij nabor

Osnovnoj latinskij (Core Latin) nabor shriftov Photon (latin1.pfr), kotoryj ohvatyvaet dva nabora simvolov standarta Unicode, Basic Latin (U+0000 - U+007F) i Latin-1 Supplement (U+0080 - U+00FF), vklyuchaet sleduyushchie masshtabiruemye shrifty:

Rasshirennyj latinskij nabor

Rasshirennyj latinskij (Extended Latin) nabor (latinx.pfr) ohvatyvaet nabory simvolov Unicode Latin Extended-A (U+0100 - U+017F) i Latin Extended-B (U+0180 - U+0217) i vklyuchaet sleduyushchie shrifty:

Podderzhivaemye yazyki

Imeya v svoem rasporyazhenii Osnovnoj latinskij nabor (latin1.pfr), razrabotchik mozhet podderzhivat' mnozhestvo yazykov, vklyuchaya:

Datskij;
Gollandskij;
Anglijskij;
Finskij;
Flamandskij;
Francuzskij;
Nemeckij;
Gavajskij;
Islandskij;
Indonezijskij;
Irlandskij;
Ital'yanskij;
Norvezhskij;
Portugal'skij;
Ispanskij;
Suahili;
SHvedskij.

Rasshirennyj nabor (latinx.pfr) pozvolyaet dopolnitel'no podderzhivat':

Afrikanskij;
Baskskij;
Katalonskij;
Horvatskij;
CHeshskij;
|speranto;
|stonskij;
Grenlandskij;
Vengerskij;
Latyshskij;
Litovskij;
Mal'tijskij;
Pol'skij;
Rumynskij;
Slovackij;
Tureckij;
Vallijskij.

Dopolnitel'nye yazykovye pakety

Dlya Photon predlagayutsya neskol'ko dopolnitel'nyh paketov dlya podderzhki nacional'nyh yazykov:

Mnogoyazychnaya podderzhka Unicode

Photon razrabotan s uchetom podderzhki nacional'nyh simvolov. Sleduya standartu Unicode (ISO/IEC 10646), Photon predostavlyaet razrabotchikam vozmozhnost' sozdavat' prilozheniya, podderzhivayushchie osnovnye mirovye yazyki.

Unicode osnovyvaetsya na nabore simvolov ASCII, no ispol'zuet 16-bitnuyu kodirovku dlya polnoj podderzhki mnogoyazychnogo teksta. Net nikakoj neobhodimosti pribegat' k escape-posledovatel'nostyam ili upravlyayushchim kodam dlya zadaniya lyubogo simvola lyubogo yazyka. Zamet'te, chto kodirovka Unicode obrabatyvaet vse simvoly - alfavitnye, ideogrammy, special'nye simvoly - absolyutno odinakovym obrazom.

UTF-8 kodirovka

Izvestnaya ran'she kak UTF-2, UTF-8 (ot "8-bitnaya forma") kodirovka opredelyaet ispol'zovanie simvolov Unicode v 8-bitnoj srede UNIX.

Vot nekotorye osnovnye harakteristiki UTF-8:

Sistemnaya biblioteka vklyuchaet ryad funkcij preobrazovaniya:
Funkciya:Opisanie:
mblen()Dlina mnogobajtnoj stroki v simvolah
mbtowc()Preobrazovat' mnogobajtnyj simvol v dvuhbajtnyj simvol
mbstowcs()Preobrazovat' mnogobajtnuyu stroku v dvuhbajtnuyu stroku
wctomb()Preobrazovat' dvuhbajtnyj simvol v ego mnogobajtnoe predstavlenie
wcstombs()Preobrazovat' stroku dvuhbajtnyh simvolov v mnogobajtnuyu stroku

V dopolnenie k perechislennym vyshe funkciyam, razrabotchiki mogut takzhe vospol'zovat'sya sobstvennoj bibliotekoj Photon, funkciyami PxTranslate, kotorye vypolnyat razlichnye preobrazovaniya naborov simvolov v/iz UTF-8.

Podderzhka animacii

Photon obespechivaet nemercayushchuyu animaciyu cherez special'nyj vidzhet-kontejner s "dvojnym buferom" (PtDBContainer), kotoryj sozdaet special'nyj kontekst v pamyati dlya otrisovki izobrazhenij.

Vidzhet PtDBContainer ispol'zuet blok razdelyaemoj pamyati, dostatochnyj dlya hraneniya izobrazheniya sootvetstvuyushchego razmera.

Podderzhka pechati

Photon predusmatriv