Difference between revisions of "LU-LSP-b"

From DiLab
Jump to: navigation, search
(Kalendārs)
(Kalendārs)
Line 43: Line 43:
 
=Kalendārs=
 
=Kalendārs=
  
{| border=1 cellspacing=0 cellpadding=4 style = ""border-color: #ddd;""
+
{| border=1 cellspacing=0 cellpadding=4 style = 'border-color: #ddd;'
 
|-
 
|-
 
! Datums
 
! Datums
 
! Tēma, saturs
 
! Tēma, saturs
 
! Uzdevumi
 
! Uzdevumi
|-
+
|- style='vertical-align: top;'
 
|
 
|
 
====05.02.20====
 
====05.02.20====
Line 66: Line 66:
 
* '''Uzdots: [[LU-LSP-b:MD0 | MD0]] mājas darbs - programmēšanas stils - izlasīt un ņemt vērā turpmākajos darbos.'''
 
* '''Uzdots: [[LU-LSP-b:MD0 | MD0]] mājas darbs - programmēšanas stils - izlasīt un ņemt vērā turpmākajos darbos.'''
  
|- style=""vertical-align: top;""
+
|- style='vertical-align: top;'
 
|
 
|
 
====06.02.20====
 
====06.02.20====
Line 85: Line 85:
 
|
 
|
  
|- style=""vertical-align: top;""
+
|- style='vertical-align: top;'
 
|
 
|
 
====06.02.20====
 
====06.02.20====
Line 101: Line 101:
 
* '''Uzdots: [[LU-LSP-b:MD1 | MD1]] mājas darbs - dzimtas koks.'''
 
* '''Uzdots: [[LU-LSP-b:MD1 | MD1]] mājas darbs - dzimtas koks.'''
  
|- style=""vertical-align: top;""
+
|- style='vertical-align: top;'
 
|
 
|
 
====12.02.20====
 
====12.02.20====
Line 115: Line 115:
 
|
 
|
  
|- style=""vertical-align: top;""
+
|- style='vertical-align: top;'
 
|
 
|
 
====13.02.20====
 
====13.02.20====
Line 130: Line 130:
 
|
 
|
  
|- style=""vertical-align: top;""
+
|- style='vertical-align: top;'
 
|
 
|
 
====13.02.20====
 
====13.02.20====
Line 144: Line 144:
 
|
 
|
  
|- style=""vertical-align: top;""
+
|- style='vertical-align: top;'
 
|
 
|
 
====19.02.20====
 
====19.02.20====
Line 160: Line 160:
 
* '''Uzdots: [[LU-LSP-b:MD3 | MD3]] mājas darbs - direktoriju koka apstaigāšana.'''
 
* '''Uzdots: [[LU-LSP-b:MD3 | MD3]] mājas darbs - direktoriju koka apstaigāšana.'''
  
|- style=""vertical-align: top;""
+
|- style='vertical-align: top;'
 
|
 
|
 
====20.02.20====
 
====20.02.20====
Line 175: Line 175:
 
* '''Termiņš: [[LU-LSP-b:MD1 | MD1]]'''
 
* '''Termiņš: [[LU-LSP-b:MD1 | MD1]]'''
  
|- style=""vertical-align: top;""
+
|- style='vertical-align: top;'
 
|
 
|
 
====20.02.20====
 
====20.02.20====
Line 190: Line 190:
 
|
 
|
  
|- style=""vertical-align: top;""
+
|- style='vertical-align: top;'
 
|
 
|
 
====26.02.20====
 
====26.02.20====
Line 204: Line 204:
 
|
 
|
  
|- style=""vertical-align: top;""
+
|- style='vertical-align: top;'
 
|
 
|
 
====27.02.20====
 
====27.02.20====
Line 219: Line 219:
 
|
 
|
  
|- style=""vertical-align: top;""
+
|- style='vertical-align: top;'
 
|
 
|
 
====27.02.20====
 
====27.02.20====
Line 234: Line 234:
 
* '''Termiņš: [[LU-LSP-b:MD3 | MD3]]'''
 
* '''Termiņš: [[LU-LSP-b:MD3 | MD3]]'''
  
|- style=""vertical-align: top;""
+
|- style='vertical-align: top;'
 
|
 
|
 
====04.03.20====
 
====04.03.20====
Line 250: Line 250:
 
* '''Uzdots: [[LU-LSP-b:MD4 | MD4]] mājas darbs - atmiņas rezervācijas funkciju salīdzinājums.'''
 
* '''Uzdots: [[LU-LSP-b:MD4 | MD4]] mājas darbs - atmiņas rezervācijas funkciju salīdzinājums.'''
  
|- style=""vertical-align: top;""
+
|- style='vertical-align: top;'
 
|
 
|
 
====05.03.20====
 
====05.03.20====
Line 265: Line 265:
 
* '''Kontroldarbs KD1'''
 
* '''Kontroldarbs KD1'''
  
|- style=""vertical-align: top;""
+
|- style='vertical-align: top;'
 
|
 
|
 
====05.03.20====
 
====05.03.20====
Line 279: Line 279:
 
|
 
|
  
|- style=""vertical-align: top;""
+
|- style='vertical-align: top;'
 
|
 
|
 
====11.03.20====
 
====11.03.20====
Line 294: Line 294:
 
|
 
|
  
|- style=""vertical-align: top;""
+
|- style='vertical-align: top;'
 
|
 
|
 
====12.03.20====
 
====12.03.20====
Line 308: Line 308:
 
|
 
|
  
|- style=""vertical-align: top;""
+
|- style='vertical-align: top;'
 
|
 
|
 
====12.03.20====
 
====12.03.20====
Line 324: Line 324:
 
* '''Termiņš: [[LU-LSP-b:MD4 | MD4]]'''
 
* '''Termiņš: [[LU-LSP-b:MD4 | MD4]]'''
  
|- style=""vertical-align: top;""
+
|- style='vertical-align: top;'
 
|
 
|
 
====18.03.20====
 
====18.03.20====
Line 338: Line 338:
 
|
 
|
  
|- style=""vertical-align: top;""
+
|- style='vertical-align: top;'
 
|
 
|
 
====19.03.20====
 
====19.03.20====
Line 354: Line 354:
 
* '''Uzdots: [[LU-LSP-b:MD5 | MD5]] - atmiņas fragmentācijas algoritmu novērtējums ('''grupās''')'''
 
* '''Uzdots: [[LU-LSP-b:MD5 | MD5]] - atmiņas fragmentācijas algoritmu novērtējums ('''grupās''')'''
  
|- style=""vertical-align: top;""
+
|- style='vertical-align: top;'
 
|
 
|
 
====19.03.20====
 
====19.03.20====
Line 369: Line 369:
 
* '''Domāt kursa projekta tēmas!'''
 
* '''Domāt kursa projekta tēmas!'''
  
|- style=""vertical-align: top;""
+
|- style='vertical-align: top;'
 
|
 
|
 
====25.03.20====
 
====25.03.20====
Line 387: Line 387:
 
Katra grupa: lūdzu atsūtiet vienu e-pastu ar paredzamajiem dalībniekiem!'''
 
Katra grupa: lūdzu atsūtiet vienu e-pastu ar paredzamajiem dalībniekiem!'''
  
|- style=""vertical-align: top;""
+
|- style='vertical-align: top;'
 
|
 
|
 
====26.03.20====
 
====26.03.20====
Line 402: Line 402:
 
* '''Apspriežam kursa projekta tēmas'''
 
* '''Apspriežam kursa projekta tēmas'''
  
|- style=""vertical-align: top;""
+
|- style='vertical-align: top;'
 
|
 
|
 
====26.03.20====
 
====26.03.20====
Line 430: Line 430:
 
* '''Sākam diskutēt par protokolu''' - nākamajā lekcijā jānonāk līdz pirmajai protokola versijai!'''
 
* '''Sākam diskutēt par protokolu''' - nākamajā lekcijā jānonāk līdz pirmajai protokola versijai!'''
  
|- style=""vertical-align: top;""
+
|- style='vertical-align: top;'
 
|
 
|
 
====01.04.20====
 
====01.04.20====
Line 447: Line 447:
 
|
 
|
  
|- style=""vertical-align: top;""
+
|- style='vertical-align: top;'
 
|
 
|
 
====02.04.20====
 
====02.04.20====
Line 462: Line 462:
 
* '''Termiņš: Kursa projekta spēles noteikumi+uzmetums protokolam GoogleDoc dokumentā.'''
 
* '''Termiņš: Kursa projekta spēles noteikumi+uzmetums protokolam GoogleDoc dokumentā.'''
  
|- style=""vertical-align: top;""
+
|- style='vertical-align: top;'
 
|
 
|
 
====02.04.20====
 
====02.04.20====
Line 477: Line 477:
 
|
 
|
  
|- style=""vertical-align: top;""
+
|- style='vertical-align: top;'
 
|
 
|
 
====15.04.20====
 
====15.04.20====
Line 494: Line 494:
 
* '''Termiņš: Spēles protokola gala versija'''
 
* '''Termiņš: Spēles protokola gala versija'''
  
|- style=""vertical-align: top;""
+
|- style='vertical-align: top;'
 
|
 
|
 
====16.04.20====
 
====16.04.20====
Line 506: Line 506:
 
|
 
|
  
|- style=""vertical-align: top;""
+
|- style='vertical-align: top;'
 
|
 
|
 
====16.04.20====
 
====16.04.20====
Line 520: Line 520:
 
|
 
|
  
|- style=""vertical-align: top;""
+
|- style='vertical-align: top;'
 
|
 
|
 
====xx.xx.xx====
 
====xx.xx.xx====
Line 537: Line 537:
 
* '''Iesniegt '''eksāmena/projekta failus un aprakstu''' E-studijās'''
 
* '''Iesniegt '''eksāmena/projekta failus un aprakstu''' E-studijās'''
  
|- style=""vertical-align: top;""
+
|- style='vertical-align: top;'
|
 
 
 
|
 
{| width='100%' style='background-color:#ddd;'
 
|<big>''''''</big>
 
|}
 
 
 
 
 
|
 
 
 
|- style=""vertical-align: top;""
 
|
 
 
 
|
 
{| width='100%' style='background-color:#ddd;'
 
|<big>''''''</big>
 
|}
 
 
 
 
 
|
 
 
 
|- style=""vertical-align: top;""
 
|
 
 
 
|
 
{| width='100%' style='background-color:#ddd;'
 
|<big>''''''</big>
 
|}
 
 
 
 
 
|
 
 
 
|- style=""vertical-align: top;""
 
|
 
 
 
|
 
{| width='100%' style='background-color:#ddd;'
 
|<big>''''''</big>
 
|}
 
 
 
 
 
|
 
 
 
|- style=""vertical-align: top;""
 
|
 
 
 
|
 
{| width='100%' style='background-color:#ddd;'
 
|<big>''''''</big>
 
|}
 
 
 
 
 
|
 
 
 
|- style=""vertical-align: top;""
 
|
 
 
 
|
 
{| width='100%' style='background-color:#ddd;'
 
|<big>''''''</big>
 
|}
 
 
 
 
 
|
 
 
 
|- style=""vertical-align: top;""
 
|
 
 
 
|
 
{| width='100%' style='background-color:#ddd;'
 
|<big>''''''</big>
 
|}
 
 
 
 
 
|
 
 
 
|- style=""vertical-align: top;""
 
|
 
 
 
|
 
{| width='100%' style='background-color:#ddd;'
 
|<big>''''''</big>
 
|}
 
 
 
 
 
|
 
 
 
|- style=""vertical-align: top;""
 
|
 
 
 
|
 
{| width='100%' style='background-color:#ddd;'
 
|<big>''''''</big>
 
|}
 
 
 
 
 
|
 
 
 
|- style=""vertical-align: top;""
 
|
 
 
 
|
 
{| width='100%' style='background-color:#ddd;'
 
|<big>''''''</big>
 
|}
 
 
 
 
 
|
 
 
 
|- style=""vertical-align: top;""
 
|
 
 
 
|
 
{| width='100%' style='background-color:#ddd;'
 
|<big>''''''</big>
 
|}
 
 
 
 
 
|
 
 
 
|- style=""vertical-align: top;""
 
|
 
 
 
|
 
{| width='100%' style='background-color:#ddd;'
 
|<big>''''''</big>
 
|}
 
 
 
 
 
|
 
 
 
|- style=""vertical-align: top;""
 
|
 
 
 
|
 
{| width='100%' style='background-color:#ddd;'
 
|<big>''''''</big>
 
|}
 
 
 
 
 
|
 
 
 
|- style=""vertical-align: top;""
 
|
 
 
 
|
 
{| width='100%' style='background-color:#ddd;'
 
|<big>''''''</big>
 
|}
 
 
 
 
 
|
 
 
 
|- style=""vertical-align: top;""
 
|
 
 
 
|
 
{| width='100%' style='background-color:#ddd;'
 
|<big>''''''</big>
 
|}
 
 
 
 
 
|
 
 
 
|- style=""vertical-align: top;""
 
|
 
 
 
|
 
{| width='100%' style='background-color:#ddd;'
 
|<big>''''''</big>
 
|}
 
 
 
 
 
|
 
 
 
|- style=""vertical-align: top;""
 
|
 
 
 
|
 
{| width='100%' style='background-color:#ddd;'
 
|<big>''''''</big>
 
|}
 
 
 
 
 
|
 
 
 
|- style=""vertical-align: top;""
 
 
|}
 
|}
  

