Difference between revisions of "LU-LSP-b"

From DiLab
Jump to: navigation, search
(Kalendārs)
(10.05.22)
(19 intermediate revisions by the same user not shown)
Line 11: Line 11:
 
{{LUDFKurss|Linux sistēmas programmēšana|LSP|DatZ3122|2DAT3122}}
 
{{LUDFKurss|Linux sistēmas programmēšana|LSP|DatZ3122|2DAT3122}}
 
* Pasniedzēji:
 
* Pasniedzēji:
 +
** Krišjānis Nesenbergs
 
** Leo Seļāvo ''(epasts: vards.uzvards @ gmail.com)''
 
** 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.
 
* Vērtējums = 15% praktiskie darbi, 35% mājas darbi, 20% kontroldarbs un 30% eksāmens.
Line 35: Line 35:
 
** Tūdaļ pēc termiņa rezultāts tiek samazināts par '''50%'''  
 
** Tūdaļ pēc termiņa rezultāts tiek samazināts par '''50%'''  
 
** Nedēļu pēc termiņa darbi vairs netiek pieņemti.
 
** Nedēļu pēc termiņa darbi vairs netiek pieņemti.
 +
 +
  
 
=Kalendārs=
 
=Kalendārs=
Line 45: Line 47:
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====08.02.2022====
+
====08.02.22====
8:30
+
10:30
 
|
 
|
 
{| width='100%' style='background-color:#ddd;'
 
{| width='100%' style='background-color:#ddd;'
Line 52: Line 54:
 
|}
 
|}
 
Unix un Linux operētājsistēmu pamatkoncepcijas. Linux sistēmprogrammētaja rīki (shell, gcc, make, manpages u.c.).
 
