LU-LSP-b
Linux sistēmas programmēšana (LSP)
LU DF bakalaura studiju kurss DatZ3101, meklēt eStudijās.
- Pasniedzējs: Leo Seļāvo (epasts: vards.uzvards @ gmail.com)
 - Asistents: Krišjānis Nesenbergs
 - 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
- Majas darbus iesniegt e-studijās.
 
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), rezultāts tiek samazināts par:
- 10% par ik dienu pirmo piecu dienu laikā pēc termiņa, un
 - 50% piecas vai vairāk dienas pēc termiņa.
 - Divas nedēļas pēc termiņa darbi vairs netiek pieņemti.
 
 
Kalendārs
| Datums, nedēļa | Kursa saturs | Uzdevumi | 
|---|---|---|
06.09.2016. | 
 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.) 
  | 
 Uzdots MD0 mājas darbs - programmēšanas stils - izlasīt un ņemt vērā turpmākajos darbos.  | 
13.09.2016. | 
 Vispārīgs pārskats par valodu C. Lasīt C valodas pamācību no Drexel universitātes.  | 
 Uzdots MD1 mājas darbs - dzimtas koks.  | 
20.09.2016. | 
Datu struktūras un algoritmi valodā C. | |
27.09.2016. | 
Darbs ar failiem; sistēmas izsaukumi faila ievadam un izvadam. Linux piedāvātās programmas darbam ar failu izvadu/ievadu (cat, tail, head, less, cp u.c.). Failu ievada un izvada ātrdarbība, ņemot vērā sistēmas arhitektūru. | |
04.10.2016. | 
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().
 Praktiskais darbs #3 - direktoriju koka apstaigāšana.  | 
 Mājas darba MD1 nodošanas termiņš.  | 
11.10.2016. | 
Programma rakstīšanai log failā. Log faili. Ekskluzīva rakstīšana ar open(...O_SYNC) un fcntl() metodēm. 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(). | 
 Uzdots MD3 mājas darbs - direktoriju koka apstaigāšana.  | 
18.10.2016. | 
 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. Praktiskajos darbos apskatīsim MD1.  | 
|
25.10.2016. | 
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().
 
  | 
 Mājas darba MD3 nodošanas termiņš.  | 
01.11.2016. | 
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() in free() veiktspējai.
 Praktiskais darbs #5 - setjmp(),longjmp() un taimera signāls. 
  | 
 Uzdots MD4 mājas darbs - atmiņas rezervācijas funkciju salīdzinājums.  | 
08.11.2016. | 
 Atmiņas fragmentācija. Atmiņas rezervēšanas (allocation) algoritmi, kas darbojas uz atmiņas fragmentiem. Praktiskais darbs #6 - atmiņas rezervācija. 
  | 
 Uzdots MD5 - atmiņas fragmentācijas algoritmu novērtējums  | 
15.11.2016. | 
 Vidus semestra kontroldarbs. Atkļūdošana: Linux rīki un to lietošana. Praktiskais darbs #8 - vienkāršs atmiņas alokators fiksēta izmēra objektiem.  | 
 Mājas darba MD4 nodošanas termiņš.  | 
22.11.2016. | 
 Daudz-uzdevumu vide. Procesi un procesu kontrole. Pavedieni. Kooperējošies procesi un preemptīvā daudz-uzdevumu metode. Komanda ps. getpid() un getppid(). fork(). Daudz-uzdevumu vide. wait() un exec(). system(). 
 Praktiskais darbs #10 - starpprocesu komunikācija.  | 
 Mājas darba MD5 nodošanas termiņš.  | 
29.11.2016. | 
Serveri, iteratīvie un paralēlie. Klienta programmatūra un tas īpašības. Signāli. Alarm serviss un signāls. Procesa ielādēšana, uzsākšanās un pieci veidi kā process var beigties. exit() un _exit(). | 
 Kursa projekta aktualizācija.  | 
06.12.2016. | 
Pavedieni. POSIX pavedieni. Mutex. Datu skriešanās (data race condition). Strupceļš (deadlock).
 Diskusija par komunikacijas protokolu izstrādi. Praktiskais darbs #9: Programma kas taisa N pavedienus, kur katrs izdrukā M burtus.  | 
 Termiņš: Kursa projekts: spēles noteikumi, GoogleDoc dokumentā.  | 
13.12.2016. | 
 Darbs pie kursa projekta.  | 
 Termiņš: Protokola Alfa versija  | 
20.12.2016. | 
 Kursa kopsavilkums.  | 
 Termiņš: Protokola Beta versija  | 
xx.12.2016. - xx.01.2017. | 
Ziemassvētku un Jaungada brīvdienas | 
 
  | 
xx.01.2016. | 
Eksāmens xx:xx 312. telpā.
 Eksāmena forma: projektu demonstrācija (darbība, pirmkods, diskusijas).  | 
 
  | 
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.
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
 
Saites
- Noderīgas Linux komandas
 - Bash by Example @ibm/developerworks
 - Intro to Linux kernel
 
- Programming in C: A Tutorial (by Brian W. Kernighan)
 - 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