Inferno OS: Devices & fileservers

18.02.2007 14:14 | blackhole

Toto je treti diel k serii ktora sa tu objavila
este v septembri:
http://blackhole.sk/node/980
http://blackhole.sk/node/985

Devices a fileservre

Zariadenia sa nachadzaju ako inak v adresari /dev. Reprezentuju devices tak ako
ako na inych unixoch s tym rozdielom ze neexistuju minor a major cisla. Ale
subory servuju v /dev rozne fileservre resp iba kernel s tym ze maju svoje
specificke pismeno (o tom potom) . Pozrime sa ako vyzera taky typicky /dev:

cons            hoststdout      notquiterandom  sysctl
consctl        jit            null            sysname
drivers        keyboard        pin            time
hostowner      kprint          pointer        user
hoststderr      memory          random
hoststdin      msec            scancode

Vsetky tieto subory su reprezentaciou logickeho alebo fyzickeho zariadenia
ktorym pocitac disponuje. Zariadenia sa do adresara /dev pridavaju cez prikaz
bind a mozu byt cez siet exportovane ako akekolvek ine subory (je to uplne
transparentne). Cize v praxi je dosledok ten ze si mozu bez problemov vzajomne
sahat na svoje zariadenia ktorymi disponuju. Samozrejme ak im to bezpecnost
a prava dovolia. Co je co v nasom typickom /dev:

console device (#c):

  • cons,consctl - zariadenie na konzolu, cons vzdy odkazuje na aktualnu konzolu
  • drivers - spis driverov ktore jadro obsahuje
  • jit - Just In Time compilation, 0 - vypnuta, 1 - zapnuta, urychluje beh aplikaci
  • keyboard,scancode - znaky alebo scancody z klavesnice
  • klog,kprint - spravy od jadra v podstate dmesg
  • memory - zaznamy o pameti
  • msec - milisekundovy timer
  • null - /dev/null
  • notquiterandom - pseudonahodny generator nahodnych cisel
  • pin - authentifikacia, pre nejake embedded zariadenia
  • pointer - ukazovatel, teda mys a ine zariadenia
  • random - pomalsi ale nahodnejsi random generator
  • sysctl - ovladanie systemu, tadial sa system restartuje, zastavuje a pod
  • sysname - meno systemu
  • time - cas od 1.1.1970 v sekundach
  • user - meno uzivatela, na hostovanych instalaciach je to login pod
    ktorym ste spustili emu

A teraz len skratkovite:
arch (#P) - pre nativny beh,nizkourovnove veci ako I/O,cputype,frekvencia a pod
audio (#A) - podpora len pre dve zvukovky, mozne pouzitie ako osciloskop (?)
cmd (#C) - spusta programy hostovskeho OS. vid os(1).
draw (#i) - zariadenie na kreslenie na obrazovku.wm/wm ho potrebuje
ds (#b) - nieco ako sw raid, rozne typy.pomozem si manualovou strankou:

; echo mirror m0 /dev/sdC0/data /dev/sdD0/data >/dev/ds/ctl
; echo mirror m1 /dev/sdC1/data /dev/sdD1/data >/dev/ds/ctl
; echo inter data /dev/ds/m0 /dev/ds/m1 >/dev/ds/ctl
; disk/kfs -f /dev/ds/data

Mame styri disky rozdelene na dva pary ktore sa budu mirrorovat, takto
novovzniknute zariadenia m0 a m1 interleavujeme, teda analogia raid-0. Cely
system sa ovlada cez zariadenie /dev/ds/ctl zapisom textovych prikazov. Len
pripominam ze ani jeden disk sa nemusi fyzicky nachadzat na stroji ktory
ten sw raid robi. Mozu byt roztrusene po celom svete alebo vedla seba. Pripadne
to vobec nemusia byt disky, staci len ze blokove zariadenia.Napriklad
raid-0 na n disketovych mechanikach ? :)

eia (#t) - seriove porty
env (#e) - enviroment procesu, mountuje sa do /env a je mozno cez neho
pristupovat k roznych premennym. napr: /env/emuargs a pod
ether (#l) - zariadenie na pristup k priamo k ethernetovej karte. Vdaka tomu
moze prebiehat sniffovanie aj takto:

; cat /net/ether0/0/data > /usr/inferno/sniff_net

A bude nam ukladat raw data do sniff_net. Mountuje sa do /net.

ip (#I) - ip stack, mountuje sa do /net
prog (#p) - analogia /proc, mountuje sa do /prog
sd (#S) - storage device, IDE a SCSI disky
vga (#v) - ovladac grafickej karty

A mnoho inych, pre kazde zariadenie existuje manualova stranka ktora opisuje
ako ho ovladat najcastejsie cez nejaky ctl subor. Toto bol len zaklad.
Zariadenia sa do systemu pridavaju nasledovne:

; bind -a '#S' /dev

Takze zariadenie sd zacne ponukat svoje subory v /dev. O tom aky parameter
dat bindu uz sa musite rozhodnut sami, najcastejsie to bude -a lebo nieco
niekam chcete pridat ale nemusi to tak byt vzdy.Meno zariadenia sa dava do
' ' pretoze shell by # vzal ako komentar.

Zopar prikladov "zo zivota":
Je potreba na dialku naformatovat disk ?

; disk/kfs -f /n/remote/dev/sdC0/kfs

A co tak poslat spravu na iny pocitac ?

; echo ides na kavu ? > /n/remote/dev/cons

Alebo ak by som niekoho v gride nemal rad tak...

; echo halt > /usr/evil_user/0/dev/sysctl

a dovi/dopo.
Podobnych ( a lepsich ) prikladov by som tu mohol uviest stovky a hadam by som
ich ani nevycerpal. Moznosti ako vyuzit tento system su hadam nekonecne.

Fileservre

Ulohou zariadeni bolo spristupnit zariadenie vo forme suborov ale uz neriesit
co je dnu. Hlavnou ulohou fileserverov je zobrat vstup a transformovat ho na
vystup ako Styx protokol. V zavislosti od fileserveru moze byt na vstupe
cokolvek.A kedze je na vystupe Styx protokol tak ho sme schopny namountovat
do nasho namespace pripadne exportovat cez siet.
Takze tak ako vsetko je subor tak tak je skoro kazda aplikacia aj
fileserver. Window manager v Plan9, Rio je fileserver. Editor,mail,irc,wiki
a "cokolvek dalsie program" Acme je fileserver a vela inych.Uvediem len
zopar najdolezitejsich.

dossrv - fileserver urceny na citanie FAT particii. Vsimnite si ze v Plan9/Inferno
sa drivre pre rozne filesystemy nachadzaju v userlande a nie v kerneli. Ako parameter
na prikazovu riadku mu treba uviest nejaku FAT jednotku napr. /dev/sdC0/dos

9660srv - umoznuje citat CD, umoznuje citat rock ridge extensions (unixacke rozsirenie)

tarfs - umoznuje namountovat tar archiv do namespace ale len read only. mozte k vnutru
taru pristupovat ako k suborom a adresarom

kfs - fileserver na citanie kfs particii. kfs je filesystem na ktorom bezali skorsie verzie
Plan9, teraz je to vsak uz fossil. Ma podporu prav a podoba sa na ext2.

ext2srv - (Plan9 only) cita ext2 particie

ndb/registry - registry server registruje vsetky resources ktorymi nody disponuju v gride

ftpfs - namountuje vzdialeny ftp server do adresarovej struktury resp. namespace

Samozrejme je ich viac, ale tieto su hadam najbeznejsie pouzivane. Ako vidite, fileserver
vobec nemusi riesit nejaky hw, particie a pod. Moze to byt ciste logicke zariadenie ako
registry server a pod. Obycajne tieto fileservre ponukaju Styx protokol na stdin/stdout takze
je mozne ich dat ako vstup inym programom.A aj sa to robi. Nazorna ukazka mountovania kfs
particie pod Infernom:

; mount -c {disk/kfs -ninferno /dev/sdC0/inferno} /n/remote

Kde mount namountuje I/O programu disk/kfs na /n/remote, pretoze tento program ma na std I/O Styx.
V dalsom priklade je znazorneny postup vyroby registry servera:

; mount -c {ndb/registry} /mnt/registry
; listen 'tcp!*!registry' export /mnt/registry

A mozno by uplne stacilo len toto:

; listen 'tcp!*!registry' {ndb/registry}

Program listen presmeruje std I/O aplikacie na nejaky port cim umozni ju exportovat po sieti.

Misc

Podarilo sa mi rozbehat Inferno nativne co vzhladom na skoro neexistujucu dokumentaciu nebola prave najlahsia uloha. Trvalo to asi tyzden hranim sa s konfiguraciou a zdrojovymi kodmi a pod.Nebezi tam este GUI ale na zakladne servery do gridu to uplne staci. Mam v plane upravit potom instalacku Plan9 a pridat tam aj moznost Inferno nainstalovat. Pretoze Inferno som nativne
rozbehal s hojnou podporou Plan9.

Dalsi diel bude o tom ako rozbehat Inferno v hostovskom a nativnom mode.

Zoznam doporucenej literatury:
http://www.vitanuova.com/inferno/docs.html

/appl/*.b
/os/pc/*.c
/doc/*.pdf

akekolvek pripomienky, otazky a kritiku smerujte bud na forum pod clankom alebo mne na mail ktory je
v92 na blackhole.sk (snad sa mi podari okaslat nejakych spam robotov ;) a to je hadam vsetko :)


P.S.: chcel by som o.i. podakovat aj touto formou bholovi a stanojrovi za pomoc vo forme
pocitaca na ktorom mozem pokracovat v tomto projekte pretoze doteraz som fical na 133mhz, 128MB ram :)Ide o celeron 1Ghz a 512MB ram,3 disky.
Takze diky chalani a vy ostatni si berte priklad!! :) pripadne im kupte pivo alebo oboje ;).

    • spominameee 20.02.2007 | 01:08
      Avatar blackhole   Návštevník

      Hmm, zeby sa joinem ako za starych cias.
      Jednu xen domenu obetujem na teba asik :)

    • z wikipedie:Applications 21.02.2007 | 13:00
      Avatar vid   Používateľ

      z wikipedie:
      Applications can be developed and run on all Inferno platforms without modification or recompilation

      to akoze tam je tam nejaky vlastny bytekod + parser alebo JIT compiler?

      • limbo 21.02.2007 | 21:41
        Avatar blackhole   Návštevník

        presne. jazyk sa vola limbo a programy sa kompiluju do bytecodu ktory sa nasledne interpretuje v Dis virtual machine. Cele inferno je vlastne starsi plan9 kernel na ktorom bezi len jeden proces a to Dis ktory spusta v tomto prostredi limbo programy.

        limbo jazyk je mix pascalu,C a javy s niektorymi zaujimavimi vlastnostami ako napr ze vsetky programy su moduly, neexistuje fork ale iba spawn (len threadovanie), ma podporu tzv. channels co je IPC komunikacia medzi procesmi zakomponovana priamo v jazyku. udajne rychlost vykonavania programu je 50-80% C verzie.