Innledning

Arbeidet med dette emnet skal gi studenten innføring i programmeringsspråket C og hvordan dette kan brukes til å interagere direkte med operativsystemet. Det skal også gi forståelse av operativsystemet Linux og kunnskap om hvordan dette virker.

Læringsutbytte

Kunnskap

Studenten...

  • kjenner til operativsystemene Unix og Linux: bakgrunn og historie og overordnet arkitektur og oppbygning
  • kjenner til utviklingen av og bruksområdet for programmeringsspråket «C»
  • forstår hva "viritualisering" er
  • kjenner til byggeprosessen i C inkludert: compile og link
  • kan forklare konseptet "everything is a file" og kjenner til eksempler inkludert: devices og procfs
  • forstår hva et "filsystem" er og hva det brukes til
  • forstår konseptene bak brukere og permissions i Linux
  • kjenner til forskjellen på userspace og kernelspace og hvordan bruke systemkall og signaler
  • kjenner til minneområdene "stack" og "heap" og forklare forskjellen
  • kjenner til konseptet "buffer owerflow" og hvorfor det er farlig
  • forstår forskjellen på row-major og column-major arrays

Ferdigheter

Studenten...

  • kan bruke grunnleggende konstruksjoner i programmeringsspråket "C" inkludert: main, basic types, printf, scanf, strings, #include, include guards, enum, typedef, struct, union, command line parameters, macros, vararg og Statisk minnehåndtering
  • kan utvikle programmer under paradigmet "strukturert programmering"
  • kan bruke stikkordet "const" korrekt
  • kan anvende dynamisk minnehåndtering inkludert: malloc, free, pointers, memcpy, sprintf, arrays og sizeof
  • kan lese og skrive enkeltbits og grupper av bits inn i en større datastruktur
  • kan generere kjørbare filer fra C-kode: makefile og static libraries
  • kan implementere lesing og skriving til fil: r/w modes og seek og buffer size 
  • kan operere kommandolinjen i linux for å utføre viktige operasjoner inkludert: ls, cd, mkdir, rm, cp, chmod, chown, pwd, ps, kill, man, wget og pipes, redirection og starte programmer og mounting av filsystemer
  • kan lage programmer som unngår buffer overflow

Generell kompetanse

Studenten...

  • kan vurdere hvilke situasjoner det er fornuftig å bruke programmeringsspråket "C"
  • kan anvende "C" for å løse systemprogrammeringsoppgaver
  • kan forholde seg til manuell minnehåndtering korrekt
  • kan forholde seg til linux som operativsystem

Emnet inngår i

Bachelor i informasjonsteknologi - Programmering 

Bachelor i informasjonsteknologi - Spillprogrammering

Bachelor i informasjonsteknologi - Intelligente systemer

Læringsaktiviteter

Kurset gjennomføres med 12 forelesninger à ca 2 timer og 12 lærerstyrte øvinger à ca 2 timer. Øvingene er ikke obligatoriske, men for å oppnå kompetansemålene forventes det at studentene fullfører øvingsoppgavene på egenhånd der øvingstimene ikke strekker til. Ellers skal studentene fokusere på hjemmeeksamener.

Anbefalt tidsbruk

Deltakelse i undervisning og veiledning - 24 timer

Selvstudium - 90 timer

Selvstendig øving / lab-arbeid / praktisk arbeid individuelt eller i grupper - 24 timer

Gjennomføring av og forberedelse til eksamen - 62 timer

Anbefalt tidsbruk totalt - 200 timer

Arbeidsverktøy

Operativsystemet Linux og kompilatoren GCC

Eksamen

Eksamensdel: Sammensatt individuell eksamen bestående av en skriftlig eksamen (60 %) og en skriftlig hjemmeeksamen (40 %)*

Skriftlig eksamen varighet: Tre timer

Hjemmeeksamen varighet: 2 uker

Gradering: Nasjonal karakterskala A - F (F er ikke bestått)

Vekting:100 % av sammensatt vurdering

Hjelpemidler:Ingen hjelpemidler er tillatt under skriftlig eksamen

Kontinuasjon

*Kontinuasjon av eksamensdel: Kontinuasjon gjennomføres som en individuell skriftlig eksamen. Varighet 3 timer. Ingen hjelpemidler er tillatt.

Merknader

Undervisningen vil bli levert på norsk eller engelsk avhengig av undervisere.