Revision as of 16:41, 20 February 2020

Īssaites: Kalendārs | Uzdevumi | Resursi | Šodiena: 29.03.20 (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ē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 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 attiecīgajā datumā 20:00
  • 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

05.02.20

08:30

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.

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

06.02.20

14:30

'


[PD0] Praktiskais darbs #0:

06.02.20

16:30

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.

12.02.20

08:30

'


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

13.02.20

14:30

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.

13.02.20

16:30

'


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

19.02.20

08:30

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

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

20.02.20

14:30

'


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

20.02.20

16:30

Failu piekļuves režīmi


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.

26.02.20

08:30

'


[PD4] Praktiskais darbs #4 - programmas analīze.

27.02.20

14:30

Atmiņas arhitektūra


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.

27.02.20

16:30

'


[PD_A] Praktiskajos darbos apskatīsim MD1.

04.03.20

08:30

Virtuālā atmiņa


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

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

05.03.20

14:30

KD1


[KD1] Vidus semestra kontroldarbs.

  • Kontroldarbs KD1

05.03.20

16:30

'


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

11.03.20

08:30

Dinamiskā atmiņa


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.

12.03.20

14:30
'


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

12.03.20

16:30
Atmiņas fragmentācija


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

18.03.20

08:30
'


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

19.03.20

14:30
Atkļūdošana


Linux atkļūdošanas rīki un to lietošana.

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

19.03.20

16:30
'


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

  • Domāt kursa projekta tēmas!

25.03.20

08:30
Daudz-uzdevumu vide


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

  • Mājas darba MD5 grupu izveidošanas termiņš.

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

26.03.20

14:30
'


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

  • Apspriežam kursa projekta tēmas

26.03.20

16: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. 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!

  • Izvēlētā kursa projekta noteikumu izstrāde
  • 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.

Eksāmena projekts:

  • Spēles izvēle un noteikumi Darbs pie [XX spēles noteikumu dokumenta].
  • Sākam diskutēt par protokolu - nākamajā lekcijā jānonāk līdz pirmajai protokola versijai!

01.04.20

08:30
Signāli


Signāli. Alarm serviss un signāls.

Diskusija par komunikācijas protokolu izstrādi.

02.04.20

14:30
'


[PD10] Praktiskais darbs #10 - starpprocesu komunikācija.

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

02.04.20

16:30
Pavedieni


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

15.04.20

08:30
'


Ieskatam servera/klienta komunikācijā PD11, bet nav jānodod.

[PD_KP2] Darbs pie kursa projekta.

  • Termiņš: Spēles protokola gala versija

16.04.20

14:30
Kursa kopsavilkums


16.04.20

16:30
'


[PD_KP2] Darbs pie kursa projekta.

xx.xx.xx

xx:xx
Eksāmens


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
  • "Building Embedded Linux Systems" O'Reilly Media, 2008, ISBN 0596529686

Programmētāja resursi

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

Āķīgi uzdevumi un pieredze

Atziņas