.. -*- coding: utf-8 mode: rst -*-

.. HUOM: Synkronoitava käsipelillä!! Nämä on viety tässä muodossaan
   luentomonisteen lukujen alkuun ja demojen introihin, aina siihen
   lukuun/demoon, jossa tavoitteen saavuttamiseksi on tekstiä tai
   harjoitteita. JOS TEET MUUTOKSIA TÄHÄN, etsi myös vastaava kohta
   materiaalista ja muokkaa sielläkin vastaavasti! Ja toisin
   päin. Olisihan se kiva, jos vaikka tuleva TIM-systeemi pystyisi
   automaattisesti yhdistämään lokalisoidut osaamistavoitteet jonkun
   avainsanan perusteella tai muuta... laitetaan kehittäjille toivetta
   ja näin...

   Toistaiseksi tämä pitää hoitaa käsipelillä ikävästi.

ITKA203 Käyttöjärjestelmät: Osaamistavoitteet
===========================================================

en:
ITKA203 Operating Systems: Desired Learning Outcomes
========================================================
:ne

:Versio: 13.3.2017
   
Tässä dokumentissa kuvaillaan Jyväskylän yliopiston
Informaatioteknologian tiedekunnan aineopintotasoisen kurssin "ITKA203
Käyttöjärjestelmät" osaamistavoitteet. Uusin kehitysversio
historiatietoineen on seuraavassa sijainnissa:
https://gitlab.jyu.fi/itka203-kurssimateriaali/itka203-kurssimateriaali-avoin/blobs/master/osaamistavoitteet.txt

Aiemmin osaamistavoitteet olivat implisiittisessä
tenttikysymystärppien ja avainsanalistojen muodossa sekä huomioina
harjoitustehtävien johdannoissa. Keväällä 2015 ne ensimmäistä
kertaa eksplikoitiin kohdassa `Taustamateriaali ja kansainväliset
suositukset`_ mainitun ohjeistuksen mukaisesti. **Opettajat varaavat
mahdollisuuden muokata tavoitteita myös kurssin aikana, mikäli
tarvetta ilmenee**. Meneillään olevan kurssin osalta versio
kiinnitetään viimeistään viimeisellä luennolla, ja sen jälkeen se
pidetään samana kolmen tenttikerran ajan.

Taustamateriaali ja kansainväliset suositukset
-------------------------------------------------------

Laadinnan pohjana käytettiin seuraavaa W5W^2 -projektin tuottamaa
ohjetta, johon oman opintotietojärjestelmämme Korpin
osaamistavoiteohjeet viittaavat:

https://www.uef.fi/documents/1526314/1526337/N%C3%A4in+asennat+osaamistavoitteet+opetussuunnitelmaasi-+laaja+oppim%C3%A4%C3%A4r%C3%A4_OY.pdf/e6750ff0-6f2f-4f55-8f68-d5cc33adca0c

Mallina on käytetty ACM:n "computing curriculum" -suosituksia vuosilta
2001 ja 2013 (käyttöjärjestelmien osalta suositus on kohtalaisen
muuttumaton näiden versioiden välillä; lisätyt kohteet vaikuttaisivat
liittyvän muihin kursseihimme, joten ydinsisältö rakennettiin nyt
ensisijaisesti vuoden 2001 mallin mukaisesti):

http://wiki.acm.org/cs2001/index.php?title=Operating_systems

http://www.acm.org/education/CS2013-final-report.pdf (erit. sivu 138)

Tässä tehty ACM-mallin mukautus perustuu paikalliseen
kurssikehityskaareen sekä muilla tiedekuntamme kursseilla tarjottavaan
opetukseen: Kurssille on valittu tietyt ACM-mallin
"elective"-tavoitteet, joita meillä on aiemminkin
korostettu. Toisaalta on jätetty pois tavoitteita, jotka kuuluvat
omassa OPSissamme joillekin muille kursseille. ACM:n
"core"-tavoitteista joitakin on karsittu tämän kurssin rajallisen
tuntimäärän vuoksi. Konkreettisiin käytännön esimerkkeihin perustuva
toteutusnäkökulma tuo käytännönläheisiä osaamistavoitteita, joita
ACM-mallissa ei mainita. Näistä erityisesti ohjelmointiin liittyvät
osaamistavoitteet ovat linjassa niiden tutkintojemme profiilin kanssa,
joilla tämä kurssi on pakollinen osa.

Paikallisen kurssikehityskaaren mukainen tulkinta 
--------------------------------------------------------

Opintojakson sisältö: 
``````````````````````

Käyttöjärjestelmän rakenne ja periaatteet, yhdenaikaisuus ja rinnakkaisuus, ajoitus,
muistin hallinta, oheislaitteiden hallinta, tiedostojärjestelmä.

Opintojakson opetustavoite:
````````````````````````````

Kurssilla esitellään opiskelijalle käyttöjärjestelmien merkitystä,
periaatteita ja toteutusratkaisuja yksinkertaistettujen teoreettisten
yleiskuvausten sekä konkreettisten koodi-, kuori- ja
skriptausesimerkkien kautta. Konkreettisina esimerkkiartefakteina
käytetään Linuxin ydintä lähdekoodeineen, POSIX-standardia,
bash-kuorta, GNU-työkaluja, C-kieltä ja
AMD64-prosessoriarkkitehtuuria.

Opintojakson osaamistavoitteet:
````````````````````````````````

Hakasuluissa tavoitelauseiden lopussa on koetettu tehdä
ydinainesanalyysiä seuraavasti:

- [ydin/arvos1] tarkoittaa välttämätöntä, siis "välttävää",
  ydinosaamista kurssin läpäisyyn ykkösellä

- [ydin/arvos2] tarkoittaa hieman laajempaa, tyydyttävää, ydinosaamista

- [edist/arvos3] tarkoittaa laajaa, hyvää, osaamista.

- [edist/arvos4] tarkoittaa edistynyttä, kiitettävää osaamista

- [edist/arvos5] tarkoittaa edistynyttä, erinomaista osaamista ja
  ehkä alustavaa "asiantuntijuuttakin".

Tämä kurssi on ensimmäinen johdanto aihepiiriin, joten se on enemmän
laaja kuin syvä. Niinpä suurin osa osaamistavoitteista, eli kurssin
ns. "ydinaines", ovat luonteeltaan melko pintapuolisia ja siten
toivottavasti myös yksittäisinä vähemmän työläitä saavuttaa. Ne
kuuluvat kolmeen ensimmäiseen tasoon (jotakuinkin vastaten arvosanoja
1-3), joilla kurssin saa läpi ja voi hyvällä omallatunnolla jatkaa
opintoja alalla. Kahteen viimeksi mainittuun kategoriaan puolestaan
sisältyy erityisesti (1) kurssin luonteen mukaisesti teknisiin
yksityiskohtiin ja koodarin kädentaitoihin liittyvää osaamista, joka
ylittää pintapuolisen ydinaineksen, sekä (2) aineopintotasoiseen
yleistavoitteeseen liittyen tieteellistä ja ammatillista
osaamista. Sokerina pohjalla on viimeisenä mainittu yksi
ultimaattisempi osaamistavoite, joka parhaimmillaan voisi johtaa
käyttöjärjestelmien syvällisempään tutkimiseen esimerkiksi
kanditutkielman aihepiirinä.

Arvostelun mielessä noudatetaan osittain "määrä korvaa laadun"
-periaatetta, jossa tentissä kysytään pääasiassa tasojen 1-4 asioita,
vaikka täysillä pisteillä on mahdollista saada arvosanaksi 5. Korkeampiin tasoihin
liittyviä vapaaehtoisia demotehtäviä tekemällä voi kuitenkin saada bonuspisteitä,
joilla on mahdollista kompensoida unohduksia/lapsuksia tasojen 1-4
asioihin liittyvissä kysymyksissä. Tasojen 4-5 tavoitteet ovat
luonteeltaan soveltavia ja luovia, joten niiden saavuttaminen
edellyttää oletettavasti tasojen 1-3 osaamista.

Arvosanatavoitteen perässä on yksilöivä ID-numero, jota käytetään
tenttikohtaisten kysymysten arvonnassa. ID-numero 0 tarkoittaa, että
tehtävästä ei ole kevään 2015 tenttiin mennessä keksitty hyvää ja
yksikäsitteistä tehtävänantoa, joten se ei ole mukana arvonnassa

en:

This document lists the learning outcomes of the course ITKA203
Operating Systems. It is originally based on the ACM computing
curriculum recommendations:
http://wiki.acm.org/cs2001/index.php?title=Operating_systems and
http://www.acm.org/education/CS2013-final-report.pdf (esp. page 138;
no critical changes since the 2001 recommendations). The objectives
have been selected and modified according to the local curriculum and
traditions, and then re-translated into English.

After completing the course, the student should be able to...

:ne


Käyttöjärjestelmät -kurssin suoritettuaan opiskelija...

**...käyttöjärjestelmän rakenteen ja periaatteiden osalta:**

en:**...with regard to operating system structure and principles:** :ne

- osaa kuvailla tyypillisen nykyaikaisen käyttöjärjestelmän
  päätehtävät ja kykenee pääpiirteissään selittämään historian, jonka
  kautta käyttöjärjestelmien nykymuoto on syntynyt [ydin/arvos1_1]

  en:- describe the main responsibilities of a contemporary
  operating system (OS) and to explain the history leading to their
  current form :ne

- osaa luetella käyttöjärjestelmän tärkeimmät osajärjestelmät ja
  tehtävät, joita kunkin osajärjestelmän vastuulla on [ydin/arvos1_2]

  en:- list the most fundamental subsystems of an OS and the
  functions that each subsystem is responsible of :ne

- tunnistaa ja osaa antaa esimerkkejä ristiriitaisista tavoitteista ja
  kompromisseista, joita käyttöjärjestelmän toteutukseen ja asetusten
  tekemiseen välttämättä liittyy [ydin/arvos1_3]

  en:- recognize and give examples of conflicting goals
  and compromises necessary in implementing an OS and configuring its
  run-time parameters :ne

- tuntee olennaisimman käyttöjärjestelmiin liittyvän terminologian ja
  sanojen tunnetuimmat variaatiot suomeksi ja englanniksi; kykenee
  kommunikoimaan aiheeseen liittyvistä erityiskysymyksistä
  kirjallisesti (ja suullisesti; ei kuitenkaan verifioitavissa
  kirjallisella tentillä) molemmilla kielillä [ydin/arvos1_4]

  en:- know the common English terminology related to OSs
  along with the most common variations of the terms; to
  discuss OS issues in written and spoken English :ne