Unix un Linux operētājsistēmu pamatkoncepcijas. Linux sistēmprogrammētaja rīki (shell, gcc, make, manpages u.c.).
* [https://www.dropbox.com/s/ldoqyb7mkjun23a/L00_Ievads.pdf?raw=1 Slaidi]
 
 
 
|
 
|
* '''MD0''' - Programmēšanas stils
+
* Uzdots '''MD0''' - Programmēšanas stils
* Pasludināts: '''[https://docs.google.com/document/d/1wmhmxU2x93yj5bha98yGwGTvUbQ5Q0ZjOTfcNQ5ndjc/edit?usp=sharing MD_Koks]''' - Dzimtas koks.
+
* Uzdots '''[https://docs.google.com/document/d/1wmhmxU2x93yj5bha98yGwGTvUbQ5Q0ZjOTfcNQ5ndjc/edit?usp=sharing MD_Koks]''' - Dzimtas koks.
 
 
  
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
  
====08.02.2022====
+
====08.02.22====
10:30
+
12:30
 
|
 
|
 
{| width='100%' style='background-color:#ddd;'
 
{| width='100%' style='background-color:#ddd;'
Line 69: Line 68:
 
|}
 
|}
 
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.
 
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.
* [https://www.dropbox.com/s/y3x4ojr2whtdqy1/L01_C_data_algorithms.pdf?raw=1 Slaidi]
 
  
 
'''Resursi'''
 
'''Resursi'''
Line 77: Line 75:
  
 
|
 
|
 
  
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====08.02.2022====
+
 
 +
====09.02.22====
 
8:30
 
8:30
 
|
 
|
Line 99: Line 97:
  
 
|
 
|
* '''[[LU-LSP-b13:L01 | PD_Intro]]'''
+
* Uzdots '''[[LU-LSP-b13:L01 | PD_Intro]]'''
*  '''Termiņš''': [https://docs.google.com/document/d/1wmhmxU2x93yj5bha98yGwGTvUbQ5Q0ZjOTfcNQ5ndjc/edit?usp=sharing MD_Koks].
 
 
 
  
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
 
+
====15.02.22====
====TBD====
+
10:30
 
 
 
|
 
|
 
{| width='100%' style='background-color:#ddd;'
 
{| width='100%' style='background-color:#ddd;'
Line 113: Line 108:
 
|}
 
|}
 
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.
 
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.
* [https://www.dropbox.com/s/nr9tl8jvas4g6xu/L02_files.pdf?raw=1 Slaidi]
 
 
 
|
 
|
 
  
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====TBD====
+
====15.02.22====
 
+
12:30
 
|
 
|
 
{| width='100%' style='background-color:#ddd;'
 
{| width='100%' style='background-color:#ddd;'
|<big>'''Failu sistēma'''</big>
+
|<big>'''PD_File'''</big>
 
|}
 
|}
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(). 
+
Failu kopēšana.
* [https://www.dropbox.com/s/by2sjwx7kof7w0s/L03_file_system.pdf?raw=1 Slaidi]
 
  
 
|
 
|
 
+
* Uzdots '''[[LU-LSP-b13:L02 | PD_File]]'''
  
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====TBD====
+
====16.02.22====
 
+
8:30
 
|
 
|
 
{| width='100%' style='background-color:#ddd;'
 
{| width='100%' style='background-color:#ddd;'
|<big>'''PD_File'''</big>
+
|<big>'''Failu sistēma'''</big>
 
|}
 
|}
Failu kopēšana.
+
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().  
 
 
 
|
 
|
*  '''[[LU-LSP-b13:L02 | PD_File]]'''
 
 
  
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====TBD====
+
====22.02.22====
 
+
10:30
 
|
 
|
 
{| width='100%' style='background-color:#ddd;'
 
{| width='100%' style='background-color:#ddd;'
|<big>'''Atmiņas arhitektūra'''</big>
+
|<big>'''Failu piekļuves režīmi'''</big>
 
|}
 
|}
Atmiņas arhitektūra. Virtuālā atmiņa. TEXT, DATA, HEAP un STACK segmenti. Koplietošanas atmiņa starp procesiem. Procedūru izsaukumiParametru nodošana caur steku. Steka satura analīze un piekļuve stekam.
+
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 failiEkskluzīva rakstīšana ar open(...O_SYNC) un fcntl() metodēm.
* [https://www.dropbox.com/s/hvvvqa8mazy4zul/L05_memory_arch_stack.pdf?raw=1 Slaidi]
 
 
 
 
|
 
|
* '''[[LU-LSP-b:MD3 | MD_Dir]]''' - Direktoriju koka apstaigāšana.
+
* Uzdots '''[[LU-LSP-b:MD3 | MD_Dir]]''' - Direktoriju koka apstaigāšana.
 
 
  
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====TBD====
+
====22.02.22====
 
+
12:30
 
|
 
|
 
{| width='100%' style='background-color:#ddd;'
 
{| width='100%' style='background-color:#ddd;'
|<big>'''Failu piekļuves režīmi'''</big>
+
|<big>'''PD_Dir'''</big>
 
|}
 
|}
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.
+
Direktoriju koka apstaigāšana.
* [https://www.dropbox.com/s/1or6d8o00c7n6kj/L04_more_files.pdf?raw=1 Slaidi]
 
  
 
|
 
|
* '''Termiņš 12:00''' '''[[LU-LSP-b:MD1 | MD_Koks]]''' - Dzimtas koks.
+
* Uzdots '''[[LU-LSP-b13:L03 | PD_Dir]]'''
 
+
* '''Termiņš''' '''[https://docs.google.com/document/d/1wmhmxU2x93yj5bha98yGwGTvUbQ5Q0ZjOTfcNQ5ndjc/edit?usp=sharing MD_Koks]''' - Dzimtas koks.
  
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====TBD====
+
====23.02.22====
 
+
8:30
 
|
 
|
 
{| width='100%' style='background-color:#ddd;'
 
{| width='100%' style='background-color:#ddd;'
|<big>'''PD_Dir'''</big>
+
|<big>'''Atmiņas arhitektūra'''</big>
 
|}
 
|}
Direktoriju koka apstaigāšana.
+
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.
 
 
 
|
 
|
*  '''[[LU-LSP-b13:L03 | PD_Dir]]'''
 
 
  
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====TBD====
+
====01.03.22====
 
+
10:30
 
|
 
|
 
{| width='100%' style='background-color:#ddd;'
 
{| width='100%' style='background-color:#ddd;'
Line 199: Line 180:
 
|}
 
|}
 
Virtuālās atmiņas lapas.  Page fault un segmentation fault.  Atmiņas aizsardzība. ''setjmp()'' un ''longjmp()''.
 
Virtuālās atmiņas lapas.  Page fault un segmentation fault.  Atmiņas aizsardzība. ''setjmp()'' un ''longjmp()''.
* [https://www.dropbox.com/s/q5xq0g4hf4iswcn/L06_memory_paging_protection.pdf?raw=1 Slaidi]
 
 
 
|
 
|
* '''[[LU-LSP-b:MD4 | MD_Mem]]''' - Atmiņas rezervācijas funkciju salīdzinājums.
+
* Uzdots '''[[LU-LSP-b:MD4 | MD_Mem]]''' - Atmiņas rezervācijas funkciju salīdzinājums.
 
 
  
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====TBD====
+
====01.03.22====
 
+
12:30
 
|
 
|
 
{| width='100%' style='background-color:#ddd;'
 
{| width='100%' style='background-color:#ddd;'
|<big>'''Dinamiskā atmiņa'''</big>
+
|<big>'''PD_An'''</big>
 
|}
 
|}
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.
+
Programmas analīze.
* [https://www.dropbox.com/s/zqq0jbldw0bciu4/L07_memory_dynamic_reservation.pdf?raw=1 Slaidi]
 
  
 
|
 
|
* '''Termiņš Svētdien, 7-03-2021 23:59''' '''[[LU-LSP-b:MD3 | MD_Dir]]''' - Direktoriju koka apstaigāšana.
+
* Uzdots '''[[LU-LSP-b13:L04 | PD_An]]'''
 
+
* '''Termiņš''' '''[[LU-LSP-b:MD3 | MD_Dir]]''' - Direktoriju koka apstaigāšana.
  
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====TBD====
+
====02.03.22====
 
+
8:30
 
|
 
|
 
{| width='100%' style='background-color:#ddd;'
 
{| width='100%' style='background-color:#ddd;'
|<big>'''PD_An'''</big>
+
|<big>'''Dinamiskā atmiņa'''</big>
 
|}
 
|}
Programmas analīze.
+
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.
 
 
 
|
 
|
*  '''[[LU-LSP-b13:L04 | PD_An]]'''
 
 
  
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====TBD====
+
====08.03.22====
 
+
10:30
 
|
 
|
 
{| width='100%' style='background-color:#ddd;'
 
{| width='100%' style='background-color:#ddd;'
Line 243: Line 217:
 
|}
 
|}
 
Atmiņas fragmentācija. Atmiņas rezervēšanas (allocation) algoritmi,  kas darbojas uz atmiņas fragmentiem. Atmiņas 'spaiņi'.
 
Atmiņas fragmentācija. Atmiņas rezervēšanas (allocation) algoritmi,  kas darbojas uz atmiņas fragmentiem. Atmiņas 'spaiņi'.
* [https://www.dropbox.com/s/fr3i3tys808343j/L08_memory_algorithms.pdf?raw=1 Slaidi]
 
 
 
|
 
|
* '''[[LU-LSP-b:MD5 | MD_Frag]]''' - Atmiņas fragmentācijas algoritmu novērtējums ('''grupās''')
+
* Uzdots '''[[LU-LSP-b:MD5 | MD_Frag]]''' - Atmiņas fragmentācijas algoritmu novērtējums ('''grupās''')
 
 
  
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====TBD====
+
====08.03.22====
 
+
12:30
 
|
 
|
 
{| width='100%' style='background-color:#ddd;'
 
{| width='100%' style='background-color:#ddd;'
|<big>'''KD1'''</big>
+
|<big>'''PD_Malloc :: PD_Heap'''</big>
 
|}
 
|}
KD1 kontroldarbs. Programmēšanas uzdevums pie datora, izmantojot apgūto vielu.
+
'''PD_Malloc'''
 +
 
 +
Atmiņas rezervācija.
 +
 
 +
'''PD_Heap'''
 +
 
 +
Vienkāršs atmiņas alokators fiksēta izmēra objektiem.
  
 
|
 
|
* '''Termiņš Svētdien, 14-03-2021 23:59''' '''[[LU-LSP-b:MD4 | MD_Mem]]''' - Atmiņas rezervācijas funkciju salīdzinājums.
+
* Uzdots '''[[LU-LSP-b13:L06 | PD_Malloc]]'''
 
+
* Uzdots '''[[LU-LSP-b:L07 | PD_Heap]]'''
 +
* '''Termiņš''' '''[[LU-LSP-b:MD4 | MD_Mem]]''' - Atmiņas rezervācijas funkciju salīdzinājums.
  
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====TBD====
+
====09.03.22====
 
+
8:30
 
|
 
|
 
{| width='100%' style='background-color:#ddd;'
 
{| width='100%' style='background-color:#ddd;'
|<big>'''PD_KD'''</big>
+
|<big>'''KD1'''</big>
 
|}
 
|}
Kontroldarba analīze.
+
KD1 kontroldarbs. Programmēšanas uzdevums pie datora, izmantojot apgūto vielu.
  
 
|
 
|
*  '''PD_KD'''
 
 
  
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====TBD====
+
====15.03.22====
 
+
10:30
 
|
 
|
 
{| width='100%' style='background-color:#ddd;'
 
{| width='100%' style='background-color:#ddd;'
Line 286: Line 262:
 
|}
 
|}
 
Linux atkļūdošanas rīki un to lietošana.
 
Linux atkļūdošanas rīki un to lietošana.
* [https://www.dropbox.com/s/9tsu0fecra9f6y0/L09_KD_debugging.pdf?raw=1 Slaidi]
 
 
 
|
 
|
* '''MP_Game''' - Kursa projekta tēmas (spēles) izvēle
+
* Uzdots '''MP_Game''' - Kursa projekta tēmas (spēles) izvēle
 
 
  
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====TBD====
+
====15.03.22====
 
+
12:30
 
|
 
|
 
{| width='100%' style='background-color:#ddd;'
 
{| width='100%' style='background-color:#ddd;'
Line 301: Line 274:
 
|}
 
|}
 
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()''.
 
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()''.
* [https://www.dropbox.com/s/qx2ffq19u2rtx86/L10_multitasking_processes_threads.pdf?raw=1 Slaidi]
 
 
 
|
 
|
 
* '''Termiņš''' '''[[LU-LSP-b:MD5 | MD_Frag]]''' - Atmiņas fragmentācijas algoritmu novērtējums ('''grupās''')
 
* '''Termiņš''' '''[[LU-LSP-b:MD5 | MD_Frag]]''' - Atmiņas fragmentācijas algoritmu novērtējums ('''grupās''')
 
  
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====TBD====
+
====16.03.22====
 
+
8:30
 
|
 
|
 
{| width='100%' style='background-color:#ddd;'
 
{| width='100%' style='background-color:#ddd;'
|<big>'''PD_Dbg'''</big>
+
|<big>'''PD_Dbg :: PD_KD'''</big>
 
|}
 
|}
 +
'''PD_Dbg'''
 +
 
Atkļūdošanas rīki.
 
Atkļūdošanas rīki.
 +
 +
'''PD_KD'''
 +
 +
Kontroldarba analīze.
  
 
|
 
|
* '''[[LU-LSP-b13:LA | PD_Dbg]]'''
+
* Uzdots '''[[LU-LSP-b13:LA | PD_Dbg]]''' (Nav obligāti jāiesniedz)
 
 
  
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====TBD====
 
  
 +
====22.03.22====
 +
10:30
 
|
 
|
 
{| width='100%' style='background-color:#ddd;'
 
{| width='100%' style='background-color:#ddd;'
|<big>'''Procesa dzīves cikls :: Starpprocesu komunikācija'''</big>
+
|<big>'''Pavedieni'''</big>
 
|}
 
|}
'''Procesa dzīves cikls'''
+
Pavedieni. POSIX pavedieni. Mutex. Datu skriešanās (data race condition). Strupceļš (deadlock).
 
+
'''Resursi'''
Procesa dzīves cikls: Procesa ielādēšana, uzsākšanās un pieci veidi  kā process var beigties. exit() un _exit().
 
* [https://www.dropbox.com/s/vkce978v56zk9uw/L11_lifecycle_ipc.pdf?raw=1 Slaidi]
 
 
 
 
 
 
 
 
 
'''Starpprocesu komunikācija'''
 
 
 
Starpprocesu komunikācija.  Faili. Pipes. Koplietošanas atmiņa. Komunikācija starp nesaistītiem procesiem. Sockets abstrakcija komunikācijai.
 
 
 
  
 +
[https://www.cs.cmu.edu/afs/cs/academic/class/15492-f07/www/pthreads.html POSIX thread (pthread) libraries]
  
 
|
 
|
 
  
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====TBD====
+
====22.03.22====
 
+
12:30
 
|
 
|
 
{| width='100%' style='background-color:#ddd;'
 
{| width='100%' style='background-color:#ddd;'
|<big>'''Pavedieni'''</big>
+
|<big>'''PD_Thread'''</big>
 
|}
 
|}
Pavedieni. POSIX pavedieni. Mutex. Datu skriešanās (data race condition). Strupceļš (deadlock).
+
Programma kas taisa N pavedienus, kur katrs izdrukā M burtus.
* [https://www.dropbox.com/s/jlrsncelogcxkbj/L13_posix_threads.pdf?raw=1 Slaidi]
 
 
 
'''Resursi'''
 
 
 
[https://www.cs.cmu.edu/afs/cs/academic/class/15492-f07/www/pthreads.html POSIX thread (pthread) libraries]
 
  
 
|
 
|
* '''MP_Spec''' - Spēles noteikumu specifikācija
+
* Uzdots '''MP_Spec''' - Spēles noteikumu specifikācija
 +
* Uzdots '''[[LU-LSP-b:L08 | PD_Thread]]'''
 
* '''Termiņš''' '''MP_Game''' - Kursa projekta tēmas (spēles) izvēle
 
* '''Termiņš''' '''MP_Game''' - Kursa projekta tēmas (spēles) izvēle
 
  
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====TBD====
+
====23.03.22====
 
+
8:30
 
|
 
|
 
{| width='100%' style='background-color:#ddd;'
 
{| width='100%' style='background-color:#ddd;'
|<big>'''PD_Thread'''</big>
+
|<big>'''Procesa dzīves cikls :: Starpprocesu komunikācija'''</big>
 
|}
 
|}
Programma kas taisa N pavedienus, kur katrs izdrukā M burtus.
+
'''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.
  
 
|
 
|
*  '''[[LU-LSP-b:L08 | PD_Thread]]'''
 
 
  
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====TBD====
+
====29.03.22====
 
+
10:30
 
|
 
|
 
{| width='100%' style='background-color:#ddd;'
 
{| width='100%' style='background-color:#ddd;'
Line 391: Line 356:
  
 
Sockets abstrakcija komunikācijai. Klienta un servera arhitektūra.  Iteratīvie un paralēlie serveri.  
 
Sockets abstrakcija komunikācijai. Klienta un servera arhitektūra.  Iteratīvie un paralēlie serveri.  
* [https://www.dropbox.com/s/pmvij4gakcnvsb1/L15_sockets.pdf?raw=1 Slaidi]
 
 
 
 
  
 
'''Servera klienta arhitektūra'''
 
'''Servera klienta arhitektūra'''
  
 
TBD: Ieskatam servera/klienta komunikācijā [http://selavo.lv/wiki/index.php/LU-LSP-b13:L11 PD11], bet nav jānodod.
 
TBD: Ieskatam servera/klienta komunikācijā [http://selavo.lv/wiki/index.php/LU-LSP-b13:L11 PD11], bet nav jānodod.
 
 
  
 
|
 
|
* '''MP_Prot1''' - Spēles komunikāciju protokols, 1. versija
+
* Uzdots '''MP_Prot1''' - Spēles komunikāciju protokols, 1. versija
 
* '''Termiņš''' '''MP_Spec''' - Spēles noteikumu specifikācija
 
* '''Termiņš''' '''MP_Spec''' - Spēles noteikumu specifikācija
 
  
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====TBD====
+
====29.03.22====
 
+
12:30
 
|
 
|
 
{| width='100%' style='background-color:#ddd;'
 
{| width='100%' style='background-color:#ddd;'
Line 418: Line 376:
  
 
''setjmp()'',''longjmp()'' un taimera signāls.
 
''setjmp()'',''longjmp()'' un taimera signāls.
 
 
 
  
 
'''PD_PSpec'''
 
'''PD_PSpec'''
  
 
Darbs pie kursa projekta. Spēles izvēle un specifikācija.
 
Darbs pie kursa projekta. Spēles izvēle un specifikācija.
 
 
  
 
|
 
|
* '''[[LU-LSP-b13:L05 | PD_Jmp]]'''
+
* Uzdots '''[[LU-LSP-b13:L05 | PD_Jmp]]'''
* '''PD_PSpec'''
+
* Uzdots '''PD_PSpec'''
 
 
  
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====TBD====
+
====30.03.22====
 
+
8:30
 
|
 
|
 
{| width='100%' style='background-color:#ddd;'
 
{| width='100%' style='background-color:#ddd;'
Line 442: Line 394:
 
|}
 
|}
 
Signāli. Alarm serviss un signāls.
 
Signāli. Alarm serviss un signāls.
* [https://www.dropbox.com/s/rhci91907le26bf/L12_signals.pdf?raw=1 Slaidi]
 
 
 
|
 
|
* '''MP_Prot2''' - Spēles komunikāciju protokols, gala versija
+
* Uzdots '''MP_Prot2''' - Spēles komunikāciju protokols, gala versija
 
* '''Termiņš''' '''MP_Prot1''' - Spēles komunikāciju protokols, 1. versija
 
* '''Termiņš''' '''MP_Prot1''' - Spēles komunikāciju protokols, 1. versija
 
  
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====TBD====
+
====05.04.22====
 
+
10:30
 
|
 
|
 
{| width='100%' style='background-color:#ddd;'
 
{| width='100%' style='background-color:#ddd;'
|<big>'''PD_Net :: PD_PProt'''</big>
+
|<big>'''Tekstuālā lietotāja saskarne.'''</big>
 
|}
 
|}
'''PD_Net'''
+
Tekstuālā lietotāja saskarne. Ncurses bibliotēka.
 
 
Starpprocesu komunikācija tīklā.
 
 
 
 
 
 
 
 
 
'''PD_PProt'''
 
 
 
Darbs pie kursa projekta. Komunikāciju protokola izstrāde.
 
  
 +
'''Resursi'''
  
 +
* [https://www.cyberciti.biz/faq/linux-install-ncurses-library-headers-on-debian-ubuntu-centos-fedora/ Ncurses library, installation and use]
  
 
|
 
|
*  '''[[LU-LSP-b13:L10 | PD_Net]]'''
 
*  '''PD_PProt'''
 
 
  
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====TBD====
+
====05.04.22====
 
+
12:30
 
|
 
|
 
{| width='100%' style='background-color:#ddd;'
 
{| width='100%' style='background-color:#ddd;'
|<big>'''Tekstuālā lietotāja saskarne.'''</big>
+
|<big>'''PD_Net :: PD_PProt'''</big>
 
|}
 
|}
Tekstuālā lietotāja saskarne. Ncurses bibliotēka.
+
'''PD_Net'''
 +
 
 +
Starpprocesu komunikācija tīklā.
  
'''Resursi'''
+
'''PD_PProt'''
  
* [https://www.cyberciti.biz/faq/linux-install-ncurses-library-headers-on-debian-ubuntu-centos-fedora/ Ncurses library, installation and use]
+
Darbs pie kursa projekta. Komunikāciju protokola izstrāde.
  
 
|
 
|
 
+
* Uzdots '''[[LU-LSP-b13:L10 | PD_Net]]'''
 +
* Uzdots '''PD_PProt'''
  
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====TBD====
+
====06.04.22====
 
+
8:30
 
|
 
|
 
{| width='100%' style='background-color:#ddd;'
 
{| width='100%' style='background-color:#ddd;'
Line 501: Line 443:
 
|}
 
|}
 
Programmas, kas izpildās fonā un ilgtermiņā.  Rezidenta programmas. Init.d. Upstart. Systemd. Sesijas identifikators.
 
Programmas, kas izpildās fonā un ilgtermiņā.  Rezidenta programmas. Init.d. Upstart. Systemd. Sesijas identifikators.
* [https://www.dropbox.com/s/emtquouigfm8jcj/L14_daemons.pdf?raw=1 Slaidi]
 
 
 
|
 
|
 
* '''Termiņš''' '''MP_Prot2''' - Spēles komunikāciju protokols, gala versija
 
* '''Termiņš''' '''MP_Prot2''' - Spēles komunikāciju protokols, gala versija
 
  
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====TBD====
+
====19.04.22====
 
+
10:30
 
|
 
|
 
{| width='100%' style='background-color:#ddd;'
 
{| width='100%' style='background-color:#ddd;'
Line 518: Line 457:
  
 
|
 
|
 
  
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====TBD====
+
====19.04.22====
 
+
12:30
 
|
 
|
 
{| width='100%' style='background-color:#ddd;'
 
{| width='100%' style='background-color:#ddd;'
Line 531: Line 469:
  
 
|
 
|
* '''PD_KP'''
+
* Uzdots '''PD_KP'''
 
 
  
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====TBD====
+
====20.04.22====
 
+
8:30
 
|
 
|
 
{| width='100%' style='background-color:#ddd;'
 
{| width='100%' style='background-color:#ddd;'
Line 545: Line 482:
  
 
|
 
|
 
  
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====TBD====
+
====26.04.22====
 
+
10:30
 
|
 
|
 
{| width='100%' style='background-color:#ddd;'
 
{| width='100%' style='background-color:#ddd;'
|<big>'''Eksāmens'''</big>
+
|<big>'''Konsultācija pēc vajadzības'''</big>
 
|}
 
|}
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!
 
 
  
 
|
 
|
 
  
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====TBD====
 
  
 +
====10.05.22====
 +
10:30
 
|
 
|
 
{| width='100%' style='background-color:#ddd;'
 
{| width='100%' style='background-color:#ddd;'
|<big>''' '''</big>
+
|<big>'''Eksāmens'''</big>
 
|}
 
|}
Eksāmena turpinājums
+
Vieta: LU DF 312.auditorija.
 +
 
 +
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!
  
 
|
 
|
 +
'''Pirms eksāmena''' eStudijās jāiesniedz projekta pirmkods zip failā. Tajā jābūt iekļautam arī '''readme''' failam.
  
 +
Eksāmena vērtējuma plāns:
 +
* Pirmkods, serveris 25%
 +
* Pirmkods, klients 25%
 +
* Demo un darbības testēšana 30%
 +
* Prezentācija (bez slaidiem) 30%
  
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====xx-xx14.05.2022====
+
 
 +
====02-14.05.2022====
  
 
|
 
|
Line 583: Line 526:
 
|<big>'''Sesija'''</big>
 
|<big>'''Sesija'''</big>
 
|}
 
|}
Eksāmens 12.05.2021 15:00 - pēdējais termiņš.
+
Vērtējumu izlikšana
 
 
Vērtējumu izlikšana.
 
 
|
 
|
 
  
 
|}
 
|}

Revision as of 08:42, 20 April 2022

Īssaites: Kalendārs | Uzdevumi | Resursi | Šodiena: 28.03.24 : Rītdiena: 29.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.22

10:30

Ievads kursā

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

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

08.02.22

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.22

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

15.02.22

10: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.

15.02.22

12:30

PD_File

Failu kopēšana.

16.02.22

8:30

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

22.02.22

10:30

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.

  • Uzdots MD_Dir - Direktoriju koka apstaigāšana.

22.02.22

12:30

PD_Dir

Direktoriju koka apstaigāšana.

23.02.22

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.

01.03.22

10:30

Virtuālā atmiņa

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

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

01.03.22

12:30

PD_An

Programmas analīze.

02.03.22

8:30

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.

08.03.22

10: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'.

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

08.03.22

12:30

PD_Malloc :: PD_Heap

PD_Malloc

Atmiņas rezervācija.

PD_Heap

Vienkāršs atmiņas alokators fiksēta izmēra objektiem.

09.03.22

8:30

KD1

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

15.03.22

10:30

Atkļūdošana

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

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

15.03.22

12:30

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)

16.03.22

8:30

PD_Dbg :: PD_KD

PD_Dbg

Atkļūdošanas rīki.

PD_KD

Kontroldarba analīze.

  • Uzdots PD_Dbg (Nav obligāti jāiesniedz)

22.03.22

10:30

Pavedieni

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

POSIX thread (pthread) libraries

22.03.22

12:30

PD_Thread

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

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

23.03.22

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.

29.03.22

10:30

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.

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

29.03.22

12:30

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.

30.03.22

8:30

Signāli

Signāli. Alarm serviss un signāls.

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

05.04.22

10:30

Tekstuālā lietotāja saskarne.

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

Resursi

05.04.22

12:30

PD_Net :: PD_PProt

PD_Net

Starpprocesu komunikācija tīklā.

PD_PProt

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

06.04.22

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

19.04.22

10:30

Grafiskā lietotāja saskarne

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

19.04.22

12:30

PD_KP

Darbs pie kursa projekta.

  • Uzdots PD_KP

20.04.22

8:30

Konsultācija

Atbildes uz studentu jautājumiem

26.04.22

10:30

Konsultācija pēc vajadzības

10.05.22

10:30

Eksāmens

Vieta: LU DF 312.auditorija.

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!

Pirms eksāmena eStudijās jāiesniedz projekta pirmkods zip failā. Tajā jābūt iekļautam arī readme failam.

Eksāmena vērtējuma plāns:

  • Pirmkods, serveris 25%
  • Pirmkods, klients 25%
  • Demo un darbības testēšana 30%
  • Prezentācija (bez slaidiem) 30%

02-14.05.2022

Sesija

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