LU-LSP-b21

From DiLab
Jump to: navigation, search

Īssaites: Kalendārs | Uzdevumi | Resursi | Šodiena: 05.11.24 : Rītdiena: 6.11.24 (ja ir lekcija)


Linux sistēmas programmēšana (LSP)

LU DF bakalaura studiju kurss DatZ3122, meklēt eStudijās.

  • Pasniedzēji:
    • Leo Seļāvo (epasts: vards.uzvards @ gmail.com)
    • Krišjānis Nesenbergs
  • Vērtējums = 15% praktiskie darbi, 35% mājas darbi, 20% kontroldarbs un 30% eksāmens.


Praktisko un mājas darbu iesniegšana

  • Mājas darbus iesniegt e-studijās vai darbu testēšanas serverī, atkarībā no darba specifikācijas.
  • Faila nosaukumam jābūt formā LSP_MD1_Vards_Uzvards.c - mainot atbilstošo uzdevuma kodu (MD1) un faila formātu pēc nepieciešamības.
  • Nevajag arhivēt failus, ja vien tas nav prasīts uzdevuma nosacījumos

Praktisko darbu vērtēšanas kritēriji

  • Praktisko darbu mērķis ir nostiprināt un parādīt izpratni par apgūto vielu, attiecīgi darbi ir jārisina patstāvīgi, tomēr jautājumu uzdošana pasniedzējam vai kolēģiem ir vēlama.
  • Maksimālo vērtējumu par praktisko darbu var saņemt, ja tas iesūtīts līdz praktisko darbu lekcijas beigām (vai brīdim, kad vienojamies, ka publiski apskatīsim PD risinājumu).
  • Pēc termiņa praktiskie darbi tiek pieņemti vēl tekošo nedēļu (līdz nākamās lekcijas sākumam) un tiks novērtēti, tomēr vairs ne ar maksimālo atzīmi.
  • Papildus praktiskajos darbos un lekcijās var izpelnīties "plusiņus" ar dalību diskusijās, unikālu risinājumu un ideju piedāvāšanu, trāpīgu jautājumu uzdošanu, atbildēšanu uz kolēģu jautājumiem u.t.t., kas savukārt palīdzēs savākt +10% no kopējā vērtējuma "par darbu klasē".

Mājas darbu vērtēšanas kritēriji

  • Mājas darbu iesniegšanas termiņa laiks ir attiecīgajā datumā līdz pusnaktij.
  • Ja darbs tiek iesniegts ar novēlošanos (kaut vai 1 sekundi!):
    • Tūdaļ pēc termiņa rezultāts tiek samazināts par 50%
    • Nedēļu pēc termiņa darbi vairs netiek pieņemti.

Kalendārs

Datums Tēma, saturs Uzdevumi

08.02.21

8:30

Ievads kursā

Unix un Linux operētājsistēmu pamatkoncepcijas. Linux sistēmprogrammētaja rīki (shell, gcc, make, manpages u.c.).

  • MD0 - Programmēšanas stils
  • MD_Koks - Dzimtas koks.


10.02.21

15:00

Programmēšanas valoda C

Vispārīgs pārskats par programmēšanas valodu C. Datu struktūras. C standarti, kompilācija, bibliotēkas, linkošana, skalārie un saliktie tipi (t.sk pointeri un masīvi), funkcijas, nosacījumi, cikli.

Resursi

  • Klasiskā C programmēšanas valodas grāmata: Brian W. C. Kernighan & Dennis M. Ritchie, "The C Programming Language -- ANSI C," Prentice Hall, 1988
  • C Language Tutorial


10.02.21

17:00

PD_Intro
  • Iekārtot darba vidi (linux, teksta redaktors, kompilators)
  • Izveidot un pašiem nokompilēt "Hello world" C valodā
  • Iepazīties ar UNIX čaulas komandām un uzdot jautājumus par neskaidrībām.
  • Versiju kontroles sistēmas github pamati.

Resursi


15.02.21

8:30

Darbs ar failiem

Sistēmas izsaukumi un standarta bibliotēkas funkcijas faila ievadam un izvadam. Linux piedāvātās programmas darbam ar failu izvadu/ievadu (cat, tail, head, less, telnet u.c.). Failu ievada un izvada ātrdarbības uzlabošana, buferi., ņemot vērā sistēmas arhitektūru.