- osaa kuvailla käyttöjärjestelmille tyypilliset abstraktiot
  (prosessit, resurssit, tiedostot) sekä kerrosmaisen rakenteen
  abstraktioiden ja fyysisen laitteiston välillä; osaa kertoa syitä
  abstraktioiden käyttöön laiteohjauksessa ja kykenee yleistämään
  abstrahointimenettelyn ohjelmistojen tekemiseen muutoinkin
  [ydin/arvos1_5]

  en:- describe the abstractions typical to OSs (processes,
  resources, files, etc.) and the layered structure between the
  abstractions and the physical devices; list reasons for
  using abstractions in device management and extend the
  idea of abstractions to software development tasks other than
  OSs. :ne

- ymmärtää standardoinnin päämäärät käyttöjärjestelmien (ja muiden
  rajapintojen) yhteydessä; osaa kertoa, millaisia asioita
  POSIX-standardi määrittelee ja toisaalta mihin POSIX ei ota
  kantaa. [ydin/arvos1_6]

  en:- understand the goals of standardization of OS (and other)
  interfaces; describe what kinds of things the POSIX
  standard defines, and, on the other hands, things that POSIX leaves
  undefined, i.e., up to the specific implementation :ne

- tietää ja tunnistaa (sisällön kuvauksen perusteella) tyypillisimmät
  käyttöjärjestelmässä tarvittavat tietorakenteet (tietyt tietueet
  sekä niistä muodostuvat taulukot, jonot, listat, pinot, hierarkkiset
  rakenteet) sekä tietää, mihin tarkoitukseen mitäkin niistä voidaan
  käyttää. Erityisesti opiskelija osaa tunnistaa ja kuvailla ne
  käyttöjärjestelmän tietorakenteet, joita käytetään prosessien tilan
  hallinnassa, sivuttavan virtuaalimuistin hallinnassa,
  tiedostojärjestelmän toteutuksessa sekä
  vuoronnuksessa. [ydin/arvos1_7]

  en:- know and identify (from content description or C code), the
  most common data structures required in an OS implementation
  (certain C struc's and arrays, queues, lists, stacks, and
  hierarchical structures thereof) and know which purpose each of
  these can be used for. Specifically, the student is able to identify
  and describe the OS data structures used in process state
  management, paging virtual memory management, file system management
  (with "unix i-nodes"), and scheduling. :ne

- osaa kertoa, missä olosuhteissa tietokoneen prosessori suorittaa
  ohjelmakoodia käyttöjärjestelmätilassa ja milloin käyttäjätilassa
  sekä mitä eroja näillä tiloilla on keskenään [ydin/arvos1_8]

  en:- tell under which circumstances the processor is
  executing code either in kernel mode or in user mode, and how these
  modes differ from each other :ne

- tietää, missä olosuhteissa ja millä mekanismilla prosessori siirtyy
  keskeytyskäsittelyyn; ymmärtää keskeytyskäsittelyn hyödyt ja
  toisaalta implikaatiot sovellus- ja järjestelmäohjelmistojen
  kannalta [ydin/arvos1_9]

  en:- explain under which situations and by what kind of mechanism the
  processor transitions into interrupt handling; understand the
  benefits and, on the other hand, the implications, that the
  processor interrupt handling mechanism has on application and system
  software :ne

- tietää olennaisimmat erot monoliittisen ja mikroydinjärjestelmän
  välillä [ydin/arvos2_2]

  en:- know the most important differences between a monolithic and a
  microkernel OS :ne

- osaa esittää C-kielisen tietorakenteen sisällön tietokoneen
  muistissa sijaitsevien peräkkäisten muistipaikkojen sisältöinä,
  joilla on yksilölliset osoitteet; erityisesti pystyy toteuttamaan
  objekti-/tietorakenneviitteen muistiosoitteena. Vastaavasti osaa
  löytää muistissa olevasta datasta yksinkertaisen C-tietorakenteen
  komponenttien sijainnin ja sisällön, kun tietorakenne, alkuosoite ja
  muistin sisältö osoitteen ympäriltä on annettu. [ydin/arvos2_0]

  en:- represent the contents of a C language data structure
  as the contents of consecutive memory locations with distinct
  addresses; especially, the student is able to implement a reference
  to data as a memory address (C pointer). Likewise, the student is
  able to identify the location and content of a simple C data
  structure in the memory space, when given the structure, the start
  address, and some memory surrounding the start address. :ne

- ymmärtää ohjelman suorituksen muistissa sijaitsevien konekielisten
  käskyjen jonona sekä tyypillisten ohjelmointirakenteiden ilmenemisen
  konekielessä; tunnistaa konekielisen ohjelman sellaisen nähdessään
  (AT&T tai Intel -tyyppisenä assemblynä tai disassemblynä)
  [ydin/arvos2_3] (eikö tämä sisälly seuraavaan tavoitteeseen, jossa
  aivan simuloidaan mielikuvamallissa konekieltä?? no ei oikeastaan,
  koska tavallaan tässä on kyseessä "koko prosessorin trace", ei
  yksittäisen prosessin. Eli varsinainen kysymys on: millaisella
  tenttikysymyksellä tämän ymmärtämistä mitattaisiin, ehkä
  erityisesti suhteessa seuraavaan?)

  en:- understand the execution of a program as the trace of
  consecutive machine language instructions residing in the computer
  memory, and how typical programming structures manifest themselves
  in machine language; recognize a machine language program upon
  seeing one (in assembly or disassembly either in the AT&T or the
  Intel dialect) :ne

