LU-LSP-b: Difference between revisions
No edit summary |
|||
| (152 intermediate revisions by the same user not shown) | |||
| Line 5: | Line 5: | ||
[[#Resursi | Resursi]] | |
[[#Resursi | Resursi]] | |
||
</big> |
</big> |
||
{{TodayTomorrow}} (ja ir lekcija) |
|||
[[#{{LOCALDAY2}}.{{LOCALMONTH}}.{{padright:|2|{{LOCALYEAR}} }} | Šodiena: {{LOCALDAY2}}.{{LOCALMONTH}}.{{padright:|2|{{LOCALYEAR}} }}]] : |
|||
[[#{{#expr:{{LOCALDAY2}}+1}}.{{LOCALMONTH}}.{{padright:|2|{{LOCALYEAR}} }} | Rītdiena: {{#expr:{{LOCALDAY2}}+1}}.{{LOCALMONTH}}.{{padright:|2|{{LOCALYEAR}} }}]] |
|||
(ja ir lekcija) |
|||
{{LUDFKurss|Linux sistēmas programmēšana|LSP|DatZ3122|2DAT3122}} |
{{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: 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 22: | Line 18: | ||
==== Praktisko un mājas darbu iesniegšana ==== |
==== 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. |
* 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 |
* 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 |
||
==== 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 |
* 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. |
||
* |
* 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 attiecīgajā datumā |
* 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!): |
* 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%''' |
** 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= |
|||
==== Vidus semestra aptauja ==== |
|||
* [xxx Aptauja] |
|||
--> |
|||
=Kalendārs= |
|||
{| border=1 cellspacing=0 cellpadding=4 style = 'border-color: #ddd;' |
{| border=1 cellspacing=0 cellpadding=4 style = 'border-color: #ddd;' |
||
|- |
|- |
||
| Line 44: | Line 44: | ||
! Tēma, saturs |
! Tēma, saturs |
||
! Uzdevumi |
! Uzdevumi |
||
|- style='vertical-align: top;' |
|- style='vertical-align: top;' |
||
| |
| |
||
==== |
====4.02.26==== |
||
10:30 |
|||
| |
| |
||
{| width='100%' style='background-color:#ddd;' |
{| width='100%' style='background-color:#ddd;' |
||
|<big>'''Ievads kursā'''</big> |
|<big>'''Ievads kursā'''</big> |
||
|} |
|} |
||
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/2c87i9k0vc3mthr/L00_Ievads.pdf?raw=1 Slaidi] |
|||
Unix un Linux operētājsistēmu pamatkoncepcijas un vēsture. Linux sistēmprogrammētaja rīki (shell, gcc, make, manpages u.c.) |
|||
Vispārīgs pārskats par valodu C. |
|||
| |
| |
||
* ''' |
* Uzdots '''[[LU-LSP-b:MD0 | MD0 ]]''' - Programmēšanas stils |
||
* Uzdots '''[https://docs.google.com/document/d/1wmhmxU2x93yj5bha98yGwGTvUbQ5Q0ZjOTfcNQ5ndjc/edit?usp=sharing MD_Koks]''' - Dzimtas koks. |
|||
|- style='vertical-align: top;' |
|- style='vertical-align: top;' |
||
| |
| |
||
====06.02.20==== |
|||
====4.02.26==== |
|||
14:30 |
|||
12:30 |
|||
| |
| |
||
{| width='100%' style='background-color:#ddd;' |
{| width='100%' style='background-color:#ddd;' |
||
|<big>''' |
|<big>'''PD_Intro'''</big> |
||
|} |
|} |
||
* 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''' |
|||
* [[LU-LSP-B11:shell-cheatsheet | UNIX čaulas populārākās komandas un lietojumi]] |
|||
[PD0] Praktiskais darbs #0: |
|||
* Iekārtot darba vidi (linux, teksta redaktors, kompilators) |
|||
* 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]] |
|||
* 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. |
* 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]]''' |
|||
|- style='vertical-align: top;' |
|- style='vertical-align: top;' |
||
| |
| |
||
====06.02.20==== |
|||
====5.02.26==== |
|||
16:30 |
|||
14:30 |
|||
| |
| |
||
{| width='100%' style='background-color:#ddd;' |
{| width='100%' style='background-color:#ddd;' |
||
|<big>''' |
|<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. |
|||
* [https://www.dropbox.com/s/cyebsiafqrkykcq/L01_C_data_algorithms.pdf?raw=1 Slaidi] |
|||
'''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 standarti, kompilācija, bibliotēkas, linkošana, skalārie un saliktie tipi (t.sk pointeri un masīvi), funkcijas, nosacījumi, cikli |
|||
* [https://web.archive.org/web/20160417114016/http://www.physics.drexel.edu/students/courses/Comp_Phys/General/C_basics/#first C Language Tutorial] |
|||
| |
| |
||
* '''Uzdots: [[LU-LSP-b:MD1 | MD1]] mājas darbs - dzimtas koks.''' |
|||
|- style='vertical-align: top;' |
|- style='vertical-align: top;' |
||
| |
| |
||
==== |
====11.02.26==== |
||
10:30 |
|||
| |
| |
||
{| width='100%' style='background-color:#ddd;' |
{| width='100%' style='background-color:#ddd;' |
||
|<big>''' '''</big> |
|<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. |
|||
[PD1] [[LU-LSP-b13:L01 | Praktiskais darbs #1]] - darbs ar tekstu. |
|||
| |
| |
||
|- style='vertical-align: top;' |
|- style='vertical-align: top;' |
||
| |
| |
||
====13.02.20==== |
|||
====11.02.26==== |
|||
14:30 |
|||
12:30 |
|||
| |
| |
||
{| width='100%' style='background-color:#ddd;' |
{| width='100%' style='background-color:#ddd;' |
||
|<big>''' |
|<big>'''PD_File'''</big> |
||
|} |
|} |
||
Failu kopēšana. |
|||
* [https://www.dropbox.com/s/1h0o1u3tjj0ph0m/L02_files.pdf?raw=1 Slaidi] |
|||
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. |
|||
| |
| |
||
* Uzdots '''[[LU-LSP-b13:L02 | PD_File]]''' |
|||
|- style='vertical-align: top;' |
|- style='vertical-align: top;' |
||
| |
| |
||
====13.02.20==== |
|||
16:30 |
|||
| |
|||
{| width='100%' style='background-color:#ddd;' |
|||
|<big>''' '''</big> |
|||
|} |
|||
====12.02.26==== |
|||
14:30 |
|||
[PD2] [[LU-LSP-b13:L02 | Praktiskais darbs #2]] - failu kopēšana. |
|||
| |
|||
|- style='vertical-align: top;' |
|||
| |
|||
====19.02.20==== |
|||
08:30 |
|||
| |
| |
||
{| width='100%' style='background-color:#ddd;' |
{| width='100%' style='background-color:#ddd;' |
||
|<big>'''Failu sistēma'''</big> |
|<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(). |
|||
* [https://www.dropbox.com/s/mjo8zcjux7ygq5b/L03_file_system.pdf?raw=1 Slaidi] |
|||
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-b:MD3 | MD3]] mājas darbs - direktoriju koka apstaigāšana.''' |
|||
|- style='vertical-align: top;' |
|- style='vertical-align: top;' |
||
| |
| |
||
====20.02.20==== |
|||
14:30 |
|||
| |
|||
{| width='100%' style='background-color:#ddd;' |
|||
|<big>''' '''</big> |
|||
|} |
|||
[PD3] [[LU-LSP-b13:L03 | Praktiskais darbs #3]] - direktoriju koka apstaigāšana. |
|||
====18.02.26==== |
|||
| |
|||
10:30 |
|||
* '''Termiņš: [[LU-LSP-b:MD1 | MD1]]''' |
|||
|- style='vertical-align: top;' |
|||
| |
|||
====20.02.20==== |
|||
16:30 |
|||
| |
| |
||
{| width='100%' style='background-color:#ddd;' |
{| width='100%' style='background-color:#ddd;' |
||
|<big>'''Failu piekļuves režīmi'''</big> |
|<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. |
|||
* [https://www.dropbox.com/s/tl0cjj17yn0p859/L04_more_files.pdf?raw=1 Slaidi] |
|||
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;' |
|- style='vertical-align: top;' |
||
| |
| |
||
====26.02.20==== |
|||
====18.02.26==== |
|||
08:30 |
|||
12:30 |
|||
| |
| |
||
{| width='100%' style='background-color:#ddd;' |
{| width='100%' style='background-color:#ddd;' |
||
|<big>''' |
|<big>'''PD_Dir'''</big> |
||
|} |
|} |
||
Direktoriju koka apstaigāšana. |
|||
| |
|||
* Uzdots '''[[LU-LSP-b13:L03 | PD_Dir]]''' |
|||
* '''Termiņš''' '''[https://docs.google.com/document/d/1wmhmxU2x93yj5bha98yGwGTvUbQ5Q0ZjOTfcNQ5ndjc/edit?usp=sharing MD_Koks]''' - Dzimtas koks. |
|||
[PD4] [[LU-LSP-b13:L04 | Praktiskais darbs #4]] - programmas analīze. |
|||
|- style='vertical-align: top;' |
|||
| |
| |
||
====19.02.26==== |
|||
|- style='vertical-align: top;' |
|||
| |
|||
====27.02.20==== |
|||
14:30 |
14:30 |
||
| |
| |
||
| Line 208: | Line 174: | ||
|<big>'''Atmiņas arhitektūra'''</big> |
|<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. |
|||
* [https://www.dropbox.com/s/si26ce9jnmrtspa/L05_memory_arch_stack.pdf?raw=1 Slaidi] |
|||
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. |
|||
| |
| |
||
|- style='vertical-align: top;' |
|- style='vertical-align: top;' |
||
| |
| |
||
====27.02.20==== |
|||
====25.02.26==== |
|||
16:30 |
|||
10:30 |
|||
| |
| |
||
{| width='100%' style='background-color:#ddd;' |
{| width='100%' style='background-color:#ddd;' |
||
|<big>''' '''</big> |
|<big>'''Virtuālā atmiņa'''</big> |
||
|} |
|} |
||
Virtuālās atmiņas lapas. Page fault un segmentation fault. Atmiņas aizsardzība. ''setjmp()'' un ''longjmp()''. |
|||
[PD_A] Praktiskajos darbos apskatīsim MD1. |
|||
| |
| |
||
* ''' |
* Uzdots '''[[LU-LSP-b:MD4 | MD_Mem]]''' - Atmiņas rezervācijas funkciju salīdzinājums. |
||
|- style='vertical-align: top;' |
|- style='vertical-align: top;' |
||
| |
| |
||
====04.03.20==== |
|||
====25.02.26==== |
|||
08:30 |
|||
12:30 |
|||
| |
| |
||
{| width='100%' style='background-color:#ddd;' |
{| width='100%' style='background-color:#ddd;' |
||
|<big>''' |
|<big>'''PD_An'''</big> |
||
|} |
|} |
||
Programmas analīze. |
|||
* [https://www.dropbox.com/s/b09vpj64cy60kme/L06_memory_paging_protection.pdf?raw=1 Slaidi] |
|||
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()''. |
|||
| |
| |
||
* ''' |
* 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;' |
||
| |
| |
||
====05.03.20==== |
|||
====26.02.26==== |
|||
14:30 |
14:30 |
||
| |
| |
||
{| width='100%' style='background-color:#ddd;' |
{| width='100%' style='background-color:#ddd;' |
||
|<big>''' |
|<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. |
|||
[KD1] Vidus semestra '''kontroldarbs'''. |
|||
| |
| |
||
* '''Kontroldarbs KD1''' |
|||
|- style='vertical-align: top;' |
|- style='vertical-align: top;' |
||
| |
| |
||
====05.03.20==== |
|||
====4.03.26==== |
|||
16:30 |
|||
10:30 |
|||
| |
| |
||
{| width='100%' style='background-color:#ddd;' |
{| width='100%' style='background-color:#ddd;' |
||
|<big>''' '''</big> |
|<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'. |
|||
[PD5] [[LU-LSP-b13:L05 | Praktiskais darbs #5]] - ''setjmp()'',''longjmp()'' un taimera signāls. |
|||
| |
| |
||
* 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;' |
||
| |
| |
||
====11.03.20==== |
|||
====4.03.26==== |
|||
08:30 |
|||
12:30 |
|||
| |
| |
||
{| width='100%' style='background-color:#ddd;' |
{| width='100%' style='background-color:#ddd;' |
||
|<big>''' |
|<big>'''PD_Malloc :: PD_Heap'''</big> => Daudz-uzdevumu vide |
||
|} |
|} |
||
'''PD_Malloc''' |
|||
* [https://www.dropbox.com/s/zqq0jbldw0bciu4/L07_memory_dynamic_reservation.pdf?raw=1 Slaidi] |
|||
Atmiņas rezervācija. |
|||
'''PD_Heap''' |
|||
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. |
|||
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;' |
|- style='vertical-align: top;' |
||
| |
| |
||
====12.03.20==== |
|||
====5.03.26==== |
|||
14:30 |
14:30 |
||
| |
| |
||
{| width='100%' style='background-color:#ddd;' |
{| width='100%' style='background-color:#ddd;' |
||
|<big>''' |
|<big>'''Atkļūdošana'''</big> |
||
|} |
|} |
||
Linux atkļūdošanas rīki un to lietošana. |
|||
[PD6] [[LU-LSP-b13:L06 | Praktiskais darbs #6]] - atmiņas rezervācija. |
|||
| |
| |
||
* Uzdots '''MP_Game''' - Kursa projekta tēmas (spēles) izvēle |
|||
|- style='vertical-align: top;' |
|- style='vertical-align: top;' |
||
| |
| |
||
====12.03.20==== |
|||
====11.03.26==== |
|||
16:30 |
|||
10:30 |
|||
| |
| |
||
{| width='100%' style='background-color:#ddd;' |
{| width='100%' style='background-color:#ddd;' |
||
|<big>''' |
||<big>'''KD1'''</big> (''Attālināti'') |
||
|} |
|} |
||
KD1 kontroldarbs. Programmēšanas uzdevums pie datora, izmantojot apgūto vielu. |
|||
* [https://www.dropbox.com/s/fr3i3tys808343j/L08_memory_algorithms.pdf?raw=1 Slaidi] |
|||
Atmiņas fragmentācija. Atmiņas rezervēšanas (allocation) algoritmi, kas darbojas uz atmiņas fragmentiem. Atmiņas 'spaiņi'. |
|||
| |
| |
||
* '''Termiņš: [[LU-LSP-b:MD4 | MD4]]''' |
|||
|- style='vertical-align: top;' |
|- style='vertical-align: top;' |
||
| |
| |
||
====18.03.20==== |
|||
====11.03.26==== |
|||
08:30 |
|||
12:30 |
|||
| |
| |
||
{| width='100%' style='background-color:#ddd;' |
{| width='100%' style='background-color:#ddd;' |
||
|<big>''' |
| <big>'''PD_Dbg'''</big> (''Attālināti'') |
||
|} |
|} |
||
'''PD_Dbg''' |
|||
Atkļūdošanas rīki. |
|||
[PD7] [[LU-LSP-b:L07 | Praktiskais darbs #7]] - vienkāršs atmiņas alokators fiksēta izmēra objektiem. |
|||
| |
| |
||
* Uzdots '''[[LU-LSP-b13:LA | PD_Dbg]]''' (Nav obligāti jāiesniedz) |
|||
* '''Uzdots: [[LU-LSP-b:MD5 | MD5]] - atmiņas fragmentācijas algoritmu novērtējums ('''grupās''')''' |
|||
|- style='vertical-align: top;' |
|- style='vertical-align: top;' |
||
| |
| |
||
====19.03.20==== |
|||
====12.03.26==== |
|||
14:30 |
14:30 |
||
| |
| |
||
{| width='100%' style='background-color:#ddd;' |
{| width='100%' style='background-color:#ddd;' |
||
|<big>''' |
| <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()''. |
|||
* [https://www.dropbox.com/s/9tsu0fecra9f6y0/L09_KD_debugging.pdf?raw=1 Slaidi] |
|||
Linux atkļūdošanas rīki un to lietošana. |
|||
| |
| |
||
|- style='vertical-align: top;' |
|- style='vertical-align: top;' |
||
| |
| |
||
====19.03.20==== |
|||
====18.03.26==== |
|||
16:30 |
|||
10:30 |
|||
| |
| |
||
{| width='100%' style='background-color:#ddd;' |
{| width='100%' style='background-color:#ddd;' |
||
|<big>''' |
|<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] |
|||
[PD_D] Izmēģināt [[LU-LSP-b13:LA | atkļūdošanas]] rīkus. Plānot MD5 grupas. Sākt gatavoties Kursa projektam! |
|||
| |
| |
||
* '''Termiņš''' '''[[LU-LSP-b:MD5 | MD_Frag]]''' - Atmiņas fragmentācijas algoritmu novērtējums ('''grupās''') |
|||
* '''Domāt kursa projekta tēmas!''' |
|||
|- style='vertical-align: top;' |
|- style='vertical-align: top;' |
||
| |
| |
||
====25.03.20==== |
|||
====18.03.26==== |
|||
08:30 |
|||
12:30 |
|||
| |
| |
||
{| width='100%' style='background-color:#ddd;' |
{| width='100%' style='background-color:#ddd;' |
||
|<big>''' |
|<big>'''PD_Thread'''</big> |
||
|} |
|} |
||
Programma kas taisa N pavedienus, kur katrs izdrukā M burtus. |
|||
* [https://www.dropbox.com/s/qx2ffq19u2rtx86/L10_multitasking_processes_threads.pdf?raw=1 Slaidi] |
|||
'''PD_KD''' |
|||
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()''. |
|||
Kontroldarba analīze. |
|||
| |
|||
* '''Mājas darba [[LU-LSP-b:MD5 | MD5]] grupu izveidošanas termiņš. |
|||
| |
|||
Katra grupa: lūdzu atsūtiet vienu e-pastu ar paredzamajiem dalībniekiem!''' |
|||
* Uzdots '''MP_Spec''' - Spēles noteikumu specifikācija |
|||
* Uzdots '''[[LU-LSP-b:L08 | PD_Thread]]''' |
|||
|- style='vertical-align: top;' |
|- style='vertical-align: top;' |
||
| |
| |
||
====26.03.20==== |
|||
====19.03.26==== |
|||
14:30 |
14:30 |
||
| |
| |
||
{| width='100%' style='background-color:#ddd;' |
{| width='100%' style='background-color:#ddd;' |
||
|<big>''' '''</big> |
|<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(). |
|||
'''Starpprocesu komunikācija''' |
|||
Starpprocesu komunikācija. Faili. Pipes. Koplietošanas atmiņa. Komunikācija starp nesaistītiem procesiem. Sockets abstrakcija komunikācijai. |
|||
* [PD8] [[LU-LSP-b:L08 | Praktiskais darbs #8]]: Programma kas taisa N pavedienus, kur katrs izdrukā M burtus. |
|||
* Izvēles (nav jāiesūta): [[LU-LSP-b:L09b | Praktiskais darbs #9.b]] - steka satura analīze un piekļuve stekam. |
|||
| |
| |
||
* ''' |
* '''Termiņš''' '''MP_Game''' - Kursa projekta tēmas (spēles) izvēle |
||
|- style='vertical-align: top;' |
|- style='vertical-align: top;' |
||
| |
| |
||
====26.03.20==== |
|||
====25.03.26==== |
|||
16:30 |
|||
10:30 |
|||
| |
| |
||
{| width='100%' style='background-color:#ddd;' |
{| width='100%' style='background-color:#ddd;' |
||
|<big>''' |
|<big>'''Sockets :: Servera klienta arhitektūra'''</big> |
||
|} |
|} |
||
'''Sockets''' |
|||
* [https://www.dropbox.com/s/vkce978v56zk9uw/L11_lifecycle_ipc.pdf?raw=1 Slaidi] |
|||
Sockets abstrakcija komunikācijai. Klienta un servera arhitektūra. Iteratīvie un paralēlie serveri. |
|||
'''Servera klienta arhitektūra''' |
|||
Procesa dzīves cikls: Procesa ielādēšana, uzsākšanās un pieci veidi kā process var beigties. exit() un _exit(). |
|||
TBD: Ieskatam servera/klienta komunikācijā [http://selavo.lv/wiki/index.php/LU-LSP-b13:L11 PD11], bet nav jānodod. |
|||
Starpprocesu komunikācija. Klienta un servera arhitektūra. Iteratīvie un paralēlie serveri. Sockets. Komunikācija starp nesaistītiem procesiem. |
|||
Kursa projekta diskusija. Sekojiet kursa Slack kanālam! |
|||
* Izvēlētā kursa projekta noteikumu izstrāde |
|||
* Sākt darbu pie protokola formulēšanas - kādas ziņas Jūsuprāt nepieciešams sūtīt tīklā, lai programma pilnvērtīgi strādātu. |
|||
** Piemēram, [https://docs.google.com/document/d/1Lvo-8oxibzqM8ANdjn8lR4ueCwGLSIcpL1Xtu7InHEs/view iepriekšējā gada noteikumi] |
|||
| |
| |
||
* Uzdots '''MP_Prot1''' - Spēles komunikāciju protokols, 1. versija |
|||
* '''Eksāmena projekts: |
|||
* ''' |
* '''Termiņš''' '''MP_Spec''' - Spēles noteikumu specifikācija |
||
* '''Sākam diskutēt par protokolu''' - nākamajā lekcijā jānonāk līdz pirmajai protokola versijai!''' |
|||
|- style='vertical-align: top;' |
|- style='vertical-align: top;' |
||
| |
| |
||
====01.04.20==== |
|||
====25.03.26==== |
|||
08:30 |
|||
12:30 |
|||
| |
| |
||
{| width='100%' style='background-color:#ddd;' |
{| width='100%' style='background-color:#ddd;' |
||
|<big>''''''</big> |
|<big>'''PD_Jmp :: PD_PSpec'''</big> |
||
|} |
|} |
||
'''PD_Jmp''' |
|||
''setjmp()'',''longjmp()'' un taimera signāls. |
|||
'''PD_PSpec''' |
|||
[PD10] [[LU-LSP-b13:L10 | Praktiskais darbs #10]] - starpprocesu komunikācija. |
|||
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;' |
|- style='vertical-align: top;' |
||
| |
| |
||
====02.04.20==== |
|||
====26.03.26==== |
|||
14:30 |
14:30 |
||
| |
| |
||
| Line 448: | Line 416: | ||
|<big>'''Signāli'''</big> |
|<big>'''Signāli'''</big> |
||
|} |
|} |
||
Signāli. Alarm serviss un signāls. |
|||
* [https://www.dropbox.com/s/go536558ez25tip/L12_signals_course_project.pdf?raw=1 Slaidi] |
|||
Signāli. Alarm serviss un signāls. |
|||
Diskusija par komunikācijas protokolu izstrādi. |
|||
| |
| |
||
* Uzdots '''MP_Prot2''' - Spēles komunikāciju protokols, gala versija |
|||
* '''Termiņš: Kursa projekta spēles noteikumi+uzmetums protokolam GoogleDoc dokumentā.''' |
|||
* '''Termiņš''' '''MP_Prot1''' - Spēles komunikāciju protokols, 1. versija |
|||
|- style='vertical-align: top;' |
|- style='vertical-align: top;' |
||
| |
| |
||
====02.04.20==== |
|||
====8.04.26==== |
|||
16:30 |
|||
10:30 |
|||
| |
| |
||
{| width='100%' style='background-color:#ddd;' |
{| width='100%' style='background-color:#ddd;' |
||
|<big>''' |
|<big>'''Tekstuālā lietotāja saskarne.'''</big> |
||
|} |
|} |
||
Tekstuālā lietotāja saskarne. Ncurses bibliotēka. |
|||
* [https://www.dropbox.com/s/deyef80stvuqyu9/L13_posix_threads.pdf?raw=1 Slaidi] |
|||
'''Resursi''' |
|||
* [https://www.cyberciti.biz/faq/linux-install-ncurses-library-headers-on-debian-ubuntu-centos-fedora/ Ncurses library, installation and use] |
|||
Pavedieni. POSIX pavedieni. Mutex. Datu skriešanās (data race condition). Strupceļš (deadlock). |
|||
| |
| |
||
'''Spēles noteikumi finalizēti.''' |
|||
|- style='vertical-align: top;' |
|- style='vertical-align: top;' |
||
| |
| |
||
====15.04.20==== |
|||
====8.04.26==== |
|||
08:30 |
|||
12:30 |
|||
| |
| |
||
{| width='100%' style='background-color:#ddd;' |
{| width='100%' style='background-color:#ddd;' |
||
|<big>''' '''</big> |
|<big>'''PD_Net :: PD_PProt'''</big> |
||
|} |
|} |
||
'''PD_Net''' |
|||
Starpprocesu komunikācija tīklā. |
|||
'''PD_PProt''' |
|||
Ieskatam servera/klienta komunikācijā [http://selavo.lv/wiki/index.php/LU-LSP-b13:L11 PD11], bet nav jānodod. |
|||
Darbs pie kursa projekta. Komunikāciju protokola izstrāde. |
|||
| |
| |
||
* Uzdots '''[[LU-LSP-b13:L10 | PD_Net]]''' |
|||
* '''Termiņš: Spēles protokola gala versija''' |
|||
* Uzdots '''PD_PProt''' |
|||
|- style='vertical-align: top;' |
|- style='vertical-align: top;' |
||
| |
| |
||
====16.04.20==== |
|||
====9.04.26==== |
|||
14:30 |
14:30 |
||
| |
| |
||
{| width='100%' style='background-color:#ddd;' |
{| width='100%' style='background-color:#ddd;' |
||
|<big>''' |
|<big>'''Dēmoni'''</big> |
||
|} |
|} |
||
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 |
|||
|- style='vertical-align: top;' |
|- style='vertical-align: top;' |
||
| |
| |
||
====16.04.20==== |
|||
====15.04.26==== |
|||
16:30 |
|||
10:30 |
|||
| |
| |
||
{| width='100%' style='background-color:#ddd;' |
{| width='100%' style='background-color:#ddd;' |
||
|<big>''' '''</big> |
|<big>'''Grafiskā lietotāja saskarne'''</big> |
||
|} |
|} |
||
Grafiskā lietotāja saskarne. OpenGL. X-server. |
|||
| |
|||
|- style='vertical-align: top;' |
|||
[PD_KP2] Darbs pie kursa projekta. |
|||
| |
|||
====15.04.26==== |
|||
12:30 |
|||
| |
| |
||
{| width='100%' style='background-color:#ddd;' |
|||
|<big>'''PD_KP'''</big> |
|||
|} |
|||
Darbs pie kursa projekta. |
|||
| |
|||
* Uzdots '''PD_KP''' |
|||
|- style='vertical-align: top;' |
|- style='vertical-align: top;' |
||
| |
| |
||
====23.04.20==== |
|||
====16.04.26==== |
|||
14:30 |
14:30 |
||
| |
| |
||
| Line 524: | Line 509: | ||
|<big>'''Konsultācija'''</big> |
|<big>'''Konsultācija'''</big> |
||
|} |
|} |
||
Atbildes uz studentu jautājumiem |
|||
Tiks noturēta tiešsaistē, pēc vajadzības |
|||
| |
| |
||
| Line 532: | Line 515: | ||
|- style='vertical-align: top;' |
|- style='vertical-align: top;' |
||
| |
| |
||
====31.04.20==== |
|||
====29.04.26==== |
|||
14:30 |
|||
'''10:30''' |
|||
| |
| |
||
{| width='100%' style='background-color:#ddd;' |
{| width='100%' style='background-color:#ddd;' |
||
|<big>'''Eksāmens'''</big> |
|<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. |
|||
* '''Iesniegt '''eksāmena/projekta failus un aprakstu''' E-studijās''' |
|||
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;' |
|- style='vertical-align: top;' |
||
| |
|||
====xx.04-xx.05.2026==== |
|||
| |
|||
{| width='100%' style='background-color:#ddd;' |
|||
|<big>'''Sesija'''</big> |
|||
|} |
|||
Vērtējumu izlikšana |
|||
| |
|||
|} |
|} |
||
| Line 554: | Line 554: | ||
* [[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 | |
* [[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 562: | 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= |
=Resursi= |
||
== Pamācoši vingrinājumi un piemēri == |
== Pamācoši vingrinājumi un piemēri == |
||
| Line 577: | 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 == |
||
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.
- LSP kursa atsauksmes no iepriekšējiem gadiem.
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.2610:30 |
Unix un Linux operētājsistēmu pamatkoncepcijas. Linux sistēmprogrammētaja rīki (shell, gcc, make, manpages u.c.). |
||
4.02.2612:30 |
Resursi
|
| |
5.02.2614:30 |
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
|
||
11.02.2610:30 |
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.2612:30 |
Failu kopēšana. |
| |
12.02.2614:30 |
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.2610:30 |
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. |
| |
18.02.2612:30 |
Direktoriju koka apstaigāšana. |
| |
19.02.2614:30 |
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.2610:30 |
Virtuālās atmiņas lapas. Page fault un segmentation fault. Atmiņas aizsardzība. setjmp() un longjmp(). |
| |
25.02.2612:30 |
Programmas analīze. |
||
26.02.2614:30 |
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.2610:30 |
Atmiņas fragmentācija. Atmiņas rezervēšanas (allocation) algoritmi, kas darbojas uz atmiņas fragmentiem. Atmiņas 'spaiņi'. |
| |
4.03.2612:30 |
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.2614:30 |
Linux atkļūdošanas rīki un to lietošana. |
| |
11.03.2610:30 |
KD1 kontroldarbs. Programmēšanas uzdevums pie datora, izmantojot apgūto vielu. |
||
11.03.2612:30 |
PD_Dbg Atkļūdošanas rīki. |
| |
12.03.2614:30 |
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.2610:30 |
Pavedieni. POSIX pavedieni. Mutex. Datu skriešanās (data race condition). Strupceļš (deadlock). Resursi |
| |
18.03.2612:30 |
Programma kas taisa N pavedienus, kur katrs izdrukā M burtus.
Kontroldarba analīze. |
| |
19.03.2614:30 |
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. |
| |
25.03.2610:30 |
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. |
| |
25.03.2612:30 |
PD_Jmp setjmp(),longjmp() un taimera signāls. PD_PSpec Darbs pie kursa projekta. Spēles izvēle un specifikācija. |
| |
26.03.2614:30 |
Signāli. Alarm serviss un signāls. |
| |
8.04.2610:30 |
Tekstuālā lietotāja saskarne. Ncurses bibliotēka. Resursi |
Spēles noteikumi finalizēti. | |
8.04.2612:30 |
PD_Net Starpprocesu komunikācija tīklā. PD_PProt Darbs pie kursa projekta. Komunikāciju protokola izstrāde. |
| |
9.04.2614:30 |
Programmas, kas izpildās fonā un ilgtermiņā. Rezidenta programmas. Init.d. Upstart. Systemd. Sesijas identifikators. |
| |
15.04.2610:30 |
Grafiskā lietotāja saskarne. OpenGL. X-server. |
||
15.04.2612:30 |
Darbs pie kursa projekta. |
| |
16.04.2614:30 |
Atbildes uz studentu jautājumiem |
||
29.04.2610:30 |
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:
| |
xx.04-xx.05.2026 |
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
- Advanced Linux Programming by CodeSourcery LLC,
- "Building Embedded Linux Systems" O'Reilly Media, 2008, ISBN 0596529686
- Sublime_Text_cheat_sheet - Lieliskā Sublime teksta redaktora taustiņu kombinācijas
- To become a good programmer... - C grāmatu saraksts
Programmētāja resursi
- Noderīgas Linux komandas
- Bash by Example @ibm/developerworks
- Intro to Linux kernel
- Programming in C: A Tutorial (by Brian W. Kernighan)
- GCC and make - par gcc kompilatoru no NTU
- Gnu make dokumentācija
- makefile vai Makefile?
- Tipiskas unix direktoriju hierarhijas īss apraksts.
- Sockets:
- Programming IP Sockets on Linux (tutorial @ gnosis.cx)
- Sockets Tutorial @ Linux Howtos
- Berkeley sockets (Wikipēdija)
- http://www.hiraeth.com/alan/tutorials/courses/unixprog.html
- http://lkml.org/
- The Linux Kernel Module Programming Guide
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
- Top 20 Linux monitoring tools @cyberciti
- 20 rīki Linux veikstpējas monitoringam (IPTraf u.c.) @tecmint
- CPU analīze
- Disku I/O analīze
- IO profiling at Linux programming blog
- Tīkla analīze
- Tīkla caurplūdes testi
$ 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
- C/C++ Tricky Programs
- Computers are exact, precise, and logical machines, until they aren’t.
- Advent of Code
Atziņas
- Teach yourself programming in 10 years by Peter Norvig
- Code review: Learn how NASA codes (blog), and Mars Code (ACM article)
- Things Every Hacker Once Knew
- Kāpēc CR+LF? - Par to kāpēc vēsturisku iemeslu dēļ Windows sistēmās teksta rindas beigās ir CR+LF, kamēr Unix sistēmā tikai LF
- Linux Timeline - Linux distributīvu vēstures diagramma.
- Linus ar Linus par Linux un ne tikai, kamēr būvē datoru priekš Linus (2025).
- Linux Distribution Timeline (2024) - liels attēls ar Linux distributīvu savstarpējo saikni un vēsturi.