SISTEMSKI UPORABNIŠKI VMESNIK ZA 8-BITNI UNIX ZDRUŽLJIV OPERACIJSKI SISTEM INFORMATICA1/88 UDK 681.3.06 Marjan Bradeško Ljubo Pipan Ivan Pepelnjak Nikolaj Zimic Fakulteta za elektrotehniko, Ljubljana Izvleček Članek opisuje izboljšavo 8-bitnega operacijskega sistema do te mere, da ga uporabnik z vidika sintakse vidi kot operacijski sistem Unix. Navedene so nekatere splošne značilnosti novega sistema, natančneje pa je opisan visokonivojski sistemski vmes­ nik, ki je v veliko pomoč uporabniku pri pisanju sistemskih uslužnostnih programov. S tem ima uporabnik sam možnost širiti nabor ukazov, ki predstavljajo vez med njim in operacijskim sistemom. Z že obstoječimi programi in zunanjim videzom predstav­ lja opisani operacijski sistem korak naprej pri prehajanju na bistveno zmogljivejše in bolj fleksibilne sisteme kot je CP/M, na osnovi katerega sloni nadgradnja, opisana v pričujočem članku. Abstract The paper presents the improvements of an 8-bat operating system to Unix - compatible environment as seen through user- level command line interface. We are describing some general features of the new operating system along with high - level svstem interface, which help the system programmers in writing new system utilities. With this aid, the end user can write his own utility programs, which represent the llnk between end-user and operating system environment. Existing programs can run under simulated CP/M environment, so this operating system represents a significant link between existing 8 bit operating systems and new UNIX - based systems. 1. UVOD Doba 8-bitnih mikroračunalniških sistemov počasi mineva, hkrati z njimi pa se umikajo tudi operacijski sistemi, napisani zanje. Raz­ voj gre v smeri 16- in 32-bitnih sistemov. Temu ustrezno se prilagajajo tudi operacijski sis­ temi. Uporabnik, ki bi rad na hitro prešel iz 8- bitnih na novejše sisteme, se znajde pred teža­ vo. Aplikacijska programska oprema je vsa napi­ sana na kožo njegovemu 8-bitnemu operacijskemu sistemu in običajno ni enostavno prenosljiva na nove sisteme. S tem problemom in z eno od uspešnih razrešitev le-tega se bomo ukvarjali v pričujočem članku. Pri našem delu smo izhajali ir 8-bitnega mikroračunalnlškega sistema z operacijskim sis­ temom CP/M. Sisteme smo povezali v lokalno mrežo z enim glavnim računalnikom s trdim dis­ kom kapacitete 20 M. Glavni računalnik skrbi Izključno za nadzor mreže, v katero je lahko povezanih do 16 postaj z dvema gibkima diskoma, ki imata vsak kapaciteto po 800 K. Prenos po mreži poteka po koaksialnem kablu (hitrost 1 Mbit), tako da je dostop iz katerekoli postaje do trdega diska glavnega računalnika hitrejši kot dostop na lokalni gibki disk postaje. S tem smo bistveno izboljšali perforraanse samega mikroračunalnika. S spremembo operacijskega sistema pa smo dobili sistem, ki navzven daje povsem drugačen videz od 8-bitnlh sistemov. Uporabnik ga namreč z vidika sintakse vidi kot operacijski sistem UNIX, ki pa je že domena 16- in 32-bitnih sistemov. Pri vsem tem je v ozadju še vedno CP/M, tako da uporabnikova aplika­ cijska oprema ne potrebuje nobenih sprememb, hkrati pa je sistem zaradi povezave v mrežo in Unix-ove sintakse bistveno bolj fleksibilen. Operacijski sistem na glavnem računalniku je povsem nov, na postajah pa je le modificiran CP/M. Pred BDOS Je namreč dodan modul, ki ugo­ tovi, če je neka sistemska funkcija rešljiva v okviru postaje, ali pa je potrebna Intervencija glavnega računalnika. V tem primeru postaja pošlje zahtevo po servisiranju NDOS (Network DOS) funkcije v mrežo. Operacijski sistem na glavnem računalniku je večuporabniški in večposlovni, servisiranje zahtev je rešeno s čakalnimi vrstami. Tudi podatkovne strukture na trdem disku so drugačne od CP/M struktur. Spremenjen je FCB (File Control Block) in zaradi drevesne strukture direktorijev tudi directory entry. Direktoriji so namreč datoteke, katerih elementi so imena 41 datotek v direktoriju in kazalci na opise (des- kriptorje) teh datotek. Operacijski sistem CP/M dela z datotekami na fizičnih diskih A: oziroma B: (v primeru dveh pogonov), naš sistem pa za delo z datotekami uvaja logične diske. Če torej hočemo nek direktor!j brati oziroma kaj pisati po njemu, mu moramo najprej prirediti enega od logičnih diskov. Šele potem so nam dostopne datoteke, ki se na njem nahajajo. Logični diski so vsi 8 številkami 3-32 (diski C:, D:, itd). Poleg standardnih Unix-ovih poddlrektorijev /bin, /usr, /etc in /tmp imamo še dva poddirek- torija /Ica - 'local A:' - CP/M diskovni pogon A: /Icb - 'local B:' - CP/M diskovni pogon B: V same podrobnosti jedra operacijskega siste­ ma se tukaj ne bomo spuščali, ponovno poudarimo le to, da lahko poganjamo vso aplikacijsko programsko opremo, ki teče pod CP/M. Povejmo še, da za uspešno prehajanje med podatkovnimi strukturami CP/M postaje in glavnim računal­ nikom skrbita posebni proceduri Input Formattrer in , Output Handler operacijskega sistema na glavnem računalniku. Pri našem opisu bomo ostali na nivoju vmes­ nika med uporabnikom in sistemom, kajti prav tu Je najbolj fleksibilno mesto. Uporabnik ima namreč možnost širiti sistem s sistemskimi uslužnostnlmi programi, ki jih je zaradi ust­ reznih orodij, ki Jih ponuja nov sistem, zelo enostavno pisati. Podali bomo opis vmesnika, nekaterih sistemskih parametrov in na kratko naSteli in opisali doslej napisane sistemske uslužnostne programe. Uporabniški vmesnik Je napisan v visokoni- vojskem programskem jeziku Turbo Pascal kot knjižnica uporabnih procedur, ki Jo vključimo s stikalom ( $1 ime_knjižnice ) v naš program. Izraz program bo odslej krajši izraz za sistem­ ski uslužnostnl program. 2. OBDELAVA UKAZNE VRSTICE Interpreter ukazne vrstice (Command Line Interpreter) ni več sestavni del jedra opera­ cijskega sistema, pač pa omogoča povezavo upo­ rabnika s samim sistemom. V operacijskem sis­ temu CP/M se omenjeni Interpreter Imenuje CCP (Console Command Processor), pri Unixu pa je to Shell. Shell prebere ukazno vrstico, ugotovi, za kateri ukaz gre in nato kliče ustrezni prog­ ram, ki izvede ukaz v skladu s parametri v ostanku ukazne vrstice. Omeniti velja, da so tako kot pri CCP tudi v Shell nekateri ukazi že vgrajeni in jih ni potrebno zaganjati kot ukaz­ ne datoteke (podaljšek .COM). Vsaka ukazna vrstica vsebuje ime ukaza, zas­ tavice za morebitne opcije, argumente k zasta­ vici in ostale ukazne argumente. 2.1 Iniciallzacija Ob vstopu v nek program nimamo na voljo nobe­ nih podatkov o ukazni vrstici, natančneje o njenem ostanku (command tali). Začetek vsake ukazne vrstice je vedno ime ukaza - programa. Ta program mora potem, ko se zažene, dobiti vse informacije, potrebne za uspešno IzvrStev uka­ za. Vse informacije pripravi procedura INIT, ki jo pokličemo z: INIT (flags_with_arguments) kjer je flag8_with_arguments niz dolžine 20 znakov, v katerem navedemo zastavice (drugo poleg druge) za opcije, ki v tem ukazu zahte­ vajo tudi argument. Omenjena procedura zgradi množico zastavic (vključno z morebitnimi argu­ menti'), ki jih najde v ukazni vrstici, zgradi pa tudi seznam ostalih argumentov In Izvede primerjanje vzorcev (pattern matching), če je to potrebno - v primeru, da ukaz deluje nad več datotekami. Kot primer si poglejmo začetek programa tali, ki izpiše zadnjih n vrstic (znakov, blokov) datoteke ali pa preskoči prvih n vrstic (zna­ kov, blokov) datoteke in Jo nato izpiše do konca. Ukaz tali ima lahko štiri opcije (p, 1, b, c), od katerih tri zahtevajo argumente (1- število vrstic, b-število blokov in c-števllo znakov). b«gia Slika 2.1 Iniciallzacija branja opcij 2.2 Zastavice za opcije V različnih programih nastopajo najrazlič­ nejše opcije. Procedura INIT zgradi ustrezne strukture, ki Jih lahko pregledujemo z nekate­ rimi funkcijami in procedurami. Za testiranje prisotnosti neke opcije (zastavice za opcijo) je na voljo funkcija TEST_FLAG, ki vrne vred­ nost true, če je opcija v ukazni vrstici pri­ sotna, sicer pa false. Za testiranje vrednosti argumenta, ki ga neka opcija zahteva, pa Je na voljo funkcija FLAG_VALUE, ki vrne niz dolžine 40 znakov, če je argument prisoten in prazen niz, če argumenta ni (v primeru, da želimo argument pri opciji, ki ga sploh ne zahteva). Pokličemo ju z : TEST_FLAG (flag) in FLAG_VALUE (flag) kjer je flag ena od zastavic tipa char. primer si spet vzemimo del programa tali. Kot begin tt tS$Y nfi ('t>'} tlian Mb :» TLAO VAU/B tlu>i_Biočki> t' strTolat (in» ; «id., 'b') : Slika 2.2 Testiranje zastavic Gornji primer preveri, če je prisotna opcija b (število blokov) in v niz Nb vrne število blokov. 2.3 Argumenti V ukazni vrstici se poleg opcij in njihovih argumentov pojavljajo še razni drugi argtunentl kot so npr. poti, imena datotek, itd. Progra­ merju so dostopni preko spremenljivke ARGC, ki pove, koliko Je teh argumentov, in funkcije ARGV, ki jo pokličemo z : ARGV (ArgNo) Spremenljivka Arg_No Je celoštevllska in pomeni zaporedno številko argumenta v ukazni vrstici, ki ga vrne funkcija ARGV. Sem seveda štejejo tudi argumenti, ki jih generira proces primerjanja vzorcev, v primeru, da ukaz deluje nad več datotekami, ki jih podamo kot vzorec. Kadar so argumenti datoteke, dostikrat rabimo tudi funkcijo GET_PROT, ki nam vrne ustrezno zaščito datoteke (ki smo jo dobili s funkcijo ARGV) kot celo število. Ce gre za lokalni CP/M direktorlj, je zaščita -1, sicer pa velja nas­ lednja shema : 42 Za izločanje imena datoteke iz podane poti obstaja še druga funkcija, katere opis bo podan kasnej e. Slika 2.3 ZaSčita datoteke štirje biti (1 nibble) imajo pri tipu dato­ teke (Type) naslednji pomen) : bito - datoteka je/ni direktorij biti,2,3 - nepomembni Pomen bitov pri zaščiti datoteke (World, Group, User) pa je naslednji : bito Read navadno datoteko lahko beremo, ne moremo pa je izvajati kot program (onemogočen zagon podat­ kovne datoteke) biti Write navadno datoteko lahko 'spremin­ jamo; direktorij lahko spremin­ jamo (REN, DEL) bit2 Execute datoteko lahko izvajamo kot program,-v direktoriju lahko od­ piramo datoteke bit3 Delete datoteko lahko briSemo Uporabo zgoraj opisanih funkcij pokaže nas­ lednji del programa, ki izpiše vse argumente in pri tistih, ki so direktoriji, to posebej označi. Omeniti velja še, da funkcija Argv vrača celoten argument tudi v primeru, da je argument neka pot z vzorcem. Primer : tir Ard H» f-lt« ABGC M iMMln Slika 2.4 Branje zaščite datotek /usr/include/*.pas Argv po primerjanju vzorcev vrača argumente v obliki : /usr/include/fcl.pas /usr/include/tall.pas /usr/include/head.pas 3. DELO Z LOGIČNIMI DISKI Kot smo že večkrat omenili, moramo direktorije prirediti logičnim diskom, če hočemo delati z njimi oziroma z datotekami na njih. Zato je v knjižnici na voljo nekaj procedur oziroma funkcij, ki omogočajo omenjene akcije. Imena vseh procedur se prično z ASG (assign). ASG_FILE je inačica ukaza ASSIGN v programskem Jeziku Pascal. ASG_FILE priredi ime neki dato­ teki. Razlika med ASSIGN v Pascalu in ASG_Fiie Je v tem, da prvi zna delati le z imeni datotek v CP/M formatu, slednji pa z opisi celotne poti v drevesni strukturi. ASG_FILE kliče funkcijo ASG_PATH, ki je uporabna zato, ker kot rezultat vrne celo število, ki je številka logičnega diska, kateremu je omenjena funkcija priredila pot, ki smo jo podali kot argument. Ime dato­ teke iz opisa poti pa izloči funkcija ASG_PATH_EXTRACT, ki vrne celo število, ki povečano za ena pomeni položaj prvega znaka imena datoteke v opisu poti. Omenjene procedure oziroma funkcije kličemo z : ASG_FILE (f, path) ASG_PATH (path) ASG_PATH_EXTRACT (path) kjer je path niz dolžine 255, f pa neka datoteka, ki ji prirejamo ime. Omenjene funkcije pojasni spodnji primer. Program odpre za branje datoteko primer.pas na poddirektoriju /usr/include in izpiše njeno ime. Obenem iz­ piše, kateremu logičnemu disku Je priredil pot /usr/work. bapln path :• '{'usf/jtiioJLUiU/priJMr.p««' ; , »»»t (f) } '., - . , ,* (• AftO M*»JOn»»C!r (patkJ- ! - ' - Writ«l» T*toBl«»l aUH » ', Cht (»V ««)) : Slika 3.1 Prirejanje logičnega diska Program da kot rezultat naslednji izpis File = primer.pas V primeru, da smo na enem od CP/M diskov, pa Argv vrača argumente v standardni CP/M obliki disk:ime_datoteke. Običajno potrebujemo le CP/M format imena datoteke, zato obstaja funkcija ARGV_RAW, ki iz celotnega opisa poti izloči le ime. datoteke, ki Ji spredaj doda logični disk,- kateremu Je prirejen direktorij, na katerem se datoteka nahaja. Zgornji primer po uporabi funkcije ARGV_RAW nad vsemi argumenti izgleda takole : F:£cl.pas F:tail.pas Frhead.pas kjer je F: logični disk, kateremu je prirejen poddirektorij /usr/include. Logioal disk => F Uporabniku Je na voljo še ena pomembna funkcija, ki mu omogoča klicanja BDOS funkcij (CP/M BDOS in vseh dodatnih), ki delujejo nad datotekami. Funkcijo pokličemo z : FILE_BDOS (code, f) kjer je code številka BDOS funkcije, f pa datoteka, nad katero izvajamo omenjeno funk­ cijo. Funkcija FILE_BDOS tudi sama skrbi za obravnavo napak. Ostale BDOS funkcije kličemo preko- standardne procedure BDOS v Turbo Pas­ calu. S tem imamo pri pisanju uslužnostnih programov poleg viskonivojskega vmesnika na voljo tudi direktne klice funkcij na nižjem nivoj u. st. Im« l5T Malce ditector^ 193 Rcaov* dlrectorv 194 Asal(rn lotflcal dialc X9S Dtsaslgm disk 196 Dupllcftte Fcb 197 C«t protectlon 196 )l«(iil daseriptor 199 Wtit» deaorlptor 20Q Chano* tli« protaetiott 340 Srne *70t«« 241 S1t«t Oom «y«tY*te«t iii Baad •yst«in mcnor; 244 Sat Uaar Iti 43 Kratak opla odpra nov direktorlj ' odatrani dlraktorij dlraVtdri.jii priradl podani logični dlak (v extent polju KB-it) sprosti prlrajni dlak vma odprt tCB i:a dlraktorij, kataraam j« prirejen n«1c logični dlak t-^mogocanp branj« direktocija) v randooi racord polju PCB.>Ja '>rrna aaadto datotske preber« daakrtptor odprta datoteke v trenuten om OI0090C« vpi» oova v»eWo» v nekatera palj* deakrti^torja (apranaiab* datuiM> tadnjag« dbBega Ipd.) onogfoe« «praalaj«Bi« isaelt« datotek« oaiogoca x»pi* Tcatttn« vaeh dlakovjtlh 'vnevnlkov na dlak takljuct delo oparacljakega «iateM «peracijakt elsta« po«t«je •porod Mlv*ntm> vacvnslntka. da j« poetaJA koneala t deloa oaiogoca direktno branja ' nekaterih podatkovnih atruktur Klatena naatavi kodo uporabnika in grupe, ki Jim« odalej pripadamo Slika 3.2 Dodatne DOS funkcije Dodatne, tako imenovane DOS funkcije podajamo zato, da zaokrožimo celoto orodij, ki so' na voljo programerju pri pisanju sistemskih uslužnostnih programov. Za pravilno uporabo teh funkcij je potreben še dodaten opis nekaterih sistemskih struktur, ki pa jih tu rie bomo navajali. Omeniti velja, da so nekatere od gornjih funkcij dostopne samo priviligiranemu uporab­ niku sistema SuperUser, ki edini tudi lahko zakljufii delo operacijskega sistema. Z vsemi zgoraj naštetimi pripomočki smo napi­ sali množico uslužnostnih programov (okrog 45), ki so povsem podobni ukazom operacijskega sis- tisma Unix. Unix-ove ukaze si lahko vsak bralec pogleda v enem od mnogih priročnikov, ki zanj obstajajo. Povejmo še to, da zaradi specifične konfiguracije našega sistema ni bilo možno pri vsakem ukazu implementirati vseh opcij, ki so na voljo v Unix-ovi originalni verziji. Literatura : (1) Možnosti in nemožnosti mikroračunalnika DIALOG,Elektrotehniški vestnik. April 1987 (2) Peterson, Silbershatz, Operating system Concepts, Addison - Wesley 1983 (3) Comer, Operating System design, the XI^aJ Approach, Prentice - Hali 1984 (4) XENIX operating system, Microsoft corp., 1986 (5) IBM DOS 3.2 Technical Reference Manual, IBM Corp., 1985 (6) IBM DOS 2.0 Manual, IBM Corp. 1983 4. Zaključek Kaj smo z zgoraj opisano rešitvijo dosegli ? Predvsem preprosto, zmogljivo konfiguracijo lokalne mreže in ob majhnih stroških prehod na okolje zahtevnejših in bistveno zmogljivejših operacijskih sistemov z možnostjo preproste nadaljne širitve programske podpore samemu sistemu. Uporabnik, ki že ima mikroračunalnik, mora vanj vgraditi le ploščico, ki mu omogoča povezavo v mrežo in dokupiti nov operacijski sistem z vsemi orodji, ki mu omogočajo širitev. Konfiguracija je zelo primerna za manjše pi­ sarne ali obrate, na njej pa,teče vsa aplika­ cijska programska oprema, ki js bila doslej napisana za njegov stari operacijski sistem CP/M. Uporabnik bo ob uporabi take konfigura cije počasi prešel na nove, zmogljivejše sis­ teme in ko se bo nekoč znašel pred 32-bitnim strojem z novim operacijskim sistemom, ne bo imel posebnih težav s prehodom nanj.