ITKA203 Käyttöjärjestelmät, kesä Kesäkurssi Opettaja: Paavo Nieminen

Samankaltaiset tiedostot
Ohjelmointi 1 / syksy /20: IDE

4. Lausekielinen ohjelmointi 4.1

4. Lausekielinen ohjelmointi 4.1

11/20: Konepelti auki

13/20: Kierrätys kannattaa koodaamisessakin

5. HelloWorld-ohjelma 5.1

4. Luokan testaus ja käyttö olion kautta 4.1

AS C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo

Luento 1 Tietokonejärjestelmän rakenne

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus

Luento 1 Tietokonejärjestelmän rakenne

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python

Laiteläheinen C-kieli, yleistä

5. HelloWorld-ohjelma 5.1

D-OHJELMOINTIKIELI. AA-kerho, 33. Antti Uusimäki. Arto Savolainen

Korpusten käsittely clt131, P Luento 4

Ohjelmoinnin peruskurssien laaja oppimäärä

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python

7/20: Paketti kasassa ensimmäistä kertaa

Korpusten käsittely clt131, P Luento 5

Tietokoneen toiminta, K Tavoitteet (4)

Kesäkurssi Opettaja: Paavo Nieminen Tervetuloa!

Jakso 12 Yhteenveto. Keskeiset asiat Teemu Kerola, K2000

JAVA on ohjelmointikieli, mikä on kieliopiltaan hyvin samankaltainen, jopa identtinen mm. C++

19/20: Ikkuna olio-ohjelmoinnin maailmaan

MITÄ JAVASCRIPT ON?...3

Virtualisointiympäristössä on kolme pääosaa: isäntä (host), virtualisointikerros ja vieras (guest).

Ohjelmoinnin perusteet Y Python

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli

Tietokoneen toiminta (Computer Organization I)

Tietokoneen toiminta (Computer Organization I)

14/20: Keittokirja I

Soveltuvuustutkimus Lifebelt-ohjelman ideologian käytettävyydestä olioorientoituneeseen

Dart. Ryhmä 38. Ville Tahvanainen. Juha Häkli

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Julkaiseminen verkossa

Tietokoneen toiminta (Computer Organization I)

Johdatus ohjelmointiin

KYMENLAAKSON AMMATTIKORKEAKOULU

8/20: Luokat, oliot ja APIt

Luento 4. Timo Savola. 21. huhtikuuta 2006

Komentotulkki. Kysymyksiä

.NET ajoympäristö. Juha Järvensivu 2007

Luento 5. Timo Savola. 28. huhtikuuta 2006

Tietokoneen toiminta (Computer Organization I)

Käännös, linkitys ja lataus

Ohjelmointi Linuxissa. Sisällysluettelo. 1. Mitä tarvitaan sovellusten tuottamiseen? Tehnyt: Antti Martikainen ( )

NetBeans asennus ja etäkäyttö C-kielen opiskeluun, Linux

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

Ohjelmointi 1. Kumppanit

Maastotietokannan torrent-jakelun shapefile-tiedostojen purkaminen zip-arkistoista Windows-komentojonoilla

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

Metropolia Ammattikorkeakoulu

Ohjelmoinnin perusteet Y Python

3. C-kieli sulautetun järjestelmän ohjelmointikielenä , pva

TIE Ohjelmistojen suunnittelu

Ohjelmointi II. Erkki Pesonen Luennot ja harjoitukset. Itä-Suomen yliopisto Tietojenkäsittelytieteen laitos 2015

Common Language Runtime

17/20: Keittokirja IV

Kieliteknologian ATK-ympäristö Neljäs luento

OHJELMISTOKEHITYS -suuntautumisvaihtoehto

WINE API ja Virtualisointiohjelmistot

Linux. 00 Keskeiset piirteet. Unix ja Linux Helsingin ammattikorkeakoulu Stadia Vesa Ollikainen (muokannut M.Mäki-Uuro) Kysymyksiä

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 30. marraskuuta 2015

Hakemistojen sisällöt säilötään linkitetyille listalle.

Ohjelmoinnin peruskurssi Y1

Näin asennat MS-DOS käyttöjärjestelmän virtuaalikoneeseen

12/20: Bitit talteen

TIE Ohjelmistojen suunnittelu. Luento 8..9: moniperintä

.NET ja C# Virtuaalikone. Common Language Infrastructure (CLI) Periaate. Etuja. Haittoja. Mikä on CLI. CLI standardin merkitys (CLS, Ecma)

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä

Tietotekniikan valintakoe

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

5/20: Algoritmirakenteita III

Hieman linkkejä: lyhyt ohje komentoriviohjelmointiin.

Pythonin Kertaus. Cse-a1130. Tietotekniikka Sovelluksissa. Versio 0.01b

