Difference between revisions of "LU-LSP-b"
(→24.02.21) |
(→10.05.22) |
||
(45 intermediate revisions by the same user not shown) | |||
Line 5: | Line 5: | ||
[[#Resursi | Resursi]] | | [[#Resursi | Resursi]] | | ||
</big> | </big> | ||
− | [[#{{LOCALDAY2}}.{{LOCALMONTH}}.{{ | + | [[#{{LOCALDAY2}}.{{LOCALMONTH}}.{{#sub:{{LOCALYEAR}}|2}} | Šodiena: {{LOCALDAY2}}.{{LOCALMONTH}}.{{#sub:{{LOCALYEAR}}|2}}]] : |
− | [[#{{#expr:{{LOCALDAY2}}+1}}.{{LOCALMONTH}}.{{ | + | [[#{{#expr:{{LOCALDAY2}}+1}}.{{LOCALMONTH}}.{{#sub:{{LOCALYEAR}}|2}} | Rītdiena: {{#expr:{{LOCALDAY2}}+1}}.{{LOCALMONTH}}.{{#sub:{{LOCALYEAR}}|2}}]] |
(ja ir lekcija) | (ja ir lekcija) | ||
{{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)'' | ||
− | |||
− | * Vērtējums = 15% praktiskie darbi, | + | * Vērtējums = 15% praktiskie darbi, 35% mājas darbi, 20% kontroldarbs un 30% eksāmens. |
* [[LSP kursa atsauksmes]] no iepriekšējiem gadiem. | * [[LSP kursa atsauksmes]] no iepriekšējiem gadiem. | ||
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= | ||
− | |||
{| 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;' | ||
| | | | ||
− | ====08.02. | + | ====08.02.22==== |
− | + | 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.). | Unix un Linux operētājsistēmu pamatkoncepcijas. Linux sistēmprogrammētaja rīki (shell, gcc, make, manpages u.c.). | ||
− | |||
| | | | ||
− | * '''MD0 | + | * Uzdots '''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;' | ||
| | | | ||
− | ==== | + | ====08.02.22==== |
− | + | 12:30 | |
| | | | ||
{| width='100%' style='background-color:#ddd;' | {| width='100%' style='background-color:#ddd;' | ||
|<big>'''Programmēšanas valoda C'''</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. | ||
+ | '''Resursi''' | ||
− | + | * Klasiskā C programmēšanas valodas grāmata: Brian W. C. Kernighan & Dennis M. Ritchie, "The C Programming Language -- ANSI C," Prentice Hall, 1988 | |
+ | * [https://web.archive.org/web/20160417114016/http://www.physics.drexel.edu/students/courses/Comp_Phys/General/C_basics/#first C Language Tutorial] | ||
| | | | ||
Line 78: | Line 78: | ||
|- style='vertical-align: top;' | |- style='vertical-align: top;' | ||
| | | | ||
− | ==== | + | |
− | + | ====09.02.22==== | |
+ | 8: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]] | |
− | * | + | * 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." |
− | |||
− | |||
| | | | ||
− | * '''[[LU-LSP-b13:L01 | PD_Intro]]''' | + | * Uzdots '''[[LU-LSP-b13:L01 | PD_Intro]]''' |
|- style='vertical-align: top;' | |- style='vertical-align: top;' | ||
| | | | ||
− | + | ====15.02.22==== | |
− | ====15.02. | + | 10:30 |
− | |||
| | | | ||
{| width='100%' style='background-color:#ddd;' | {| width='100%' style='background-color:#ddd;' | ||
|<big>'''Darbs ar failiem'''</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. | 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;' | |- style='vertical-align: top;' | ||
| | | | ||
− | ==== | + | ====15.02.22==== |
− | + | 12:30 | |
| | | | ||
{| width='100%' style='background-color:#ddd;' | {| width='100%' style='background-color:#ddd;' | ||
− | |<big>''' | + | |<big>'''PD_File'''</big> |
|} | |} | ||
− | + | Failu kopēšana. | |
− | |||
− | |||
| | | | ||
+ | * Uzdots '''[[LU-LSP-b13:L02 | PD_File]]''' | ||
|- style='vertical-align: top;' | |- style='vertical-align: top;' | ||
| | | | ||
− | ==== | + | ====16.02.22==== |
− | + | 8:30 | |
| | | | ||
{| width='100%' style='background-color:#ddd;' | {| width='100%' style='background-color:#ddd;' | ||
− | |<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(). | |
− | |||
− | |||
− | |||
| | | | ||
− | |||
|- style='vertical-align: top;' | |- style='vertical-align: top;' | ||
| | | | ||
− | ====22.02. | + | ====22.02.22==== |
− | + | 10:30 | |
| | | | ||
{| width='100%' style='background-color:#ddd;' | {| width='100%' style='background-color:#ddd;' | ||
− | |<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. | |
− | |||
− | |||
− | |||
| | | | ||
− | * '''[[LU-LSP-b:MD3 | MD_Dir]] | + | * Uzdots '''[[LU-LSP-b:MD3 | MD_Dir]]''' - Direktoriju koka apstaigāšana. |
|- style='vertical-align: top;' | |- style='vertical-align: top;' | ||
| | | | ||
− | ==== | + | ====22.02.22==== |
− | + | 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. | ||
− | |||
− | |||
− | |||
− | |||
|- style='vertical-align: top;' | |- style='vertical-align: top;' | ||
| | | | ||
− | + | ====23.02.22==== | |
− | ==== | + | 8:30 |
− | |||
| | | | ||
{| width='100%' style='background-color:#ddd;' | {| width='100%' style='background-color:#ddd;' | ||
− | |<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. | |
− | |||
− | |||
− | |||
| | | | ||
− | |||
|- style='vertical-align: top;' | |- style='vertical-align: top;' | ||
| | | | ||
− | ====01.03. | + | ====01.03.22==== |
− | + | 10:30 | |
| | | | ||
{| width='100%' style='background-color:#ddd;' | {| width='100%' style='background-color:#ddd;' | ||
|<big>'''Virtuālā atmiņa'''</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()''. | Virtuālās atmiņas lapas. Page fault un segmentation fault. Atmiņas aizsardzība. ''setjmp()'' un ''longjmp()''. | ||
− | |||
| | | | ||
− | * '''[[LU-LSP-b:MD4 | MD_Mem]] | + | * Uzdots '''[[LU-LSP-b:MD4 | MD_Mem]]''' - Atmiņas rezervācijas funkciju salīdzinājums. |
|- style='vertical-align: top;' | |- style='vertical-align: top;' | ||
| | | | ||
− | ==== | + | ====01.03.22==== |
− | + | 12:30 | |
| | | | ||
{| width='100%' style='background-color:#ddd;' | {| width='100%' style='background-color:#ddd;' | ||
− | |<big>''' | + | |<big>'''PD_An'''</big> |
|} | |} | ||
− | + | Programmas analīze. | |
− | |||
− | |||
| | | | ||
+ | * 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;' | ||
| | | | ||
− | ==== | + | ====02.03.22==== |
− | + | 8: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. | |
− | |||
− | |||
− | |||
| | | | ||
− | |||
|- style='vertical-align: top;' | |- style='vertical-align: top;' | ||
| | | | ||
− | ====08.03. | + | ====08.03.22==== |
− | + | 10:30 | |
| | | | ||
{| width='100%' style='background-color:#ddd;' | {| width='100%' style='background-color:#ddd;' | ||
|<big>'''Atmiņas fragmentācija'''</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'. | Atmiņas fragmentācija. Atmiņas rezervēšanas (allocation) algoritmi, kas darbojas uz atmiņas fragmentiem. Atmiņas 'spaiņi'. | ||
− | |||
| | | | ||
− | * '''[[LU-LSP-b:MD5 | MD_Frag]] | + | * 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;' | ||
| | | | ||
− | ==== | + | ====08.03.22==== |
− | + | 12:30 | |
| | | | ||
{| width='100%' style='background-color:#ddd;' | {| width='100%' style='background-color:#ddd;' | ||
− | |<big>''' | + | |<big>'''PD_Malloc :: PD_Heap'''</big> |
|} | |} | ||
+ | '''PD_Malloc''' | ||
+ | |||
+ | Atmiņas rezervācija. | ||
+ | '''PD_Heap''' | ||
− | + | 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. | ||
|- style='vertical-align: top;' | |- style='vertical-align: top;' | ||
| | | | ||
− | ==== | + | ====09.03.22==== |
− | + | 8:30 | |
| | | | ||
{| width='100%' style='background-color:#ddd;' | {| width='100%' style='background-color:#ddd;' | ||
− | |<big>''' | + | |<big>'''KD1'''</big> |
|} | |} | ||
− | + | KD1 kontroldarbs. Programmēšanas uzdevums pie datora, izmantojot apgūto vielu. | |
− | |||
− | |||
| | | | ||
− | |||
|- style='vertical-align: top;' | |- style='vertical-align: top;' | ||
| | | | ||
− | ====15.03. | + | ====15.03.22==== |
− | + | 10:30 | |
| | | | ||
{| width='100%' style='background-color:#ddd;' | {| width='100%' style='background-color:#ddd;' | ||
|<big>'''Atkļūdošana'''</big> | |<big>'''Atkļūdošana'''</big> | ||
|} | |} | ||
− | |||
− | |||
Linux atkļūdošanas rīki un to lietošana. | Linux atkļūdošanas rīki un to lietošana. | ||
− | |||
| | | | ||
− | * '''MP_Game | + | * Uzdots '''MP_Game''' - Kursa projekta tēmas (spēles) izvēle |
|- style='vertical-align: top;' | |- style='vertical-align: top;' | ||
| | | | ||
− | ==== | + | ====15.03.22==== |
− | + | 12:30 | |
| | | | ||
{| width='100%' style='background-color:#ddd;' | {| width='100%' style='background-color:#ddd;' | ||
|<big>'''Daudz-uzdevumu vide'''</big> | |<big>'''Daudz-uzdevumu vide'''</big> | ||
|} | |} | ||
− | |||
− | |||
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()''. | ||
− | |||
| | | | ||
+ | * '''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;' | ||
| | | | ||
− | ==== | + | ====16.03.22==== |
− | + | 8:30 | |
| | | | ||
{| width='100%' style='background-color:#ddd;' | {| width='100%' style='background-color:#ddd;' | ||
− | |<big>''' | + | |<big>'''PD_Dbg :: PD_KD'''</big> |
|} | |} | ||
+ | '''PD_Dbg''' | ||
+ | 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;' | ||
| | | | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | ====22.03.22==== | |
− | + | 10:30 | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | ==== | ||
− | |||
| | | | ||
{| width='100%' style='background-color:#ddd;' | {| width='100%' style='background-color:#ddd;' | ||
|<big>'''Pavedieni'''</big> | |<big>'''Pavedieni'''</big> | ||
|} | |} | ||
− | |||
− | |||
Pavedieni. POSIX pavedieni. Mutex. Datu skriešanās (data race condition). Strupceļš (deadlock). | 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] | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
| | | | ||
− | |||
|- style='vertical-align: top;' | |- style='vertical-align: top;' | ||
| | | | ||
− | ==== | + | ====22.03.22==== |
− | + | 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. | |
− | |||
− | |||
| | | | ||
− | * ''' | + | * 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 | ||
|- style='vertical-align: top;' | |- style='vertical-align: top;' | ||
| | | | ||
− | ==== | + | ====23.03.22==== |
− | + | 8:30 | |
| | | | ||
{| width='100%' style='background-color:#ddd;' | {| width='100%' style='background-color:#ddd;' | ||
− | |<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. | |
− | |||
| | | | ||
− | |||
|- style='vertical-align: top;' | |- style='vertical-align: top;' | ||
| | | | ||
− | ==== | + | ====29.03.22==== |
− | + | 10:30 | |
| | | | ||
{| width='100%' style='background-color:#ddd;' | {| width='100%' style='background-color:#ddd;' | ||
− | |<big>''' | + | |<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. | 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;' | |- style='vertical-align: top;' | ||
| | | | ||
− | ==== | + | ====29.03.22==== |
− | + | 12:30 | |
| | | | ||
{| width='100%' style='background-color:#ddd;' | {| width='100%' style='background-color:#ddd;' | ||
− | |<big>''' | + | |<big>'''PD_Jmp :: PD_PSpec'''</big> |
|} | |} | ||
+ | '''PD_Jmp''' | ||
+ | |||
+ | ''setjmp()'',''longjmp()'' un taimera signāls. | ||
+ | '''PD_PSpec''' | ||
− | + | Darbs pie kursa projekta. Spēles izvēle un specifikācija. | |
| | | | ||
− | * '''[[LU-LSP-b13: | + | * Uzdots '''[[LU-LSP-b13:L05 | PD_Jmp]]''' |
+ | * Uzdots '''PD_PSpec''' | ||
|- style='vertical-align: top;' | |- style='vertical-align: top;' | ||
| | | | ||
− | ==== | + | ====30.03.22==== |
− | + | 8:30 | |
| | | | ||
{| width='100%' style='background-color:#ddd;' | {| width='100%' style='background-color:#ddd;' | ||
− | |<big>''' | + | |<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;' | |- style='vertical-align: top;' | ||
| | | | ||
− | ==== | + | ====05.04.22==== |
− | + | 10:30 | |
| | | | ||
{| width='100%' style='background-color:#ddd;' | {| width='100%' style='background-color:#ddd;' | ||
|<big>'''Tekstuālā lietotāja saskarne.'''</big> | |<big>'''Tekstuālā lietotāja saskarne.'''</big> | ||
|} | |} | ||
+ | Tekstuālā lietotāja saskarne. Ncurses bibliotēka. | ||
+ | '''Resursi''' | ||
− | + | * [https://www.cyberciti.biz/faq/linux-install-ncurses-library-headers-on-debian-ubuntu-centos-fedora/ Ncurses library, installation and use] | |
| | | | ||
Line 479: | Line 416: | ||
|- style='vertical-align: top;' | |- style='vertical-align: top;' | ||
| | | | ||
− | ==== | + | ====05.04.22==== |
− | + | 12:30 | |
| | | | ||
{| width='100%' style='background-color:#ddd;' | {| width='100%' style='background-color:#ddd;' | ||
− | |<big>''' | + | |<big>'''PD_Net :: PD_PProt'''</big> |
|} | |} | ||
+ | '''PD_Net''' | ||
+ | Starpprocesu komunikācija tīklā. | ||
− | PD_PProt | + | '''PD_PProt''' |
+ | |||
+ | Darbs pie kursa projekta. Komunikāciju protokola izstrāde. | ||
| | | | ||
− | * '''PD_PProt''' | + | * Uzdots '''[[LU-LSP-b13:L10 | PD_Net]]''' |
+ | * Uzdots '''PD_PProt''' | ||
|- style='vertical-align: top;' | |- style='vertical-align: top;' | ||
| | | | ||
− | ==== | + | ====06.04.22==== |
− | + | 8: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;' | ||
| | | | ||
− | ==== | + | ====19.04.22==== |
− | + | 10:30 | |
| | | | ||
{| width='100%' style='background-color:#ddd;' | {| width='100%' style='background-color:#ddd;' | ||
|<big>'''Grafiskā lietotāja saskarne'''</big> | |<big>'''Grafiskā lietotāja saskarne'''</big> | ||
|} | |} | ||
− | |||
− | |||
Grafiskā lietotāja saskarne. OpenGL. X-server. | Grafiskā lietotāja saskarne. OpenGL. X-server. | ||
Line 522: | Line 460: | ||
|- style='vertical-align: top;' | |- style='vertical-align: top;' | ||
| | | | ||
− | ==== | + | ====19.04.22==== |
− | + | 12:30 | |
| | | | ||
{| width='100%' style='background-color:#ddd;' | {| width='100%' style='background-color:#ddd;' | ||
− | |<big>''' | + | |<big>'''PD_KP'''</big> |
|} | |} | ||
− | + | Darbs pie kursa projekta. | |
− | |||
− | |||
| | | | ||
− | * '''PD_KP''' | + | * Uzdots '''PD_KP''' |
|- style='vertical-align: top;' | |- style='vertical-align: top;' | ||
| | | | ||
− | ==== | + | ====20.04.22==== |
− | + | 8:30 | |
| | | | ||
{| width='100%' style='background-color:#ddd;' | {| width='100%' style='background-color:#ddd;' | ||
|<big>'''Konsultācija'''</big> | |<big>'''Konsultācija'''</big> | ||
|} | |} | ||
− | |||
− | |||
Atbildes uz studentu jautājumiem | Atbildes uz studentu jautājumiem | ||
Line 551: | Line 485: | ||
|- style='vertical-align: top;' | |- style='vertical-align: top;' | ||
| | | | ||
− | ==== | + | ====26.04.22==== |
− | + | 10:30 | |
| | | | ||
{| width='100%' style='background-color:#ddd;' | {| width='100%' style='background-color:#ddd;' | ||
− | |<big>''' | + | |<big>'''Konsultācija pēc vajadzības'''</big> |
|} | |} | ||
− | |||
− | |||
− | |||
| | | | ||
Line 565: | Line 496: | ||
|- style='vertical-align: top;' | |- style='vertical-align: top;' | ||
| | | | ||
− | ==== | + | |
− | + | ====10.05.22==== | |
+ | 10:30 | ||
| | | | ||
{| width='100%' style='background-color:#ddd;' | {| width='100%' style='background-color:#ddd;' | ||
− | |<big>''' | + | |<big>'''Eksāmens'''</big> |
|} | |} | ||
+ | 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;' | ||
| | | | ||
+ | |||
+ | ====02-14.05.2022==== | ||
+ | |||
+ | | | ||
+ | {| width='100%' style='background-color:#ddd;' | ||
+ | |<big>'''Sesija'''</big> | ||
+ | |} | ||
+ | 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.
- 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 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.2210:30 |
Unix un Linux operētājsistēmu pamatkoncepcijas. Linux sistēmprogrammētaja rīki (shell, gcc, make, manpages u.c.). |
| |
08.02.2212: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
|
||
09.02.228:30 |
Resursi
|
| |
15.02.2210: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. |
||
15.02.2212:30 |
Failu kopēšana. |
| |
16.02.228: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(). |
||
22.02.2210: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. |
| |
22.02.2212:30 |
Direktoriju koka apstaigāšana. |
||
23.02.228: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. |
||
01.03.2210:30 |
Virtuālās atmiņas lapas. Page fault un segmentation fault. Atmiņas aizsardzība. setjmp() un longjmp(). |
| |
01.03.2212:30 |
Programmas analīze. |
||
02.03.228: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. |
||
08.03.2210:30 |
Atmiņas fragmentācija. Atmiņas rezervēšanas (allocation) algoritmi, kas darbojas uz atmiņas fragmentiem. Atmiņas 'spaiņi'. |
| |
08.03.2212:30 |
PD_Malloc Atmiņas rezervācija. PD_Heap Vienkāršs atmiņas alokators fiksēta izmēra objektiem. |
||
09.03.228:30 |
KD1 kontroldarbs. Programmēšanas uzdevums pie datora, izmantojot apgūto vielu. |
||
15.03.2210:30 |
Linux atkļūdošanas rīki un to lietošana. |
| |
15.03.2212: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(). |
| |
16.03.228:30 |
PD_Dbg Atkļūdošanas rīki. PD_KD Kontroldarba analīze. |
| |
22.03.2210:30 |
Pavedieni. POSIX pavedieni. Mutex. Datu skriešanās (data race condition). Strupceļš (deadlock). Resursi |
||
22.03.2212:30 |
Programma kas taisa N pavedienus, kur katrs izdrukā M burtus. |
| |
23.03.228: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. |
||
29.03.2210: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. |
| |
29.03.2212:30 |
PD_Jmp setjmp(),longjmp() un taimera signāls. PD_PSpec Darbs pie kursa projekta. Spēles izvēle un specifikācija. |
| |
30.03.228:30 |
Signāli. Alarm serviss un signāls. |
| |
05.04.2210:30 |
Tekstuālā lietotāja saskarne. Ncurses bibliotēka. Resursi |
||
05.04.2212:30 |
PD_Net Starpprocesu komunikācija tīklā. PD_PProt Darbs pie kursa projekta. Komunikāciju protokola izstrāde. |
| |
06.04.228:30 |
Programmas, kas izpildās fonā un ilgtermiņā. Rezidenta programmas. Init.d. Upstart. Systemd. Sesijas identifikators. |
| |
19.04.2210:30 |
Grafiskā lietotāja saskarne. OpenGL. X-server. |
||
19.04.2212:30 |
Darbs pie kursa projekta. |
| |
20.04.228:30 |
Atbildes uz studentu jautājumiem |
||
26.04.2210:30 |
|
||
10.05.2210:30 |
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:
| |
02-14.05.2022 |
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
- 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
- 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
- "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