- osaa lukea lyhyitä (so. 2-10 käskyä) suomen kielellä rivi riviltä
  kommentoituja konekielisiä ohjelmanpätkiä ja muodostaa mielessään
  (tai kynällä ja paperilla) niiden jäljen sekä niiden suorittamisen
  aiheuttamat tilapäiset ja pysyvät vaikutukset tietokoneen
  rekistereihin ja muistiin [edist/arvos4_1]

  en:- read short (i.e., 2-10 instructions) machine language
  programs that have been fully commented line-by-line in English
  describing the workings of each instruction; formulate
  (using a pen and paper, if necessary) the trace of such a program
  and follow the temporary and persistent effects of such a program in
  the state of the registers and the memory of the computer :ne


**... yhdenaikaisuuden osalta:**

en:**... with regard to concurrency:** :ne

- osaa kertoa, kuinka moniajo voidaan toteuttaa
  yksiprosessorijärjestelmässä ja tietää, kuinka
  moniprosessorijärjestelmä eroaa yksiprosessorijärjestelmästä
  sovellusohjelmoijan näkökulmasta [ydin/arvos1_10]

  en:- describe how multitasking can be implemented in a uniprocessor
  system, and how application programming differs between a multicore
  system and a uniprocessor one :ne

- osaa kuvailla prosessin elinkaaren vaiheet tilakaavion avulla
  sekä tulkita annettua tilakaaviota [ydin/arvos1_11]

  en:- provide an annotated state diagram that describes the states
  and state transitions during the whole lifetime of a process;
  likewise, interpret such a state transition diagram :ne

- tunnistaa ja osaa luetella tilanteita, joissa samanaikaisten
  prosessien tai säikeiden käyttäminen on edullista ongelman
  ratkaisemiseksi (sisältäen muiden muassa lähtökohtaisen tarpeen
  moniajokäyttöjärjestelmälle) [ydin/arvos1_12]

  en:- identify and list application scenarios in which it is useful
  to use multiple threads of execution (including the fundamental need
  for multitasking in an OS) :ne

- osaa selittää prosessin käsitteen sekä käyttöjärjestelmän
  prosessielementin ja prosessitaulun rakenteen pääpiirteet; tunnistaa
  prosessielementin nähdessään sellaisen ja osaa arvioida, onko
  kyseisessä elementissä mukana kaikki tarpeellinen tyypillisimpien
  käyttöjärjestelmätehtävien hoitamiseksi [ydin/arvos1_13]

  en:- explain the concept of a process and the process control
  block (PCB) in a typical OS; recognize a PCB upon seeing the C code
  of such, and assess whether such a data structure
  contains everything that is necessary to handle the main tasks of a
  modern OS :ne

- osaa selittää prosessin ja säikeen eron [ydin/arvos1_14]

  en:- explain the difference between a process and a thread :ne

- osaa antaa konkreettisen koodi- tai pseudokoodiesimerkin, joka voi
  johtaa lukkiutumistilanteeseen tai kilpa-ajosta aiheutuvaan datan
  korruptoitumiseen; vastaavasti osaa kertoa, onko annetussa
  esimerkkikoodissa mahdollisuus jompaan kumpaan ongelmaan
  [ydin/arvos2_4]

  en:- provide a concrete example (in C or in some
  pseudocode) of code that can lead to deadlock or data corruption due
  to a race; likewise, the student is able to tell whether a given
  code example (in C or similar pseudocode) has a bug that makes
  deadlock or data corruption likely to occur :ne

- muistaa yksinkertaisimmat yhdenaikaisen suorituksen aiheuttamat
  haasteet (poissulkua, synkronointia edellyttävät tilanteet) ja osaa
  ratkaista ne käyttäen (POSIX-) semaforeja [edist/arvos3_1]

  en:- remember the most elementary challenges in concurrent
  programming (i.e., situations requiring mutual exclusion and
  synchronization) and solve them using semphores (as
  defined by the POSIX threading interface). :ne

- osaa verifioida tuottaja-kuluttaja -ongelman ratkaisemiseksi
  ehdotetun esimerkkikoodin oikeellisuuden, eli ratkaiseeko se
  oikeasti ongelman vai ei. [ydin/arvos2_5] (eikö tämä sisälly olennaisesti edelliseen?)

  en:- verify whether a given C (or similar pseudocode) program
  correctly solves the producer-consumer problem using multi-valued
  semaphores :ne
  
- osaa selittää (POSIX-tyyppisen) semaforin käsitteenä,
  (POSIX-yhteensopivan) alustan tietorakenteena sekä
  sovellusohjelmalle tarjottavana rajapintana; muistaa
  semaforikäsitteen historian ja pystyy luettelemaan
  esimerkkisovelluksia [ydin/arvos2_6]

  en:- explain the semaphore (as defined by POSIX) as a concept, a data
  structure of a platform (esp. as defined by POSIX concurrency), and
  as an application interface; remember the history of the semaphore
  concept and list traditional examples of application :ne

- osaa nimetä semaforin lisäksi muita tapoja vastaavanvahvuisen
  synkronoinnin tuottamiseksi. [ydin/arvos2_7]

  en:- remember names of synchronization methods other than
  semaphores:ne

- osaa luetella ja selittää yksinkertaisia vuoronnusmenetelmiä sekä
  antaa esimerkkejä tilanteista, joissa kukin niistä voisi olla
  edullisempi valinta kuin jokin toinen; vastaavasti osaa valita
  annetuista vaihtoehdoista sopivimman vuoronnusmenetelmän annetussa
  skenaariossa [ydin/arvos2_0] (2015 ja 2016 tulee tentti niin pian,
  ettei tälle asialle jää lukuaikaa; jatkossa vois olla käsittely
  varhaisemmassa vaiheessa kurssia jolloin voisi kysyä järkevästi? Tai
  sitten vois suosiolla hyväksyä, että ei kuulu meidän peruskurssille?)

  en:- list and explain simple scheduling algorithms and give examples
  of applications in which each scheduler could be more beneficial
  than the others; likewise, choose the most suitable scheduling
  algorithm from a number of given choices, given an application
  scenario :ne

