LU-LSP-b

From DiLab
Revision as of 08:21, 28 September 2017 by Krisjanis (talk | contribs) (22.11.2016.)
Jump to: navigation, search

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)
  • Asistents: Krišjānis Nesenbergs (epasts: vards.uzvards @ gmail.com)
  • Vēstkopa komunikācijai par kursa aktualitātēm, uzdevumiem, termiņiem un problēmām:
  • Vērtējums = 15% praktiskie darbi, 25% mājas darbi, 10% dalība klasē, 20% KD1 un 30% KD2(eksāmens).


Praktisko un mājas darbu iesniegšana

  • Mājas darbus iesniegt e-studijās.
  • 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!), 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

12.09.2017.

[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.

Slaidi L00

[PD0] Praktiskais darbs #0:


Uzdots MD0 mājas darbs - programmēšanas stils - izlasīt un ņemt vērā turpmākajos darbos.

19.09.2017.

[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

Slaidi L01

[PD1] Praktiskais darbs #1 - darbs ar tekstu.

Uzdots MD1 mājas darbs - dzimtas koks.

26.09.2017.

[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.

Slaidi L02


[PD2] Praktiskais darbs #2 - failu kopēšana.

03.10.2017.

[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.

TODO

====== Zemāk tiks precizēts ====== ==== TODO ====

11.10.2016.

[L04] 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().

Lekcijas piezīmes

[PD4] Praktiskais darbs #4.


18.10.2016.

[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ņš.

25.10.2016.

[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.

01.11.2016.

[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() in free() veiktspējai.


[PD6] Praktiskais darbs #6 - atmiņas rezervācija.


08.11.2016.

[L08] Atmiņas fragmentācija. Atmiņas rezervēšanas (allocation) algoritmi, kas darbojas uz atmiņas fragmentiem.

[PD8] Praktiskais darbs #8 - vienkāršs atmiņas alokators fiksēta izmēra objektiem.


Mājas darba MD4 nodošanas termiņš.

15.11.2016.

[KD1] Vidus semestra kontroldarbs.

[L09] Atkļūdošana: Linux rīki un to lietošana.

[PD_D] Izmēģināt atkļūdošanas rīkus. Plānot MD5 grupas!

Uzdots MD5 - atmiņas fragmentācijas algoritmu novērtējums (grupās)

22.11.2016.

[L10] 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().

[PD9] Praktiskais darbs #9: Programma kas taisa N pavedienus, kur katrs izdrukā M burtus.

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ņš.

Katra grupa: lūdzu atsūtiet vienu e-pastu ar paredzamajiem dalībniekiem!

29.11.2016.

Procesa ielādēšana, uzsākšanās un pieci veidi kā process var beigties. exit() un _exit().


Klienta un servera arhitektūra. Sockets. Komunikācija starp nesaistītiem procesiem.


Praktiskais darbs #10 - starpprocesu komunikācija.

Kursa projekta aktualizācija.

Mājas darba MD5 nodošanas termiņš.

06.12.2016.

Serveri, iteratīvie un paralēlie. Klienta programmatūra un tas īpašības.

Darbs pie kursa projekta.

Daudzlietotāju sistēmas (spēles) arhitektūra).


Termiņš: Kursa projekts: spēles noteikumi, GoogleDoc dokumentā.

13.12.2016.

Signāli. Alarm serviss un signāls. Diskusija par komunikācijas protokolu izstrādi.

Pavedieni. POSIX pavedieni. Mutex. Datu skriešanās (data race condition). Strupceļš (deadlock).

Darbs pie kursa projekta.

Termiņš: Protokola Alfa versija

20.12.2016.

Kursa kopsavilkums.

Darbs pie kursa projekta.

Termiņš: Protokola Beta versija

xx.12.2016. - xx.01.2017.

Ziemassvētku un Jaungada brīvdienas

 

24.01.2017.

Eksāmens 14:30 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
  • "Building Embedded Linux Systems" O'Reilly Media, 2008, ISBN 0596529686

Saites

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

Atziņas