Difference between revisions of "LU-LSP-b"
(→22.10.2019.) |
(→08.05.24) |
||
(175 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
+ | <big> | ||
+ | '''Īssaites:''' | ||
+ | [[#Kalendārs | Kalendārs]] | | ||
+ | [[#Uzdevumi | Uzdevumi]] | | ||
+ | [[#Resursi | Resursi]] | | ||
+ | </big> | ||
+ | [[#{{LOCALDAY2}}.{{LOCALMONTH}}.{{#sub:{{LOCALYEAR}}|2}} | Šodiena: {{LOCALDAY2}}.{{LOCALMONTH}}.{{#sub:{{LOCALYEAR}}|2}}]] : | ||
+ | [[#{{#expr:{{LOCALDAY2}}+1}}.{{LOCALMONTH}}.{{#sub:{{LOCALYEAR}}|2}} | Rītdiena: {{#expr:{{LOCALDAY2}}+1}}.{{LOCALMONTH}}.{{#sub:{{LOCALYEAR}}|2}}]] | ||
+ | (ja ir lekcija) | ||
+ | |||
{{LUDFKurss|Linux sistēmas programmēšana|LSP|DatZ3122|2DAT3122}} | {{LUDFKurss|Linux sistēmas programmēšana|LSP|DatZ3122|2DAT3122}} | ||
+ | * Pasniedzēji: | ||
+ | ** Leo Seļāvo ''(epasts: vards.uzvards @ gmail.com)'' | ||
− | + | * Vērtējums = 15% praktiskie darbi, 35% mājas darbi, 20% kontroldarbs un 30% eksāmens. | |
− | |||
− | |||
− | |||
− | |||
− | * Vērtējums = 15% praktiskie darbi, | ||
* [[LSP kursa atsauksmes]] no iepriekšējiem gadiem. | * [[LSP kursa atsauksmes]] no iepriekšējiem gadiem. | ||
Line 13: | Line 20: | ||
==== 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 |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
==== Praktisko darbu vērtēšanas kritēriji ==== | ==== Praktisko darbu vērtēšanas kritēriji ==== | ||
Line 29: | Line 30: | ||
==== 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 | + | * 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 | + | * Ja darbs tiek iesniegts ar novēlošanos (kaut vai 1 sekundi!): |
− | ** 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. |
− | |||
− | {| border=1 cellspacing=0 cellpadding=4 | + | =Kalendārs= |
+ | {| border=1 cellspacing=0 cellpadding=4 style = 'border-color: #ddd;' | ||
|- | |- | ||
− | ! Datums | + | ! Datums |
− | ! | + | ! Tēma, saturs |
! Uzdevumi | ! Uzdevumi | ||
− | |- | + | |
+ | |- style='vertical-align: top;' | ||
+ | | | ||
+ | ====07.02.24==== | ||
+ | 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 '''MD0''' - Programmēšanas stils | ||
+ | * Uzdots '''[https://docs.google.com/document/d/1wmhmxU2x93yj5bha98yGwGTvUbQ5Q0ZjOTfcNQ5ndjc/edit?usp=sharing MD_Koks]''' - Dzimtas koks. | ||
+ | |||
+ | |- style='vertical-align: top;' | ||
| | | | ||
− | |||
− | |||
− | |||
− | + | ====07.02.24==== | |
+ | 12:30 | ||
+ | | | ||
+ | {| width='100%' style='background-color:#ddd;' | ||
+ | |<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://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- | + | * Uzdots '''[[LU-LSP-b13:L01 | PD_Intro]]''' |
− | |- | + | |
+ | |- style='vertical-align: top;' | ||
| | | | ||
− | ==== | + | ====08.02.24==== |
− | | | + | 12:30 |
+ | | | ||
+ | {| 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''' | |
− | [https://www. | + | * 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] | ||
+ | |||
+ | | | ||
− | + | |- style='vertical-align: top;' | |
− | + | | | |
− | + | ====14.02.24==== | |
+ | 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;' | |
+ | | | ||
+ | ====14.02.24==== | ||
+ | 12:30 | ||
| | | | ||
− | ''' | + | {| width='100%' style='background-color:#ddd;' |
+ | |<big>'''PD_File'''</big> | ||
+ | |} | ||
+ | Failu kopēšana. | ||
− | |||
| | | | ||
+ | * Uzdots '''[[LU-LSP-b13:L02 | PD_File]]''' | ||
− | = | + | |- style='vertical-align: top;' |
− | | | + | | |
− | + | ====15.02.24==== | |
+ | 12: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;' | |
+ | | | ||
− | + | ====21.02.24==== | |
− | + | 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;' | ||
+ | | | ||
− | + | ====21.02.24==== | |
+ | 12:30 | ||
| | | | ||
+ | {| width='100%' style='background-color:#ddd;' | ||
+ | |<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. | ||
+ | (Termiņš pārcelts uz nedēļu vēlāk) | ||
− | + | |- style='vertical-align: top;' | |
+ | | | ||
− | + | ====22.02.24==== | |
+ | 12: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. | ||
+ | | | ||
− | + | |- style='vertical-align: top;' | |
+ | | | ||
+ | ====28.02.24==== | ||
+ | 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;' |
+ | | | ||
− | + | ====28.02.24==== | |
+ | 12:30 | ||
| | | | ||
+ | {| width='100%' style='background-color:#ddd;' | ||
+ | |<big>'''PD_An'''</big> | ||
+ | |} | ||
+ | Programmas analīze. | ||
− | + | | | |
− | | | + | * Uzdots '''[[LU-LSP-b13:L04 | PD_An]]''' |
− | [L04] | + | * '''Termiņš''' '''[[LU-LSP-b:MD3 | MD_Dir]]''' - Direktoriju koka apstaigāšana. |
− | + | |- style='vertical-align: top;' | |
+ | | | ||
− | + | ====29.02.24==== | |
+ | 12: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;' | |
− | + | | | |
− | |||
+ | ====06.03.24==== | ||
+ | 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;' | ||
| | | | ||
− | |||
− | + | ====06.03.24==== | |
+ | 12:30 | ||
| | | | ||
+ | {| width='100%' style='background-color:#ddd;' | ||
+ | |<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;' | |
+ | | | ||
+ | |||
+ | ====07.03.24==== | ||
+ | 12:30 | ||
+ | | | ||
+ | {| 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;' | ||
+ | | | ||
− | |- | + | ====13.03.24==== |
+ | 10:30 | ||
+ | | | ||
+ | {| width='100%' style='background-color:#ddd;' | ||
+ | ||''Attālināti'': <big>'''KD1'''</big> | ||
+ | |} | ||
+ | KD1 kontroldarbs. Programmēšanas uzdevums pie datora, izmantojot apgūto vielu. | ||
| | | | ||
− | = | + | |- style='vertical-align: top;' |
− | | | + | | |
+ | ====13.03.24==== | ||
+ | 12:30 | ||
| | | | ||
+ | {| width='100%' style='background-color:#ddd;' | ||
+ | |''Attālināti:'' <big>'''PD_Dbg'''</big> | ||
+ | |} | ||
+ | '''PD_Dbg''' | ||
+ | Atkļūdošanas rīki. | ||
− | |||
| | | | ||
+ | * Uzdots '''[[LU-LSP-b13:LA | PD_Dbg]]''' (Nav obligāti jāiesniedz) | ||
− | = | + | |- style='vertical-align: top;' |
− | | | + | | |
− | + | ====14.03.24==== | |
+ | 12:30 | ||
+ | | | ||
+ | {| width='100%' style='background-color:#ddd;' | ||
+ | |''Attālināti'': <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()''. | ||
+ | | | ||
− | + | |- style='vertical-align: top;' | |
+ | | | ||
+ | ====20.03.24==== | ||
+ | 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] | |
− | |||
| | | | ||
+ | * '''Termiņš''' '''[[LU-LSP-b:MD5 | MD_Frag]]''' - Atmiņas fragmentācijas algoritmu novērtējums ('''grupās''') | ||
+ | |||
− | = | + | |- style='vertical-align: top;' |
− | |||
| | | | ||
− | + | ====20.03.24==== | |
+ | 12:30 | ||
| | | | ||
+ | {| width='100%' style='background-color:#ddd;' | ||
+ | |<big>'''PD_Thread'''</big> | ||
+ | |} | ||
+ | Programma kas taisa N pavedienus, kur katrs izdrukā M burtus. | ||
− | |||
− | |||
− | + | '''PD_KD''' | |
+ | |||
+ | Kontroldarba analīze. | ||
− | |||
| | | | ||
+ | * Uzdots '''MP_Spec''' - Spēles noteikumu specifikācija | ||
+ | * Uzdots '''[[LU-LSP-b:L08 | PD_Thread]]''' | ||
− | |- | + | |- style='vertical-align: top;' |
| | | | ||
− | ==== | + | ====21.03.24==== |
+ | 12:30 | ||
| | | | ||
− | + | {| width='100%' style='background-color:#ddd;' | |
+ | |<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. | ||
| | | | ||
+ | * '''Termiņš''' '''MP_Game''' - Kursa projekta tēmas (spēles) izvēle | ||
− | + | |- style='vertical-align: top;' | |
− | |||
− | |||
| | | | ||
− | ==== | + | ====03.04.24==== |
+ | 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;' |
− | |||
− | |||
− | |||
− | |||
| | | | ||
− | ==== | + | ====03.04.24==== |
+ | 12:30 | ||
| | | | ||
− | + | {| width='100%' style='background-color:#ddd;' | |
+ | |<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. | |
| | | | ||
− | + | * Uzdots '''[[LU-LSP-b13:L05 | PD_Jmp]]''' | |
+ | * Uzdots '''PD_PSpec''' | ||
− | '' | + | |- style='vertical-align: top;' |
+ | | | ||
− | + | ====04.04.24==== | |
+ | 12: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;' |
+ | | | ||
+ | ====10.04.24==== | ||
+ | 10:30 | ||
| | | | ||
+ | {| width='100%' style='background-color:#ddd;' | ||
+ | |<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] | |
− | |||
− | * | ||
− | |||
− | | | + | | |
− | |||
− | |||
− | |- | + | |- style='vertical-align: top;' |
| | | | ||
− | ==== 10. | + | ====10.04.24==== |
− | | | + | 12:30 |
− | + | | | |
+ | {| width='100%' style='background-color:#ddd;' | ||
+ | |<big>'''PD_Net :: PD_PProt'''</big> | ||
+ | |} | ||
+ | '''PD_Net''' | ||
− | Starpprocesu komunikācija | + | Starpprocesu komunikācija tīklā. |
− | + | '''PD_PProt''' | |
+ | Darbs pie kursa projekta. Komunikāciju protokola izstrāde. | ||
− | [ | + | | |
− | + | * Uzdots '''[[LU-LSP-b13:L10 | PD_Net]]''' | |
+ | * Uzdots '''PD_PProt''' | ||
− | + | |- style='vertical-align: top;' | |
+ | | | ||
+ | ====11.04.24==== | ||
+ | 12:30 | ||
+ | | | ||
+ | {| width='100%' style='background-color:#ddd;' | ||
+ | |<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;' | |
− | + | | | |
− | |||
+ | ====17.04.24==== | ||
+ | 10:30 | ||
+ | | | ||
+ | {| width='100%' style='background-color:#ddd;' | ||
+ | |<big>'''Grafiskā lietotāja saskarne'''</big> | ||
+ | |} | ||
+ | Grafiskā lietotāja saskarne. OpenGL. X-server. | ||
| | | | ||
− | + | |- style='vertical-align: top;' | |
+ | | | ||
− | + | ====17.04.24==== | |
+ | 12:30 | ||
| | | | ||
+ | {| width='100%' style='background-color:#ddd;' | ||
+ | |<big>'''PD_KP'''</big> | ||
+ | |} | ||
+ | Darbs pie kursa projekta. | ||
− | + | | | |
− | | | + | * Uzdots '''PD_KP''' |
− | |||
+ | |- style='vertical-align: top;' | ||
+ | | | ||
− | + | ====18.04.24==== | |
+ | 12:30 | ||
+ | | | ||
+ | {| width='100%' style='background-color:#ddd;' | ||
+ | |<big>'''Konsultācija'''</big> | ||
+ | |} | ||
+ | Atbildes uz studentu jautājumiem | ||
+ | | | ||
− | + | |- style='vertical-align: top;' | |
| | | | ||
− | + | ||
− | + | ====09.05.24==== | |
− | + | 12:30 | |
| | | | ||
+ | {| width='100%' style='background-color:#ddd;' | ||
+ | |<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 25% | ||
+ | * Prezentācija (bez slaidiem) 25% | ||
+ | |||
+ | |- style='vertical-align: top;' | ||
| | | | ||
− | ==== | + | ====29.04-17.05.2024==== |
− | |||
− | + | | | |
+ | {| 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 | | + | * [[LU-LSP-b:MD1 | MD_Koks]]: Ģimenes koka ģenerēšanas programma. |
− | |||
* [[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 349: | Line 568: | ||
--> | --> | ||
+ | =Resursi= | ||
== Pamācoši vingrinājumi un piemēri == | == Pamācoši vingrinājumi un piemēri == | ||
Line 354: | Line 574: | ||
* 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() | ||
== Literatūra == | == Literatūra == | ||
Line 369: | Line 590: | ||
* [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}} | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− |
Latest revision as of 16:22, 22 March 2024
Ī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:
- 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 | |
---|---|---|---|
07.02.2410:30 |
Unix un Linux operētājsistēmu pamatkoncepcijas. Linux sistēmprogrammētaja rīki (shell, gcc, make, manpages u.c.). |
| |
07.02.2412:30 |
Resursi
|
| |
08.02.2412: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
|
||
14.02.2410: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. |
||
14.02.2412:30 |
Failu kopēšana. |
| |
15.02.2412: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(). |
||
21.02.2410: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. |
| |
21.02.2412:30 |
Direktoriju koka apstaigāšana. |
(Termiņš pārcelts uz nedēļu vēlāk) | |
22.02.2412: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. |
||
28.02.2410:30 |
Virtuālās atmiņas lapas. Page fault un segmentation fault. Atmiņas aizsardzība. setjmp() un longjmp(). |
| |
28.02.2412:30 |
Programmas analīze. |
||
29.02.2412: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. |
||
06.03.2410:30 |
Atmiņas fragmentācija. Atmiņas rezervēšanas (allocation) algoritmi, kas darbojas uz atmiņas fragmentiem. Atmiņas 'spaiņi'. |
| |
06.03.2412:30 |
PD_Malloc Atmiņas rezervācija. PD_Heap Vienkāršs atmiņas alokators fiksēta izmēra objektiem. |
||
07.03.2412:30 |
Linux atkļūdošanas rīki un to lietošana. |
| |
13.03.2410:30 |
KD1 kontroldarbs. Programmēšanas uzdevums pie datora, izmantojot apgūto vielu. |
||
13.03.2412:30 |
PD_Dbg Atkļūdošanas rīki. |
| |
14.03.2412: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(). |
||
20.03.2410:30 |
Pavedieni. POSIX pavedieni. Mutex. Datu skriešanās (data race condition). Strupceļš (deadlock). Resursi |
| |
20.03.2412:30 |
Programma kas taisa N pavedienus, kur katrs izdrukā M burtus.
Kontroldarba analīze. |
| |
21.03.2412: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. |
| |
03.04.2410: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. |
| |
03.04.2412:30 |
PD_Jmp setjmp(),longjmp() un taimera signāls. PD_PSpec Darbs pie kursa projekta. Spēles izvēle un specifikācija. |
| |
04.04.2412:30 |
Signāli. Alarm serviss un signāls. |
| |
10.04.2410:30 |
Tekstuālā lietotāja saskarne. Ncurses bibliotēka. Resursi |
||
10.04.2412:30 |
PD_Net Starpprocesu komunikācija tīklā. PD_PProt Darbs pie kursa projekta. Komunikāciju protokola izstrāde. |
| |
11.04.2412:30 |
Programmas, kas izpildās fonā un ilgtermiņā. Rezidenta programmas. Init.d. Upstart. Systemd. Sesijas identifikators. |
| |
17.04.2410:30 |
Grafiskā lietotāja saskarne. OpenGL. X-server. |
||
17.04.2412:30 |
Darbs pie kursa projekta. |
| |
18.04.2412:30 |
Atbildes uz studentu jautājumiem |
||
09.05.2412: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:
| |
29.04-17.05.2024 |
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
- Vai var uzrakstīt programmu bez main()
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