- osaa antaa esimerkkejä vuoronnuksen yleisten periaatteiden
  ilmenemisestä muissakin yhteyksissä kuin käyttöjärjestelmän
  prosessivuorontajassa [ydin/arvos2_9]

  en:- give examples of scheduling algorithms used in other context
  than OSs. :ne

- osaa kertoa, mitä tarkoittaa reaaliaikajärjestelmä ja antaa
  esimerkkejä reaaliaikajärjestelmistä [edist/arvos3_2]

  en:- provide a useful definition for a realtime system; give examples
  of actual realtime systems :ne

- (?) tietää, mitä on pre-emptiivinen deadline-vuoronnus ja missä
  tilanteessa sitä esimerkiksi tarvitaan [edist/arvos3_0] (2015 ja
  2016 jäi vähän loppupuolelle kurssia)

  en:- know what pre-emptive scheduling and deadline scheduling are and
  in what kind of situations these are necessary :ne

**... muistinhallinnan osalta:**

en:**... with regard to memory management:** :ne

- osaa selittää, mikä on tietokoneiden muistihierarkia ja siihen
  liittyvät kompromissit [ydin/arvos1_15]

  en:- explain the typical (physical) computer memory hierarchy and the
  compromises involved in using such a hierarchy :ne

- tietää, mikä on lokaalisuusperiaate, miten sitä hyödynnetään
  muistijärjestelmässä sekä kuinka periaate on yleistettävissä
  muihin sovelluksiin [ydin/arvos2_10]

  en:- know what the principle of locality stands for, how it is used
  in a typical memory system, and how the principle can be used in
  applications other than computer technology and OSs. :ne

- osaa selittää sivuttavan virtuaalimuistin toimintaperiaatteen ja
  kuvailla sen toteuttamiseksi tarvittavat käyttöjärjestelmän
  tietorakenteet sekä ohjelmiston ja laitteiston osat [ydin/arvos2_11]
  (sisältyykö seuraavaan sopivasti?)

  en:- explain the principles of paging virtual memory (VM) and
  describe the datastructures and components (both hardware and
  software) that are necessary to implement paging VM :ne

- osaa muuntaa virtuaalimuistiosoitteen fyysiseksi annetun
  (yksitasoisen) sivutaulun perusteella; ymmärtää sekä osaa selittää
  jaetun muistialueen toteuttamisen virtuaalisia muistiosoitteita
  käyttäen [edist/arvos3_3]

  en:- translate a virtual memory address into a physical address,
  given a page table (of a given simple "toy" computer with very tiny
  address space); understand and explain how a shared memory area can
  be implemented using VM addresses in different processes :ne

- osaa kuvailla yksityiskohtaisesti sivunvaihtokeskeytyksen kulun
  LRU-menettelyssä [edist/arvos4_2]

  en:- describe how the page fault exception is handled when the reason
  for fault is a reference to an existing but swapped-out page, and
  the LRU page replacement algorithm is selected :ne

- tietää cache thrashing -ilmiön ja tunnistaa mahdollisuuden sellaisen
  olemassaoloon yksinkertaisessa koodiesimerkissä; osaa kuvailla
  keinoja, joilla ilmiöltä voidaan yrittää välttyä; osaa valita
  kahdesta konkreettisesta koodiesimerkistä sen, jossa ilmiö on
  vähemmän paha [edist/arvos4_3]

  en:- explain cache thrashing as a phenomenon, identify the
  possibility of cache thrashing in a simple code example; describe
  means to avoid cache thrashing; given two C code examples, select
  the one which presents a smaller chance of thrashing :ne

**... oheislaitteiden hallinnan ja tiedostojärjestelmän osalta:**

en:**... with regard to device management, I/O, and file systems:** :ne

- osaa kuvailla laiteohjelmistojen kerrosmaisen rakenteen ja
  I/O-pyynnön sekä I/O-keskeytyksen käsittelyn yleisellä tasolla
  [ydin/arvos1_16]

  en:- describe the layered structure of input/output (I/O) software
  and give a broad overview of I/O interrupt handling :ne

- osaa kuvailla tiedon pitkäaikaiseen tallennukseen ja lataamiseen
  liittyvät vaiheet laitteiston ja ohjelmiston osien toiminnan tasolla
  [ydin/arvos2_12]

  en:- describe the phases required of hardware and software components
  for persistent storage and retrieval of persistent data :ne

- tietää DMA:n toimintaperiaatteen hyötyineen ja implikaatioineen
  [ydin/arvos2_13]

  en:- understand the idea of direct memory access (DMA) with its
  advantages and implications :ne

- ymmärtää erikoistiedostojen roolin ja "kaikki ilmenee tiedostona
  -periaatteen" unix-tyyppisissä järjestelmissä; osaa antaa
  esimerkkejä unixin erikoistiedostoista [edist/arvos3_4]

  en:- understand the role of special files and the "everything looks
  like a file" principle in unix-like systems; list examples of
  special files in a unix system (e.g., Linux) :ne

- tietää RAIDin (vähintään muutamien eri tasojen) toimintaperiaatteet
  hyötyineen ja implikaatioineen [edist/arvos3_5]

  en:- describe the functional principles of (a couple of levels of)
  RAID with their benefits and implications :ne

