Pipedija - tautosaka, gandai, kliedesiai ir jokios tiesos! Durniausia wiki enciklopedija durnapedija!


USCD p-System

Iš Pipedijos - durniausios enciklopedijos.
Jump to navigation Jump to search

USCD Pascal ir USCD p-System - tai toks Pascal kalbos variantas kartu su tos kalbos pagrindu sukurta virtualizacijos platforma ir ištisa OS, kadaise tapęs bene didžiausiu praktiniu proveržiu visokių programavimo kalbų kūrime. Padarytas buvo Kalifornijos San Diego universitete (USCD) nuo ko ir pavadinimas.

Reikalas toksai, kad po to, kai Niklaus Wirth sukūrė savo Pascal kalbą, labai greitai paaiškėjo, kad dėl didelio supaprastinimo ir kai kurių papildomų reikalavimų dėl išankstinio kintamųjų deklaravimo, labai lengva kurti gerus kompiliatorius šitai kalbai. Negana to, paaiškėjo, kad dar ir optimizuoti kodą čia irgi pakankamai lengva. Taigi, ta kalba užsiėmė daugelis programuotojų iš įvairių šalių, aukštyn kojomis apversdami pačią pirminę Wirth mintį, kad čia būsią primityvi mokomoji kalba - atvirkščiai, gavosi labai rimta universitetinių tyrimų kalba.

Ir štai USCD atsirado programuotojų, kurie betyrinėdami tą Pascal generuojamą kodą, atrado, kad jame yra daug pasikartojimų, kuriuos optimizuojant, galų gale kodas gaunasi iš gana saikingų, bet daugiausiai tipiškų kodo sekų, ir nesvarbu, kokiai procesorių architektūrai programuosi - visvien gausis savos pasikartojančios sekos. Tas sekas chebra daugiau mažiau identifikavo ir apie 1974 jų pagrindu pradėjo kurti naują procesorių architektūrą, kuri aparatiniame pavidale anuomet net neegzistavo - tai buvo 1977 išleista virtuali Pascal mašina. Tai mašinai sukompiliuotos Pascal programos būdavo daug efektyvesnės, o pati mašina buvo pakankamai paprasta, kad jos emuliatorius visai gerai galėdavo dirbti net ant visai silpnų procesorių.

