Arvuti struktuur ja põhikomponendid

Mis on arvuti? GCFLearnFree.org sait

fg

tu

pr

ml

Tüüpiline programmjuhtimisega seade (PJS): arvuti, nutitelefon, robot jm, sisaldab või kasutab enamasti järgmisi seadmeid:

  • protsessor(id): personaalarvutitel tavaliselt 1...4
  • sisemälu: muutmälu (RAM), püsimälu(ROM)
  • laienduskaardid: videokaart, helikart, võrgukaart ...
  • välismälu: kõvaketas, DVD, mälupulk, ...
  • sisend- / väljundseadmed: hiir, kuvar, klaviatuur, kõlarid, mikrofon jm
  • lokaalne ja globaalne (Internet) arvutivõrk

TPI (TTÜ) esimene arvuk Minsk-22, II põlvkond, pooljuhid
Seadmete liikide osas valitseb väga suur mitmekesisus ning tänapäeval rakenduse koostaja ei pruugigi alati teada, millise konkreetses arvutis tema rakendus hakkab töötama. See käib näiteks ka Scratch 2.0 kohta, kus rakenduste loomine ja täitmine võib toimuda nii kohalikus arvutis instaleeritud tarvara abil kui ka brauseri vahendusel nö "pilvedes" - Scratchi koduserveris. Scratch 2.0 rakendusi saab täita ka veebidokumentidesse salvestatud klippides. Alguses ei pea rakenduste koostaja, eriti Scratchi kasutamisel. väga täpselt teadma riistvaraga seotud tehnilisi küsimusi, kuid järkjärgult võiks üritada süvendada sellealaseid teadmisi.

Informatsiooni esitamise põhimõtted

Arvutites kasutatav informatsioon jaguneb kaheks omavahel tihedalt seotud põhiliigiks: andmed ja programmid. Arvatavasti lugeja teab, et informatsiooni salvestamine ja töötlemine toimub arvutites kahendsüsteemis, Informatsiooni esituse põhiüksuseks on bait, mis koosneb 8-st bittist. Bitt on minimaalne informatsiooniühik, sellel saab olla ainult kaks väärtust: 0 või 1. Edaspidise jaoks on kasulik omada ettekujutust informatsiooni esitamise põhimõtetetest arvutis.

Andmed

Andmed on informatsiooni esitus kujul, mis võimaldab seda säilitada, töödelda ja edastada programmjuhtimisega süsteemide (n arvutite) ja vastava tarkvara abil. Kasutatakse erinevat liiki andmeid ja neil võib olla erinev organisatsioon. Põhiliigid on:

  • märkandmed: arvud, tekstid, tõeväärtused
  • graafikaandmed: joonised, pildid, fotod
  • heliandmed: kõne, muusika, laulud

Märkandmed

Märkandmed: eeskätt arvud ja tekstid, esitatakse rahvusvaheliste standarditega reglamenteeritud koodeerimissüsteemide abil. Peamine kodeerimissüsteem on ASCII (American Standard Code for Information Interchange), viimasel ajal ka UNICODE. Arvude jaoks, milledega tehakse arvutusi, on spetsiaalsed kodeerimissüsteemid, mis võimaldavad esitada arve tunduvalt kompaktsemalt ja täita tehteid kiiremini, kui seda võimaldab ASCII. Need kodeerimissüsteemid teatud määral sõltuvad arvuti (protsessori) liigist ja operatsioonisüsteemist. Esialgu ei ole neid asju vaja eriti täpselt teada, kuid on kasulik teada et täisarvude ja reaalarvude salvestamisel kasutatakse erinevaid viise. Scratchis valib süsteem salvestusviisi ise, kuid mõnikord kaudselt tuleb sellega kokku puutuda (n. ümardamise probleemid). Esialgse visiooni tekitamiseks, on allpool toodud mõned näited.

koodid

Märkandmete esitamiseks ja töötlemisel programmides kasutatakse:
    skalaarandmeid (üksikväärtused): muutujaid ja konstandid ning
    andmekogumike: massiivid, loendid, tabelid, failid jm
Andmete käsitlemine on väga tihedalt seotud arvuti põhimälu struktuuriga ja töö korraldusega ning väärtuste esitamisega mälus.
Siin esialgu käsitletakse veidi lähemalt muutujaid, mis leiavad kasutamist praktiliselt kõikides programmides ning on aluseks ka andmekogumike loomiseks.