- osaa kertoa, miksi naiivisti toteutettu tiedostojärjestelmä voi
  korruptoitua sähkövirran katketessa ja kuvailla keinot, joilla
  korruptoitumista voidaan ehkäistä (journalointi) [edist/arvos3_6]

  en:- explain why a naively implemented file system (FS) can be
  corrupted upon sudden power loss, and describe (on a general level)
  some means by which such corruption can be prevented (journaling
  FSs). :ne

- osaa selittää yhden konkreettisen tavan organisoida
  tiedostojärjestelmä levyllä (unix i-nodet) [edist/arvos4_4]

  en:- explain one concrete way (traditional unix i-nodes) of
  organizing a file system on a physical storage medium :ne

**... käytännön sovellusten osalta (kuori):**

en:**... with regard to applications (shell):** :ne

- uskaltaa ja osaa käyttää "unix-tyyppistä" käyttöjärjestelmää,
  esim. Linuxia, komentorivikuoren avulla sekä pääteyhteyden yli,
  aiheuttamatta vaaraa omille tiedoille tai häiriötä muille
  käyttäjille tai järjestelmälle [ydin/arvos1_17]

  en:- possess the courage and basic skills to use a unix-like OS,
  e.g., Linux, by means of a command line shell and an SSH terminal
  connection, without endangering his/her own files or disturbing
  other users or compromising the availability of the remote
  system. :ne

- osaa käyttää screen -apuohjelman tarjoamia teksti-ikkunoita sekä
  jotakin yleisesti käytettyä tekstieditoria tietojen manipulointiin
  tekstimuotoisen pääteyhteyden kautta suoraan linux-palvelimella
  [ydin/arvos1_0]

  en:- use the terminal multiplexer program ``screen`` with multiple
  "windows" and manipulate data directly on a Linux server machine
  over the terminal connection using some commonly used text editor
  (such as ``vi`` which is always installed) :ne

- tuntee Bourne Again Shell -kuoren (bash) tärkeimmät (erityisesti
  POSIX-yhteensopivat) sisäänrakennetut komennot sekä yleisimmät
  unix-tyyppisiin (etenkin POSIX-yhteensopiviin) järjestelmiin
  asennetut apuohjelmat (grep, find, ...); osaa käyttää näitä
  manuaalisivujen perusteella sekä arvioida kriittisesti
  nettifoorumeilta löytyvien ohjeiden laatua [ydin/arvos1_0]
  (esimerkit jäivät tasolle echo, cat, ls)

  en:- know the most common (especially POSIX-compliant) internal
  commands and utility programs available in Bourne Again Shell
  (bash); use them when "man pages" are available; assess the quality
  and safety of examples and instructions found in Internet forums,
  blogs, etc. :ne

- osaa tulkita ja rakentaa yksittäisiä bash-komentorivejä, hyödyntäen
  putkitusta ja tiedostoonohjausta [ydin/arvos1_19]

  en:- understand (i.e., mentally interpret and "dry-run") and build
  simple bash command lines that may use pipes (``|``) and output
  redirection (``>`` and ``>>``) :ne

- tunnistaa ja osaa luetella käyttötarkoituksia, joihin yleisesti käytetään
  kuorikomentojonoja (shell script, "skripti") [ydin/arvos1_20]

  en:- identify and list purposes for which it is common to use shell
  scripts :ne

- (?) tuntee syntaksin, jolla perusohjelmointirakenteita (muuttujat,
  ehdot, silmukat, aliohjelmat) käytetään bash -kuoressa; tuntee myös
  kuoren käytölle ominaiset "||" ja "&&" -syntaksit [ydin/arvos2_0]

  en:- know the syntax for using basic programming structures
  (variables, conditionals, loops, functions) in the bash shell; know
  the typical conditional execution syntaxes of ``||`` and ``&&`` :ne

- (?) ymmärtää komentoriviargumenttien ja ympäristömuuttujien roolin
  sovellusohjelman toimintaympäristön osana; osaa antaa käyttöohjeiden
  mukaisia argumentteja komentoriviohjelmille sekä julkaista
  ympäristömuuttujia bash-kuoressa [ydin/arvos2_15]

  en:- understand the role of command line arguments and environment
  variables as the part of the environment of an application program;
  provide arguments to utility programs according to their respective
  "man pages"; export environment variables in the bash shell. :ne

- pystyy lukemaan ja ymmärtämään yksinkertaisia bash -skriptejä,
  muokkaamaan niitä hallitusti sekä tuottamaan itse alkeellisia
  skriptejä mallin tai ohjeiden perusteella [ydin/arvos2_16]

  en:- read and understand simple bash scripts, modify them in a
  controlled way, and produce simple scripts using examples,
  tutorials, or hints in Internet forums :ne

- (?) osaa asentaa bash -skriptiin signaalinkäsittelijän, joka tekee
  tarvittavat lopputoimet, kuten väliaikaisten tiedostojen poistamisen
  [edist/arvos3_0] (2015 ja 2016 ainoastaan vapaaehtoisessa demossa;
  aikalailla on sellaista käytännön hommaa joka tapauksessa.. ei
  mitään niikö tenttiasiaa sillai)

  en:- hook a signal handler to a bash script, for the purpose of
  removing temporary files and other necessary clean-ups upon
  premature exit :ne

