utorak, 30. rujna 2008.

Vrste računala


Glede snage ili moći računanja, računala se danas dijele uglavnom u tri skupine: osobna računala, radne stanice i velika računala.
Osobna računala (engl. personal computer)Ona skupina računala koja su dovoljno niske cijene da ih mnogi mogu nabaviti za kućnu uporabu, a često se rabe i za obradu poslovnih podataka.
Radne stanice (engl. workstations)Računala namijenjena opsežnijoj obradi podataka, a odlikuju se velikom brzinom obrade podataka, znatno većom radnom i ostalom memorijom od osobnih računala te odličnim mogućnostima grafičkog prikaza podataka.
Velika računala (engl. mainframe)Računala najveće snage od svih do sada spomenutih i rabe se kada ostale vrste računala ne mogu zadovoljiti potrebnu brzinu obrade podataka.
Glede prenosivosti mikroračunala se mogu podijeliti na stolna i na prijenosna.
Stolna računalaPredviđena su za smještaj na jednomu mjestu i nije predviđeno njihovo često prenošenje.
Prijenosna računalaPredviđena za prenošenje pa su malih dimenzija i lagana.
S obzirom na dimenzije prijenosna se računala mogu svrstati u ove skupine:
Računala približno veličine knjige (od većeg prema manjem): engl. laptop (engl. lap hrv. krilo, koljena), engl. notebook (engl. notebook hrv. bilježnica), engl. subnotebook.
Ručna računala (računala približno veličine kalkulatora): engl. hand-held (engl. hand hrv. ruka, engl. held hrv. držati), engl. palmtop (engl. palm hrv. dlan) i engl. PDA - personal digital assistant.

Sabirnice


U širem je smislu sabirnica (engl. bus) normirana veza za razmjenu podataka između dvaju ili više uređaja. Sabirnice su posebne skupine vodiča koji povezuju dijelove računala, a temeljna im je zadaća prijenos podataka. Sabirnice su redovito izvedene kao vodiči na površini tiskane pločice, a izvedene su i na priključnicama unutar računala da bi se mogli priključiti dodatni sklopovi.
Sabirnice se mogu podijeliti na unutarnje i vanjske. Danas se uglavnom rabi unutarnja PCI sabirnica (engl. PCI bus,peripheral component interconnect bus). Rasprostranjena vanjska sabirnica je USB (engl. universal serial bus).

Vrata


Paralelna vrata
Ulazno-izlazni sklop koji omogućuje razmjenu podataka između računala i okoline, pri čemu se istodobno razmjenjuje više bitova.U osobnim su računalima paralelna vrata građena tako da mogu odjednom razmjenjivati osam bitova (jedan bajt). Za svaki od tih bitova postoji poseban vodič spojen na priključnicu dostupnu korisniku, smještenu na stražnjoj strani računala. Paralelna vrata uglavnom se rabe za priključenje pisača pa se nazivaju još i vrata pisača (engl. printer port, parallel printer port).
Serijska vrata
Ulazno-izlazni sklop koji omogućuje razmjenu podataka između računala i okoline: istodobno se razmjenjuje jedan bit podataka. Mali broj potrebnih vodiča najveća je prednost serijskih vrata; nedostatak je relativno spor prijenos podataka jer se prenosi bit po bit. Svi vanjski uređaji, koji su daleko od računala ili ne traže brzi prijenos podataka, povezuju se putem serijskih vrata (npr. modem).

Ulazno-izlazni sklopovi


Ulazni sklopovi građeni su tako da omogućuju priključenje vanjskih uređaja s pomoću kojih je moguće podatke iz okoline predavati računalu. Podaci na taj način ulaze u računalo pa se takvi sklopovi nazivaju ulaznim sklopovima.
Izlazni sklopovi omogućuju priključenje vanjskih uređaja s pomoću kojih je moguće podatke iz računala predavati okolini. Podaci na taj način izlaze iz računala pa se takvi sklopovi nazivaju izlaznim sklopovima.
Najpoznatiji ulazno-izlazni sklopovi su paralelni i serijski ulazno-izlazni sklopovi (vrata).

Memorija


Memorija elektroničkog računala ima sposobnost pohrane stanovite količine podataka.
Radna memorija računala je memorija kojom se središnja jednica z a obradu koristi za neposrednu pohranu i dobavu podataka. Radnu memoriju računala s obzirom na postojanost podataka možemo podijeliti u dvije glavne skupine: memoriju RAM i ROM.
RAM (engl. random access memory) jest upisno-ispisna memorija. To je radna memorija računala u koju se mogu upisivati i iz nje čitati podaci onoliko puta koliko želimo. Jednom pohranjeni podaci u RAM ostaju nepromijenjeni sve dok ih računalo namjerno ne promijeni ili dok se ne prekine napajanje memorije električnom energijom.
ROM (engl. read only memory) ispisna je memorija, tj. memorija u koju je podatak moguće upisati samo jedanput. Podatke u ROM upisuje proizvođač računala i korisnik ih nikada ne mijenja. Sadržaj ROM-a je neovisan o napajanju računala.

Izvođenje naredbi unutar mikroprocesora

Pokušajmo slijediti na koji način mikroprocesor izvodi program. Program je skup naredbi nanizanih u određenom redoslijedu koje određuju što ce mikroprocesor činiti. Te naredbe su pohranjene u memoriji koja se nalazi izvan samog mikroprocesora (obično u RAM memoriji).
Dobava naredbe
Prvi korak izvođenja naredbe je dobava naredbe. Nazvat ćemo taj korak: dobavi (engl. fetch).
Vanjska memorija ima podatke pohranjene na određenim lokacijama ili mjestima. Svaka lokacija ima svoju adresu, pa je stoga potrebno znati adresu nekog podatka ili naredbe želi li se dobaviti u mikroprocesor. To je dužnost programskog brojila. Programsko brojilo u svakom trenu mora „znati“ adresu naredbe ili podatka koji se želi dobaviti i mora "pokazivati" upravo adresu tog podatka.
Neka u našem primjeru to bude adresa 2103. Za vrijeme dok programski brojilo pokazuje na adresu 2103 mikroprocesor (MPU) daje naredbu: čitaj memoriju. Ta naredba će omogućiti da podatak s adrese 2103 (označen kao xxxx) uđe u mikroprocesor ili točnije u njegov spremnik naredbe (IR).
Time je obavljena prva zadaća, a to je dobava naredbe iz vanjskog svijeta u mikroprocesor. Naredba se sada nalazi u mikroprocesoru i sve je spremno je za drugi korak.
Upamtimo da je korak DOBAVI uvijek prvi korak pri izvođenju naredbe. Jasno je i zbog čega. Sve vrijeme dok se naredba ne nalazi unutar mikroprocesora, ona mu je nepoznata, pa i ne zna kakav postupak treba obaviti. Obratimo pozornost i na programsko brojilo (PC), koje određuje redoslijed izvođenja naredbi. Jednom dobavljena naredba i pohranjena u spremniku, mora biti odgonetnuta ili dekodirana. To je drugi korak pri izvođenju programa.
Odgonetavanje naredbe
Naredba je u spremniku naredbe pohranjena kao niz logičkih nula i jedinica. U drugom koraku potrebno je odgonetnuti značenje tih nula i jedinica i potaknuti odgovarajuće sklopove na izvršenje. Naredba se odgonetava u sklopu koji se zove dekoder. Ovisno o kombinaciji i jedinica koje su ušle u dekoder, aktivirat ce se jedna od izlaznih komandnih linija, označenih na slici brojevima. Svaka od tako odgonetnutih ili dekodiranih naredbi potaknut će odgovarajući sklop na izvršenje (primjerice, naredba ZBROJI). Na kraju ostalo je još da se naredba izvrši. To je treći korak kojeg nazivamo: izvršenje naredbe.

Izvršenje naredbe
Ovim korakom će se odgonetnuta naredba izvršiti. Tipičan primjer je zbrajanje dva broja, spremanje sadržaja pojedine memorijske lokacije u akumulator itd. Pojednostavljeno se može reći da će dekoder uključiti jednu od svojih izlaznih linija ovisno o kombinaciji nula i jedinca koje su u njega došle (tj. ovisno o naredbi).
Vremensko vođenje (generator takta, engl. clock)
Kao što se moglo do sada uočiti, pojedine operacije su se obavljale u vremenskom slijedu, tj. jedna iza druge. Da bi mikroprocesor mogao obavljati naredbe vremenski jednu iza druge, potreban mu je takt (engl. clock), tj. slijed vremenski promjenjivih veličina. Budući da se mikroprocesor napaja istosmjernim naponom, a taj je napon nepromjenjiv, mora postojati dodatni izvor izmjeničnog signala. Kao izvor izmjeničnog signala koristi se kod mikroprocesora kvarcni oscilator. Kvarcni oscilator se rabi kako bi se osigurala stabilnost frekvencije, te nam je tako u svakom trenu s velikom točnošću poznato vrijeme potrebno za izvođenje pojedine naredbe.
Brzina promjene stanja u jedinici vremena (tj. frekvencija) određuje kojom ce se brzinom izvršavati naredbe. Mjeri se u Hz, odnosno većim jedinicama MHz i GHz. Teži se za što višim frekvencijama, kako bi vrijeme za izvršenje pojedinih naredbi bilo što kraće. Ograničenje je sporost sklopova mikroprocesora koji ne mogu prihvatiti promjenjivu veličinu iznad neke granice.
Taktni impulsi grupirani su u skupine od po nekoliko impulsa (u našem primjeru pet) i nazivaju se strojni ili radni ciklus. Radni ciklus se ovisno o mikroprocesoru sastoji od nekoliko taktnih impulsa (obično tri do pet). Za izvršenje jedne naredbe potreban je najmanje jedan radni ciklus. Za neke naredbe može biti potrebno i više od jednog radnog ciklusa. Taktni impulsi su cijelo vrijeme prisutni i mikroprocesor bez njih ne može raditi. Sve se odvija u ritmu taktnih impulsa.

CPU


Središnja jedinica za obradu (engl. CPU - central processing unit) jest "mozak" računala s dva glavna zadatka:1. obrada podataka (npr. zbrajanje dvaju brojeva, usporedba dvaju brojeva, premještanje podataka s jednog mjesta unutar računala na drugo, itd.)2. nadzor i usklađivanje djelovanja cjelokupnog sustava.
CPU se najčešće sastoji od mikroprocesora. Mikroprocesor ili kraće procesor je poluvodički element koji ima na jednoj pločici poluvodiča smještene sve bitne dijelove jedinice CPU. Zadaća je mikroprocesora obaviti sve poslove namijenjene CPU-u računala.
Suvremeni mikroprocesori su najsloženiji poluvodički elementi koji imaju više od milijun tranzistora smještenih na jednu pločicu poluvodiča površine stotinjak kvadratnih milimetara. Poznatiji mikroprocesori jesu: 486, Celeron, Pentium, Athlon i dr.

Temeljna građa


Dijelovi računala mogu se podijeliti s obzirom na različita svojstva i funkcije. Jedna od najčešćih podjela je na sklopovlje (engl. hardware) i programe (engl. software).
Sklopovlje računala su svi oni električni, elektronički i mehanički dijelovi od kojih je građeno računalo i pojedini njegovi priključci. To su npr. tiskana pločica, integrirani krugovi, kutija, kabeli, itd.
Ovdje je opisana građa vrste računala koja se danas najčešće rabi, takozvano von Neumannovo računalo. Ta vrsta računala dobila je naziv prema briljantnomu matematičaru dvadesetog stoljeća Johnu von Neumannu, koji je prvi opisao njihovo načelno djelovanje.
Računalo se (prema von Neumanu) može raščlaniti na tri osnovna sastavna dijela: središnju jedinicu za obradu podataka (engl. kratica CPU), memoriju i ulazno-izlazne sklopove.

Obrada podataka


Pod obradom podataka (engl. data processing) u općem smislu, podrazumijeva se izvođenje sustavnih postupaka na raspoloživim podacima koristeći se pri tome skupom pravila i postupaka kako bi se dobilo rješenje postavljenog zadatka.

Bit i bajt