USCD p-System susidėjo iš virtualių mašinų valdymo sistemos, pačių virtualių mašinų, jų viduje dirbančios USCD Pascal OS, o taip pat iš Pascal kompiliatoriaus, generuojančio pseudokodą, skirtą būtent vykdymui tų virtualių mašinų viduje. Konkrečiai 1980 metais jau buvo sistemos skirtos įvairiems [[PDP-11] variantams, įskaitant LSI-11, o taip pat Terak kompanijos darbo stotims, o taip pat ir įvairiems mikrokompiuteriams, turintiems Intel 8080, Zilog Z80, Motorola 6800 ir MOS Technology 6502 procesorius. Truputį vėliau pasirodė ir Western Digital kompanijos sukurti aparatiniai p-System procesoriai, ant kurių šita USCD p-System galėjo dirbti keleriopai greičiau. Tiesa, šitie procesoriai kažkodėl nepaėjo.

Tuo metu atsirado ir kitų programavimo kalbų realizacijos, kur kompiliatoriai duodavo kodą, skirtą USCD-Pascal virtualiai mašinai - pvz., Fortran. Iš tų kitų kalbų transliuotas kodas irgi visai neblogai dirbdavo.

Beje, kai 1981 metais IBM išleido savo IBM PC, tai USCD p-System buvo viena iš trijų tiems kompiuteriams siūlomų OS.


USCD p-System ir Java

Vienas iš didžiausių nuopelnų, kuriuos padarė USCD - tai padėjo pagrindą Java kalbos atsiradimui. Kai Sun Microsystems kūrė Java kalbą, tai visiškai be abejonių, pačią idėją pamatė USDC p-System - kad galima sukurti universalų interpretatorių, kuris visai greitai dirbtų ant bet kokių aparatinių platformų, kokias tik galima įsivaizduoti.

Tik tiek, kad Java kalbos kūrimas prasidėjo 1991, o pirma Java implementacija pasirodė 1995 metais - t.y., daug daug vėliau, o ir pati Java mašinos architektūra nuo pat pradžių buvo daug daug sudėtingesnė, orientuota į objektinį programavimą, numatant dar ir to kodo dekompiliaciją.

Skirtingai nuo USCD Pascal, Java kalba įprastais atvejais taip ir netapo kokia nors atskira OS (nors buvo bandymų). Įprastiniais atvejais Java lieka tik programavimo kalba, kuri sukasi ant kitų OS viršaus, pati savaime jokių OS funkcijų neatlikdama.


Vartotojo interfeisas

Kadangi, skirtingai nuo Basic kalbos, Pascal nėra eilutinio vykdymo kalba, tai niekm net mintis nekilo daryti dar vieną interpretatorių, kuris veiktų jau kaip vartotojo komandų interpretatorius. Taigi, čia buvo padarytas interfeisas su meniu, bet anuo metu niekas dar nebuvo susipratęs turėti drop-down tipo meniu, po kuriuos galima vaikščioti rodyklėmis. Taigi, čia visa OS buvo valdoma tiesiog meniu paminėtais raidžių mygtukais. Bet jau tada komandoms pritrūkdavo raidžių. Pvz., koks nors failų kopijavimas buvo daromas, ne paspaudus raidę C, o paspaudus raidę T, nes raidė C jau buvo panaudota komandai "Change".

Tiesa, turint omeny, kad tokios sistemos ėjo dar apie 1980 ir dar anksčiau, tai jau toksai valdymas buvo visai neblogas, nes daug kur būdavo dar gerokai prasčiau, nes reikdavo mokytis komandų kaip kokioje CP/M ar UNIX. O čia visgi buvo kažkokie primityvūs, bet visgi meniu interfeisai.


Pascal mašinos architektūra

Visa USCD Pascal mašina yra paremta steku ir turi 8 specializuotus registrus - t.y., akumuliatorius. Visas tų registrų sąrašas čia:

  • SP - steko rodyklė
  • IPC - interpretuojamos programos skaitliukas (skaičiuoja nuo segmento galo, atvirkščiai programos eigai)
  • SEG - procedrūrų žodyno segmento adreso rodyklė
  • JTAB - einamojo segmento rodyklė (rodo į atributų ir perėjimų lentelę)
  • KP - steko rodyklė, rodo nuo segmento viršaus į steko galą
  • MP - steko atžymos rodyklė (rodo į einamąjį įrašą), t.y., lokalsai
  • NP - nauja rodyklė - rodo nuo segmento viršaus į steko galą
  • BASE - rodo aktyvų steko įrašą iš paskutinės bazinio lygmens procedūros (0 lygmuo), t.y., globalsai

Visi operacijų kodai čia buvo pavienio baito ilgio, nors neretai su ilgomis didelių argumentų sekomis. T.y., nors pats operacijų kiekis buvo nedidelis, visas jų naudojimas buvo kaip pas tipiškiausias CISC mašinas.

Esminiu operacijų kodu, kuris sunkiau suprantamas, tačiau sudarantis pagrindą visam programavimui, čia buvo SLDC, kurio variantai sudarė išvis pusę iš visų kodų. Įprastas SLDC pakrauna tiesiog konstantą į steką. Bajeris čia buvo toksai, kad Pascal kalbą ir jos programas tyrinėję kompiuterastai atrado, kad dažniausiai pakraunamas į steką skaičius yra 0, ir kad tai išvis dažniausia iš visų Pascal generuoto kodo operacijų, todėl ėmė ir padarė atskirą komandą, kuri pakrautų į steką skaičių nulį. Opkodą jai padarė 00000000. Tada aptiko, kad antra pagal dažnį operacija yra pakrauti į steką 1, tai todėl jai opkodą padarė 00000001. Tada aptiko, kad trečia pagal dažnį operacija yra pakrauti į steką 2, tai padarė jai opkodą 00000010... Na, ir taip toliau, iki paskui jau dėl vientisos tvarkos padarė opkodus iki pat SDLC 127 su kodu 01111111. Likusi dalis opkodų jau buvo atiduoti kitoms komandoms.

Tos kitos komandos didžiąja dalimi buvo tiesiog aritmetinės ir loginės operacijos, kurios imdavo 1 ar 2 paskutinius steko skaičius, iš jų kažką suskaičiuodavo ir įkišdavo atgal į steką. Visos komandos neturėdavo argumentų, todėl jei reikdavo įkišti argumentą, pradžioje būdavo daromas pakrovimas, o tada jau operacija.

Galų gale nedidelis kiekis operacijų liko programos valdymui, kur buvo perėjimai. Skirtingai nuo įprastų komandų, perėjimai būdavo jau dviejų baitų ilgio, ir labai komplikuoti - jei argumente esantis skaičius pozityvus, tai tiesiog atitinkamu dydžiu padidinamas IPC skaitliukas, kas reiškia, kad JMP vyksta atbulai, o jei skaičius negatyvus, tada ieškoma jo adresų lentelėje pagal JTAB registrą. Ir dar atskirą rinkinį komandų sudarė šioks toks kiekis komandų, susijusių su tuo, kad Pascal turėjo gerą string tipo palaikymą - tai ten atsirado visokie serijiniai baitų kopijavimai ir panašiai.

Žodžiu, architektūra buvo labai lengvai emuliuojama visai neblogu greičiu, tačiau pirmityvi ir šūdina, daug primityvesnė, negu dauguma to meto procesorių. Bene blogiausias dalykas buvo tai, kad net nepaisant emuliacijos, buvo prisirišta vos prie 8 bitų ilgio adresų, kas reiškė, kad tipiška Pascal mašina dirba su operacinės atminties gabaliukais, kurių ilgis tėra 256 baitai.

Kitą vertus, nepaprastai geras sistemos portabilumas čia buvo nenuneigiamas - tokia primityvi virtuali mašina galėdavo būti paleista net ant visiškai silpnų procesorių, turinčių labai menką kiekį operacinės atminties.