LU-LSP-b
Īssaites: Kalendārs | Uzdevumi | Resursi | Šodiena: 04.11.25 : Rītdiena: 5.11.25 (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)
 - Krišjānis Nesenbergs
 
 
- 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 | |
|---|---|---|---|
TBD8:30  | 
 Unix un Linux operētājsistēmu pamatkoncepcijas. Linux sistēmprogrammētaja rīki (shell, gcc, make, manpages u.c.).  | 
 
  | |
TBD15:00  | 
 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 
  | 
 
  | |
TBD17:00  | 
 
 Resursi 
  | 
 
  | |
TBD8: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.  | 
 
  | |
TBD15:00  | 
 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().  | 
 
  | |
TBD17:00  | 
 Failu kopēšana.  | 
 
  | |
TBD8: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.  | 
 
  | |
TBD15:00  | 
 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.  | 
 
  | |
TBD17:00  | 
 Direktoriju koka apstaigāšana.  | 
 
  | |
TBD8:30  | 
 Virtuālās atmiņas lapas. Page fault un segmentation fault. Atmiņas aizsardzība. setjmp() un longjmp().  | 
 
  | |
TBD15:00  | 
 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.  | 
 
  | |
TBD17:00  | 
 Programmas analīze.  | 
 
  | |
TBD8:30  | 
 Atmiņas fragmentācija. Atmiņas rezervēšanas (allocation) algoritmi, kas darbojas uz atmiņas fragmentiem. Atmiņas 'spaiņi'.  | 
 
  | |
TBD15:00  | 
 KD1 kontroldarbs. Programmēšanas uzdevums pie datora, izmantojot apgūto vielu.  | 
 
  | |
TBD17:00  | 
 Kontroldarba analīze.  | 
 
  | |
TBD8:30  | 
 Linux atkļūdošanas rīki un to lietošana.  | 
 
  | |
TBD15:00  | 
 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().  | 
 
  | |
TBD17:00  | 
 Atkļūdošanas rīki.  | 
 
  | |
TBD8: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. Faili. Pipes. Koplietošanas atmiņa. Komunikācija starp nesaistītiem procesiem. Sockets abstrakcija komunikācijai. 
  | 
 
  | |
TBD15:00  | 
 Pavedieni. POSIX pavedieni. Mutex. Datu skriešanās (data race condition). Strupceļš (deadlock). Resursi  | 
 
  | |
TBD17:00  | 
 Programma kas taisa N pavedienus, kur katrs izdrukā M burtus.  | 
 
  | |
TBD15:00  | 
 Sockets Sockets abstrakcija komunikācijai. Klienta un servera arhitektūra. Iteratīvie un paralēlie serveri. 
 
 TBD: Ieskatam servera/klienta komunikācijā PD11, bet nav jānodod. 
  | 
 
  | |
TBD17:00  | 
 PD_Jmp setjmp(),longjmp() un taimera signāls. 
 
 Darbs pie kursa projekta. Spēles izvēle un specifikācija. 
  | 
 
  | |
TBD8:30  | 
 Signāli. Alarm serviss un signāls.  | 
 
  | |
TBD15:00  | 
 PD_Net Starpprocesu komunikācija tīklā. 
 
 Darbs pie kursa projekta. Komunikāciju protokola izstrāde. 
  | 
 
  | |
TBD17:00  | 
 Tekstuālā lietotāja saskarne. Ncurses bibliotēka. Resursi  | 
 
  | |
TBD8:30  | 
 Programmas, kas izpildās fonā un ilgtermiņā. Rezidenta programmas. Init.d. Upstart. Systemd. Sesijas identifikators.  | 
 
  | |
TBD15:00  | 
 Grafiskā lietotāja saskarne. OpenGL. X-server.  | 
 
  | |
TBD17:00  | 
 Darbs pie kursa projekta.  | 
 
  | |
TBD8:30  | 
 Atbildes uz studentu jautājumiem  | 
 
  | |
TBD15:00  | 
 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! 
  | 
 
  | |
TBD17:00  | 
 Eksāmena turpinājums  | 
 
  | |
xx-xx14.05.2022 | 
 Eksāmens 12.05.2021 15:00 - pēdējais termiņš. 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
 - Linux Timeline - Linux distributīvu vēstures diagramma.