Difference between revisions of "LU-LSP-b"
(Redirecting to LU-LSP-b13) |
(→Pamācoši vingrinājumi un piemēri) |
||
(426 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
<big> |
|||
#REDIRECT [[LU-LSP-b13]] |
|||
'''Ī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}} |
|||
* 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= |
|||
{| border=1 cellspacing=0 cellpadding=4 style = 'border-color: #ddd;' |
|||
|- |
|||
! Datums |
|||
! Tēma, saturs |
|||
! 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://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;' |
|||
| |
|||
====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''' |
|||
* 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]]''' |
|||
* '''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.04.24==== |
|||
12:30 |
|||
| |
|||
{| width='100%' style='background-color:#ddd;' |
|||
|<big>'''PD_Net :: PD_PProt'''</big> |
|||
|} |
|||
'''PD_Net''' |
|||
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 == |
|||
* [[LU-LSP-b:MD0 | MD0]]: Izlasīt kodēšanas stila dokumentus. |
|||
* [[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:MD4 | MD4]]: Atmiņas rezervācijas funkciju salīdzināšana. |
|||
* [[LU-LSP-b:MD5 | MD5]]: Atmiņas fragmentācijas algoritmu novērtējums. |
|||
<!-- * [[LU-LSP-b:MD5 | MD5]]: Procedūru izsaukumu steka izdruka. --> |
|||
Eksāmens izpaužas kā kursa projekta aizstāvēšana. |
|||
<!-- |
|||
* 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) |
|||
** [http://selavo.lv/~kursi/LSP/md7 MD7 projekta grupu risinājumi] |
|||
Eksāmens izpaužas kā kursa projekta aizstāvēšana. |
|||
--> |
|||
=Resursi= |
|||
== Pamācoši vingrinājumi un piemēri == |
|||
* 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() |
|||
* [https://wordsandbuttons.online/so_you_think_you_know_c.html 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 |
|||
* [http://www.advancedlinuxprogramming.com/ 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 |
|||
* [http://fabiensanglard.net/c/ To become a good programmer...] - C grāmatu saraksts |
|||
{{ProgrammersResorces}} |
Latest revision as of 19:54, 6 April 2024
Īssaites: Kalendārs | Uzdevumi | Resursi | Šodiena: 22.11.24 : Rītdiena: 23.11.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()
- 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
- 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