LU-LSP-b

From DiLab
Revision as of 00:20, 6 February 2022 by Leo (talk | contribs) (Kalendārs)
Jump to: navigation, search

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


Linux sistēmas programmēšana (LSP)

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

  • Pasniedzēji:
    • Krišjānis Nesenbergs
    • Leo Seļāvo (epasts: vards.uzvards @ gmail.com)
  • 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.2022

10: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
  • Pasludināts: MD_Koks - Dzimtas koks.


08.02.2022

12:30

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


09.02.2022

8:30

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


TBD

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.



TBD

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().



TBD

PD_File

Failu kopēšana.


TBD

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.


TBD

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.



TBD

PD_Dir

Direktoriju koka apstaigāšana.


TBD

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.


TBD

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ņš MD_Dir - Direktoriju koka apstaigāšana.


TBD

PD_An

Programmas analīze.


TBD

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)


TBD

KD1

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

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


TBD

PD_KD

Kontroldarba analīze.

  • PD_KD


TBD

Atkļūdošana

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


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


TBD

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)


TBD

PD_Dbg

Atkļūdošanas rīki.


TBD

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.



TBD

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


TBD

PD_Thread

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


TBD

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


TBD

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.



TBD

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


TBD

PD_Net :: PD_PProt

PD_Net

Starpprocesu komunikācija tīklā.



PD_PProt

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



TBD

Tekstuālā lietotāja saskarne.

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

Resursi


TBD

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


TBD

Grafiskā lietotāja saskarne

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


TBD

PD_KP

Darbs pie kursa projekta.

  • PD_KP


TBD

Konsultācija

Atbildes uz studentu jautājumiem


TBD

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!



TBD

Eksāmena turpinājums


xx-xx14.05.2022

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