LU-LSP-b18

From DiLab
Jump to: navigation, search

Linux sistēmas programmēšana (LSP)

LU DF bakalaura studiju kurss DatZ3122, meklēt eStudijās.


  • Pasniedzējs: Krišjānis Nesenbergs (epasts: vards.uzvards @ gmail.com)
    • Kursa sākotnējais autors: Leo Seļāvo (epasts: vards.uzvards @ gmail.com)
  • 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

04.09.2018.

[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, kā arī pieteikties vēstkopai!

11.09.2018.

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

18.09.2018.

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


25.09.2018.

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

Slaidi L03

[PD3] Praktiskais darbs #3 - direktoriju koka apstaigāšana.

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

Uzdots MD3 mājas darbs - direktoriju koka apstaigāšana.

02.10.2018.

[VIESLEKCIJA] Dmitry G. Korzun, Ph.D, Adjunct Professor, Leading Research Scientist Petrozavodsk State University, Institute of Mathematics and Information Technology, Department of Computer Science "Edge-Centric Computing and Fog Computing (2h). Methods of involving and supporting local and remote devices for cooperative service construction and delivery."

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

Slaidi L04



09.10.2018.

[PD4] Praktiskais darbs #4 - programmas analīze. Iespēja strādāt pie MD3 - izņēmuma kārtā, termiņš ir vakarā pēc praktiskajiem darbiem 19:00

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


16.10.2018.

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

Slaidi L05

[PD_A] Praktiskajos darbos apskatīsim MD1.


23.10.2018.

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

Slaidi L06

[PD5] Praktiskais darbs #5 - setjmp(),longjmp() un taimera signāls.

Uzdots MD4 mājas darbs - atmiņas rezervācijas funkciju salīdzinājums.

30.11.2018

LEKCIJA NENOTIEK

06.11.2018.

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

Slaidi L07

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

13.11.2018.

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

Slaidi L08

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

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

20.11.2018.

[KD1] Vidus semestra kontroldarbs.

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

Slaidi L09

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

27.11.2018.

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

Slaidi L10

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

04.12.2018

====== LEKCIJA NENOTIEK ======

Pēc izvēles mājās vai datorklasē:

  • [PD10] Praktiskais darbs #10 - starpprocesu komunikācija.
  • Pabeigt izvēlētā kursa projekta noteikumus Google doc
  • Sākt darbu pie protokola formulēšanas - kādas ziņas Jūsuprāt nepieciešams sūtīt tīklā, lai programma pilnvērtīgi strādātu.
Termiņš izvēlētā kursa projekta noteikumiem Google doc

Mājas darba MD5 nodošanas termiņš. Sākam diskutēt par protokolu - nākamajā lekcijā būtu jānonāk līdz pirmajai protokola versijai!

11.12.2018.

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

Slaidi L11


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

Slaidi L12



Termiņš: Kursa projekts: spēles noteikumi+uzmetums protokolam GoogleDoc dokumentā.

18.12.2018.

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


L13 Slaidi.


[PD_KP2] Darbs pie kursa projekta.

Termiņš: Protokola gala versija Ieskatam servera/klienta komunikācijā neobligāts PD11, kas nav jānodod

==== xx.12.2018. - Ziemassvētku un Jaungada brīvdienas

 

15.01.2019.

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

 

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