17.02.21

15:00

Failu sistēma

Faila izmēra noteikšana. Failu saites, stingrās un vājās (hard links, soft links). Failu glabāšana un pieeja operētājsistēmā. i-node jēdziens. Sistēmas izsaukums stat(). Direktoriju struktūra. Izsaukumi opendir(), readdir() un closedir().


17.02.21

17:00

PD_File

Failu kopēšana.


22.02.21

8:30

Atmiņas arhitektūra

Atmiņas arhitektūra. Virtuālā atmiņa. TEXT, DATA, HEAP un STACK segmenti. Koplietošanas atmiņa starp procesiem. Procedūru izsaukumi. Parametru nodošana caur steku. Steka satura analīze un piekļuve stekam.

  • MD_Dir - Direktoriju koka apstaigāšana.


24.02.21

15:00

Failu piekļuves režīmi

Faila piekļuves tiesību režīmi pie open() un umask. Failu un i-node izsaukumi: chmod(), link(), unlink(), remove(), rename(), symlink(), readlink(), utime(), mkdir(), rmdir(), chdir(), getcwd(). Programma rakstīšanai log failā. Log faili. Ekskluzīva rakstīšana ar open(...O_SYNC) un fcntl() metodēm.


24.02.21

17:00

PD_Dir

Direktoriju koka apstaigāšana.


01.03.21

8:30

Virtuālā atmiņa

Virtuālās atmiņas lapas. Page fault un segmentation fault. Atmiņas aizsardzība. setjmp() un longjmp().

  • MD_Mem - Atmiņas rezervācijas funkciju salīdzinājums.


03.03.21

15:00

Dinamiskā atmiņa

Dinamiskā atmiņas izdalīšana. Heap, malloc() un free(). Dienesta informācija pie atmiņas izdalīšanas un atbrīvošanas. Brīvās atmiņas saraksti. Prasības malloc() un free() veiktspējai.

  • Termiņš Svētdien, 7-03-2021 23:59 MD_Dir - Direktoriju koka apstaigāšana.


03.03.21

17:00

PD_An

Programmas analīze.


08.03.21

8:30

Atmiņas fragmentācija

Atmiņas fragmentācija. Atmiņas rezervēšanas (allocation) algoritmi, kas darbojas uz atmiņas fragmentiem. Atmiņas 'spaiņi'.

  • MD_Frag - Atmiņas fragmentācijas algoritmu novērtējums (grupās)


10.03.21

15:00

KD1

KD1 kontroldarbs. Programmēšanas uzdevums pie datora, izmantojot apgūto vielu.

  • Termiņš Svētdien, 14-03-2021 23:59 MD_Mem - Atmiņas rezervācijas funkciju salīdzinājums.


10.03.21

17:00

PD_KD

Kontroldarba analīze.

  • PD_KD


15.03.21

8:30

Atkļūdošana

Linux atkļūdošanas rīki un to lietošana.

  • MP_Game - Kursa projekta tēmas (spēles) izvēle


17.03.21

15:00

Daudz-uzdevumu vide

Daudz-uzdevumu vide. Procesi un procesu kontrole. Pavedieni (threads). Kooperējošies procesi un preemptīvā daudz-uzdevumu metode. Komanda ps. getpid() un getppid(). fork(), exec(), wait(). system().

  • Termiņš MD_Frag - Atmiņas fragmentācijas algoritmu novērtējums (grupās)


17.03.21

17:00

PD_Dbg

Atkļūdošanas rīki.


22.03.21

8:30

Procesa dzīves cikls :: Starpprocesu komunikācija

Procesa dzīves cikls

Procesa dzīves cikls: Procesa ielādēšana, uzsākšanās un pieci veidi kā process var beigties. exit() un _exit().



Starpprocesu komunikācija

Starpprocesu komunikācija. Faili. Pipes. Koplietošanas atmiņa. Komunikācija starp nesaistītiem procesiem. Sockets abstrakcija komunikācijai.



24.03.21

15:00

Pavedieni

Pavedieni. POSIX pavedieni. Mutex. Datu skriešanās (data race condition). Strupceļš (deadlock).

Resursi