Muutujad

Muutuja on keskseks mõisteks kõikides programmeerimiskeeltes. Nende kasutamine sageli tekitab algajale programmeerijale teatud probleeme. Üheks põhjuseks on muutuja. matemaatikast tuleneva, liiga abstrakne käsitlemine. Programmeerimises on muutuja näol tegemist hoopis füüsikalise objektiga - mäluvälja ehk mälupesaga. Mäluvälju ehk muutujaid kasutatakse muutuvate suuruste salvestamiseks.

Muutuja on nimega varustatud koht arvuti mälus: mäluväli ehk pesa. Programm saab salvestada muutujatesse (mäluväljadesse) väärtusi ja kasutada neid hiljem näiteks uute väärtuste leidmiseks. Scratchis luuakse muutuja "käsitsi" käsuga Loo muutuja grupis Andmed. Väärtuse salvestamiseks muutujasse ehk omistamiseks kasutatakse Scratchis käsku:
omis. Avaldis leiab väärtuse, kasutades tavaliselt varem leitud väärtusi ja konstante. Saadud väärtus salvestatakse antud muutujas (muutujale eraldatud väljas). Algoritmides ja tekstipõhistes programmeerimiskeeltes esitatakse omistamiskäsk (lause) kujul: muutuja = avaldis, olemus on sama. Muutujat võib käsitleda eriliiki objektina, mille põhiomadusteks on: nimi, väärtus, välja pikkus.

Allpool on toodud skeem, mis näitab muutujate esitamise põhimõtted arvuti sisemälus.malu

Täpsemalt muutujate käsitlemist vt jaotises Muutujad,

Loendite kasutamist vt jaotises Loendid.

Graafikaandmed

Graafikaandmete loomiseks ja redigeerimiseks saab kasutada erinevaid programme. On olemas terve hulk spetsiaalseid graafika-, pilditöötluse- ja joonestusprogramme (näit Paint, Gimp, Photoshop, AutoCAD jt). Nende tulemused saab salvestada erinevate vormingutega failidesse. Graafikafailide jaoks kasutatakse, sõltuvalt vormingust, kindlaid tüübitunnuseid nagu PNG, JPEG, GIF, BMP, SVG, DWG jm. On kasulik teada ja arvestatada kahe erineva graafika esitusviisiga: rastergraafika ja vektorgraafika. Nende vahel saab valida näiteks ka Scratchi joonistamisredaktoris, pilide loomisel ja redigeerimisel.
Graafikaobjekte saab luua ja kasutada ka webi rakendustes. HTML 5 võimaldab näiteks luua SVG vormingus faile.

SVG graafika näited

TTÜ

Graafikaandmeid saab luua ka enamikus üldotstarbelistes rakendusprogrammides (Microsoft, Google, OpenOffise tekstitöötluse-, esitluse- ja tabeliprogrammides jm) või kasutada importimist nende lisamiseks vastavasse dokumenti.
Loodavates rakendustes saab graafikaandmeid importida olemasolevatest graafikafailidest kas rakenduse loomise või täitmise ajal. Graafikaobjektideks on näiteks ka Scratchi spraidid, kostüümid ja lava taustad. Vt jaotist Scratchi põhiobjektid,
Mitmed programmeerimissüsteemid võimaldavad luua graafilisi kujutisi ka vahetult täitmise ajal. Nende võimaluste olemasolu ja kasutamisviisid sõltuvad programmeerimissüsteemist. Scratchis näiteks saab joonistusi teha grupi Pliiats ja Liikumine käskudega. Vt. jaotist Joonistamine.

Graafikaandmeid saab kasutada ka animatsioonide loomiseks, Vt näiteks Scratchi rakendust. Käivitamiseks klahv A. NB! Kasutage turborežiimi: Shift+Roheline lipp.

 

Heliandmed

Heliandmed leiavad tänapäeval üha laiemat kasutamist infotehnoloogias. Seda eeskätt tänu mäluseamete mahu ning andmete ülekande kiiruse olulisele kasvusele. Ka Scratch 2.0 on olulist tähelepanu pööratud heliandmete kasutamisele. Rakenduste loojale on nende kasutamine oma projektides väga lihtne. Saab kasutada MP3 ja WAV faile. Neid saab importida vastava vorminguga failidest või lindistada ise.
Iga spraidil ja laval on vaheleht Helid (või Helindid), kus on juurdepääs heliobjektide haldurile, mille abil saab importida, lindistada ja redigeerida heliandmeid.

