LU-LSP-b: Difference between revisions

From DiLab
Jump to navigation Jump to search
Content deleted Content added
Krisjanis (talk | contribs)
No edit summary
 
(220 intermediate revisions by 2 users not shown)
Line 1: Line 1:
<big>
{{LUDFKurss|Linux sistēmas programmēšana|LSP|DatZ3122|2DAT3122}}
'''Īssaites:'''
[[#Kalendārs | Kalendārs]] |
[[#Uzdevumi | Uzdevumi]] |
[[#Resursi | Resursi]] |
</big>
{{TodayTomorrow}} (ja ir lekcija)


{{LUDFKurss|Linux sistēmas programmēšana|LSP|DatZ3122|2DAT3122}}
* Pasniedzējs:
** Leo Seļāvo ''(epasts: vards.uzvards @ gmail.com)''


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

* {{KursiGGroup|lu-lsp-b}}

* Vērtējums = 15% praktiskie darbi, 25% mājas darbi, 10% dalība klasē, 20% KD1 un 30% KD2(eksāmens).


* [[LSP kursa atsauksmes]] no iepriekšējiem gadiem.
* [[LSP kursa atsauksmes]] no iepriekšējiem gadiem.
Line 13: Line 17:


==== Praktisko un mājas darbu iesniegšana ====
==== Praktisko un mājas darbu iesniegšana ====
* Mājas darbus iesniegt e-studijās.
* 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 un faila formātu pēc nepieciešamības)
* 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
* Nevajag arhivēt failus, ja vien tas nav prasīts uzdevuma nosacījumos

<!--
* Darbi jāiesniedz kā '''pielikums''' e-pasta vēstulei, nevis vēstules tekstā
* E-pasta tēmai jābūt formā "LSP MD1 Vārds Uzvārds", aizstājot MD1 ar faktisko darba kodu, un ierakstot savu vārdu un uzvārdu
* E-pasts jāsūta pasniedzējam: leo.selavo pie gmail punkts com
-->


==== Praktisko darbu vērtēšanas kritēriji ====
==== 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.
* 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).
* Maksimālo vērtējumu par praktisko darbu var saņemt, ja tas iesūtīts līdz praktisko darbu lekcijas dienas beigām.
* 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.
* 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ē".
* Praktiskajos darbos un lekcijās atzinīgi vērtējama ir dalība diskusijās, unikālu risinājumu un ideju piedāvāšana, trāpīgu jautājumu uzdošana, atbildēšana uz kolēģu jautājumiem u.t.t., kas var pozitīvi ietekmēt gala atzīmi kursā.


==== Mājas darbu vērtēšanas kritēriji ====
==== Mājas darbu vērtēšanas kritēriji ====
* Mājas darbu iesniegšanas termiņa laiks ir 30 minūtes pirms lekcijas sākuma
* 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 min!), rezultāts tiek samazināts par:
* 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%'''
** '''10%''' par ik dienu pirmo piecu dienu laikā pēc termiņa, un
** Nedēļu pēc termiņa darbi vairs netiek pieņemti.
** '''50%''' piecas vai vairāk dienas pēc termiņa.
** Divas nedēļas pēc termiņa darbi vairs netiek pieņemti.


<!--
==== Vidus semestra aptauja ====
* [xxx Aptauja]
-->


== Kalendārs ==
=Kalendārs=
{| border=1 cellspacing=0 cellpadding=4 style = 'border-color: #ddd;'

{| border=1 cellspacing=0 cellpadding=4
|-
|-
! Datums, nedēļa
! Datums
! Kursa saturs
! Tēma, saturs
! Uzdevumi
! Uzdevumi

|-
|- style='vertical-align: top;'
|
====4.02.26====
10:30
|
{| width='100%' style='background-color:#ddd;'
|<big>'''Ievads kursā'''</big>
|}
Unix un Linux operētājsistēmu pamatkoncepcijas. Linux sistēmprogrammētaja rīki (shell, gcc, make, manpages u.c.).
|
|
* Uzdots '''[[LU-LSP-b:MD0 | MD0 ]]''' - Programmēšanas stils
==== 04.09.2018.====
* Uzdots '''[https://docs.google.com/document/d/1wmhmxU2x93yj5bha98yGwGTvUbQ5Q0ZjOTfcNQ5ndjc/edit?usp=sharing MD_Koks]''' - Dzimtas koks.
|
[L00] Ievads kursā. Unix un Linux operētājsistēmu pamatkoncepcijas un vēsture. Linux sistēmprogrammētaja rīki (shell, gcc, make, manpages u.c.)


|- style='vertical-align: top;'
Vispārīgs pārskats par valodu C.
|


====4.02.26====
[https://www.dropbox.com/s/2c87i9k0vc3mthr/L00_Ievads.pdf?dl=0 Slaidi L00]
12:30

|
[PD0] Praktiskais darbs #0:
{| width='100%' style='background-color:#ddd;'
|<big>'''PD_Intro'''</big>
|}
* Iekārtot darba vidi (linux, teksta redaktors, kompilators)
* Iekārtot darba vidi (linux, teksta redaktors, kompilators)
* izveidot un pašiem nokompilēt "Hello world" C valodā
* Izveidot un pašiem nokompilēt "Hello world" C valodā
* Iepazīties ar shell komandām un uzdot jautājumus par neskaidrībām: [[LU-LSP-B11:shell-cheatsheet | UNIX čaulas populārākās komandas un lietojumi]]
* Iepazīties ar UNIX čaulas komandām un uzdot jautājumus par neskaidrībām.
* Versiju kontroles sistēmas github pamati.

'''Resursi'''

* [[LU-LSP-B11:shell-cheatsheet | UNIX čaulas populārākās komandas un lietojumi]]
* Lasīt [https://www.linux.com/what-is-linux Kas tas ir, Linux?] - tagad vai līdz nākamajai lekcijai
* Lasīt [https://www.linux.com/what-is-linux Kas tas ir, Linux?] - tagad vai līdz nākamajai lekcijai
* Lasīt [https://web.archive.org/web/20160417114016/http://www.physics.drexel.edu/students/courses/Comp_Phys/General/C_basics/#first C valodas pamācību] no Drexel universitātes - tagad vai līdz nākamajai lekcijai
* Lasīt [https://web.archive.org/web/20160417114016/http://www.physics.drexel.edu/students/courses/Comp_Phys/General/C_basics/#first C valodas pamācību] no Drexel universitātes."

|
|
* Uzdots '''[[LU-LSP-b13:L01 | PD_Intro]]'''
Uzdots [[LU-LSP-b:MD0 | MD0]] mājas darbs - programmēšanas stils - izlasīt un ņemt vērā turpmākajos darbos, kā arī pieteikties vēstkopai!

|-
|- style='vertical-align: top;'
|
|


==== 11.09.2018.====
====5.02.26====
14:30
| [L01] Datu struktūras un algoritmi valodā C.
|
{| width='100%' style='background-color:#ddd;'
|<big>'''Programmēšanas valoda C'''</big>
|}
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'''
C standarti, kompilācija, bibliotēkas, linkošana, skalārie un saliktie tipi (t.sk pointeri un masīvi), funkcijas, nosacījumi, cikli


* Klasiskā C programmēšanas valodas grāmata: Brian W. C. Kernighan & Dennis M. Ritchie, "The C Programming Language -- ANSI C," Prentice Hall, 1988
[https://www.dropbox.com/s/cyebsiafqrkykcq/L01_C_data_algorithms.pdf?dl=0 Slaidi L01]
* [https://web.archive.org/web/20160417114016/http://www.physics.drexel.edu/students/courses/Comp_Phys/General/C_basics/#first C Language Tutorial]


|
<!--
[http://selavo.lv/~kursi/lsp/1-apvienota-ievadlekcija.pdf Iepriekšējo gadu lekcijas piezīmes: apvienota ievadlekcija]
-->


|- style='vertical-align: top;'
[PD1] [[LU-LSP-b13:L01 | Praktiskais darbs #1]] - darbs ar tekstu.
|
====11.02.26====
10:30
|
{| width='100%' style='background-color:#ddd;'
|<big>'''Darbs ar failiem'''</big>
|}
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.
|


|- style='vertical-align: top;'
|
|
'''Uzdots''' [[LU-LSP-b:MD1 | MD1]] mājas darbs - dzimtas koks.


====11.02.26====
|-
12:30
|
|
{| width='100%' style='background-color:#ddd;'
|<big>'''PD_File'''</big>
|}
Failu kopēšana.


|
==== 18.09.2018.====
* Uzdots '''[[LU-LSP-b13:L02 | PD_File]]'''
| [L02] Darbs ar failiem.


|- style='vertical-align: top;'
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.
|


====12.02.26====
[https://www.dropbox.com/s/1h0o1u3tjj0ph0m/L02_files.pdf?dl=0 Slaidi L02]
14:30
|
{| width='100%' style='background-color:#ddd;'
|<big>'''Failu sistēma'''</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().
|


|- style='vertical-align: top;'
<!--
[http://selavo.lv/~kursi/lsp/2-faili.pdf Lekcijas piezīmes: faili]
[http://selavo.lv/~kursi/lsp/2-valoda-c.pdf Lekcijas piezīmes: valoda-c]
[http://selavo.lv/~kursi/lsp/3-algoritmi.pdf Lekcijas piezīmes: algoritmi]
-->
[PD2] [[LU-LSP-b13:L02 | Praktiskais darbs #2]] - failu kopēšana.
|
|
<!--
'''Uzdots''' [[LU-LSP-b:MD2 | MD2]] mājas darbs - datubāze.
-->


====18.02.26====
10:30
|
{| width='100%' style='background-color:#ddd;'
|<big>'''Failu piekļuves režīmi'''</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.
|
* Uzdots '''[[LU-LSP-b:MD3 | MD_Dir]]''' - Direktoriju koka apstaigāšana.


|- style='vertical-align: top;'
|-
|
|


==== 25.09.2018.====
====18.02.26====
12:30
| [L03] Failu sistēma
|
{| width='100%' style='background-color:#ddd;'
|<big>'''PD_Dir'''</big>
|}
Direktoriju koka apstaigāš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().
* Uzdots '''[[LU-LSP-b13:L03 | PD_Dir]]'''
* '''Termiņš''' '''[https://docs.google.com/document/d/1wmhmxU2x93yj5bha98yGwGTvUbQ5Q0ZjOTfcNQ5ndjc/edit?usp=sharing MD_Koks]''' - Dzimtas koks.


[https://www.dropbox.com/s/mjo8zcjux7ygq5b/L03_file_system.pdf?dl=0 Slaidi L03]


|- style='vertical-align: top;'
[PD3] [[LU-LSP-b13:L03 | Praktiskais darbs #3]] - direktoriju koka apstaigāšana.
|


====19.02.26====
14:30
|
{| width='100%' style='background-color:#ddd;'
|<big>'''Atmiņas arhitektūra'''</big>
|}
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.
|
|
Mājas darba [[LU-LSP-b:MD1 | MD1]] '''nodošanas''' termiņš.


|- style='vertical-align: top;'
'''Uzdots''' [[LU-LSP-b:MD3 | MD3]] mājas darbs - direktoriju koka apstaigāšana.
|


====25.02.26====
|-
10:30
|
{| width='100%' style='background-color:#ddd;'
|<big>'''Virtuālā atmiņa'''</big>
|}
Virtuālās atmiņas lapas. Page fault un segmentation fault. Atmiņas aizsardzība. ''setjmp()'' un ''longjmp()''.
|
|
* Uzdots '''[[LU-LSP-b:MD4 | MD_Mem]]''' - Atmiņas rezervācijas funkciju salīdzinājums.


|- style='vertical-align: top;'
==== 02.10.2018.====
|
|
[VIESLEKCIJA] Dmitry G. Korzun, Ph.D, Adjunct Professor, Leading Research Scientist Petrozavodsk State University, Institute of Mathematics and Information Technology, Department of Computer Science "Edge-Centric Computing and Fog Computing (2h). Methods of involving and supporting local and remote devices for cooperative service construction and delivery."


====25.02.26====
[L04] 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.
12:30
|
{| width='100%' style='background-color:#ddd;'
|<big>'''PD_An'''</big>
|}
Programmas analīze.


|
[https://www.dropbox.com/s/tl0cjj17yn0p859/L04_more_files.pdf?dl=0 Slaidi L04]
* Uzdots '''[[LU-LSP-b13:L04 | PD_An]]'''
* '''Termiņš''' '''[[LU-LSP-b:MD3 | MD_Dir]]''' - Direktoriju koka apstaigāšana.


|- style='vertical-align: top;'
<!--
|
[http://selavo.lv/~kursi/lsp/4-faili.pdf Lekcijas piezīmes]
-->


====26.02.26====
14:30
|
{| width='100%' style='background-color:#ddd;'
|<big>'''Dinamiskā atmiņa'''</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.
|


|- style='vertical-align: top;'
|
|


====4.03.26====
<!--Mājas darba [[LU-LSP-b:MD2 | MD2]] '''nodošanas''' termiņš. -->
10:30
|
{| width='100%' style='background-color:#ddd;'
|<big>'''Atmiņas fragmentācija'''</big>
|}
Atmiņas fragmentācija. Atmiņas rezervēšanas (allocation) algoritmi, kas darbojas uz atmiņas fragmentiem. Atmiņas 'spaiņi'.
|
* Uzdots '''[[LU-LSP-b:MD5 | MD_Frag]]''' - Atmiņas fragmentācijas algoritmu novērtējums ('''grupās''')


|- style='vertical-align: top;'
|-
|
|


==== 09.10.2018.====
====4.03.26====
12:30
|
[PD4] [[LU-LSP-b13:L04 | Praktiskais darbs #4]] - programmas analīze. Iespēja strādāt pie MD3 - izņēmuma kārtā, termiņš ir vakarā pēc praktiskajiem darbiem 19:00

|
|
{| width='100%' style='background-color:#ddd;'
|<big>'''PD_Malloc :: PD_Heap'''</big> => Daudz-uzdevumu vide
|}
'''PD_Malloc'''


Atmiņas rezervācija.
Mājas darba [[LU-LSP-b:MD3 | MD3]] '''nodošanas''' termiņš.


'''PD_Heap'''
<!--Mājas darba [[LU-LSP-b:MD2 | MD2]] '''nodošanas''' termiņš. -->


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


|-
|
* 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.
TERMIŅŠ pārcelts nedeļu uz priekšu servera ķibeles dēļ.


|- style='vertical-align: top;'
|
|


==== 16.10.2018.====
====5.03.26====
14:30
|
|
[L05] 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.
{| width='100%' style='background-color:#ddd;'
|<big>'''Atkļūdošana'''</big>
|}
Linux atkļūdošanas rīki un to lietošana.
|
* Uzdots '''MP_Game''' - Kursa projekta tēmas (spēles) izvēle


|- style='vertical-align: top;'
[https://www.dropbox.com/s/si26ce9jnmrtspa/L05_memory_arch_stack.pdf?dl=0 Slaidi L05]
|


====11.03.26====
[PD_A] Praktiskajos darbos apskatīsim MD1.
10:30
|
|
{| width='100%' style='background-color:#ddd;'
||<big>'''KD1'''</big> (''Attālināti'')
|}
KD1 kontroldarbs. Programmēšanas uzdevums pie datora, izmantojot apgūto vielu.


|


|- style='vertical-align: top;'
|-
|
|


==== 23.10.2018.====
====11.03.26====
12:30
| [L06] Atkārtojums par virtuālo atmiņu un procesa TEXT,DATA, HEAP un STACK segmentiem. Virtuālās atmiņas lapas. Page fault un segmentation fault. Atmiņas aizsardzība. ''setjmp()'' un ''longjmp()''.
|
{| width='100%' style='background-color:#ddd;'
| <big>'''PD_Dbg'''</big> (''Attālināti'')
|}
'''PD_Dbg'''


Atkļūdošanas rīki.
[https://www.dropbox.com/s/b09vpj64cy60kme/L06_memory_paging_protection.pdf?dl=0 Slaidi L06]


|
[PD5] [[LU-LSP-b13:L05 | Praktiskais darbs #5]] - ''setjmp()'',''longjmp()'' un taimera signāls.
* Uzdots '''[[LU-LSP-b13:LA | PD_Dbg]]''' (Nav obligāti jāiesniedz)


|- style='vertical-align: top;'
|
|


====12.03.26====
'''Uzdots''' [[LU-LSP-b:MD4 | MD4]] mājas darbs - atmiņas rezervācijas funkciju salīdzinājums.
14:30

|-
|
{| width='100%' style='background-color:#ddd;'
| <big>'''Daudz-uzdevumu vide'''</big> => PD_Malloc :: PD_Heap (''Attālināti'')
|}
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()''.
|
|


|- style='vertical-align: top;'
==== 30.11.2018 ====
| LEKCIJA NENOTIEK
|
|


====18.03.26====
|-
10:30
|
|
{| width='100%' style='background-color:#ddd;'
|<big>'''Pavedieni'''</big>
|}
Pavedieni. POSIX pavedieni. Mutex. Datu skriešanās (data race condition). Strupceļš (deadlock).
'''Resursi'''


[https://www.cs.cmu.edu/afs/cs/academic/class/15492-f07/www/pthreads.html POSIX thread (pthread) libraries]
==== 06.11.2018.====
| [L07] 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.

[https://www.dropbox.com/s/zqq0jbldw0bciu4/L07_memory_dynamic_reservation.pdf?dl=0 Slaidi L07]


[PD6] [[LU-LSP-b13:L06 | Praktiskais darbs #6]] - atmiņas rezervācija.
|
|
* '''Termiņš''' '''[[LU-LSP-b:MD5 | MD_Frag]]''' - Atmiņas fragmentācijas algoritmu novērtējums ('''grupās''')



|-
|- style='vertical-align: top;'
|
|


==== 13.11.2018.====
====18.03.26====
12:30
|
|
{| width='100%' style='background-color:#ddd;'
[L08] Atmiņas fragmentācija. Atmiņas rezervēšanas (allocation) algoritmi, kas darbojas uz atmiņas fragmentiem. Atmiņas 'spaiņi'.
|<big>'''PD_Thread'''</big>
|}
Programma kas taisa N pavedienus, kur katrs izdrukā M burtus.



'''PD_KD'''
[https://www.dropbox.com/s/fr3i3tys808343j/L08_memory_algorithms.pdf?dl=0 Slaidi L08]


Kontroldarba analīze.
[PD8] [[LU-LSP-b:L08 | Praktiskais darbs #8]] - vienkāršs atmiņas alokators fiksēta izmēra objektiem.


|
|
* Uzdots '''MP_Spec''' - Spēles noteikumu specifikācija
* Uzdots '''[[LU-LSP-b:L08 | PD_Thread]]'''


|- style='vertical-align: top;'
Mājas darba [[LU-LSP-b:MD4 | MD4]] '''nodošanas''' termiņš.

|-
|
|


==== 20.11.2018.====
====19.03.26====
14:30
|
|
{| width='100%' style='background-color:#ddd;'
[KD1] Vidus semestra '''kontroldarbs'''.
|<big>'''Procesa dzīves cikls :: Starpprocesu komunikācija'''</big>
|}
'''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().
[L09] : Linux atkļūdošanas rīki un to lietošana.


'''Starpprocesu komunikācija'''
[https://www.dropbox.com/s/9tsu0fecra9f6y0/L09_KD_debugging.pdf?dl=0 Slaidi L09]


Starpprocesu komunikācija. Faili. Pipes. Koplietošanas atmiņa. Komunikācija starp nesaistītiem procesiem. Sockets abstrakcija komunikācijai.
[PD_D] Izmēģināt [[LU-LSP-b13:LA | atkļūdošanas]] rīkus. Plānot MD5 grupas. Sākt gatavoties Kursa projektam!


|
|
* '''Termiņš''' '''MP_Game''' - Kursa projekta tēmas (spēles) izvēle


|- style='vertical-align: top;'
'''Uzdots''' [[LU-LSP-b:MD5 | MD5]] - atmiņas fragmentācijas algoritmu novērtējums ('''grupās''')
|


====25.03.26====
Domāt kursa projekta tēmas!
10:30
|
{| width='100%' style='background-color:#ddd;'
|<big>'''Sockets :: Servera klienta arhitektūra'''</big>
|}
'''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ā [http://selavo.lv/wiki/index.php/LU-LSP-b13:L11 PD11], bet nav jānodod.


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


|- style='vertical-align: top;'
==== 27.11.2018.====
|
|
[L10] 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?dl=0 Slaidi L10]
!-->
[PD9] Praktiskais darbs #9: Programma kas taisa N pavedienus, kur katrs izdrukā M burtus. (Jāprot, bet nav jāiesūta)

+Izvēles (nav jāiesūta, vai e-pastā): [[LU-LSP-b13:L09 | Praktiskais darbs #9.1]] - steka satura analīze un piekļuve stekam.


====25.03.26====
12:30
|
|
{| width='100%' style='background-color:#ddd;'
Mājas darba [[LU-LSP-b:MD5 | MD5]] grupu izveidošanas termiņš.
|<big>'''PD_Jmp :: PD_PSpec'''</big>
|}
'''PD_Jmp'''


''setjmp()'',''longjmp()'' un taimera signāls.
'''Apspriežam kursa projekta tēmas'''


'''PD_PSpec'''
Katra grupa: lūdzu atsūtiet vienu e-pastu ar paredzamajiem dalībniekiem!

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


|-
|
|
* Uzdots '''[[LU-LSP-b13:L05 | PD_Jmp]]'''
* Uzdots '''PD_PSpec'''


|- style='vertical-align: top;'
==== [Zemāk tiks precizēts!] ====
|
|
|

|-
====26.03.26====
14:30
|
|
{| width='100%' style='background-color:#ddd;'
|<big>'''Signāli'''</big>
|}
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


|- style='vertical-align: top;'
==== 28.11.2017.====
|
|
[L11] Procesa dzīves cikls: Procesa ielādēšana, uzsākšanās un pieci veidi kā process var beigties. exit() un _exit().


====8.04.26====
Starpprocesu komunikācija. Klienta un servera arhitektūra. Iteratīvie un paralēlie serveri. Sockets. Komunikācija starp nesaistītiem procesiem.
10:30
<!--
[https://www.dropbox.com/s/vkce978v56zk9uw/L11_lifecycle_ipc.pdf?dl=0 Slaidi L11]
!-->
[PD10] [[LU-LSP-b13:L10 | Praktiskais darbs #10]] - starpprocesu komunikācija.
|
|
{| width='100%' style='background-color:#ddd;'
|<big>'''Tekstuālā lietotāja saskarne.'''</big>
|}
Tekstuālā lietotāja saskarne. Ncurses bibliotēka.


'''Resursi'''
Termiņš: Kursa projekts: spēles noteikumi, GoogleDoc dokumentā.


* [https://www.cyberciti.biz/faq/linux-install-ncurses-library-headers-on-debian-ubuntu-centos-fedora/ Ncurses library, installation and use]
'''Balsojam par kursa projekta tēmu!'''


|
Mājas darba [[LU-LSP-b:MD5 | MD5]] '''nodošanas''' termiņš.
'''Spēles noteikumi finalizēti.'''


|- style='vertical-align: top;'
|-
|


====8.04.26====
12:30
|
|
{| width='100%' style='background-color:#ddd;'
|<big>'''PD_Net :: PD_PProt'''</big>
|}
'''PD_Net'''


Starpprocesu komunikācija tīklā.
==== 05.12.2017 ====
| ====== LEKCIJA NENOTIEK ======


'''PD_PProt'''
Visi gaidīti seminārā 14:00, Dzērbenes ielā 14


Darbs pie kursa projekta. Komunikāciju protokola izstrāde.
| '''Gala termiņš izvēlētā kursa projekta noteikumiem [https://docs.google.com/document/d/1eKufkNWABehv7_r552aGX-vLr67KmPO74q_5w8jF3dw/edit?usp=sharing Google doc]'''


|
'''Sākam diskutēt par protokolu''' - nākamajā lekcijā būtu jānonāk līdz pirmajai protokola versijai!
* Uzdots '''[[LU-LSP-b13:L10 | PD_Net]]'''
* Uzdots '''PD_PProt'''


|- style='vertical-align: top;'
|-
|
|


==== 12.12.2017.====
====9.04.26====
14:30
|
|
[L12] Signāli. Alarm serviss un signāls.
{| width='100%' style='background-color:#ddd;'
Diskusija par komunikācijas protokolu izstrādi.
|<big>'''Dēmoni'''</big>
<!--
|}
[https://www.dropbox.com/s/go536558ez25tip/L12_signals_course_project.pdf?dl=0 Slaidi L12]
Programmas, kas izpildās fonā un ilgtermiņā. Rezidenta programmas. Init.d. Upstart. Systemd. Sesijas identifikators.
!-->
|
[PD_KP1] Darbs pie [https://docs.google.com/document/d/1eKufkNWABehv7_r552aGX-vLr67KmPO74q_5w8jF3dw/edit?usp=sharing kursa projekta].
* '''Termiņš''' '''MP_Prot2''' - Spēles komunikāciju protokols, gala versija


|- style='vertical-align: top;'
|
|

Termiņš: Protokola Alfa versija
====15.04.26====
|-
10:30
|
|
{| width='100%' style='background-color:#ddd;'
|<big>'''Grafiskā lietotāja saskarne'''</big>
|}
Grafiskā lietotāja saskarne. OpenGL. X-server.


|
==== 19.12.2017.====
|
[L13] Pavedieni. POSIX pavedieni. Mutex. Datu skriešanās (data race condition). Strupceļš (deadlock).


|- style='vertical-align: top;'
<!--
|
[https://www.dropbox.com/s/deyef80stvuqyu9/L13_posix_threads.pdf?dl=0 L13 Slaidi].


====15.04.26====
!-->
12:30
[PD_KP2] Darbs pie [https://docs.google.com/document/d/1eKufkNWABehv7_r552aGX-vLr67KmPO74q_5w8jF3dw/edit?usp=sharing kursa projekta].
|
|
{| width='100%' style='background-color:#ddd;'
Termiņš: Protokola gala versija
|<big>'''PD_KP'''</big>
Ieskatam servera/klienta komunikācijā neobligāts [http://selavo.lv/wiki/index.php/LU-LSP-b13:L11 PD11], kas nav jānodod
|-
|}
Darbs pie kursa projekta.

|
|
* Uzdots '''PD_KP'''


|- style='vertical-align: top;'
==== xx.12.2017. - �tku un Jaungada brīvdienas
|
|

&nbsp;
====16.04.26====
|-
14:30
|
|
{| width='100%' style='background-color:#ddd;'
|<big>'''Konsultācija'''</big>
|}
Atbildes uz studentu jautājumiem


|
==== 19.01.2018.====

| [EX] '''Eksāmens 10:00''' 312. telpā.
|- style='vertical-align: top;'
|

====29.04.26====
'''10:30'''
|
{| width='100%' style='background-color:#ddd;'
|<big>'''Eksāmens'''</big>
|}
Vieta: Tā pati lekcijas auditorija.


Eksāmena forma: projektu demonstrācija un prezentācija (darbība, pirmkods, diskusijas).
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 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.
&nbsp;

|-
Eksāmena vērtējuma plāns:
* Pirmkods, serveris 25%
* Pirmkods, klients 25%
* Demo un darbības testēšana 25%
* Prezentācija (bez slaidiem) 25%

|- style='vertical-align: top;'
|

====xx.04-xx.05.2026====

|
{| width='100%' style='background-color:#ddd;'
|<big>'''Sesija'''</big>
|}
Vērtējumu izlikšana
|

|}
|}


=Uzdevumi=
== Mājas darbi ==
== Mājas darbi ==


* [[LU-LSP-b:MD0 | MD0]]: Izlasīt kodēšanas stila dokumentus.
* [[LU-LSP-b:MD0 | MD0]]: Izlasīt kodēšanas stila dokumentus.
* [[LU-LSP-b:MD1 | MD1]]: Ģimenes koka ģenerēšanas programma.
* [[LU-LSP-b:MD1 | MD_Koks]]: Ģimenes koka ģenerēšanas programma.
* MD2 - ''nav uzdots''.
* [[LU-LSP-b:MD3 | MD3]]: Vienādo failu meklēšana direktorijas kokā.
* [[LU-LSP-b:MD3 | MD3]]: Vienādo failu meklēšana direktorijas kokā.
* [[LU-LSP-b:MD4 | MD4]]: Atmiņas rezervācijas funkciju salīdzināšana.
* [[LU-LSP-b:MD4 | MD4]]: Atmiņas rezervācijas funkciju salīdzināšana.
Line 353: Line 561:
<!-- * [[LU-LSP-b:MD5 | MD5]]: Procedūru izsaukumu steka izdruka. -->
<!-- * [[LU-LSP-b:MD5 | MD5]]: Procedūru izsaukumu steka izdruka. -->



== Projekts kursā ==


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

* Projekta specifikācijas dokuments pieejams e-studijās
* [https://docs.google.com/document/d/15ppHdVY86KLds5sUN0xMjUNuTLPjXw9DdnnMYsGTgok/edit?usp=sharing Doc]

<!--
<!--
* MD7 - projekta protokola specifikācija. Skatīt arī [[LU-LSP-b13:PD_client_server | PD: Klienta un servera arhitektūra]]
* MD7 - projekta protokola specifikācija. Skatīt arī [[LU-LSP-b13:PD_client_server | PD: Klienta un servera arhitektūra]]
** [[LU-LSP-b11:PD_client_server | PD: Klienta un servera arhitektūra]] (praktiskā darba piezīmes)
** [[LU-LSP-b11:PD_client_server | PD: Klienta un servera arhitektūra]] (praktiskā darba piezīmes)
** [http://selavo.lv/~kursi/LSP/md7 MD7 projekta grupu risinājumi]
** [http://selavo.lv/~kursi/LSP/md7 MD7 projekta grupu risinājumi]

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


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


Line 368: Line 581:
* Aprēķins, cik laika vajag pārkopēt 1 TB pa baitam bez bufera.
* 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
* Paging: piemērs 4K x 4K masīva apstaigāšanai, mainot indeksus: 4K vs 16M page faults
* Vai var uzrakstīt programmu bez main()
* [https://wordsandbuttons.online/so_you_think_you_know_c.html So you think you know C] - tests ar 5 jautājumiem.


== Literatūra ==
== Literatūra ==
Line 383: Line 598:
* [http://fabiensanglard.net/c/ To become a good programmer...] - C grāmatu saraksts
* [http://fabiensanglard.net/c/ To become a good programmer...] - C grāmatu saraksts


{{ProgrammersResorces}}
== Saites ==

* [http://selavo.lv/wiki/index.php/Linux_komandas Noderīgas Linux komandas]
* [http://bit.ly/bashbyex Bash by Example] @ibm/developerworks
* [http://tuxradar.com/content/how-linux-kernel-works Intro to Linux kernel]

* [http://www.lysator.liu.se/c/bwk-tutor.html Programming in C: A Tutorial] (by Brian W. Kernighan)
* [http://www.gnu.org/software/make/manual/make.html Gnu make] dokumentācija
* [http://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard Tipiskas unix direktoriju hierarhijas] īss apraksts.

* Sockets:
** [http://gnosis.cx/publish/programming/sockets.html Programming IP Sockets on Linux] (tutorial @ gnosis.cx)
** [http://www.linuxhowtos.org/C_C++/socket.htm Sockets Tutorial] @ Linux Howtos
** [http://en.wikipedia.org/wiki/Berkeley_sockets Berkeley sockets] (Wikipēdija)

* http://www.hiraeth.com/alan/tutorials/courses/unixprog.html
* http://lkml.org/
* [http://tldp.org/LDP/lkmpg/2.6/html/index.html The Linux Kernel Module Programming Guide]

=== Programmēšanas analīzes rīki ===
* [http://pmd.sourceforge.net/pmd-5.2.1/ PMD] - scans source code and looks for bugs, dead code, suboptimal code, overcomplicated expressions, duplicate code.

=== Linux veiktspējas analīze ===
* [http://www.cyberciti.biz/tips/top-linux-monitoring-tools.html Top 20 Linux monitoring tools] @cyberciti
* [http://www.tecmint.com/command-line-tools-to-monitor-linux-performance/ 20 rīki Linux veikstpējas monitoringam] (IPTraf u.c.) @tecmint
* [http://www.cyberciti.biz/tips/how-do-i-find-out-linux-cpu-utilization.html CPU analīze]
* [http://www.cyberciti.biz/tips/linux-disk-performance-monitoring-howto.html Disku I/O analīze]
* [http://www.linuxprogrammingblog.com/io-profiling IO profiling] at Linux programming blog
* [https://www.linux.com/learn/tutorials/470979-who-and-what-is-on-my-network-probing-your-network-with-linux Tīkla analīze]

== Atziņas ==
* [http://norvig.com/21-days.html Teach yourself programming in 10 years] by Peter Norvig
* [https://rhodecode.com/blog/code-review-learn-nasa-codes/ Code review: Learn how NASA codes (blog)], and [http://cacm.acm.org/magazines/2014/2/171689-mars-code/fulltext Mars Code (ACM article)]

Latest revision as of 19:19, 5 May 2026

Īssaites: Kalendārs | Uzdevumi | Resursi | Šodiena: 9.11.2026. : Rītdiena: 10.11.2026. (ja ir lekcija)


Linux sistēmas programmēšana (LSP)

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

  • Pasniedzējs:
    • 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 dienas beigām.
  • 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.
  • Praktiskajos darbos un lekcijās atzinīgi vērtējama ir dalība diskusijās, unikālu risinājumu un ideju piedāvāšana, trāpīgu jautājumu uzdošana, atbildēšana uz kolēģu jautājumiem u.t.t., kas var pozitīvi ietekmēt gala atzīmi kursā.

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

4.02.26

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.

4.02.26

12: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

5.02.26

14: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

11.02.26

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.

11.02.26

12:30

PD_File

Failu kopēšana.

12.02.26

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

18.02.26

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.

18.02.26

12:30

PD_Dir

Direktoriju koka apstaigāšana.


19.02.26

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

25.02.26

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.

25.02.26

12:30

PD_An

Programmas analīze.

26.02.26

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

4.03.26

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)

4.03.26

12:30

PD_Malloc :: PD_Heap => Daudz-uzdevumu vide

PD_Malloc

Atmiņas rezervācija.

PD_Heap

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

TERMIŅŠ pārcelts nedeļu uz priekšu servera ķibeles dēļ.

5.03.26

14: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

11.03.26

10:30

KD1 (Attālināti)

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

11.03.26

12:30

PD_Dbg (Attālināti)

PD_Dbg

Atkļūdošanas rīki.

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

12.03.26

14:30

Daudz-uzdevumu vide => PD_Malloc :: PD_Heap (Attālināti)

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

18.03.26

10:30

Pavedieni

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

POSIX thread (pthread) libraries

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


18.03.26

12:30

PD_Thread

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


PD_KD

Kontroldarba analīze.

  • Uzdots MP_Spec - Spēles noteikumu specifikācija
  • Uzdots PD_Thread

19.03.26

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

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

25.03.26

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

25.03.26

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.

26.03.26

14: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

8.04.26

10:30

Tekstuālā lietotāja saskarne.

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

Resursi

Spēles noteikumi finalizēti.

8.04.26

12:30

PD_Net :: PD_PProt

PD_Net

Starpprocesu komunikācija tīklā.

PD_PProt

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

9.04.26

14: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

15.04.26

10:30

Grafiskā lietotāja saskarne

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

15.04.26

12:30

PD_KP

Darbs pie kursa projekta.

  • Uzdots PD_KP

16.04.26

14:30

Konsultācija

Atbildes uz studentu jautājumiem

29.04.26

10:30

Eksāmens

Vieta: Tā pati lekcijas 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 25%
  • Prezentācija (bez slaidiem) 25%

xx.04-xx.05.2026

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.


Projekts kursā

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

  • Projekta specifikācijas dokuments pieejams e-studijās
  • Doc


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
  • Vai var uzrakstīt programmu bez main()
  • So you think you know C - tests ar 5 jautājumiem.

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

$ yes | pv | ssh user@example.com "cat > /dev/null"
     97,3MiB 0:01:36 [1,28MiB/s][         <=>    ]
$ mtr -rw -c 100  <server_ip>
     HOST: <myhost>     Loss%   Snt   Last   Avg  Best  Wrst StDev
     1.|-- _gateway      0.0%   100    0.7   0.6   0.3   2.4   0.2
     2.|-- <server_ip>   1.0%   100    1.0   4.3   0.9  26.6   5.7
$ iperf3 -s    # startē serveri vienā galā
     Server listening on 5201
$ iperf3 -c <server_ip>    # startē klientu otrā galā
     Connecting to host <server_ip>, port 5201
     [  5] local 192.168.1.123 port 51846 connected to <server_ip> port 5201
     [ ID] Interval           Transfer     Bitrate         Retr  Cwnd
     [  5]   0.00-1.00   sec  1.42 MBytes  11.9 Mbits/sec    0   89.1 KBytes       
     [  5]   1.00-2.00   sec  1.62 MBytes  13.6 Mbits/sec    0    147 KBytes       
     ...
     [  5]   9.00-10.00  sec  2.30 MBytes  19.3 Mbits/sec    0    595 KBytes       
     - - - - - - - - - - - - - - - - - - - - - - - - -
     [ ID] Interval           Transfer     Bitrate         Retr
     [  5]   0.00-10.00  sec  14.2 MBytes  11.9 Mbits/sec    0             sender
     [  5]   0.00-10.42  sec  11.6 MBytes  9.36 Mbits/sec                  receiver
$ nstat -az | grep -Ei "drop|overflow|retrans"
     TcpRetransSegs                  127923             0.0
     TcpExtLockDroppedIcmps          0                  0.0
     TcpExtListenDrops               1                  0.0
     TcpExtTCPLostRetransmit         11837              0.0
     ...
$ ethtool eth0
     Settings for eth0:
     Supported ports: [ TP ]
     Supported link modes:   10baseT/Half 10baseT/Full
                       100baseT/Half 100baseT/Full
                       1000baseT/Full
     ...
$ sudo ethtool -S eth0 | grep -E "errors|dropped|fifo|collision"
     collisions: 0
     rx_crc_errors: 0
     rx_missed_errors: 0
     tx_aborted_errors: 0
     tx_carrier_errors: 0
     ...
  • "bashtop" rīks veiktspējas analīzei

Āķīgi uzdevumi un pieredze

Atziņas