POSIX thread (pthread) libraries

  • MP_Spec - Spēles noteikumu specifikācija
  • Termiņš MP_Game - Kursa projekta tēmas (spēles) izvēle


24.03.21

17:00

PD_Thread

Programma kas taisa N pavedienus, kur katrs izdrukā M burtus.


07.04.21

15:00

Sockets :: Servera klienta arhitektūra

Sockets

Sockets abstrakcija komunikācijai. Klienta un servera arhitektūra. Iteratīvie un paralēlie serveri.



Servera klienta arhitektūra

TBD: Ieskatam servera/klienta komunikācijā PD11, bet nav jānodod.


  • MP_Prot1 - Spēles komunikāciju protokols, 1. versija
  • Termiņš MP_Spec - Spēles noteikumu specifikācija


07.04.21

17:00

PD_Jmp :: PD_PSpec

PD_Jmp

setjmp(),longjmp() un taimera signāls.



PD_PSpec

Darbs pie kursa projekta. Spēles izvēle un specifikācija.



12.04.21

8:30

Signāli

Signāli. Alarm serviss un signāls.

  • MP_Prot2 - Spēles komunikāciju protokols, gala versija
  • Termiņš MP_Prot1 - Spēles komunikāciju protokols, 1. versija


14.04.21

15:00

PD_Net :: PD_PProt

PD_Net

Starpprocesu komunikācija tīklā.



PD_PProt

Darbs pie kursa projekta. Komunikāciju protokola izstrāde.



14.04.21

17:00

Tekstuālā lietotāja saskarne.

Tekstuālā lietotāja saskarne. Ncurses bibliotēka.

Resursi


19.04.21

8:30

Dēmoni

Programmas, kas izpildās fonā un ilgtermiņā. Rezidenta programmas. Init.d. Upstart. Systemd. Sesijas identifikators.

  • Termiņš MP_Prot2 - Spēles komunikāciju protokols, gala versija


21.04.21

15:00

Grafiskā lietotāja saskarne

Grafiskā lietotāja saskarne. OpenGL. X-server.


21.04.21

17:00

PD_KP

Darbs pie kursa projekta.

  • PD_KP


26.04.21

8:30

Konsultācija

Atbildes uz studentu jautājumiem


28.04.21

15:00

Eksāmens

Eksāmena forma: projektu demonstrācija un prezentācija (darbība, pirmkods, diskusijas). Pirms eksāmena kodam kopā ar kompilācijas un palaišanas instrukcijām jābūt iesniegtam e-studijās!



28.04.21

17:00

Eksāmena turpinājums


03-14.05.2021

Sesija

Eksāmens 12.05.2021 15:00 - pēdējais termiņš.

Vērtējumu izlikšana.


Uzdevumi

Mājas darbi

  • MD0: Izlasīt kodēšanas stila dokumentus.
  • MD_Koks: Ģimenes koka ģenerēšanas programma.
  • MD3: Vienādo failu meklēšana direktorijas kokā.
  • MD4: Atmiņas rezervācijas funkciju salīdzināšana.
  • MD5: Atmiņas fragmentācijas algoritmu novērtējums.


Eksāmens izpaužas kā kursa projekta aizstāvēšana.

Resursi

Pamācoši vingrinājumi un piemēri

  • Failu I/O buferi un sekas: divi raksta, redzam trīs...
  • Aprēķins, cik laika vajag pārkopēt 1 TB pa baitam bez bufera.
  • Paging: piemērs 4K x 4K masīva apstaigāšanai, mainot indeksus: 4K vs 16M page faults

Literatūra

  • Advanced Programming in the UNIX(R) Environment, Second Edition, by W. Richard Stevens, Stephen A. Rago. Addison Wesley Professional, 2005, ISBN 0-201-43307-9. (Indiešu eksemplāram ir ISBN 81-317-0005-4)
  • "Linux system programming" by Robert Love, O'Reilly Media, 2007, ISBN 0596009585
  • "Building Embedded Linux Systems" O'Reilly Media, 2008, ISBN 0596529686

Programmētāja resursi

Programmēšanas analīzes rīki

  • PMD - scans source code and looks for bugs, dead code, suboptimal code, overcomplicated expressions, duplicate code.

Linux veiktspējas analīze

Āķīgi uzdevumi un pieredze

Atziņas