heli

Scratch 2.0-s on võrdlemisi efektiivsed ja paindlikud vahendid heli salvestamiseks ja redakteerimiseks (eeskätt kõne). Heliredaktor kuvab linndistatud heli "lainete" pildi. Saab kuulata lindistaud heli ja peatada seda vajalikus kohtades, kerida edasi ja tagasi. Nö tavaliste redigeerimise käskude (kopeeri, lõika, kleebi, eemalda jm) abil, saab muuta salvestatud heli. Saab muuta ka lindistatud heli vaiksemas ja tugevamaks.
Olemasoleva heliklipi saab käivitada skripti täiitmisel käsuga [mängi heli nimi] või [mängi heli nimi kuni valmis].

Näide "Krapsu sünnipäev"

Allpool esitatud klipis on toodud kõikide peamiste andmeliikide ja mõnede skriptide kasutamise näited. Ei tasu püüda saada kohe aru kõikidest detailidest. Hiljem võib pöörduda tagasi, käivitades ka toodud lingilt rakenduse Scratchi koduserveril. Siis saate tutvuda täpsemal rakenduse struktuuriga, teha ka programmis muudatusi ja täiendusi, veebi klipi kasutamisel skripte ei näe ja neid muuta ei saa. Kui Teil on instaleeritud oma arvutis Scratch 2.0, võite salvestada rakenduse oma arvutisse.

 

Rakenduses on kasutusel üks aktiivne sprait: Kraps, sellel on kaks kostüümi, mis kujutavad endast graafikaobjekte (pilte). Kasutusel on ka kaks, võiks öelda passiivset spraiti: skriptide pildid ja selgituste tekst. Rakenduse töötavad skriptid asuvad loomulikult skripide alas, siin kasutakse nende pilte illustratsiooniks ja selgituseks. Formaalselt on tegemist spraitidega, milledel on mitu kostüümi. Klõpsates spraiti, saab näha järgmist kostüümi (praegu järgmise skripti pilti).
Ega vist erilisi segitusi siin vaja ei ole, rakendus näitab ja räägib ise. Kuid alustuseks veidi siiski. Kõigepealt Kraps viikse käsuga [mine x..., y...] eteantud punkti, ta jääb skripti pildi varju. Seejärel käskudega [mängi heli...] mängitakse kaks heliklippi "tere" ja "birthday". Esimine on lindistatud heliklipp ja skript ootab seni kuni see täidetakse, teine on imporditud süsteemi heliteegist. Selle käsu korral ei oodata lõpetamist, vaid minnakse kohe edasi.
Korduskäsu [korda n] ja selle sisekäskudega pannakse Kraps liikuma ja imiteerima käimist. Muutuja n liuguriga saab muuta piiratud ulatuses liikumise kaugust.
Järgmise korduse käskudega imiteeritakse Krapsu hüppamist. Hüpete (korduste) arv (3 kuni 5) määratakse juhuarvude funktsiooniga. Hüpete kõrgust saab valida muutuja h liuguri abil.
Edasi käsk [teata Salto] paneb käima skripti, mis märab, et Kraps teeb pöörde 360 kraadi (30*12) ja ühtlasi joonistab ringi, mis hakkab olema sõõrina tema ümber. Joonistada saab iga sprait, liikudes ja kasutades pliiatsi käske.
Skriptist Salto käivitakse käsuga [teata Kes] skript, milles Kraps teatab infot sünnipäeva külaliste kohta. Siin demonstreeritakse heli ja loendie ehk massiivide kasutamist. Loendite kasutamist vt jaotises Loendid.

Programmid, rakendused ja algoritmid