- (?) muistaa apuohjelmia ja keinoja, joilla unix-tyyppisen
  käyttöjärjestelmän hetkellistä tilaa voidaan tarkastella
  pääteyhteydellä ja/tai tekstimuotoisella kuorella; kykenee etsimään
  WWW:stä lisätietoa vastaavien tehtävien suorittamiseen ja arvioimaan
  kriittisesti ohjeiden laatua ja soveltuvuutta tarpeeseen
  [edist/arvos3_0] (milläs mittaat tämän toteutumista sitten?)

  en:- remember some basic utilities that can be used to examine the
  status of a unix-type operating system over a terminal connection
  and a command line shell; search and locate instructions for similar
  tasks from the WWW and evaluate the quality, safety, and suitability
  of such examples :ne

**... käytännön sovellusten osalta (C-kieli, binääritiedostot, kj-kutsut):**

en:**... with regard to applications (C language, binary files, OS system calls):** :ne

- osaa kääntää valmiita C-ohjelmia ja linkittää objektitiedostoja
  komentoriviltä GNU-työkaluilla ja suorittaa näin syntyneen ohjelman
  itsenäisenä prosessina sekä tekstipohjaisen debuggerin kautta
  [ydin/arvos1_0]

  en:- compile and link C programs using GNU command line tools and
  execute the resulting binary program both as a stand-alone process
  and via the text-based debugger program GDB :ne
  
- (?) osaa selittää vaiheet ja mahdolliset ongelmatilanteet
  suoritettavan ohjelmatiedoston lataamisessa, dynaamisessa
  linkittämisessä ja käynnistämisessä [ydin/arvos2_17] (vaiheet tuli
  2015 hyvin; ongelmatilanteita ei ehditty paljonkaan)

  en:- describe the stages and possible problems in loading, dynamic
  linking, and launching of a binary program file :ne

- osaa tarkastella minkä tahansa muotoisen tiedoston sisältöä
  heksavedoksena (hex dump) ja suoritettavan ohjelmatiedoston sisältöä
  tekstimuotoisen debuggerin disassemblerilla; osaa tehdä arvion
  todennäköisestä tiedostoformaatista heksavedoksen perusteella
  (yleisten tiedostojen kohdalla, mm. tekstitiedostot erilaisin
  merkistökoodauksin, ELF-ohjelmat, Windows-ohjelmat, JPG ja PNG
  -kuvat, HTML/XML, ZIP-paketit, docx:t, ym.) [ydin/arvos2_18]

  en:- examine any file using a hex dump; examine the contents of a
  binary executable file using the disassembly feature of a text-based
  debugger (gdb); make a proper heuristic guess of the possible file
  format using a hex dump (for common files, such as plaintext, UTF-8
  possibly with BOM, ELF executable, Windows excutable, JPG, PNG, ZIP,
  docx) :ne

- osaa selittää prosessin virtuaalimuistiavaruuden tyypillisen jaon
  loogisiin segmentteihin (koodi, data, pino, keko,
  (käyttöjärjestelmäosio)) sekä antaa esimerkin segmenttien
  sijoittumisesta avaruuden osoitteisiin [ydin/arvos2_19]

  en:- explain the typical layout of a process in its virtual address
  space (code, data, heap, stack, OS memory) and give a concrete
  example of how the segments may be laid out in practice :ne

- osaa lukea, ymmärtää ja muokata lyhyitä (n. 50 riviä kommenttirivien
  lisäksi) C-kielisiä ohjelmia [edist/arvos3_7]

  en:- read, understand, and meaningfully modify short (ca. 50 lines in
  addition to comments) programs in the C language. :ne

- ymmärtää ja osaa selittää ohjelman käynnistämisen vaiheet
  unix-tyyppisten fork() ja exec() -käyttöjärjestelmäkutsujen
  tapauksessa [edist/arvos3_8]

  en:- explain the phases of loading and starting a new program image
  using typical unix-type system calls (also defined by POSIX) fork()
  and exec(). :ne