Bit je kombinacija engleskih riječi binary digit, što u prijevodu znači binarna znamenka. Bit je jedinica za informaciju i odgovara binarnoj odluci, a može imati dva stanja: da/ne, istina/laž, uključeno/isključeno i sl. Najčešće se pod bitom podrazumijeva jedna binarna znamenka koja može biti 0 ili 1.
U suvremenim je računalima bajt (engl. byte) bilo koji binarni broj s osam znamenki.
Često su u uporabi veće jedinice: kilobajt (KB), megabajt (MB) i gigabajt (GB). Te jedinice odgovaraju sljedećim vrijednostima:1 KB = 1024 bajta = 1.024 bajta1 MB = 1024 • 1024 bajta = 1.048.576 bajta1 GB = 1024 • 1024 • 1024 bajta = 1.073.741.824 bajta
Vrijednost od 1.024 za "K" izabrana je zbog binarne naravi računala koja obrađuju binarne podatke i jednaka je 210 (broj najbliži broju 1000 koji se može dobiti cjelobrojnim potenciranjem broja 2).

Kodovi i kodiranje


Računalo razumije samo binarni jezik, jezik koji se sastoji od dva simbola, “0” i “1”. Unutar računala znakovi su prikazani pomoću binarnih brojeva. Binarni brojevi imaju samo dvije znamenke: "0" i "1".
Postupak pripisivanja simbola (npr.binarnih brojeva) znakovima vanjskog svijeta naziva se kodiranje. Skup takvih simbola naziva se kôd. Kodni sustav je dogovor o načinu kodiranja (propis, norma).
Najrasprostranjeniji kodni sustav je ASCII kod (engl. American standard code for information interchange). Svaki simbol i znak je predočen jednim sedmeroznamenkastim binarnim brojem, a ukupno je na raspolaganju 27 = 128 znakova.
Postoji i prošireni, osambitovni ASCII (engl. extended ASCII): prvih 128 znakova je isto kao u ASCII, a preostalih 128 znakova se rabi za slova različitih zemalja pa postoji mnogo različitih proširenih ASCII normi. U Hrvatskoj se primjenjuje nekoliko različitih kôdnih normi.

Osnovna građa računala


Tijekom razvoja ljudskog društva nastali su različiti načini zapisivanja. Tako je danas u uporabi više različitih pisama. Svaki od tih načina teži što jednostavnijoj uporabi i što jasnijem tumačenju. Za potrebe razmjene informacija između čovjeka i stroja, te strojeva međusobno, stvorene su norme tzv. kodiranje.
Kako bi se prenosile informacije, potrebno je uvesti jedinicu informacije. Najmanja jedinica informacije je bit, veće jedinice su bajt, kilobajt, megabajt itd.
Pri spominjanju elektroničkih računala često se rabi pojmovi računalne obrade, sklopovlja (engl. hardware) i programa (engl. software).
Mozak svakog računala je njegova središnja jedinica za obradu (procesor).
Podaci i programi koji se neposredno izvode smješteni su u radnoj memoriji računal, koju, s obzirom na postojanost podataka, možemo podijeluti u dvije glavne skupine, RAM i ROM.
Za povezivanje računala s okolinom služe nam ulazno-izlazni sklopovi. Za razmjenu podataka između dvaju ili više uređaja služe nam sabirnice.
Računala se mogu podijeliti s obzirom na različita svojstva: glede snage ili moći računanja, glede prenosivosti, glede veličine, i dr.

Doba interneta



1990
Tim Berners-Lee u suradnji s Robertom Cailliauom radeći u CERN-u predlaže hypertext sustav koji je bitno pridonio popularizaciji i širenju interneta. To se može smatrati početkom interneta u obliku kakvog da danas poznajemo.
1990
Windows 3.0 (prodano više od tri milijuna primjeraka u godinu dana)
1991
Intel proizvodi procesor 486SX.
1991
Linus Torvald uvodi Linux.
1991
Tim Berners-Lee, znanstvenik na europskom laboratoriju za atomske čestice (European partial physics laboratory, CERN) u Ženevi u Švicarskoj razvija Web kao alat za istraživače. Tako je stvoren World Wide Web (WWW) jedan od važnih razloga današnje popularnosti interneta.
1991
Philip Zimmerman objavljuje sustav Pretty Good Privacy (PGP) kojim je moguće kodirati zapise kako bi se sačuvala tajnost.
1991
MS-DOS 5.0
1992
Windows 3.1 (prodano više od milijun kopija u prva dva mjeseca prodaje).
1993
Početkom godine u cijelom svijetu postoji pedeset World Wide Web poslužitelja (engl. servers).
1993
Windows NT, MS Office 4.0 i MS-DOS 6.0.
1993
Intel proizvodi procesor Pentium (3.2 millijuna tranzistora).
1994
Marc Andreesen i James H. Clark osnivaju tvrtku Netscape.
1994
Utemeljena je tvrtka Red Hat Linux.
1994
Tim Bernes-Lee osniva organizaciju The World Wide Web Consortium.
1994
Otkrivena pogreška u Intelovom procesoru Pentium.
1994
Osnovana tvrtka YAHOO.
1994
MS-DOS 6.22
1994
Windows 3.11
1994
Norveška tvrtka Telenor započinje projekt čiji je rezultat pretraživač Opera
1994
Tim Bernes-Lee osniva organizaciju W3C
1995
Java.
1995
Windows 95 (u prva četiri dana prodano više od milijun primjeraka).
1995
Amazon.com počeo s radom.
1995
Pierre Omidyar osniva EBay.
1995
Objavljena norma USB.
1996
Sergey Brin i Larry Page razvijaju Google.
1996
Windows CE.
1996
Microsoft proizvodi miša s kotačićem pod nazivom IntelliMouse.
1997
IBM-ovo računalo Deep Blue pobjeđuje svjetskog šahovskog prvaka Garry Kasparova.
1997
Počine prodaja DVD diskova.
1997
Bill Gates je najbogatiji poslovni čovjek na svijetu.
1997
IEEE objavljuje 802.11 (norma za bežične mreže).
1998
Intel proizvodi procesor Celeron.
1998
Objavljena norma za modeme V.90.
1998
U Japanu pušten u prodaju prvi MP3 player (Saehan, MPMan).
1998
Windows 98.
1998
Sergey Brin i Larry Page osnivaju Google.
1998
Objavljen je sustav za rukovanje bazama podataka MySQL.
1999
Intel proizvodi procesor Pentium III 500 MHz.
2000
Mnogi strahuju da će 1.1.2000 otkazati mnogi računalni sustavi zbog toga što su mnogi programi rađeni tako da pri računanju godine rabe samo dvije znamenke. Tako će pri prijelazu iz 1999 u 2000 u programu 99 prijeći u 00. Unatoč strahu nije bilo ozbiljnijih posljedica.
2000
Windows 2000
2000
Jack Kilby dobiva Nobelovu nagradu za fiziku.
2000
Microsoft C#
2001
Tvrtka Dell computers postaje najveći proizvođač osobnih računala.
2001
Objavljena norma USB 2.0.
2001
Windows XP
2002
Prema istraživanju tvtke Gartner od polovice sedamdesetih do 2002 prodano je više od 1.000.000.000 osobnih računala.
2002
Objavljena je sabirnička norma PCI Express.
2003
Osnovana tvtka Mozilla Foundation.
2004
Google objavljuje uslugu besplatne elektroničke pošte Gmail

Doba osobnih računala



1975
Tvrtka MITS isporučuje komplet dijelova za računalo Altair 8800. Računalo je kupac morao sam sastaviti, a imalo je memoriju kapaciteta 1 KB. To se smatra prvim osobnim računalom.
1975
Paul Allen i Bill Gates stvaraju prvi programski jezik za osobna računala. To je bila inačica BASIC-a za računalo Altair.
1975
Steve Wozniak i Steve Jobs osnivaju tvrtku Apple Computers.
1976
Razvijena je disketa (engl. floppy disk) promjera 5.25 palaca.
1976
Intel proizvodi mikroprocesor 8086.
1977
Razvijena prva komercijalna računalna mreža ARCNET.
1977
Tvtka Apple nudi osobno računalo Apple II, prvo osobno računalo s grafičkim prikazom u boji.
1978
Epson proizvodi iglični pisač TX-80 koji je bio prvi široko rasprostranjen pisač za osobna računala.
1979
Hayes prodaje prvi modem za osobna računala.
1979
U SAD-u je u uporabi više od pola milijuna računala.
1979
Intel proizvodi mikroprocesor 8088.
1980
Prema narudžbi tvrtke IBM Paul Allen i Bill Gates izrađuju operacijski sustav za osobno računalo IBM PC. Sustav kasnije postaje poznat pod nazivom MS-DOS.
1981
MS-DOS 1.0
1981
IBM proizvodi svoje prvo osobno računalo IBM PC i prodaje ga s operacijskim sustavom MS-DOS.
1981
Hayes proizvodi modem Smartmodem 300 sa skupom naredbi poznatim pod nazivom AT command set. Brzina modema je bila 300 bps.
1981
Hayes proizvodi modem Smartmodem 1200 brzine 1200 bps.
1982
WordPerfect Corporation prodaje WordPerfect 1.0 najpopularniji program za obradu teksta za osobna računala (prije pojave Windows-a).
1982
Lotus Development Corporation prodaje program Lotus 1-2-3, najpopularniji program za tablično računanje za osobna računala (prije Widows-a).
1982
Osnovana je tvrtka Compaq Computer Corp. koja je prva proizvela kopiju IBM PC računala i postala najveći konkurent IBM-u na poslovnom tržištu osobnih računala.
1982
Počinje prodaja kućnog računala Commodore 64 koje je postalo najprodavaniji model računala svih vremena.
1982
Intel objavljuje procesor 80286.
1983
Osobno računalo IBM XT.
1983
U SAD-u je u uporabi više od deset milijuna računala.
1983
MS-DOS 2.0
1983
Microsoft Windows
1984
Osobno računalo IBM AT.
1984
Proizvedena je disketa (engl. floppy diskette) promjera 3.5 palca.
1984
MS-DOS 3.0 i MS-DOS 3.1 (za mreže).
1984
Profesor Fred Cohen sa sveučilišta University of Southern California objavljuje prvi rad o računalnim virusima.
1985
Tvrtka Microtek proizvodi prvi jednobojni skener razlučivosti 300 dpi.
1985
Intel objavljuje procesor 80386.
1985
Microsoft Windows 1.0
1986
IBM proizvodi tipkovnicu pod nazivom AT ili 101.
1986
Compaq proizvodi prvo osobno računalo sukladno IBM PC-u.
1986
U SAD-u je u uporabi više od trideset milijuna računala.
1986
MS-DOS 3.2.
1987
Windows 2.0
1987
MS-DOS 3.3
1988
U SAD-u je u uporabi više od četrdeset i pe milijuna osobnih računala.
1988
Friedrich Reintzer odkriva tekući kristal.
1988
Tvrtka Creative Labs proizvodi zvučnu karticu SoundBlaster.
1988
MS-DOS 4.0
1989
Intel objavljuje procesor 486DX.

Doba velikih računala