Programm on suvalise rakenduse keskseks komponediks, See on käskude (korralduste, instruktsioonide, lausete) kogum, mis määrab, milliseid tegevusi peab arvuti täitma andmete ja objektidega antud ülesande lahendamiseks..
Programmide koostamiseks kasutatakse spetsiaalseid programmeerimiskeeli Igas keeles on piiratud valik käske ehk lauseid ning nende esitamiseks ja täitmiseks on kindlad reeglid. Programm võib koosneda mitmest üksusest. Erinevates keeltes kasutatakse nende jaoks erinevaid nimetusi: protseduur, funktsioon, skript. Üldiselt on paljud programmeerimiskeeled oma olemuselt võrdlemisi sarnased.
Tavaliselt rakenduse ja programmi koostamisele eelneb andmete määratlemine (suuremate rakenduste korral modelleerimine) ja algoritmide koostamine.
Algoritm on täpne ja ühemõtteline eeskiri ülesande lahendamiseks. Määrab, millised tegevused ning millises järjekorras on vaja täita objektide ja andmetega. Algoritm ei sõltu otseselt kasutatavast programmeerimiskeellest ja on üldisem ja vähem formaalsem võrreldes programmiga. Algoritmides, sõltuvalt ülesandest, kajastatakse järgmis: väärtuste salvestamine mällu ja lugemine mälust, väärtuste leidmine ja omistamine, objektide omaduste (asukoht, suurus, värvus jmt) muutmine, protsesside juhtimine: jäda, valik, kordus ja paralleelsed protsessid. Algoritmide esitamiseks kasutatakse:
     - UML'i tegevusskeeme või plokkskeeme ja
     - pseudokoodi ehk algoritmikeelt.
Toome näiteks lihtsa rakenduse "Korrutamise trenn". Programm kuvab järjest korrutamise ülesandeid. Kasutaja peab võimalikult kiiresti andma vastuseid. Programm kontrollib vastuste õigsust ning leiab õigete vastuste summa. Alguses küsitakse ülesannete arvu:
Andmed. Põhivariandis on ainult muutujad ja mõned konstandid (0, 1, 10)
     n - ülesannete arv,
     a ja b - juhuslikud arvud: ülesannete tegurid
     vastus - kasutaja vastus,
     punkte - õigete vastuste jooksev väärus ja lõppväärtus

Allpool on toodud algorim UML'i diagrammina ja pseudokoodis ning Scratchi skript. Scratchi skripte võib vaadelda kui ühte algoritmide esitusviisi

UMLruml

Pseudokood
prots Rehmaatika
loe n
punkte = 0
kordus n korda
  a = juhuarv (1, 10)
  b = juhuarv (1, 10)
  vastus = loe (a "*" b)
  kui vastus = a * b siis
    punkte = punkte + 1
  muidu
     kuva "Vale!"
lõpp kordus

kuva punkte
rehn:scr

Jürgnevalt on toodud programmid Visual Basicus (VBA) ja Google Apps Scriptis.

     
' Korrutamise trenn. Visual Basic (VBA)
Sub Korruta()
  Dim n, i, a, b, vastus, punkte  ' muutujad
  Randomize ' juhuarvude generaator
  n = InputBox("Mitu ülesannet?")
  punkte = 0
  For i = 1 To n
     a = Int(Rnd() * 10) + 1
     b = Int(Rnd() * 10) + 1    
     vastus=Int(InputBox(a & " * " & b))
      If vastus = a * b Then
          punkte = punkte + 1
      Else
          MsgBox "Vale!"
      End If
   Next i
  MsgBox "OK! Punkte " & punkte
End Sub

// Korrutamise trenn. Google Apps Script
function Korruta() {
  var n, a, b, vastus, punkte; // muutujad
  n = Browser.inputBox("Mitu ülennet?");
  punkte = 0;
  for (var i=1; i<=n; i++) { // korduse algus
    a = Math.round(10*Math.random()) + 1
    b = Math.round(10*Math.random()) + 1
    vastus = Browser.inputBox(a+" * "+b)
    if (vastus == a * b) // valik
      punkte += 1
    else
      Browser.msgBox ("Vale!")
  } // korduse lõpp
  Browser.msgBox ("OK!Punkte " + punkte)
}

 

Vaadake rakenduse täitmist. See on realiseeritud JavaScriptis (peaaegu sama nagu Apps Script), Rakendus kuvab ka ülesannete lahendamiseks kulunud aja

Allpool on toodud link, mis kuvab Scratchi rakenduse MIT serveris (pilvedes). See on veidi täiendatud. Kasutusel on kaks objekti: sprait Kraps, mis liigub ja esitab ülesandeid ja taimer, mis mõõdab aega.