NetBeans asennus ja etäkäyttö C-kielen opiskeluun, Windows

Oppimistavoitteet kurssilla Tietokoneen toiminta

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

Dynaaminen kääntäminen ja Java HotSpot

Kieliversiointityökalu Java-ohjelmistoon. Ohje

P e d a c o d e ohjelmointikoulutus verkossa

Tähtitieteen käytännön menetelmiä Kevät 2009

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

815338A Ohjelmointikielten periaatteet

Johdanto Meta Kielten jaotteluja Historia. Aloitusluento. TIES542 Ohjelmointikielten periaatteet, kevät Antti-Juhani Kaijanaho

Rakenteiset tietotyypit Moniulotteiset taulukot

TT00AA Ohjelmoinnin jatko (TT10S1ECD)

Osa. Listaus 2.1. HELLO.CPP esittelee C++ -ohjelman osat. 14: #include <iostream.h> 15: 16: int main() 17: {

Luento 1 (verkkoluento 1) Tietokonejärjestelmä

Linux rakenne. Linux-järjestelmä koostuu useasta erillisestä osasta. Eräs jaottelu: Ydin Komentotulkki X-ikkunointijärjestelmä Sovellusohjelmat

Ongelma(t): Miten jollakin korkeamman tason ohjelmointikielellä esitetty algoritmi saadaan suoritettua mikro-ohjelmoitavalla tietokoneella ja siinä

7. Oliot ja viitteet 7.1

Transkriptio:

Kesäkurssi 22.5.-27.7.2007 Opettaja: Paavo Nieminen <nieminen@jyu.fi>

Luento 3 24.5.2007 Ohjelmointi ja ohjelmointikieli suoritus ja konekieli Aiheet: Pääteyhteys ja interaktiivisen shellin käytön idea; bash, tcsh, MS-DOS komentokehote Shellin käytöstä: pääpiirteet, mahdollisuudet, vaarat Java-ohjelman kääntäminen ja ajaminen komentoriviltä C-ohjelman kääntäminen ja ajaminen komentoriviltä Tiedostoformaateista ja tiedon tallentamisesta

ENNEN KUIN ALOITAT shellin käytön... Muista vaarat: Komennat tietokonetta hyvin suoraan ja tehokkaasti! jos pyydät poistamaan tiedoston, se HÄVIÄÄ! jos ylikirjoitat tiedoston, aiempi sisältö HÄVIÄÄ! (ja kun jotain hävisi, se EI TULE TAKAISIN! Esim. pieni käsky rm -rf. voi tuhota sinulta kaiken. Ja echo > gradu.tex olisi varsin paha myös!) Ns. Roskakoria tai muita tuplavarmistuksia ei ole. Vältä vaarat: Ajattele ennen kuin kirjoitat! Ajattele vielä kerran ennen kuin painat enteriä! Älä päästä kissaa, lapsia tai vastaavaa näppäimistölle. Varmuuskopioi tärkeät tiedot usein. (Joka tapauksessa, käytitpä shelliä tai mitä tahansa!!!)

Kertaus: ENNEN KUIN ALOITAT shellin käytön... Muista: Ajattele ennen kuin kirjoitat! Ajattele vielä kerran ennen kuin painat enteriä! Ymmärrä komentosi etukäteen. Jos et ymmärrä, lue manuaalia kunnes ymmärrät. Älä päästä kissaa tai vastaavaa näppäimistölle. Copy-pastessa on vaaransa; tiedä, mitä pastaat, jos pastaat suoraan interaktiiviseen shelliin!

Älä panikoi! Älä panikoi: Jos olet tarkkana ja tiedät, mitä teet, ei ole hätää Nykyiset shellit ja apuohjelmat ovat kehittyneitä, turvallisia ja käyttäjäystävällisiä (eri asia kuin graafinen ja klikkailtava... ) Shellin ja pääteyhteyden osaaminen mahdollistaa paljon käteviä juttuja. Edelliset varoitukset olivat vähän sama juttu kuin että älä aja autolla täyttä vauhtia seinään vaikka se olisi helppoa ja vaivatonta kyseisellä välineellä.

Ja sitten vaan käyttämään shelliä! Mistä on kyse: Kirjoitat komennon, ja painat enteriä... Shell tekee, mitä komensit (useimmiten suorittaa pyytämäsi apuohjelman), ja näet komentosi aiheuttamat tulosteet sitä mukaa kun niitä tulee. Näin tietokoneita käytetiin jo silloin kun ei ollut monitoreja (näppis oli kirjoituskonemainen, ja tulosteet hakkautuivat printterillä paperille). Näin tietokoneita on varsin kätevä käyttää nykyäänkin. Vain vähän erilaista kuin hiirellä klikkaaminen;