- ymmärtää suorituspinoon päällekkäin allokoitavien
  aktivaatiotietueiden käytön aliohjelmien parametrien ja paikallisten
  muuttujien säilytyksessä; osaa soveltaa tätä tietoa tekstipohjaista
  debuggeria käyttäen ja kykenee näkemään yhteyden aiemmin opitun
  oliokielen (esim. C#) viitteiden ja rakenteisen, laiteläheisen
  kielen (esim. C) muistiosoittimina toteutuvien viitteiden välillä
  [edist/arvos4_5]

  en:- understand how the activation records in the execution stack can
  be used to store function parameters and local variables; apply this
  knowledge using a text-based debugger and AMD64 binaries; compare
  and contrast the reference types of object-oriented languages (e.g.,
  C#, Java) and the crude pointer types (memory addresses) of C :ne

- osaa ohjeita tai esimerkkiä mukaillen hyödyntää ohjelmalle annettuja
  komentoriviargumentteja ja ympäristömuuttujia omassa C-ohjelmassa
  sekä omassa bash-skriptissä jonkin toiminnallisen tavoitteen
  saavuttamiseksi [edist/arvos3_9] (2015 tuli C-ohjelma hyvin, mutta
  sh ei niinkään; 2016 jäi myös shell aika vähälle.. ehkä hyvä niin)

  en:- make use of command line arguments and environment variables in
  own C programs and bash scripts to achieve some functionality, using
  instructions or examples as reference :ne

- osaa WWW-pohjaista työkalua (lxr) käyttäen paikantaa linux-ytimen
  uusimman version lähdekoodista jonkin yksinkertaisen
  käyttöjärjestelmätoiminnallisuuden sijainnin, selvittää sen
  toteutuksen pääpiirteet lähdekoodin perusteella ja kuvailla nämä
  suomen kielellä [edist/arvos5_0]

  en:- locate some simple OS functionality or data structure in the
  current version of the Linux kernel using a WWW-based tool (lxr),
  learn (some parts of) the main implementation ideas directly from
  the source code, and describe these (in general terms) in English
  :ne

**... tieteellisten ja ammatillisten taitojen osalta:**

en:**... with regard to scientific and professional skills:** :ne

- pystyy seuraamaan käyttöjärjestelmiin liittyvää ammattikeskustelua
  esimerkiksi lkml-sähköpostilistalla [edist/arvos3_0]

  en:- follow professional OS discussion for example on the mailing
  list "lkml" (i.e., the discussion list of real-life Linux kernel
  developers) :ne

- tietää julkaisufoorumeita, joissa käyttöjärjestelmätutkimuksen uusia
  tieteellisiä tuloksia julkaistaan [ydin/arvos2_0]

  en:- remember publication forums in which new scientific research on
  OSs published :ne

- osaa hakea oman yliopiston tilaamista tutkimustietokannoista
  kokotekstiartikkeleita käyttöjärjestelmien osa-alueisiin liittyen
  [edist/arvos3_0]

  en:- search some of the scientific article databases subscribed to by
  the university and find full-text articles regarding OS topics :ne

- kykenee lukemaan käyttöjärjestelmiin liittyviä tutkimusartikkeleita
  ymmärtäen ne vähintään johdannon ja johtopäätösten osalta [edist/arvos4_0]

  en:- read scientific articles on OSs, understanding at least the
  introduction and conclusion sections :ne

- kykenee löytämään uusien käyttöjärjestelmiin liittyvien
  tutkimusartikkelien pohjalta "kuumia aiheita" ja toistaiseksi auki
  olevia tutkimuskysymyksiä [edist/arvos5_0]

  en:- identify "hot topics" and open research questions related to OSs
  from the recent research articles by others :ne

- kykenee muodostamaan alustavasti käyttöjärjestelmiin liittyvän
  kanditason tutkimussuunnitelman tai aihe-ehdotuksen ["ultimaattinen
  tavoite" joka ylittää tämän kurssin sisäiset osaamistavoitteet ja
  parhaimmillaan muodostaa sillan konkreettisen kandidaattitutkielman
  puolelle]

  en:- formulate a preliminary study plan or topic suggestion for a
  Bachelor Thesis project regarding some OS-related topic (an
  "ultimate goal" that exceeds all actual learning outcomes of the
  course) :ne


  

Huom. Ohitetaan tarkoituksellisesti mm. seuraavia tärkeitä asioita:
--------------------------------------------------------------------

Tällä kurssilla *ei* käsitellä seuraavia kansainvälisissä
sisältösuosituksissa listattuja asioita:

en:We intentionally disregard the following recommended topics, since
they are covered on other courses of our faculty: :ne

- tarkemmat tietoturvakysymykset (hyökkäyskohteet ja -keinot, policyt
  ym.)

  en:- details of information security issues :ne

- käyttöjärjestelmän suorituskyvyn arvioinnin tarkemmat tavoitteet ja
  menettelyt (system performance evaluation)

  en:- performance assessment issues; system performance evaluation :ne

- vikasietoisen järjestelmän suunnitteluperusteet (fault tolerant
  systems design)

  en:- fault tolerant systems design :ne

- sähköisen todistusaineiston kysymykset (digital forensics)

  en:- digital forensics :ne

- moniprosessorijärjestelmän synkronoinnin yksityiskohdat,
  pilvipalvelut

  en:- details of multiprocessor systems, cloud computing :ne

- tietoliikenteen yksityiskohdat

  en:- details of telecommunication systems :ne

Aiheita käsitellään käyttöjärjestelmiinkin sovellettavissa olevista
yleisistä näkökulmista rinnakkaisilla aineopintokursseilla sekä
syventävillä jatkokursseilla, mm. Ohjelmistoturvallisuus,
Tietoverkkoturvallisuus, Operating System Security 1&2 (sekä muut
Informaatioturvallisuus-kurssit), Requirements Engineering,
Ohjelmistoarkkitehtuurit, Ohjelmistotestaus, Hajautetut järjestelmät,
Introduction to SOA and Cloud Computing, ...


Tuloksena syntyvä taulukkomuoto välttävälle osaamiselle (arvosana 1):
---------------------------------------------------------------------

Yrittää mukailla ns. Bloomin taksonomiaa. Taulukko on välttämättä
karkea yksinkertaistus yllä mainituista täsmällisistä
osaamistavoitteista.

1 muistaa
2 ymmärtää
3 osaa soveltaa
4 osaa analysoida
5 osaa arvioida
6 osaa luoda

==================================      ================
Osa-alue                                "Bloomin taso"
==================================      ================
Käyttöjärjestelmän merkitys             ymmärtää
Käyttöjärjestelmän perustoiminta        ymmärtää
Käyttöjärjestelmän perusrakenne         ymmärtää
Keskeytysjärjestelmä                    ymmärtää
Rinnakkaisuus                           osaa soveltaa
Tehtävien ajoitus, skedulointi          osaa soveltaa
Muistin hallinta                        ymmärtää
Oheislaitteiden hallinta                ymmärtää
Tiedostojärjestelmä                     ymmärtää
Interaktiivinen tekstikuori             osaa soveltaa
Kuoriskriptit                           ymmärtää
C-kieli                                 ymmärtää
==================================      ================