LU-LSP-b19
Īssaites: Kalendārs | Uzdevumi | Resursi | Šodiena... (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ēstkopa komunikācijai par kursa aktualitātēm, uzdevumiem, termiņiem un problēmām:
- Google grupa lu-lsp-b@googlegroups.com Lai pieteiktos, sekot http://groups.google.lv/group/lu-lsp-b un pieslēgties ar savu google kontu, vai arī sūtīt epastu pasniedzējam.
- 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.
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 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 30 minūtes pirms lekcijas sākuma
- Ja darbs tiek iesniegts ar novēlošanos (kaut vai 1 min!):
- Sekundi 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, nedēļa | Kursa saturs | Uzdevumi |
---|---|---|
03.09.2019. |
[L00] Ievads kursā. Unix un Linux operētājsistēmu pamatkoncepcijas un vēsture. Linux sistēmprogrammētaja rīki (shell, gcc, make, manpages u.c.) Vispārīgs pārskats par valodu C. [PD0] Praktiskais darbs #0:
|
Uzdots MD0 mājas darbs - programmēšanas stils - izlasīt un ņemt vērā turpmākajos darbos, kā arī pieteikties vēstkopai! |
10.09.2019. |
[L01] Datu struktūras un algoritmi valodā C.
C standarti, kompilācija, bibliotēkas, linkošana, skalārie un saliktie tipi (t.sk pointeri un masīvi), funkcijas, nosacījumi, cikli
|
Uzdots MD1 mājas darbs - dzimtas koks. |
17.09.2019. |
[L02] Darbs ar failiem.
Sistēmas izsaukumi un standarta bibliotēkas funkcijas faila ievadam un izvadam. Linux piedāvātās programmas darbam ar failu izvadu/ievadu (cat, tail, head, less, telnet u.c.). Failu ievada un izvada ātrdarbības uzlabošana, buferi., ņemot vērā sistēmas arhitektūru. [PD2] Praktiskais darbs #2 - failu kopēšana. |
|
24.09.2019. |
[L03] Failu sistēma
Faila izmēra noteikšana. Failu saites, stingrās un vājās (hard links, soft links). Failu glabāšana un pieeja operētājsistēmā. i-node jēdziens. Sistēmas izsaukums stat(). Direktoriju struktūra. Izsaukumi opendir(), readdir() un closedir(). [PD3] Praktiskais darbs #3 - direktoriju koka apstaigāšana. |
Mājas darba MD1 nodošanas termiņš. Uzdots MD3 mājas darbs - direktoriju koka apstaigāšana. |
01.10.2019. |
[L04] Faila piekļuves tiesību režīmi pie open() un umask. Failu un i-node izsaukumi: chmod(), link(), unlink(), remove(), rename(), symlink(), readlink(), utime(), mkdir(), rmdir(), chdir(), getcwd(). Programma rakstīšanai log failā. Log faili. Ekskluzīva rakstīšana ar open(...O_SYNC) un fcntl() metodēm. [PD4] Praktiskais darbs #4 - programmas analīze.
|
|
08.10.2019. |
[L05] Atmiņas arhitektūra. Virtuālā atmiņa. TEXT, DATA, HEAP un STACK segmenti. Koplietošanas atmiņa starp procesiem. Procedūru izsaukumi. Parametru nodošana caur steku. Steka satura analīze un piekļuve stekam. [PD_A] Praktiskajos darbos apskatīsim MD1. |
Mājas darba MD3 nodošanas termiņš.
|
15.10.2019. |
[L06] Atkārtojums par virtuālo atmiņu un procesa TEXT,DATA, HEAP un STACK segmentiem. Virtuālās atmiņas lapas. Page fault un segmentation fault. Atmiņas aizsardzība. setjmp() un longjmp().
[PD5] Praktiskais darbs #5 - setjmp(),longjmp() un taimera signāls. |
Uzdots MD4 mājas darbs - atmiņas rezervācijas funkciju salīdzinājums. |
22.10.2019 |
[KD1] Vidus semestra kontroldarbs. |
|
29.10.2019. |
[L07] Dinamiskā atmiņas izdalīšana. Heap, malloc() un free(). Dienesta informācija pie atmiņas izdalīšanas un atbrīvošanas. Brīvās atmiņas saraksti. Prasības malloc() un free() veiktspējai.
[PD6] Praktiskais darbs #6 - atmiņas rezervācija. |
|
05.11.2019. |
[L08] Atmiņas fragmentācija. Atmiņas rezervēšanas (allocation) algoritmi, kas darbojas uz atmiņas fragmentiem. Atmiņas 'spaiņi'. [PD8] Praktiskais darbs #8 - vienkāršs atmiņas alokators fiksēta izmēra objektiem. |
Mājas darba MD4 nodošanas termiņš. |
12.11.2019. |
[L09] : Linux atkļūdošanas rīki un to lietošana. [PD_D] Izmēģināt atkļūdošanas rīkus. Plānot MD5 grupas. Sākt gatavoties Kursa projektam! |
Uzdots MD5 - atmiņas fragmentācijas algoritmu novērtējums (grupās) Domāt kursa projekta tēmas! |
19.11.2019. |
[L10] Daudz-uzdevumu vide. Procesi un procesu kontrole. Pavedieni (threads). Kooperējošies procesi un preemptīvā daudz-uzdevumu metode. Komanda ps. getpid() un getppid(). fork(), exec(), wait(). system(). [PD9] Praktiskais darbs #9: Programma kas taisa N pavedienus, kur katrs izdrukā M burtus. (Jāprot, bet nav jāiesūta) +Izvēles (nav jāiesūta, vai e-pastā): Praktiskais darbs #9.1 - steka satura analīze un piekļuve stekam. |
Mājas darba MD5 grupu izveidošanas termiņš. Apspriežam kursa projekta tēmas Katra grupa: lūdzu atsūtiet vienu e-pastu ar paredzamajiem dalībniekiem! |
26.11.2019 |
[L11] 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. 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 "#project"!
|
Eksāmena projekts:
|
03.12.2019. |
[L12] Signāli. Alarm serviss un signāls. Diskusija par komunikācijas protokolu izstrādi.
|
Termiņš: Kursa projekts: spēles noteikumi+uzmetums protokolam GoogleDoc dokumentā. |
10.12.2019. |
[L13] Pavedieni. POSIX pavedieni. Mutex. Datu skriešanās (data race condition). Strupceļš (deadlock). Ieskatam servera/klienta komunikācijā PD11, bet nav jānodod. [PD_KP2] Darbs pie kursa projekta]. |
Termiņš: Spēles protokola gala versija |
17.12.2019. |
Kursa kopsavilkums. [PD_KP2] Darbs pie kursa projekta. |
|
23.12.2019. |
Ziemassvētku un Jaungada brīvdienas |
|
14.01.2020. |
[EX] Eksāmens 14:30 312. telpā.
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! |
Iesniegt eksāmena/projekta failus un aprakstu E-studijās |
Uzdevumi
Mājas darbi
- MD0: Izlasīt kodēšanas stila dokumentus.
- MD1: Ģimenes koka ģenerēšanas programma.
- MD2 - nav uzdots.
- 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