Pääteyhteys ja pääteyhteysohjelma Mistä on kyse: Otat yhteyden tietokoneeseen, johon sinulla on käyttäjätunnus Etäkone käynnistää sinua varten shellin. Shell-ohjelma toimii siis usein kaukana siitä, missä istut. Pääteyhteysohjelma, kuten Secure Shell tai Putty, toimii omalla tietokoneellasi. Se vain välittää Internetin yli näppäinpainallukset ja tulosteet (ja näyttää ne sinulle) SSH2-protokollassa tietoliikenne on salattua, minkä etäkoneen serveriohjelma ja oma pääteyhteysohjelmasi (client) hoitavat.

Miten tästä eteenpäin Demot: Demoissa tehdään kädestä-pitäen-harjoitteita, joissa käydään läpi pääteyhteyden ja interaktiivisen shellin käyttö sekä useita tyypillisiä Unixeista tai ainakin Linuxeista löytyviä apuohjelmia Jossain vaiheessa siirrytään tallentamaan komentoja peräkkäin tekstitiedostoon eli tekemään shell-skriptejä Ihan vähän katsotaan shellien ohjelmointiominaisuuksia eli muuttujia ja kontrollirakenteita.

Shellit hanskassa! Pääteyhteys ja shell on nyt esitelty, joten päästään täysipainoisesti käyttämään niitä luentoesimerkeissä! Notta kädet rasvaan taas

Ohjelmointi ja ohjelmointikieli Ohjelmointi on... osa ohjelmistotyötä, suunnittelua, toteutusta ym. mutta rajataan tässä yhteydessä tarkemmin... Lähdekoodin tekemistä eli tekstin editointia Ohjelmointikieliä on tuhansia, esim. Algol, Basic, C, C++, C#, D, Eiffel, Fortran,..., Java,... Parhaassa tapauksessa kieli valitaan tilanteen mukaan; kukin soveltuu joihinkin ohjelmiin paremmin kuin toisiin Vähimmillään tarvitaan tekstieditori kuten ConText, Emacs tai Nano Yleensä tehdään ohjelmakehitysympäristöllä eli IDEllä kuten Eclipse, NetBeans, JBuilder, Delphi,...

Suoritus ja konekieli Ohjelman suoritus on... Sitä kun prosessori noutaa ja suorittaa konekieltä eli bittijonoksi koodattuja käskyjä peräjälkeen Mitä bittejä konekielikäskyissä on, riippuu alla olevasta prosessorista, kuten Intel 8086, 286, 386, 486, Pentium, Itanium, Motorola 68000, 68030, 68040, MIPS, ARM, Cell, Sparc,...,... Suorittava kone voi olla myös virtuaalinen: Java Virtual Machine muuntaa lennosta oman konekielensä käskyjä alla olevan fyysisen prosessorin käskyiksi. (Ja toki voidaan ohjelmoida tulkattavalla kielellä, jossa virtuaalikone muuntaa lähdekoodin rivi kerrallaan natiiviksi. Tällaista virtuaalikonetta sanotaan tulkiksi)

Kääntäminen kielissä kuten Java tai C Kääntäjä on ohjelma, joka: Lukee lähdekoodin ja ymmärtää sen, jos kielioppia on noudatettu oikein. Tuottaa jonkun prosessoriarkkitehtuurin mukaista konekieltä. Java-kielen kääntäjä tekee aina JVM-koodia C-kielen kääntäjä tekee esim. Intel 386-koodia

Javan ja C:n vertailua Java Kääntäjä tulostaa JVM:n tavukoodia Suoritetaan JVM:n päällä Toimii kaikilla laitteistoilla joille on toteutettu JVM ja tarvittavat kirjastot; kirjastoissa oltava mukana natiivia koodia. Sama käännös käy aina C Kääntäjä tulostaa tietyn prosessorin koodia, natiivi ohjelma Suoritetaan fyysisellä prosessorilla Toimii kaikilla laitteistoilla joille on toteutettu C-kääntäjä ja tarvittavat kirjastot Pitää kääntää erikseen eri prosessoreille

Java on kätevä, koska ohjelmasta tarvitsee jaella vain yhtä käännöstä, joka toimii useissa eri laitteistoissa. C:llä voi tehdä ohjelmia useampaan (melkein mihin tahansa) ympäristöön, koska kääntäjiä on ehditty tehdä monelle prosessorille. C:n kirjastot eri ympäristöille ovat kuitenkin suppeammat, joten Javalla voi tehdä isompia ohjelmia helpommin. Ohjelmointi Javalla ja C:llä on syvällisesti erilaista; toinen on oliokieli ja toinen imperatiivinen (rakenteinen). Käyttöjärjestelmät (ja vaikkapa Java virtuaalikoneet) tehdään usein C:llä sen yleismaailmallisuuden, tehokkuuden ja laiteläheisyyden vuoksi.