1946
Završen je ENIAC, prvo elektroničko računalo.
1947
U SAD u Bell Laboratories izumljen je tranzistor. Izumili su ga John Bardeen, Walter Brattain i William Shockley (kasnije dobitnici Nobelove nagrade).
1951
Na Manchester University proradilo je prvo komercijalno računalo First Ferranti MARK I.
1951
Počinje prodaja računala UNIVAC, prvog široko dostupnog komercijalnog računala.
1953
Počinje prodaja računala IBM 701. Ukupno je proizvedeno i prodano 19 komada.
1954
IBM proizvodi i prodaje računalo IBM 650. Proizvedeno je i prodano više od 1800 komada u razdoblju od osam godina.
1954
IBM objavljuje prvu inačicu programskog jezika of FORTRAN (engl. formula translator).
1955
John McCarthy sa sveučilišta Dartmouth College prvi put spominje umjetnu inteligenciju.
1955
Bell Labs konstruiraju prvo računalo s tranzistorima. Tranzistori su brži, manji, troše manje energije i manje se griju od elektronskih cijevi koje su se rabile do tada. Zbog toga su računala s tranzistorima brža i pouzdanija.
1955
ENIAC prestaje raditi. Procjenjuje se da je u svom životnom vijeku obavio više aritmetičkih operacija nego cijeli ljudski rod do tada.
1956
Računalo 305 RAMAC koje proizvodi IBM je prvo računalo s tvrdim magnetskim diskom.
1958
Robert Noyce (tvrtka Fairchild Semiconductor) i Jack Kilby (tvrtka Texas Instruments) razvijaju prvi integrirani krug i javno prikazuju njegov rad 12.09.1958.
1960
Objavljen je programski jezik COBOL (Common Business-Oriented Language).
1963
Doug Engelbart je izumio i patentirao prvog računalnog miša.
1963
Razvijena je norma ASCII (American Standard Code for Information Interchange) kako bi se olakšala razmjena podataka između računala.
1964
Na sveučilištu Dartmouth University John Kemeny i Thomas Kurtz razvili su programski jezik BASIC (Beginner's All-purpose Symbolic Instruction Language).
1965
Ted Nelson izmišlja naziv hypertext.
1965
Texas Instruments razvija TTL (transistor-transistor logic) vrstu integriranih krugova koji su našli široku uporabu u računalima.
1965
Gordon Moore objavljuje svoje opažanje da se broj tranzistora po prostornom palcu u integriranim krugovima udvostručuje svake godine. To je kasnije postalo poznato pod imenom Moore-ov zakon. U novije doba pod Moore-ov zakonom se smatra pravilo da se gustoća podataka udvostručuje svakih 18 mjeseci.
1967
IBM konstruira prvu disketu (engl. floppy disk).
1967
Razvijen je programski jezik LOGO poznat još i kao kornjačina grafika. Jezik je pogodan za prvi susret djece s računalom.
1968
Robert Noyce i Gordon Moore osnivaju tvrtku Intel Corporation.
1969
Tvrtka Control Data Corporation koju vodi Seymour Cray završava računalo CDC 7600 koje se smatra prvim superračunalom.
1969
Razvijen je operacijski sustav Unix (AT&T Bell Laboratories).
1969
Gary Starkweather u tvrtki Xerox konstruira prvi laserski pisač.
1969
Ministarstvo obrane SAD-a (U.S. Department of Defense) osniva računalnu mrežu ARPANET (Advanced Research Projects Agency Network), preteču interneta.
1970
Intel objavljuje memorijski integrirani krug 1103 kapaciteta većeg od 1000 bita (prvi RAM).
1970
Utemeljen je istraživački centar Xerox Palo Alto Research Center (PARC) iz kog su potekle mnoge danas široko rasprostranjene računalne tehnologije.
1970
Tvrtka Centronics proizvodi prvi iglični (matrični) pisač (engl. dot matrix printer.).
1971
Počinju se proizvoditi disketni pogoni promjera 8 palaca (engl. 8" floppy diskette drive).
1971
U Xerox PARC razvojnom centru razvijen je prvi laserski pisač.
1971
Objavljen je programski jezik Pascal (autor Niklaus Wirth).
1971
Intel počinje isporuku prvog mikroprocesora 4004.
1972
Objavljen je programski jezik C (autor Dennis Ritchie, tvrtka Bell Labs).
1972
U SAD-u je izumljen optički disk (CD, compact disc).
1973
U istraživačkom centru PARC (Xerox Palo Alto Research Center) Robert Metcalfe konstruira računalnu mrežu Ethernet.
1973
Dr. Martin Cooperk u tvrtki Motorola konstruira prvi mobilni telefon (engl. cell phone).
1974
Mikroprocesor 8080 tvrtke Intel postaje prvi široko prihvaćen mikroprocesor.

Doba mehaničkih računala



1617
John Napier uvodi spravu poznatu pod imenom "Napierove kosti" (engl. Napier's Bones) izrađenu od slonove ili neke druge kosti koja je utemeljena na logaritmima. Glavna je novost bilo to što se množenje moglo izvoditi zbrajanjem, a dijeljenje oduzimanjem. Tako se slaganjem štapića jednog na drugi ili jednog pored drugog moglo množiti i dijeliti.
1623
Wilhelm Schickard izrađuje prvu poznatu mehaničku spravu za računanje (mehanički kalkulator).
1642
Francuz Blaise Pascal izrađuje mehaničku spravu za računanje (mehanički kalkulator) poznatu pod nazivom Pascaline koja može zbrajati i oduzimati.
1674
Nijemac Gottfried Wilhelm Leibnitz izrađuje mehaničku spravu za računanje (mehanički kalkulator) koja može zbrajati, oduzimati, množiti i dijeliti.
1804
Francuz Joseph-Marie Jacquard izrađuje potpuno automatiziran tkalački stroj koji se programira pomoću papirnatih bušenih kartica.
1820
Thomas de Colmar izrađuje prvi pouzdan, upotrebljiv i komercijalno uspješan mehanički kalkulator.
1821
Charles Babbage objavljuje izum diferencijalnog stroja (engl. difference engine). Važnu ulogu u popularizaciji i izradi programa za njegov stroj imala je Ada Augusta King, Countess of Lovelace pa je zovu i prvom programerkom (po njoj je nazvan i jedan računalni programski jezik).
1868
Christopher Sholes je izumio pisači stroj u SAD-u koji je imao QWERTY tipkovnicu.
1888
William S. Burroughs patentira mehanički kalkulator koji je mogao tiskati na papirnu vrpcu.
1896
Herman Hollerith utemeljuje tvrtku Tabulating Machine Company koja kasnije mijenja ime u IBM (International Business machines).
1911
15.06.1991 u državi New York u SAD-u utemeljena je tvrtka Tabulating Machine Company koja je kasnije postala IBM.
1924
Tvrtka Tabulating Machine Company mijena ime u IBM.
1936
Razvijena je Dvorak tipkovnica.
1938
Nijemac Konrad Zuse konstruira Z1, jedno od prvih binarnih digitalnih računala. Računalo se moglo programirati bušenom vrpcom.
1939
U SAD-u na Iowa State College John Vincent Atanasoff i Clifford Berry konstruiraju prototip binarnog računala ABC (Atanasoft-Berry Computer). To se smatra prvim automatskim digitalnim računalom.
1941
Nijemac Konrad Zuse dovršava elektromehanički stroj za računanje Z3.
1943
Počinje konstrukcija prvog elektroničkog računala u suvremenom smislu pod nazivom ENIAC (Electronic Numerical Integrator and Computer). ENIAC većina smatra prvim elektroničkim računalom.
1944
Mornarica SAD-a rabi Harvard-IBM MARK I, veliki programabilni računski stroj građen pomoću releja. Za programerku je određena Grace Hopper.

Povijest računalstva


Čovjek se oduvijek nastojao riješiti monotonih, teških i neugodnih poslova. Isprva su to bili fizički poslovi, pa je došlo do razvoja strojeva svih vrsta koji su zamjenjivali čovjeka pri obavljanju manualnih radova. Razvojem trgovine, bankarstva, tehnike i znanosti pojavila se potreba za zamjenom čovjeka napravama ili strojevima pri obavljanju misaonih radnji, posebice računanja. Osim uštede vremena i živaca te su naprave trebale ispraviti jedan veliki nedostatak čovjeka: pogreške u računanju. Zamisli o strojevima koji bi čovjeku olakšali obavljanje misaonih radnji, pojavile su se istodobno s tim radnjama, ali tehnološko i spoznajno ograničenje nije omogućilo njihovu izradbu. Do danas je razvijeno i još je intenzivno razvijaju takvi strojevi.
A budućnost?
Ray Kurzweil u svojoj knjizi Doba duhovnih strojeva predviđa da će 2020. godine računala biti ravnopravna ljudskom mozgu glede sposobnosti i brzine obrade podataka. Uz to njihova cijena neće biti veća od tisuću američkih dolara! Kurzweil nadalje predviđa da će 2030. godine računala imati osobnost i svijest. Nakon toga? Računala će nastaviti vrtoglavi napredak, neograničena fizičkom građom kojom je čovjek ograničen. Ray Kurzweil nije pisac znanstvenofantastičnih romana niti šarlatan. On je dobitnik više prestižnih znanstvenih nagrada među kojima je i nagrada Američke udruge nakladnika za najznačajniju znanstvenu knjigu iz područja računalstva za 1990. godinu. Nosilac je devet počasnih doktorata, a u mnogo je navrata dokazao svoju stručnost i utemeljenost svojih predviđanja. Ne može se dakle predviđanje Ray Kurzweila tek tako odbaciti. Više o budućnosti računala možete pročitati pod izbornikom Quo vadis informatica?.
Ovdje možete vidjeti kratki pregled važnijih događaja u području računalstva podijeljenih u četiri razdoblja (klikni na izbornik lijevo za pregled pojedinog razdoblja).
Godina
Događaj
1617do1944
Mehaničko doba:Doba prvih praktično uporabivih strojeva za računanje koji su uglavnom bili mehanički ili elektromehanički.
1945do1974
Velika računala:Doba velikih i skupih elektroničkih računala koje su mogle kupvati i rabiti samo najveće tvtke.
1975do1989
Osobna računala:Doba, pojave, razvoja i široke uporabe osobnih računala koja su postala dovoljno jeftina da ih može skoro svatko nabaviti.
1990do2004
Doba interneta:Doba pojave i rasprostranjene uporabe interneta bez koga je suvremeni život nezamisliv.

Podatak, informacija, dokument, publikacija


Podatak je činjenica.Informacija je značenje koje se pripisuje podacima (informacija = značenje + podatak).Dokument je zapisana informacija koja čini neku smislenu cjelinu.Publikacija je objavljeni dokument.
Računalna baza podataka je skup međusobno ovisnih podataka koji se mogu obrađivati na računalu.Znanje su naša vjerovanja, a osim informacija uključuju i rasuđivanje.Mudrost je pametna uporaba znanja koja uključuje znanje i iskustvo.
Informacijska znanost se bavi informacijama. Informatika je područje ljudske djelatnosti koje se bavi proučavanjem, razvojem i uporabom postupaka i uređaja za obradu podataka.Računalstvo je znanost koja se bavi proučavanjem računala i postupaka koji se primjenjuju na računalima.
Sustav kojim se knjige označavaju jedinstvenim sustavom oznaka s gledišta sadržaja knjige naziva se Univerzalna decimalna klasifikacija (UDK).Međunarodni je dogovor da se knjige označavaju međunarodnim standardnim brojem za knjigu (ISBN), a periodičke publikacije međunarodnim standardnim brojem za serijske publikacije (ISSN).

Programski jezici

Osvrt na različite programske jezike promotrimo najprije iz povijesne perspektive. Najstarija računala zahtijevala su da programer prevede sve algoritme na strojni jezik. Taj je pristup dao još veću važnost izučavanju algoritama, jer je efikasniji algoritam smanjivao broj linija programskog koda i broj prepisivanja heksadecimalnog koda sa kojima se opisivala naredba, a time i vjerojatnost pogreške. Prvi korak prema pojednostavljivanju ovog zadatka bilo je izostavljanje brojeva kojima se predstavljao op-code i operandi strojnih instrukcija. S tim u vezi, postalo je jako popularno pridruživati različite mnemonike različitim op-kodovima i koristiti ih umjeto heksadecimalnog prikaza. Tako bi primjerice, umjesto korištenja op-koda za punjenje registra (ili pohranjivanje) sa vrijednošću iz memorije, programer bi pisao LD ili ST (skraćenice od LOAD i STORE). U slučaju operanda, postojala su pravila koja su dozvoljavala korištenje opisnih imena za lokacije u memoriji koja su se koristila umjesto memorijskih adresa u instrukcijama. Pri tom, registrima su se pridjeljivala imena R0, R1. Na taj je način, korištenjem mnemonika, naziva za memorijske lokacije i registre, znatno se povećala čitljivost programa. S tim u vezi, usporedimo dva programa, jedan napisan u strojnom jeziku, a drugi «preveden» na jezik mnemonika...

S vremenom, strojni jezik smatran je prvom generacijom strojnih jezika, a assembler II generacijom. Iako je asembler imao niz prednosti u odnosu na strojni jezik, ipak mu je nedostajalo cjelovitije okruženje. Primitive su bile iste kao i kod strojnog jezika, razlika je postojala samo u sintaksi, pa je program napisan u asembleru ovisio o procesoru kojem je bio namijenjen i nije se baš jednostavno prenosio na računalo sa drugim tipom procesora jer je trebalo voditi računa o novom obliku instrukcijskog skupa i drugačijim registrima. Drugi nedostatak očitovao se u načinu koji je programer bio prisiljen usvojiti ukoliko je želio nešto isprogramirati. Programer je bio prisiljen razmišljati o malim, inkrementalnim koracima strojnog jezika. Situacija je usporediva sa primjerom vezanim za problem opisa gradnje kuće ako bismo morali razmišljati o položaju svake cigle, daske i slično. Činjenica je da u nekom trenutku treba elemente kuće predstaviti i na takav način, ali je o funkcionalnosti projekta lakše i razumljivije govoriti koristimo li veće jedinice kao što su sobe, kuhinja, vrata, prozori i sl. Ukratko, elementarne primitive od kojih je proizvod sastavljen, ne moraju biti one koje koristimo kada ga projektiramo. Projektirati je lakše koriste li se primitive na većem nivou na kojem svaka primitiva označava koncept. Slijedom ove filozofije, počeli su se razvijati novi programski jezici prilagođeniji razvoju softwarea od asemblerskih jezika. Tako su nastali jezici treće generacije koji su se od prethodne razlikovali u primitivama koje su bile na višem nivou i neovisne o procesoru. Tipični primjeri su FORTRAN (FORmula TRANslator) za matematičke i znanstvene proračune i COBOL (Common Business Oriented Language) kojeg je razvila US Navy za poslovne aplikacije. Zajednička karakteristika programskih jezika 3. generacije bio je skup primitiva pomoću kojih možemo razvijati program. Svaka takva primitiva trebala se moći predstaviti sa skupom nižih koje možemo predstaviti strojnim jezikom. Identificirani skup primitiva program prevodioc je prebacivao u strojni jezik. Takvi su programi ličili na asemblere druge generacije, samo što su jednu primitivu pretvarali u čitav niz strojnih instrukcija. Alternativu kompajlerima predstavljaju interpreteri kao još jedna karakteristika jezika III generacije. Ti su programi slični prevoditeljima, samo što ujedno i izvode instrukcije nakon što ih prevedu, a ne pohranjuju ih za neku buduću upotrebu. Znači, kao rezultat rada interpretera nemamo neku vrstu kopije programa u strojnom jeziku u memoriji nego postupak prevođenja nastupa uvijek kada pokrećemo program. Neovisnost o stroju Razvojem treće generacije jezika, neovisnost o vrsti računala na kojem se izvodi program uvelike je postignut. Kako se izjave u jezicima treće generacije ne odnose na atribute ni jednog procesora, mogu se lako prevoditi za bilo koje računalo. Teoretski, program napisan jezikom treće generacije može se koristiti na bilo kojem stroju ako za njega imamo kompajler. Stvarnost je međutim pokazala da stvari i nisu baš tako jednostavne. Nakon što se kompajler osmisli, određene karakteristike stroja na koji se primjenjuje ponekad se odražavaju kao uvjeti na jezik kojeg prevodimo. Primjerice, različiti načini na koji procesori izvode U/I operacije uvjetovali su da isti jezik ima različite karakteristikeili dijalekte za različite strojeve. Zbog toga je potrebno makar malo promijeniti program premiještamo li ga sa stroja na stroj. Problem se može usporediti sa nedostatkom podudarnosti koja postoji u smislu riječi različitih jezika-za nešto što se na jednom jeziku kaže sa jednom ili dvije riječi, na drugom treba izraziti čitavom rečenicom. Dakle, jezici III generacije nisu ispunili uvjet prenosivosti i neovisnosti o platformi, što i nije bilo toliko tragično jer: - programi su se uvijek mogli prenositi uz minimalnu izmjenu - ideja o prenosivosti razvila se do te mjere da je inicirala dosezanje dalekosežnijih ciljeva-tipičan primjer je ideja o razvijanju programskog okruženja koje bi omogučilo komunikaciju u puno slobodnijoj formi od one ograničene sintaksom i semantikom programskih jezika. Kao rezultat nastao je čitav spektar programskih jezika koji ruši klasičnu podjelu na generacije programskih jezika. Programske paradigme (pristupi) Generacijski pristup programskim jezicima temelji se na linearnoj skali na kojoj je položaj jezika određen stupnjem kojim je korisnik jezika oslobođen zahtijeva iz svijeta računala. Prema takvoj podjeli, na krajnje lijevom dijelu skale bili bi jezici pomoću kojih se problemi rješavaju u okruženju u kojem se ljudi prilagođavaju karakteristikama stroja, a što se više primičemo desnom dijelu skalu, nailazimo na jezike kod kojih stroj udovoljava ljudskim karakteristikama. U stvarnosti, razvijanje programskih jezika nije teklo na ovakav način, nego duž različitih skala koje karakteriziraju različiti pristup procesu programiranja (karakteriziraju paradigmu). Stoga bi se sam povijesni razvoj bolje predstavio koristimo li više usporednih linija, od kojih svaka karakterizira odgovarajući pristup. Tako imamo:
razvojne linije sa različitim programskim jezicima koje im pripadaju. Imperativna ili proceduralna paradigma predstavlja tradicionalni pristup procesu programiranja. Na imperativnoj paradigmi temelje se algoritmi napisani pseudokodom i oni napisani strojnim jezikom. Kao što samo ime govori, imperativna paradigma definira postupak programiranja kao niz sekvenci naredbi koje na odgovarajući način manipuliraju sa podacima da bi dobili rezultat. Procesu programiranja pristupamo pronalaskom algoritma kojeg zatim izražavamo nizom naredbi. U suprotnosti sa imperativnom paradigmom, koje traže od programera da smisli algoritam, je deklarativna paradigma koja od programera traži da se problem opiše u formi koja je prilagođena nekom općem algoritmu (primjer iz prologa sa predavanja). U takvom okruženju programer je taj koji daje precizne izjave vezane za problem, a ne onaj koji otkriva algoritam. Glavna poteškoća u razvijanju programa koji se temelje na deklarativnoj paradigmi je postojanje i otkrivanje takvog općeg algoritma. Zbog toga su prvi deklarativni jezici ličili na strogo namjenske, konstruirani za specifične aplikacije. Primjerice, deklarativni pristup bio je jako dugo korišten za simulaciju sustava (ekonomskog, fizičkog, političkog...) sa ciljem testiranja hipoteza. Kod takvih postavki, u osnovi je algoritam koji predstavlja proces u kojem se simulira odmicanje vremena uzastopnim preračunavanjem vrijednosti parametara (trgovinski deficit, rast domaće proizvodnje) na temelju prijašnjih vrijednosti. Primjena deklarativnog jezika znači da je netko jednom primijenio algoritam za neku ponavljujuću proceduru. Programer ima jedino za zadatak opisati odnose među parametrima koji se simuliraju. Funkcionalna paradigma gleda na proces razvoja programa kao na spajanje unaprijed definiranih "crnih kutija" od kojih svaka prihvaća određene ulaze i daje odgovarajuće izlaze. Matematičari te kutije promatraju kao funkcije što je i razlog imenu za ovaj pristup. Primitive funkcionalnih programskih jezika sadrže elementarne funkcije od kojih programer mora konstruirati zahtijevnije funkcije. Zato programer koji koristi takav programski jezik gleda na razvoj software kao na pronalaženje načina na koji se spajaju elementarne, primitivne funkcije da bi se proizveo sustav koji proračunava željeni rezultat. Kao primjer možemo uzeti funkciju koja računa srednju vrijednost: konstruirana je od funkcije koja računa sumu svih ulaznih vrijednosti i funkcije koja broji koliko tih ulaznih vrijednosti imamo, pa pišemo (Divide (SumaBrojeva)(BrojemBrojeva)). Primjer 2: Pretpostavimo da imamo funkciju Sort koja nam sortira listu i drugu funkciju-First, koja pronalazi prvi član sa liste. U tom će nam slučaju funkcija (First(Srt(List)) vratiti najmanju vrijednost sa liste. Zagovornici funkcionalne paradigme naglašavaju da kreiranje složenog softwarea od predefiniranih primitivnih funkcija vodi prema dobro organiziranom sustavu čija je struktura prirodno modulirana terminima funkcija. U trenutku kada se razvije nova funkcija, ona može postati primitiva nekoj složenijoj. (Originalna verzija LISPa imala je samo nekoliko primitiva, a današnji lisp ih ima stotine). Funkcionalna paradigma stvara okruženje u kojem se hijerarhija strukture lako nazire. Kod objektno orijentirane paradigme, jedinice sa podacima su aktivni objekti, a ne pasivne strukture kao kod imperativne paradigme. Da bi pojasnili promotrimo neku od listi sa imenima. Kod tradicionalne, imperativne paradigme, lista je zapravo skup podataka. Bilo koji program koji poseže za listom, mora imati algoritam za izvođenje neke akcije. Stoga, lista je pasivna u smislu da sa njom barata neki program izvana. Sama po sebi nema načina za reorganizacijom. Kod objektno orijentiranog pristupa, liste su objekti sastavljeni od pasivnih lista i procedura koje omogućavaju da se liste organiziraju (ubaci novi ulaz, poslože...). Program koji poseže za listom ne mora imati ni jednu od navedenih rutina. Za razliku od operativne rutine koja će složiti listu, program koji pristupa listi složenoj u duhu OOP-a, zatražit će od liste da se sortira. Drugi je primjer GUI. Ikone su objekti. Svakoj je pridružen skup istih procedura koje opisuju kako objekti reagiraju na vanjske događaje-što rade kada jedan put kliknemo, kako se ponašaju kada držimo pritisnut botun na mišu i slično. Svaki objekt egzistira kao odvojena, zasebna jedinica. Jednom kada su osobine ovog entiteta definirane, iste se mogu ponovno koristiti kad god nam zatrebaju. Kod OOP sve komunikacije izvode se na uniforman način što je direktno primjenljivo za upotrebu na mreži.

Algoritmi

Pojam algoritma predstavlja temelj za razumijevanje računarstva općenito i stoga mu je u ovom dijelu posvećena posebna pažnja. Neformalni algoritmi Obzirom na naučeno gradivo trebali bi znati definirati algoritam koji, primjerice, pretvara različite formate numeričkih podataka, upravlja raspodjelom procesorskog vremena u višezadaćnom okruženju i sl. Algoritmom možemo opisati i izvođenje samog algoritma u stroju kao: Sve dok se ne pojavi instrukcija za zaustavljanje, ponavljaj: Dohvaćaj instrukciju Dekodiraj instrukciju Izvedi instrukciju Algoritmi nisu ograničeni samo na tehničke aktivnosti. Pomoću algoritma možemo opisati mađioničarski trik ili neku svakodnevnu aktivnost, primjerice čišćenje graška kao: Uoči košaru sa neočišćenim graškom i praznu zdjelu Sve dok ima graška u košari, radi: Uzmi mahunu iz košare Prelomi je da se na njoj pojavi otvor Istresi grašak u zdjelu Baci mahunu Mnogi istraživači vjeruju da je bilo koja aktivnost ljudskog uma, uključujući zamišljanje, kreativnost i donošenje odluka, u osnovi rezultat izvođenja nekog od algoritama što je za posljedicu imalo razvoj znanstvene discipline poznate pod imenom Umjetna inteligencija. Definicija Da bi specificirali značenje i važnost algoritma za računarstvo, uvedimo formalnu definiciju: Algoritam je uređeni skup jednoznačnih (nedvosmislenih), izvedivih koraka. Analizirajmo definiciju detaljnije: 1. Kako je riječ o uređenom skupu, logično je da se koraci algoritma trebaju izvoditi određenim redoslijedom. Međutim to ne znači da se koraci algoritma uvijek izvode sekvencijalno, u nizu. Postoje i tzv. paralelni algoritmi koji sadrže takozvane «niti» (thread) koje izvodi pojedini procesor, pa se određeni koraci mogu izvoditi istovremeno, ovisno o tome kako se niti granaju i ovisno o tome kako pojedini procesori izvode svoj dio zadatka. Osim što algoritam može izvoditi procesor, I bistabilni sklopovi mogu izvoditi specifične algoritme, tako da svaka vrata izvode jedan korak u algoritmu. Ovdje su koraci izvođenja uvijek uvjetovani uzrokom i posljedicom, pošto se izlazi iz jednih vrata šire kao novi signal ekektroničkim sklopom. 2. Pojam "jednoznačan" (nedvosmislen) u okviru definicije podrazumijeva da za vrijeme izvođenja algoritma informacija o stanju procesa mora biti dovoljna da jednoznačno I potpuno definira akciju koja slijedi. Drugim riječima, izvođenje (napredovanje) algoritma ne smije se temeljiti na kreativnosti (procesora, osobe koja ga slijedi), nego mora biti rezultat slijeđenja uputa. Izuzeci od formalne definicije: Definicija podrazumijeva izvođenje konačnog procesa, procesa koji ide prema nekom cilju. Stavljanjem naglaska na konačnost izvođenja, dotiču se pitanja kojima se i inače bavi teorija računarstva, tipa: - Koje je krajnje ograničenje algoritama i koji su dosezi stroja općenito? Na ovaj su način u okvirima računarstva razdvojeni problemi koji se mogu riješiti algoritamski od onih koji nadilaze mogućnosti algoritama i s tim u vezi, razgraničeni su procesi koji rezultiraju odgovorom na pitanja(e), od onih na koje odgovori ne postoje. Životno iskustvo, međutim, pokazuje da postoje smislene aplikacije (temeljene na odgovarajućim algoritmima) koje uključuju odvijanje nekakvog beskonačnog procesa, primjerice, nadziranje životnih funkcija hospitaliziranih pacijenata ili automatski pilot koji održava visinu letjelice. U pokušaju da algoritme koji prate takve procese "uklope" u definiciju, neki ih autori predstavljaju kao konačne algoritme koji se automatski ponavljaju (beskonačno) kada dođu do kraja. Na ruku činjenici da strogu, formalnu definiciju algoritama treba prihvatiti uz postojanje izuzetaka koji je potvrđuju, ide algoritam kojim dobivamo rezultat dijeljenja dvaju cijelih brojeva. U slučaju da se dobije periodički decimalni broj, inače uspješni algoritam ne daje konačni odgovor na postavljeno pitanje. Apstraktna priroda algoritma Važno je naglasiti da postoji razlika između algoritma i načina na koji ga predstavljamo. Slična analogija vrijedi i među pojmovima «priča» i «knjiga». Priča je u osnovi apstraktni pojam, a knjiga je fizička manifestacija priče. Ako je prevedemo i tiskamo na drugom jeziku, mijenja se način na koji smo je predstavili, ali je priča ostala ista. Algoritam je uvijek apstraktniji od načina na koji ga predstavljamo, a načini mogu biti različiti, ovisno o tome kome je namijenjen. Primjerice, algoritam koji pretvara stupnjeve Celzijusa u Fahrenheit-e, može biti predstavljen na slijedeći način: - formulom: F=(9/5)*C+32 - riječima: pomnoži temperaturu u stupnjevima Celzijusa sa (9/5) i produktu dodaj 32, ili - sklopom. Ovisno o upućenosti osobe u problematiku, algoritam predstavljamo sa manje ili više detalja. Želimo li algoritam pripremiti za izvođenje na računalu, dva su standardna načina pomoću kojeg ga predstavljamo. Riječ je o predstavljanju pomoću: - primitiva i - pseudokoda Primitive Za predstavljanje algoritma potrebna nam je nekakva forma slična jeziku. Ako ljudi jedan drugom objašnjavaju algoritam, onda mogu koristiti riječi običnog, govornog jezika ili jezik slika. Mana takvog načina komunikacije je mogućnost da određene riječi budu shvaćene drugačije zbog višeznačnosti koja inače karakterizira riječi prirodnog jezika ili zbog kompozicije riječi unutar rečenice koja se može shvatiti na različite načine. Algoritam pripremljen za računalo bit će jasan ukoliko se koriste specifični oblici (tzv. primitive) za točno definiranu vrstu funkcije koju odgovarajući oblik predstavlja. Taj skup osnovnih oblika, zajedno sa skupom pravila koja definiraju kako se osnovni oblici mogu koristiti čine programski jezik. (50-tih i 60-tih bili su vrlo popularni tzv. blok dijagrami za predstavljanje algoritama, ali kako se često događalo da zbog nepreglednosti ispisa izmakne temeljni smisao algoritma, predstavljanje pomoću blok dijagrama je danas gotovo zanemareno i uglavnom zamijenjeno predstavljanjem pomoću pseudokoda). Svaka primitiva sastoji se od dva osnovna dijela: sintakse i semantike. Sintaksa omogućava simboličku oznaku primitive, a semantika joj daje značenje. Primjerice, sintaksa za ZRAK su 4 slova, a semantika bi označavala plinovitu mješavinu koja okružuje svijet. Da bi definirali skup primitiva kojima predstavljamo algoritam na računalu, mogli bi odabrati naredbe iz instrukcijskog skupa, što naravno nije zgodno, pa se zato koriste primitive "viših (apstraktnijih) nivoa". Pseudo kod Zamijenimo li formalnu, strogu strukturu programskog jezika, manje formalnim sustavom označavanja, dobili smo sustav za predstavljanje algoritma poznat pod nazivom PSEUDO KOD pomoću kojeg ideje možemo izraziti (zapisati) na lakši i manje formalan način tijekom postupka razvijanja (smišljanja) samog algoritma. Jedan od načina predstavljanja algo. pseudokodom je izostavljanje pravila iz naredbi koja prate svaki formalni programski jezik. Ovaj se način obično koristi kada znamo koji ćemo programski jezik koristiti, pa je tako semi-sintaktička struktura kojom opisujemo algoritam velikim dijelom nalik, ali je manje formalna od programskog jezika. Želimo li ipak ponuditi formalni zapis za predstavljanje algoritma neovisan o programskom jeziku, tada formaliziramo oznake za ponavljajuće semantičke strukture i definiramo pseudo kod kao intuitivni način predstavljanja algoritma kod kojeg ipak postoje određena pravila zapisa. Semantičke strukture koje se izmjenjuju pri opisu algoritma i koje "pokrivamo" pseudokodom su slijedeće: 1. Pridruživanje opisnog imena odgovarajućim vrijednostima: ime = varijabla 2. Strukture koje nude mogućnost odabira jedne od dvije (ili više) ponuđenih vrijednosti na temelju zadovoljenog uvijeta. Tipični primjeri takvih struktura mogu se definirati rečenicom: Ako promet robom raste, naručuje se uobičajena količina proizvoda, inače, uskladištena se roba nudi po nižoj cijeni koju lako prilagođavamo strukturi pseudokoda oblika: If (uvjet) Then (akcija1) Else (akcija2) Pri čemu koristimo ključne riječi if, then i else da bi naznačili podstrukture u strukturi i koristimo zagrade da bi naznačili granice podstruktura. Na taj je način definirana sintaksa određene semantike prilagođena pseudokodu. 3. Semantička struktura koja udovoljava zahtijevu za izvođenjem određenih aktivnosti sve dok neki uvjet ne postane istinit. Primjer izražen rečenicom: Sve dok sve karte nisu prodane, biljetarnica je otvorena. Takve se izjave uklapaju u obrazac: While (ima karata za prodaju) do (prodavati karte). 4. Pseudokod koristimo i da bi apstrahirali niz aktivnosti za neku drugu aplikaciju. U računarstvu se takav skup koraka označava različitim imenima: procedura, funkcija, potprogram, modul, a svaki ima, ovisno o aplikaciji, svoje specifične karakteristike i značenje. Izraženo pseudokodom, jedan bi takav skup mogli predstaviti slijedećom strukturom: Procedure Pozdrav Brojčanik = 3 While (Brojčanik>0) do ( print "hello" and Brojčanik = Brojčanik-1 ) Cilj pseudokoda je izraziti algoritam na čitljiv i neformalan način. Zato je način kojim ga predstavljamo samo pomoć za predstavljanje ideja, a ne način da ideju ugušimo. Da bi sve skupa bilo čitljivije pseudokod pišemo sa komentarima koji naznačavaju i opisuju pojedine strukture. Zadatak: Napišite pseudokod za Eulerov algoritam koji rezultira najvećim zajedničkim djeliteljem dvaju pozitivnih cijelih brojeva! x = veći ulaz y = manji ulaz while (y nije 0) do (Ostatak = ono što ostane pri cjelobrojnom dijeljenju x i y x = y y = Ostatak ) Rezultat = x Otkrivanje algoritma Razvijanje programa sastoji se od dvije aktivnosti: - otkrivanje algoritma - predstavljanje algoritma programom Pomoću pseudokoda algoritam smo predstavili ne vodeći računa o tome kako se do njega došlo. Zapravo je puno teži , veći i zanimljiviji posao otkriti algoritam. I za to postoje odgovarajuće metode; razumijeti kako se algoritmi pronalaze ekvivalentno je razumijevanju kako se općenito rješavaju problemi. Problematika teorije riješavanja problema nije tipična samo za računarstvo, nego je sastavni dio gotovo svih znanstvenih disciplina. Zbog potrebe da se što efikasnije otkrije algoritam, računarci su tražili odgovore zajedno sa stručnjacima iz drugih područja koji su bili zainteresirani za pronalaženje tehnika kojima se općenito rješavaju problemi. Krajnji doseg tih nastojanja trebao je biti opet algoritam za rješavanje bilo kojeg problema, što je naravno nemoguće definirati, ali smanjimo li ambicije u dosezanju krajnjeg cilja, moguće je definirati neke korisne smjernice koje ubrzavaju put do rješenja. Kao vrlo korisna pokazala se receptura koju je 1945. definirao matematičar Polya (1887, Budapest-1985, Pao Alto, USA) sa ciljem usavršavanja rješavanja zadataka općenito, koja glasi: 1. Shvati problem 2. Donesi plan za riješavanje 3. Provedi plan 4. Provjeri točnost plana i procijeni koliko je primjenjiv na druge probleme Polya-in koncept prenesen u kontekst razvijanja programa glasio bi: 1. Shvati problem 2. Smisli kako problem predstaviti algoritamski 3. Formuliraj algoritam 4. Provjeri točnost plana i procijeni koliko je primjenjiv na druge probleme Iskustvo pokazuje da Polyain koncept ne treba shvatiti kao recepturu koju treba strogo poštivati, nego više kao aktivnosti koje slijedimo u nekoj fazi rješavanja problema. Konkretno, ljudi koji se bave programiranjem jako često formuliraju dijelove algoritma i prije nego problem shvate u cijelosti. Ukoliko se postavljena strategija ne pokaže dobrom, autor obično uvidi greške koje mu pomažu da problem bolje sagleda (shvati), pa u drugom pokušaju najčešće ima više uspjeha. Idealno bi bilo da tijekom riješavanja zadataka nema uzaludno potrošenog vremena, nego da nas svaki korak primiče cilju. Ukoliko se razvijaju jako veliki softwerski sustavi, tada pogreška uočena tijekom 4. faze može značiti jako veliki trošak i upravo je zadatak softwerskog inženjerstva da u što većoj mjeri eliminiraju mogućnost nastajanja takvih situacija. Jedan od načina je da globalne smjernice za razvoj softwerskih modula postavljaju ljudi koji imaju uvid u težinu i način rješavanja problema. S druge strane, praksa nam govori o problemima koji se mogu riješiti algoritamski, a da dostupni podaci naizgled ne predstavljaju kvalitetnu osnovu koja bi nas mogla dovesti do cilja. Sama činjenica da se konkretno riješenje za problem ne nazire, uvijek u sebi krije mogućnost da problem nije dobro shvaćen. Tipičan primjer koji dobro ilustrira gore navedene mogućnosti predstavljen je pričom: Osoba A treba pogoditi koliko imaju godina djeca osobe B. Da bi joj olakšala posao, osoba B kaže osobi A da ima troje djece i da je produkt njihovih godina 36. Nakon što je promislila, osoba A, koja je inače jako dobar programer, kaže da bi joj bila nužna barem još jedna dodatna informacija, nakon čega osoba B uzvrati da može pretpostaviti da joj je poznata i suma godina njene djece. Kako je A rekla da joj na temelju danih informacija nitko ne može ponuditi točan odgovor čak ni kad bi se točno znalo koliko iznosi suma njihovih godina, B je rekla neka onda vodi računa o tome da joj najstariji sin jako dobro svira klavir. Zadovoljna pristiglim informacijama, A precizno izvijesti osobu B da zna kako ima dvogodišnje blizance i da je sigurno ponosna na devetogodišnjeg sina koji svira klavir!? Kako je osoba A pronašla točno riješenje, ako je druga informacija bila nepotpuna (nije rekla kolika je točno suma godina), a treća se čini besmislenom. U trenutku kada je B rekla da je produkt godina njene djece 36, A je napravila listu svih mogućih kombinacija: (1 1 36) (1 2 18) (1 3 12) (1 4 9) (1 6 6) (2 2 9) (2 3 6) (3 3 4) nakon čega je zatražila dodatnu informaciju. Uz pretpostavku da je poznata i suma njihovih godina lista bi poprimila slijedeći oblik: (1 1 36 38) (1 2 18 21) (1 3 12 16) (1 4 9 14) (1 6 6 13) (2 2 9 13) (2 3 6 11) (3 3 4 10) Iz oblika liste, jasan je i smisao odgovora osobe A, jer dvije liste imaju isti iznos za sumu godina. Iako treća informacija zvuči sasvim besmisleno promatramo li zadatak kao problem rješavanja tri jednadžbe sa tri nepoznanice, ipak informacija osobe B, rješenju konkretnog problema daje potpuni smisao, jer razdvaja liste sa istim odgovorima. Ovaj primjer jako dobro ocrtava karakteristike sličnih koje do kraja ne možemo razumijeti, ako ih ne pokušamo prije riješiti, zbog čega zapravo ne možemo definirati univerzalan i sistematičan put dolaska do cilja. Nije nebitna ni činjenica da većina programera prolazi kroz iskustvo koje se očituje «bljeskovima» tijekom kojih se dobiva ideja za riješavanje nekog problema od kojeg smo davno prije odustali. Psiholozi tumače pojavu kao djelovanje nesvjesnog koje je tijekom vremena savladalo problem i gurnulo rješenje u područje svjesnog. Na temelju svega toga jasno je da put do pronalaska rješenja umnogome ovisi o talentu i ambicijama onoga koji ga rješava i da mu treba pristupati više kao filozofskom pitanju, nego kao problemu čiji se koraci mogu točno definirati. Primjer 2: Prije utrke A, B, C i D dali su svoje prognoze o ishodu utrke: - A je predvidio da će pobijediti B - B je predvidio da će D biti posljednji - C je predvidio da će A biti treći - D je predvidio da je A dobro procijenio. Samo je jedna progoza bila točna i nju je predvidio pobjednik. Kako je završila utrka? A nije pobijedio jer je kazao da će pobijediti B; B nije mogući pobjednik jer bi A imao točnu prognozu; C je mogući pobjednik; A je u tom slučaju treći, B je posljednji (da bi prognoza B bila pogrešna), a D drugi, dakle točno rješenje je dobijeno metodom eliminacije i glasi: CDAB. Rješenje smo relativno lako pronašli, ali zasigurno bi trebalo vremena da bismo naš put do cilja definirali kao metodu. Kako su se tom problematikom ljudi ipak bavili, postoji definirana metodologija pronalaženja riješenja definirana slijedećim postupcima, koje nam mogu barem skratiti vrijeme definiranja algoritma: 1. Unazadna metoda kod koje se kretanjem od rezultata nastoje pronaći odgovarajuće ulazne vrijednosti (tipična za slagalice od papira) 2. Dani se problem riješava po uzoru na sličan, lakši problem čije nam je riješenje poznato. Takav je pristup jako čest kod programiranja kada primjerice radimo algoritam za sortiranje tako da pravila primijenjujemo na konkretnu listu, a zatim nastojimo poopćiti riješenje. 3. Rješenju se približavamo postepeno, riješavanjem niza potproblema; zadatak rastavljamo na manje cjeline, od kojih je svaka lakše riješiva od samog problema. Pri tom, postupak 3. karakterizira se kao tzv. TOP-DOWN postupak, kod kojeg primijenjena metodologija propagira od općeg na specifično, a postupci 1. i 2. kao BOTTOM-UP postupci koji propagiraju od specifičnog na opće. U praksi, problemi se obično rješavaju kombiniranjem oba postupka jer programeri najčešće raščlanjuju problem na manje cjeline (top-down) za koje intuitivno vjeruju (bottom-up) da će doprinijeti općem rezultatu. Iako je put dolaska do cilja različit, pri čemo nam na raspolaganju stoje različiti alati, dobro je ipak, ako ne potpuno razumijeti, ono barem promisliti malo o problemu koji stoji pred nama. Ponekad je riješenje sadržano u samom pitanju, ne treba ni razumijevanje da bismo postavili algoritam niti algoritam da bismo shvatili problem; potrebno je shvatiti da problem ni ne postoji. Tvrdnja je ilustrirana primjerom: Ako nam u trenutku kada pokrenemo brod koji stoji na rijeci i krenemo uzvodno, padne kapa u rijeku i počne se gibati nizvodno nošena strujom rijeke čija je brzina 3 km/h, koliko će nam trebati vremena da je ponovno ugledamo, vozimo li uzvodno 10 minuta brzinom od 4 km/h relativno u odnosu na rijeku? U ovom slučaju, umjesto da zbrajamo i oduzimamo brzine i računamo prijeđeni put, jasno je da ako brod okrenemo trebamo isto vrijeme da dođemo do kape jer se oba objekta gibaju po istom mediju. Iz svega ovoga može se zaključiti da je zadatak pronalaženja algoritma jedna vrsta umjetnosti u kojoj različiti ljudi različito uživaju i pridonose. Ipak, dobro je ovladati alatima koji se jako često koriste pri programiranju kako bi što lakše prepoznavali tipične probleme i na njih nebi trošili dragocjeno vrijeme pri otkrivanju algoritma. Takve tipične strukture su tzv. iterativna i rekurzivna struktura. Iterativne strukture Kod iterativnih se struktura, skup instrukcija ponavlja u petlji. Tipični algoritmi koji oriste te strukture su algoritam za sekvencijalno pretraživanje. Krenimo redom. Algoritam za sekvencijalno pretraživanje Cilj nam je pretražiti listu (pojmova, imena) u potrazi za određenim ciljem (target). Algoritam nam treba dati odgovor da li je traženi cilj na listi ili ne. Pri tom, pretpostavljamo da je lista složena nekim redom (primjerice, abecednim). Logično je zadatak riješiti tako da članove liste, redom, uspoređujemo sa vrijednošću cilja sve dok član sa liste ne postane jednak traženoj vrijednosti ili po abecednoj vrijednosti veći od ciljnog člana. U tom slučaju zaustavljamo pretraživanje i objavljujemo rezultat pretraživanja. Pseudokodom, algoritam bi mogli predstaviti: Procedure Traži(Lista, CiljnaVrijednost) If (Lista prazna) Then (Pretraživanje neispravno jer nema elemenata u listi) Else (Odaberi prvu vrijednost u Listi kao TestVrijednost; While (CiljnaVrijednost>TestVrijednost i Stoga ima elemenata u Listi koje treba ispitati) Do (Odaberi slijedeću vrijednost sa Liste kao TestVrijednost.); If (CiljnaVrijednost=TestVrijednost) Then (Objavi da je rezultat pretraživanja pozitivan) Else (Objavi da je rezultat pretraživanja negativan) ) end if Zbog jednostavnosti algoritam je primjeren pretraživanju malih listi. U ovom algoritmu iterativna struktura predstavljena je formom petlje kod koje se skup instrukcija (tijelo petlje) ponavlja u skladu sa postavljenim uvjetima. Forma petlje ima tri komponente: - inicijalizacija početnog stanja - testiranje trenutnog stanja sa traženim stanjem - modificiranje trenutnog stanja prema traženom Tipičan primjer: Broj = 1 While (Broj!=6) Broj = Broj+1 Postoje dva tipična oblika ponavljajućih struktura koje predstavljamo petljama (tzv. pretest loop i posttest loop), a u pseudokodu ih predstavljamo slijedećim formama: - repeat (aktivnost) until (uvjet) - while (uvjet) do (aktivnost) Algoritmi za uređivanje lista U ovom slučaju treba riješiti problem slaganja liste sa imenima prema abecednom redoslijedu. Pri tom listu treba presložiti unutar sebe, premještanjem za jedno mjesto koje se oslobađa kada ime sa tog mjesta želimo staviti na pravo mjesto u listi. Pretpostavka je da listu sastavljenu od samo jednog imena ne treba slagati, ali onu od dva već treba. Prema tome, ako promatramo listu sa slijedećim imenima: - Frane - Ana - Dino - Blaž - Crni Sa prvim imenom ne radimo ništa, a kada ime Ana želimo staviti na pravo mjesto u listi, zamišljamo kao da mjesto broj 2 (mjesto na kojem je bila Ana) ostaje upražnjeno, oslobođeno za prvo gornje ime iznad Ane koje je eventualno po abecednom redu iza nje. Kako je to zaista tako (Željko>Ana), Ana postaje prvim imenom na listi, a Željko postaje drugo ime. Nakon toga, slažemo ime Dino. Treće mjesto ostaje upražnjeno, Željko pada dolje, a Dino zauzima drugo mjesto. Procedura se ponavlja sve dok se ne naiđe na ime koje je po abecednom redu prije Dina, konkretno u ovom slučaju, to će biti Ana. Procedura se ponavlja sve dok ne dođemo do kraja liste. Dakle, izraženo pseudokodom, algoritam glasi: Procedure Sortiraj (Lista) N=2; While (vrijednost N ne postane jednaka broju članova liste) do Pomakni se do željenog mjesta na listi, ostavljajući to mjesto upražnjeno; While (ima imena iznad praznine i abecedni rang im je veći od željenog) Do (ime iznad pomakni u prazninu dolje, ostavljajući prazninu na mjestu na kojem se nalazilo) Pomakni željeni ulaz na to mjesto; N=N+1; ) Rekurzivne strukture Predstavljene su skupom instrukcija koje se ponavljaju u petlji, a među njima se nalazi i instrukcija koja označava sve instrukcije iz petlje. Interesantno je promotriti kako se prethodno opisani algoritam za pretraživanje liste može definirati pomoću ovakve strukture: Procedure Traži (lista, CiljnaVrijednost) If (lista prazna) Then javi grešku Else Odaberi srednju vrijednost iz liste kao TestUlaz; Usporedivši TestUlaz i CiljnuVrijednost, izvedi odgovarajući skup instrukcija, ovisno o rezultatu usporedbe (case); Case 1: CiljnaVrijednost=TestUlaz Javi rezultat da je ime na listi Case 2: CiljnaVrijednostTestUlaz Pretraživanje se ponavlja samo za imena koja se nalaze ispod TestUlaza ) end if Na ovaj način, u svakom se koraku pretraživanja broj imena na listi smanjuje na pola, pa se brže dolazi do rezultata. Algoritam pretraživanja liste pomoću rekurzivne strukture zove se algoritam binarnog pretraživanja.. Efikasnost i točnost Obično nije problem dobiti točno rješenje pomoću algoritma predstavljenim programskim jezikom, ali o efikasnosti algoritma ovisi da li će pronađeno rješenje saživjeti u praksi. Ukoliko pretražujemo listu sa 30000 imena, tada algoritam sekvencijalnog pretraživanja u prosjeku pretraži 15000 imena dok ne dođe do cilja. Ako pretpostavimo da svako pretraživanje traje 10 ms, onda će nam za pronalazak imena u listi trebati (u prosjeku) 150 000 ms = 2.5 minuta. Kod binarnog pretraživanja broj koraka koji nas dovodi do ciljne vrijednosti iznosi ln (30000)=8, što znači da je ukupno vrijeme pretraživanja cca 80ms., s tim da treba voditi računa o tome da slogovi moraju biti složeni po nekom redu kako bismo algoritam uopće mogli primijeniti. (Koliko se poveća vrijeme pretraživanja kod jednog, a koliko kod drugog algoritma ako se broj imena na listi udvostruči??- Upravo to, osjetljivost na porast broja elemenata u listi u ovom je slučaju mjera za efikasnost algoritma). Nadalje, prema dobivenom rješenju treba biti kritičan. Čak i kada smo sigurni da je ono točno, treba provjeriti je li riječ i o najboljem mogućem rješenju. (Priča o trgovačkom putniku koji hotel plaća karikama lanca-cilj je platiti sedam noćenja sa lančićem od sedam karika, tako da svaki dan platimo noćenje, a da lančić puknemo najmanji broj puta)

Centralna jedinica za obradu

Vježbe Linkovi
Centralna jedinica za obradu
U prethodnom dijelu pažnja je bila posvećena pohranjivanju podataka i organizaciji same memorije u računalu. Jednom kada su podaci pohranjeni, stroj mora moći manipulirati sa tim podacima u skladu sa naredbama algoritma. Stroj, dakle mora imati ugrađenu sposobnost: - izvođenja operacija i - koordiniranja redoslijedom izvođenja operacija Ovi zadaci se izvode u CPU, pa je glavna tema ovog dijela usko vezana uz način funkcioniranja centralne jedinice za obradu podataka (central processing unit – CPU). ARHITEKTURA RAČUNALA Dijelovi računala koji izvode operacije nad podacima (primjerice zbrajanja i oduzimanja nisu direktno vezani na memorijsku strukturu. Ti sklopovi čine zaseban funkcionalni dio računala - CPU (ili obično procesor), sastavljen od dva osnovna dijela: aritmetičko logičke jedinice u kojoj su sklopovi za manipulaciju sa podacima i upravljačke jedinice koja koordinira aktivnostima unutar računala. Za privremeno čuvanje podataka CPU koristi registre tzv. opće i posebne namjene. Registri opće namjene služe kao privremeni pričuvnici podataka koji se obrađuju unutar CPU. U ovim registrima čuvaju se vrijednosti koje ulaze u aritmetičko logičku jedinicu i čuvaju se rezultati koji se iz AL jedinice tamo pošalju. Da bi se izvela operacija nad podacima iz RAM-a, upravljačka jedinica mora: 1. voditi računa o tome da odgovarajući podaci dođu u registre opće namjene 2. informirati AL jedinicu u kojim registrima su podaci 3. aktivirati odgovarajuće sklopove unutar AL jedinice i 4. uputiti AL jedinicu gdje će pohraniti rezultat Da bi mogli izmijenjivati podatke, CPU i RAM povezani su skupom žica – BUSom. Preko BUSa, CPU može dohvatiti ili pročitati podatke iz RAM-a proslijeđivanjem adrese odgovarajuće memorijske lokacije i signala za čitanje. Na isti se način podaci mogu upisati u memoriju postavljanjem na BUS adrese lokacije odredišta, postavljanjem podatka i signala za pisanje. Slijedom ovih uputa, zadatak zbrajanja dvaju pohranjenih vrijednosti iz RAM-a uključuje puno više od provođenja same operacije zbrajanja. Proces uključuje koordiniranu akciju upravljačke jedinice koja upravlja prijenosom informacija između radne memorije i registara unutar CPU-a i aritmetičko logičke jedinice koja izvodi operacije zbrajanja u trenutku kada joj upravljačka jedinica da znak da ih izvede. Cjelokupan postupak zbrajanja dvaju vrijednosti pohranjenih u memoriju, mogao bi se predstaviti procedurom sastavljenom od 5 koraka: Korak 1: Uzmi prvu vrijednost koja se zbraja i pohrani je u registarKorak 2: Uzmi drugu vrijednost koja se zbraja i pohrani je u drugi registarKorak 3: Aktiviraj sklopove za zbrajanje sa vrijednostima koje su pohranjene u registrima tijekom prva dva koraka.Korak 4: Rezultat operacije pohrani u memoriju.Korak 5: Stani.Ukratko, podaci se moraju prenijeti iz memorije u CPU, a rezultat se na kraju ponovno pohranjuje u memoriju. Starija računala nisu nudila fleksibilnost koja se dobila ovakvim organiziranjem CPUa. Sklopovi koji su upravljali i izvodili operacije bili su sastavni dijelovi stroja, ni na koji način organizirani u posebnu funkcionalnu jedinicu. Drugačije funkcioniranje stroja, od onog za koje je bilo konstruirano, moglo se, u najboljem slučaju, dobiti prespajanjem dijelova CPUa preko upravljačkog pulta. Do bitog pomaka prema fleksibilnijem računalu došlo se sa arhitekturom koja je nudila mogućnost da se program, isto kao i podaci, pohrani u radnu memoriju. Upravo je John von Neumann-u pripala sva zasluga za definiranje arhitekture ovakvog tipa iako je, i prije nego što je on svoj rad objavio, Eckert-ov stroj izgrađen na tim načelima, uspješno funkcionirao. U njegovom je stroju, baš kao i u današnjim računalima, upravljačka jedinica dohvaćala program iz memorije, dekodirala instrukcije i izvodila ih, a namjena računala mijenjala se u skladu sa pohranjenim programom. STROJNI JEZIK Da bi se realiziralo računalo koje radi u skladu sa pohranjenim programom, CPU mora prepoznavati instrukcije kodirane nizom bitova. Ovaj skup instrukcija kodiranih binarnim nizovima predstavljaju strojni jezik. Instrukcijski skup Možda iznenađujuće zvuči činjenica da je tipičan instrukcijski skup kojeg CPU može dekodirati i izvoditi jako malen. Kada i ako je dobro definiran, dodavanjem novih instrukcija ne povećavaju se teoretske mogućnosti stroja nego ga se eventualno prilagođava tekućim potrebama. Različiti pristupi u projektiranju instrukcijskog skupa rezultirali su različitim karakteristikama arhitektura današnjih procesora: RISC i CISC. Argumenti koji idu u prilog RISC arhitekturi (reduced instruction set computer) je efikasnost i brzina izvođenja velikog broja jednostavnih instrukcija. S druge strane, zagovornici CISC arhitekture (complex instruction set computer) smatraju da složeniji instrukcijski skup pruža veće mogućnosti jer će se sa jednom instrukcijom riješiti veći dio zadatka, makar neke od tih instrukcija bile redundantne. Iako se danas efikasnijim smatraju RISC procesori, u vrijeme kada je nastala, CISC arhitektura imala je opravdano puno zagovornika. Složeniji instrukcijski skup zahtijevao je manji memorijski prostor, što je tada predstavljalo značajnu uštedu zbog skupoće memorije. S vremenom, cijena memorije je padala, a istraživanja su pokazala da se tijekom 90% vremena u kojem se izvodi program, koristi samo 10% naredbi iz instrukcijskog skupa CISC procesora, dok je kod RISC procesora iskoristivost daleko veća. Time se polazna pretpostavka koja je išla u prilog uštedi memorijskog prostora pokazala potpuno pogrešnom. Danas na tržištu postoje procesori temeljeni i na jednoj i na drugoj arhitekturi. Pentiumovi procesori, koje je razvio Intel, tipični su primjeri CISC arhitekture, za razliku od PowerPC serije procesora koje su razvili AppleComputer, IBM i Motorola i koji su tipični predstavnici RISC arhitekture. Općenito. Instrukcije procesora mogu se svrstati u tri osnovne kategorije: - instrukcije za prijenos podataka,- aritmetičko-logičke instrukcije i- upravljačke instrukcije. Instrukcije za prijenos podataka:U ovu grupu spadaju instrukcije koje zahtijevaju pomicanje podataka sa jednog na drugo mjesto. U gornjem primjeru koraci 1,2 i 4 spadali bi u ovu grupu. Instrukcije pomicanja kopiraju (a ne premještaju) vrijednosti iz radne memorije u odgovarajuće registre procesora. Pri tom, koristi se izraz LOAD kojim se naznačava da je riječ o upravo toj akciji, a za obrnutu proceduru pohranjivanja vrijednosti iz registara u radnu memoriju, uobičajeni je termin STORE. U spomenutom primjeru, instrukcije 1 i 2 primjeri su LOAD operacija, a istrukcija u 4. koraku naznačava STORE operaciju. U ovu kategoriju spadale bi i instrukcije kojima podatke iz radne memorije pohranjujemo na neku od vanjskih jedinica i zovemo ih I/O instrukcijama. Zbog njihovih karakteristika, ponekad ih se svrstava i u zasebnu kategoriju. Aritmetičko logičke instrukcije:U ovu grupu spadaju instrukcije koje od upravljačke jedinice traže pokretanje aktivnosti unutar aritmetičko logičke jedinice. I samo ime za AL jedinicu sugerira da ova može osim uobičajenih aritmetičkih, obaviti i logičke operacije. U te spadaju, primjerice logičke AND, OR ili XOR operacije koje se često koriste za izmjenu samo nekih vrijednosti bitova u podacima pohranjenima u registre opće namjene. Druga skupina logičkih operacija omogućava pomicanje niza vrijednosti unutar registra u lijevo ili u desno (SHIFT i ROTATE). Upravljačke instrukcije:U ovu grupu spadaju instrukcije koje ne manipuliraju sa podacima nego usmjeravaju izvođenje programa. Krajnje jednostavni primjer instrukcija iz ove skupine, predstavljao bi 5. korak iz primjera – STOP. Osim te, u istu grupu spada i operacija JUMP, koja će vjerojatno više zakomplicirati program. Na donjoj slici predstavljen je algoritam kojim možemo dijeliti vrijednosti pohranjene u memoriji, uz pomoć spomenutih operacija. 1. LOAD registar sa vrijednošću iz memorije2. LOAD drugi registar sa vrijednošću sa druge lokacije3. Ako je druga vrijednost 0, JUMP na korak 6.4. Podijeli sadržaj prvog sa drugim registrom i rezultat odloži u treći registar5. STORE sadržaj trećeg registra u memoriju6. STOP. Ilustrativni primjer strojnog jezika Promotrimo kako su kodirane instrukcije na jednom tipičnom stroju koji koristi 16 registara opće namjene i ima 256 adresa radne memorije na kojima se može pohraniti byte podatka. Zbog točnosti prikaza, neka su registri označeni vrijednostima od 0 do 15, a vrijednosti memorijskih adresa od 0 do 255 i to predstavljeno odgovarajućim binarnim ekvivalentima i heksadecimalnim zapisom. Kodirana strojna instrukcija ima dva tipična dijela: tzv. polje op-koda (operacijski kod) i polje operanda. Niz bitova u polju operacijskog koda predstavlja neku od instrukcija iz instrukcijskog skupa, a niz bitova u polju operanda indicira detalje potrebne za izvođenje instrukcije, primjerice koji se registar opće namjene koristi za podatak sa određene lokacije u memoriji. Cijeli instrukcijski skup ovog ilustrativnog primjera predstavljen je sa 12 osnovnih instrukcija.Izvođenje programa Računalo slijedi program pohranjen u memoriji kopiranjem instrukcija iz memorije u upravljačku jedinicu. Kada je naredba u upravljačkoj jedinici, svaka se instrukcija dekodira i pokreću se odgovarajuće akcije u skladu sa značenjem instrukcije. Red kojim se instrukcije dekodiraju odgovara redoslijedu kojim su pohranjene u memoriju, osim ako drugačije nije specificirano, primjerice JUMP naredbom. Da bi se razumjelo kako se izvodi program, nužno je izbliza promotriti funkcioniranje upravljačke jedinice unutar CPUa. Unutar te jedinice nalaze se dva registra posebne namjene:programsko brojilo i instrukcijski registar.Programsko brojilo sadrži adresu memorijske lokacije sa slijedećom naredbom i služi kao oznaka za mjesto do kojeg se došlo u izvođenju programa. Upravljačka jedinica izvodi instrukciju tijekom u "strojnog ciklusa" sastavljenog od tri koraka tijekom kojih se: DOHVAĆA, DEKODIRA i IZVODI instrukcija. Kod dohvaćanja, upravljačka jedinica proslijeđuje (kopira) instrukciju sa memorijske lokacije naznačene programskim brojilom u instrukcijski registar. Kako je svaka instrukcija duga 2 byta, postupak dohvaćanja podrazumijeva prebacivanje podataka sa dvije memorijske lokacije u instrukcijski registar. Pri dekodiranju instrukcija se razbija na sastavne dijelove: op-code i polje operanda. U skladu sa op-codom definira se vrijednost programskog brojila i inicijaliziraju se sklopovi koji sudjeluju u izvođenju operacije čime se otvara put za konačno izvođenje same operacije. Time jedan strojni ciklus završava. Interesantni su primjeri instrukcija B258 i B058. U prvom slučaju riječ je o uvjetnom skoku: ako sadržaj registra 2 i 0 nije jednak, izvođenje se zaustavlja, a ukoliko je, onda programsko brojilo poprima vrijednost 58 i izvođenje se nastavlja. U drugom slučaju uspoređuje se vrijednost registra 0 sa samim sobom. Kako su te dvije vrijednosti uvijek iste, naredba predstavlja bezuvjetni skok na instrukciju pohranjenoj na adresi 58. Instrukcije varijabilne dužine Zbog pojednostavljenja, strojni jezik opisan tablicom koristi fiksnu dužinu za sve instrukcije. Dakle, da bi se dobavila instrukcija, CPU uvijek dobavlja sadržaj sa dviju susjednih lokacija i uvećava sadržaj programskog brojila za 2. U realnim sustavima, strojni jezici uglavnom koriste instrukcije varijabilne dužine. Procesori Pentium koriste instrukcije čija dužina ovisi o stvarnom načinu korištenja instrukcije. Kod takvih strojnih jezika, duljina je definirana op-kodom, koji kad se dekodira daje informaciju o broju byta koje iz memorije treba dohvatiti da bi se došlo do potpune instrukcije.

Pohranjivanje podataka 2






Radna memorija-organizacija Memorija, o kojoj je ovdje riječ, ugrađena je u samo računalo. To je ona memorija koju procesor (CPU) koristi za neposrednu pohranu i dobavu podataka. Dok je računalo uključeno i dok obrađuje podatke, ti podaci i programi nalaze se u radnoj memoriji. Zbog potrebe čuvanja podataka, računala sadrže ogromne količine sklopova koji čuvaju jedan jedini bit. Taj pričuvnik bitova u biti je radna memorija. Sklopovi glavne memorije računala organizirani su u jedinice kojima možemo pristupati, a zovu se ćelije (lokacije) tipične dužine od 8 bita. U stvari, skup od 8 bitova postao je toliko popularan da se je termin BYTE uobičajilo koristiti kao izraz koji označava skup bitova te veličine. Memorijske lokacije možemo zamisliti kao niz pretinaca, od kojih svaki ima svoju adresu. I ne samo da svaka memorijska jedinica ima svoju adresu, nego i unutar pojedinog bytea zna se točan redoslijed bitova prema važnosti. Krajnje lijevi bit u byteu je bit najveće važnosti, a onaj krajnje desni je najmanje značajan bit. Kao bitnu posljedicu označavanja (adresiranja) byteova i bitova u njima, čitavu glavnu memoriju možemo predstaviti jednim dugačkim redom. Dijelovi tog dugog reda mogu se iskoristiti za pohranjivanje uzorka bitova koji je dulji od 1 bytea. Obično ga spremamo u string koji je cjelobrojni višekratnik osnovne memorijske ćelije. Osim toga, ovakav način organiziranja memorije omogućava nam dobavljanje sadržaja sa svake memorijske lokacije posebno. Stoga se podacima može pristupati preko reda, bez obzira gdje su (kaotično – random) pa se ovakve memorije zovu RAM-ovi (random access memory). Osim tih vrsta memorije, glavnu memoriju čine i ROM-ovi (memorije koje služe samo za čitanje). Kapacitet memorije mjeri se ukupnim brojem bajtova koji se mogu u nju pohraniti. Današnja računala imaju 128 MB, 256 MB kapacitet glavne memorije. Još malo općenito o kapacitetu: Običaj je projektirati memorijski sustav tako da ukupan broj lokacija možemo izraziti kao potenciju broja 2. Suprotno tome, veličina memorije kod starijih sustava često se mjerila jedinicom od 1024 bita (2 na 10). Kako je 1024 otprilike jednako 1000, društveno je prihvaćen prefiks kilo kao dodatak osnovnoj jedinici. Stoga je termin kilobajt (KB) označavao 1024 bita, a za stroj sa 4096 adresnih lokacija govorilo se da ima 4 KB memorije. Kako je memorija postajala sve glomaznija, u upotrebu je došao termin mega (2na20) i giga. Primjena ovih prefiksa pogreška je u odnosu na terminologiju (km, MHz...), pa je negdje izazivala nesporazume. Jedan od novijih «pomirljivih» prijedloga predlaže upotrebu "kibi"-ja, kao skraćenicu za kilobinary, pa bismo kapacitet izražavali sa, primjerice 256 MebiByte-a. Memorija-vrste RAM-memorija je upisno ispisna memorija u koju se mogu upisivati podaci i iz nje čitati onoliko puta koliko želimo. Pohranjeni podaci ostaju u ovoj memoriji dok ih računalo namjerno ne promijeni ili dok se ne prekine napajanje memorije električnom energijom. Dakle RAM gubi svoj sadržaj prestankom napajanja, pa se naziva i nepostojana memorija (engl. Volatile) Glavne značajke RAM-a su kapacitet i brzina rada. Poželjno je da RAM bude što većeg kapaciteta kako bi se pohranilo što više podataka. Neki RAM uspoređuju sa radnim stolom: što je veći to nam je dostupnija i preglednija veća količina različitih «papira», pa je logično da će računalo sa većim RAM-om biti ugodnije (brže) za korištenje. Brzina rada RAM-a određene je brzinom kojom ova memorija pohranjuje i izdaje podatke. Za čitanje nekog podatka iz memorije potrebno je navesti adresu memorijske lokacije na kojoj se nalazi podatak. Vrijeme koje protekne od trenutka kada se na adresnim sabirnicama pojavi adresa treženog podatka do trenutka kada se na podatkovnim sabirnicama pojavi sam podatak zove se vrijeme pristupa memoriji (access time). Vrijeme pristupa ograničava brzinu kojom se mogu čitati podaci iz memorije i upisivati u nju, pa može ograničiti brzinu rada cijelog računala. RAM-ovi današnje tehnologije imaju vrijeme pristupa 10.tak nanosekunda. Suvremeni RAM-ovi izgrađeni su u poluvodičkoj tehnologiji i razlikujemo dvije vrste:
statički
dinamički. SRAM-statički RAM; vrsta je radne memorije kod koje je svaki bit pohranjen u jednom od bistabilnih sklopova smještenim u memorijskom integriranom sklopu. Prednosti SRAM-a su jednostavnost građe, jednostavnost pogona i veoma brz pristup memoriji. Nedostatak su mu relativno velike dimenzije bistabilnog sklopa, što ograničava broj bistabila koji se mogu smjestiti na jednu pločicu poluvodiča. SRAM-ovi su znatno manjeg kapaciteta od dinamičkih memorija, a znatno su veće cijene. U SRAM-u se pohranjuje mala količina podataka (npr. Pohrana karakterističnih parametara računala, cache-brza priručna memorija) DRAM – dinamički RAM; vrsta je radne memorije kod koje je svaki bit pohranjen kao naboj u minijaturnom kondenzatoru smještenom u memorijskom integriranom sklopu. Zbog nesavršenosti dielektrika u kondenzatoru, naboj pohranjen u kondenzatoru postepeno se gubi, pa se time gubi i podatak. Kako se to ne bi dogodilo, potrebno je naboj obnoviti prije nego li se kondenzator potpuno isprazni. Obnavljanje se obavlja pomoću posebnih sklopova koji najprije čitaju podatke, a zatim obnavljaju naboj svakog kondenzatora sukladno očitanoj vrijednosti. Obnavljanje naboja (memory refreshing) provodi se svakih nekoliko milisekunda ili češće, što znatno usporava i komplicira komunikaciju DRAM-a s okolinom. Prednosti su malene dimenzije kondenzatora koji pohranjuje bit vrijednosti, pa je moguće smjestiti mnogo takvih kondenzatora na jednu pločicu poluvodiča. Nedostatak DRAM-a je potreba za relativno složenim pogonskim sklopom i sporost u radu uzrokovana obnavljanjem memorije. Cijena mu je niža od cijene statičkih memorija, tako da je DRAM uobičajena radna memorija u suvremenim osobnim računalima. ROM memorija – (read only memory) ispisna je memorija, tj. Memorija u koju se podatak može upisati samo jednom. Nakon upisa podatak se može čitati onoliko puta koliko se želi, ali ne i mijenjati, brisati ili upisivati novi podatak. Zato je primjena ove memorije ograničena na pohranu podataka koji su uvijek jednaki i nepromijenjeni. Takvi su primjerice podaci u svezi s prikazom slova na ekranu, dijelovima operacijskog sustava, itd. Takvih, nepromijenjivih podataka ima relativno malo, pa je ugrađeni ROM malog kapaciteta (128 KB). Brza priručna memorija – cache; Kada procesor dobavlja podatke iz RAM-a, treba mu prosječno oko 60ns. Kako mikroprocesor radi puno brže (u ciklusima od 2 ns) to gubi jako puno vremena čekajući na podatke iz RAM-a. Problem se pojavio zbog nerazmjera u povećanju brzine rada između procesora i memorije. Naime, veći broj komponenti na jedinici površine integriranog sklopa rezultira većim povećanjem brzine rada procesora u odnosu na memoriju, što je vidljivo na slici Sl.1.






Sl.1. Krivulje koje pokazuju nejednako povećanje efikasnosti obzirom na broj komponenti integriranih na chipu Zbog toga je trebalo postojeći sustav sistemske memorije poboljšati ili ugradnjom brže memorije, što bi značajno poskupilo cijenu sustava ili odgovarajućim tehničkim inovacijama. U ovom slučaju, hijerarhijska organizacija memorije (Sl.2.),pokazala se kao idealna jer se dodavanjem malenog kapaciteta brze memorije (SRAM tehnologije) trebala ubrzati velika

količina spore i manje skupe memorije. Tako je na samom procesoru ugrađen tzv. L1 cache, mala priručna memorija čiji sadržaj sa lokacija procesor dobavlja jednako brzo kao i iz svojih registara, a izvan procesora ugrađuje se u računarski sustav tzv. L2 cache, brzi memorijski spremnik u koji se pohranjuje dio podataka iz RAM-a za koje se pretpostavlja da će ih procesor ubrzo zatražiti. L2 cache otprilike je duplo brži od RAMa i ima kapacitet od 512KB do 1MB. Kako cache funkcionira? Glavna se memorija sastoji od 2^n adresibilnog prostora riječi, kod kojeg svaku riječ dohvaćamo pomoću n-bitne adrese. Da bismo podatke prebacili u cache, memoriju dijelimo na odgovarajuće blokove riječi fiksne dužine K. Stoga je ukupan broj blokova M=2^n/K. Cache je podijeljen na C linija u koje može stati K riječi. Kako je cache manji od memorije to će i broj raspoloživih linija biti manji od ukupnog broja blokova (C<
Efikasnost cache memorije: Efikasnost cache memorije određuje broj koji govori koliko je puta procesoru stvarno i isporučen podatak nakon što ga je zatražio. U tom kontekstu često se koriste termini kao što je pogodak (hit) koji označava da je podatak kojeg procesor traži stvarno i pronađen u cache memoriji. U slučaju da ga tamo nema kažemo da je riječ o promašaju (miss). Postoje tri različita tipa promašaja:
Nezaobilazni (compulsory) promašaj pri prvom posezanju za podacima iz memorije kada je cache još prazan;
Kapacitetni (capacity) promašaj koji se javlja ako se svi potrebni blokovi ne mogu smjestiti odmah u cache nego ih se dobavlja kasnije. Uzrok promašaja je nedostatna veličina cache memorije.
Konfliktni promašaj je onaj koji nastaje zbog primijenjene strategije prebacivanja podataka u cache. Naime ukoliko više blokova iz RAM-a pretendira na isto mjesto u cache memoriji, ne mogu se svi učitati odmah nego ih se dobavlja kasnije. Ponekad se ova vrsta promašaja zove promašajem kolizije ili interferencije; Vrijeme potrebno za dobavljanje podatka iz cachea je vrijeme pogotka (hit time). Ukoliko se podatak ne dohvati, govorimo o promašaju, pa u tom slučaju dohvaćaju se podaci iz hijerarhijski niže memorijske strukture i premještaju u cache. Vrijeme koje protekne da se dohvati blok iz niže memorijske strukture, a zatim prebaci u cache i iz njega dohvati podatak, nazivamo globom za promašaj (miss penalty). Uspješnost pogađanja (hit ratio) mjeri se kao postotak uspješno dobavljenih podataka iz cachea u odnosu na ukupan broj posezanja, neuspješnost (miss ratio) je komplementarna vrijednost i računamo je kao 1-hit_ratio. Cilj je da uspješnost pogađanja bude što je moguće veća. Primjer:Pretpostavimo da za dohvaćanje podataka iz L1 cachea treba 10 ns, a iz glavne memorije 100ns. Ukoliko je upsješnost pogađanja 90%, to znači da će tijekom 10 posezanja za podacima, 9 biti u cacheu, a 1 u RAMu. Bez cachea, trebalo bi nam ukupno T1=10*100ns=1000ns vremena za dobavljanje podataka. U slučaju cache-a, treba nam T2=1*100+9*10=190ns, što znači da smo čitav postupak ubrzali za 1000/190=5.3 puta. Sa ciljem da se što više poveća postotak uspješnosti, razvijene su različite tehnike, koje djeluju na različite uzroke promašaja. Tehnike se odnose na:
veličinu cachea
funkcije koje preslikavaju podatke iz RAMa u cache
algoritme temeljem kojih se postojeći blokovi iz cachea zamjenjuju novima
načinom na koji se upisuju blokovi
odabirom veličine blokova
brojem cache memorija Heksadecimalno označavanje Kada promatramo unutarnju aktivnost u računalu, baratamo sa nizovima bitova koji mogu biti prilično dugi. Takvi se nizovi zovu stream-ovi. Na žalost, ljudski mozak nije prilagođen baratanju sa stream-ovima. Samo prepisivanje uzorka od desetak nula i jedinica je zamorno i podložno pogreškama. Zbog toga, da bismo sve skupa pojednostavnili koristi se heksadecimalno označavanje