Näita rakendust

Programmide töötlemine ja täitmine arvutis

Programmide põhitäitjaks on protsessor. Tänapäeva protsessorid saavad täita programme, mis on esitatud antud arvutitüübi jaoks ettenähtud masinkeeles. See koosneb kahendsüsteemis esitatud elementaarsetest käskudest. Programmide tõlkimiseks masinakeelde kasutatakse spetsiaalseid programme, mida nimetatakse translaatoriteks.
Masinakeel on setud konkreetse protsessori liigiga (Intel, AMD, IBM jm). Keel koosneb elementaarsetest käskudest: liitmine, lahutamine, korrutamine, võrdlemine, suunamine jm. Allpool on toodud võimalik masinakeele nn kolmeaadressiline käsk. Lihtsustatult käsk koosneb käsukoodist (n 110 - korrutanine) ja kolmwat aadressist, mis näitavad mäluvälju, kust võtta operandid ja kuhu salvestada tulemus.

kask
Taolisele masinakäsule vastab näiteks seline omistamislause c = a * b enamikus programmeerimiskeeltes või korkask Scratchis.

Translaator

Masinakeeles vist praegu juba keegi ei programmeeri. Kasutatakse erinevaid nn kõrgtaseme programmeerimiskeeli (C, C++, Java, JavaScript, Python, PHP, Scratch, Logo, jt). Kõikide programmeerimissüsteemide kõige tähtsam osa on spetsiaalne programm: translaator, mis tõlgib programmi lähtekeelest vastava arvuti protsessori masinakeelde. On kaks translaatori tüüpi:

  • kompilaator ja
  • interpretaator

Kompilaator tõlgib masinakeelde korraga terve masinakeelse programmi, mida saab kasutada ilma, et oleks enam vaja seda progammeerimisüsteemi ja translaatorit, millega programm loodi. Windows'is on näiteks tegemist nn EXE-failiga. Kompilaatori poolt loodud programmi töö on kiirem, kui interpreteeritava programmi töö.
Interpretaator tõlgib (interpreteerib) programmi masinakeelde osade kaupa. Kuidas ja kui palju korraga, sõltub keelest ja selle realisatsioonist, sageli on selleks lähteprogrammi käsk või skript. Programmi täitmiseks on alati vaja ka interpretaatorit ja programmi töö on aeglasem. Võrreldes interpretaatoriga, on programmi loomine lihtsam ja paindlikum.
Mõnikord translaator tõlgib lähteprogrammi kõgepealt nn vahekoodi ja juba sealt masinakoodi.

Virtuaalarvuti

Toodud lihtsustatud arvutimudel peegeldab üldised põhimõtted, mis on praktiliselt samad kõikides programmjuhtimisega süsteemides, kus kasutatakse mälus salvestatud andmeid ja programme. Tänapäeval on rakenduse looja ja kasutaja jaoks määravaks mitte riistvara, vaid vastav tarkvara: eeskätt programmeerimis- ehk arendussüsteem. See loob kasutaja jaoks, võiks öela, nö virtuaalarvuti, Enamiku interpreteerivate programmeerimissüsteemide (nagu näiteks Scratch, VBA, Python jm), peamisteks komponentideks on:

  • redaktor
  • interpretaator

Redaktor on vahendite kompleks, mille abil toimub rakenduse loomine ja redigeerimine ning silumine ja testimine.
Interpretaator korraldab rakenduste täitmist arvutis. Rakenduse looja seisukohast on just interpretasator see, mis täidab programme ja selle tööpõhimõtetega on kasulik olla veidi kursis. Interpretaator eraldab operatsioonisüsteemi vahendusel täitmisele kuuluvale programmile või selle üksusele (skriptile) tööpiirkonna sisemälus: programmiploki ja andmeploki. Nagu ütlevad nimetused: sisaldab esimene prokrammi üksusi (skripte, protseduure jmt), teine - andmeid. Interpretaatori juhtplokk loeb järjest programmiplokist programmi käske, teeb kindlaks, mida on vaja teha ning annab teistele komponentildele, eeskätt täiteplokile, korraldused vastavate tegevuste täitmiseks.
Toodud skeem ja järgnevad kirjeldused kajastavad eeskätt programmide täitmise põhimõtteid, mille tundmine ja teadvustamine on esmatähtis programmide loojale.