Huomautus! Tällä kurssilla nähdään C-kieltä hyvin minimaalisesti. Jotta opit sen oikeasti, on syytä lukea paljon lisää. Sudenkuoppia on paljon (kuten Javassa ja kaikissa kielissä). C-kielessä ohjelmoijalla on vastuu kaikesta ei ole Java-alustaa paapomassa.

Muutamia C-ohjelmoinnin yksityiskohtia Erityisesti verrattuna Javaan Olioita ei ole! Luokkia, perintää ja tiedonpiilotusta ei ole! Sen sijaan on rakenteita eli struktuureja, ja erikseen aliohjelmia, joilla rakenteita käsitellään. Millään rakenteella ei itsellään ole toiminnallisuutta eli metodeja. Tietorakenteet ovat primitiivisempiä: esim. taulukko on se kun varataan tietokoneen muistista peräkkäisiä muistipaikkoja niin paljon että tietty määrä alkioita mahtuu.

Merkkijono on merkeistä koostuva taulukko eikä mitään muuta. Taulukon tai merkkijonon maksimipituus on aina kiinnitetty; se ei kasva automaattisesti tarpeen mukaan. Primitiivityyppisten muuttujien varsinainen koko bitteinä riippuu alustasta! (Javassa niiden tulee olla samat kaikissa JVM-toteutuksissa) Rakenteisiin, primitiivialkioihin ja aliohjelmiin voidaan viitata osoittimen (eli muistipaikan osoitteen!) avulla. Kukaan tai mikään ei vahdi osoittimilla sohimista: C:llä saa helposti aikaan tietoturva-aukkoja, käyttöjärjestelmäytimen kaatumisia ja muita katastrofeja! Jos ohjelma viittaa väärään muistipaikkaan ja kirjoittaa sinne kuulumattomia asioita, niin se on voi voi...

C-ohjelmointi vaatii tarkkuutta, koska huolimaton ohjelma ei ole vain ärsyttävä (kuten Java-ohjelman kaatuminen poikkeukseen) vaan mahdollisesti katastrofaalinen (esim. tietokone alttiiksi tietoturvahyökkäykselle) Mutta mm. juuri näiden paapomisominaisuuksien puuttuminen mahdollistaa käännetyille (hyvin tehdyille) C-ohjelmille valtavan nopeuden ja suoraviivaisuuden. Ohjelmoijan vastuu on suurempi.

Moduulijako tehdään C:ssä eri tavoin: Toiminnallisesti samankaltaisia aliohjelmia voidaan kirjoittaa samaan tiedostoon moduuliksi, ja moduulille pitää lisäksi tehdä ns. otsikkotiedosto, joka kuuluttaa rajapinnan (eli tarjotut tietorakenteet ja aliohjelmat) moduulin käyttäjille. (Vertaa Java, jossa moduulijako syntyy siitä, että kukin luokka muodostaa oman kokonaisuutensa omassa lähdekooditiedostossaan). Kukin moduuli voidaan kääntää erikseen, jolloin se pitää linkittää sen palveluita käyttävän ohjelman kanssa joko käännösvaiheessa tai ajonaikaisesti (dynaaminen linkitys). C:ssä ennen käännöstä tehdään esikäsittely, jossa lähdekoodia muutetaan tiettyjen esikäsittelijäohjeiden mukaisesti (lähdekoodissa korvataan makroja eri tekstillä ohjeiden mukaisesti; C-lähdekoodissa on siis vähän niinkuin kahta kieltä vuoron perään, makrokieltä esikäsittelijälle ja varsinainen C-kieli kääntäjälle).

Sekavaahan se kaikki on (Ckavaa?), ja mm. sen takia on tehty uusia ohjelmointikieliä sinänsä kaikenpätevän C-kielen kehittämisen jälkeenkin. Täydellistä kieltä ei voi olla; se on varma.

Siinä ensimmäiset mieleentulevat erot, jotka ainakin pitää ymmärtää ennen kuin voi ymmärtää C-ohjelmointia Java-lähtökohdista. C-kielen syntaksi on lähellä Javaa, joten siinä ei pitäisi olla yllätyksiä. Avainsanojakin C:ssä on tosi vähän. C-kielellä ohjelmointia opitaan tarkemmin demossa 2, joka on lähinnä sitä asiaa varten. Asia tarkentuu myös loppukurssin ajan luentoesimerkeissä ja harjoitustyössä. Paljon on muutakin erilaista, kuten roskien keruun puuttuminen dynaamisen muistinvarauksen yhteydessä ym. mutta yllä olevilla ehkä pärjää Käyttöjärjestelmät-kurssilla, jossa tarvitsee ymmärtää korkeintaan parikymmentä koodiriviä kerrallaan. Jos haluat tehdä C:llä enemmän myöhemmin, lue joku kirja!