arvuk

Mõned näited

Järgnevates klipides, kasutades skriptide või algoritmide sammhaaval täitmist (visualiseerimist), püütakse illustreerida arvuti tööpõhimõtteid. Järjest näidatakse ja kommenteeritakse täidetavaid käske ja tulemusi: muutujate väärtused, kuvatav teade vm. Näidetes kasutatakse peamselt Scratchi, kuid sageli on näidetud algorim pseudokoodis. Tavaliselt on näidatud täidetav skript (asub tekstivormingus virtuaalarvuti programmiplokis) ning muutujate monitorid (muutujad asuvad andmeplokis).
Erilist tähelepanu võiks praegu pöörata käskude täitmise järjekorrale ning muutujate väärtuste muutumisele (muutujate monitoride sisule) vastavate käskude toimel.
Programmi (skripti) käske täidetakse üldiselt nö loomulikus järjekorras (nagu nad paiknevad programmis). Juhtimiskäskude abil muudetakse täitmise järjekorda: jäetakse käske vahele, korratakse jmt.

Näide „Korrutamine“

Igal käivitamisel programm (skript) genereerib kaks juhuarvu vahemikus 1 kuni 10 ja salvestab need muutujates a ja b, kuvab korrutamise ülesande, loeb kasutaja vastuse, kotrollib selle õigsust ning kuvab vastava teate teate Õige või Vale.
Pogrammis on kasutusel kolm muutujat:
   a ja b - globaalsed muutujad, neisse salvestatake genereeritud juhuarvud,
   vastus - sisemuutuja, kuhu salvestatakse kasutaja poolt sisestatav vastus.
Klipp võimaldab vaadelda ka algoritmi täitmist pseudokoodis

Esimesed kolm käsku (muutujatele a-ie ja b-le juhuvärtuste omistamine, kasutaja vastuse lugemine) täidetakse järjest. Viimases valikukäsus täidetav lause valtakse sõltuvalt kasutaja poolt antud vastusest.

Näide "Max kolmest"

Käivitamisel skript genereerib kolm juhusliku arvu ning demonstreerib suurema väärtuse leidmist võrdluse teel. Klõpsa linki

Näide "Max loendis"

Program loob loendi (vetori) n elemendist ning demonstreerib maksimaalse elemeni ja selle asukoha (järjenunbti) leidmist, Klõpsa linki.

Näide "Rehmaatika"

Programm esitab järjest mitu korrutamise ülesannet, kontrollib vastuseid ning annab punkte õigete vastute eest. Kasutusel on kordus ja valik. Selle ülesande jaoks on toodud algoritmid eespool.
Muutujad:
n - ülesannete arv, a ja b - genereeritavad juhuarvud, punkte - õigete vastuste arv, vastus - kasutaja vastus (sisemuutuja), paus - pausi pikkus kiiruse reguleerimiseks.

 

Näita rakendust.

Näide "Animatsioon: horisontaalne liikumine ja hüppamine"

Näide demonstreerib tegevuste määramist objektidega, muutujate kasutamist, pöördumist alamskripti poole jm.
Kraps alguses liigub vasakult paremale ia seejärel teeb antud arvu hüpet. Kasutusel on kaks skripti: Liigu ja Hüppa. Skriptide pilte (need on ühe spraidi kaks kostüümi) võib näha laval, Hiireklõps vahetab skripti pildi. Täitmise ajal vahetab neid programm.
Rakenduses kasutatakse üsna palju muutujaid:
n - korduste (sammude) arv liikumisel, h - sammu pikkus, paus - sammudevaheline paus,
nh - hüpete arv, hh - hüppe kõrgus, ph - paus hüpete vahel,
heli - heli tugevus (0 kuni 100%)
Ülaltoodud muutujate väärtusi saab teatud piirides muuta kasutaja
x0, y0 - Krapsu koordinaadid alguses, nende monitore laval ei ole, väärtused määrab programm
Laval on ka objekti Kraps omaduste x ja y monitorid, mis peegeldavad nende jooksvaid väärtusi. Objektide omadused (x, y, suund, suurus jm) on nende lokaalsed muutujad.

 

Näita rakendust