Difference between revisions of "LU-LSP-b"

From DiLab
Jump to: navigation, search
(Kalendārs)
Line 45: Line 45:
|- style='vertical-align: top;'
|- style='vertical-align: top;'
|
|
====08.02.21====
====21.02.08====
08:30
08:30
|
|
Line 51: Line 51:
|<big>'''Ievads kursā'''</big>
|<big>'''Ievads kursā'''</big>
|}
|}
* [https://www.dropbox.com/s/2c87i9k0vc3mthr/L00_Ievads.pdf?raw=1 Slaidi]




Unix un Linux operētājsistēmu pamatkoncepcijas un vēsture. Linux sistēmprogrammētaja rīki (shell, gcc, make, manpages u.c.)
Unix un Linux operētājsistēmu pamatkoncepcijas. Linux sistēmprogrammētaja rīki (shell, gcc, make, manpages u.c.).


|
Vispārīgs pārskats par valodu C.
* [

[[LU-LSP-b:MD1 | MD1]] '''MD0: Programmēšanas stils

MD_Koks: Dzimtas koks.''']

|- style='vertical-align: top;'
|
====21.02.10====
15:00
|
{| width='100%' style='background-color:#ddd;'
|<big>'''Programmēšanas valoda C'''</big>
|}


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.


|
|
* '''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;'
|
|
====21.02.10====
...
17:00
|
|
{| width='100%' style='background-color:#ddd;'
|<big>'''PD'''</big>
|}


|
PD_Intro: * Iekārtot darba vidi (linux, teksta redaktors, kompilators) * Izveidot un pašiem nokompilēt Hello world"" C valodā * Iepazīties ar UNIX čaulas komandām un uzdot jautājumus par neskaidrībām. * Versiju kontroles sistēmas github pamati.""

|- style='vertical-align: top;'
|- style='vertical-align: top;'
|
|
====29.04.21====
====21.02.15====
08:30
|
{| width='100%' style='background-color:#ddd;'
|<big>'''Darbs ar failiem'''</big>
|}


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.

|

|- style='vertical-align: top;'
|
====21.02.17====
15:00
15:00
|
{| width='100%' style='background-color:#ddd;'
|<big>'''Failu sistēma'''</big>
|}


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

|

|- style='vertical-align: top;'
|
====21.02.17====
17:00
|
{| width='100%' style='background-color:#ddd;'
|<big>'''PD'''</big>
|}


|
PD_File: Failu kopēšana.

|- style='vertical-align: top;'
|
====21.02.22====
08:30
|
{| width='100%' style='background-color:#ddd;'
|<big>'''Atmiņas arhitektūra'''</big>
|}


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.

|
* [[[LU-LSP-b:MD3 | MD3]] '''MD_Dir: Direktoriju koka apstaigāšana.''']

|- style='vertical-align: top;'
|
====21.02.24====
15:00
|
{| width='100%' style='background-color:#ddd;'
|<big>'''Failu piekļuves režīmi'''</big>
|}


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.

|

|- style='vertical-align: top;'
|
====21.02.24====
17:00
|
{| width='100%' style='background-color:#ddd;'
|<big>'''PD'''</big>
|}


|
PD_Dir: Direktoriju koka apstaigāšana.

|- style='vertical-align: top;'
|
====21.03.01====
08:30
|
{| width='100%' style='background-color:#ddd;'
|<big>'''Virtuālā atmiņa'''</big>
|}


Virtuālās atmiņas lapas. Page fault un segmentation fault. Atmiņas aizsardzība. ''setjmp()'' un ''longjmp()''.

|
* [[[LU-LSP-b:MD4 | MD4]] '''MD_Mem: Atmiņas rezervācijas funkciju salīdzinājums.''']

|- style='vertical-align: top;'
|
====21.03.03====
15:00
|
{| width='100%' style='background-color:#ddd;'
|<big>'''Dinamiskā atmiņa'''</big>
|}


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.

|

|- style='vertical-align: top;'
|
====21.03.03====
17:00
|
{| width='100%' style='background-color:#ddd;'
|<big>'''PD'''</big>
|}


|
PD_An: Programmas analīze.

|- style='vertical-align: top;'
|
====21.03.08====
08:30
|
{| width='100%' style='background-color:#ddd;'
|<big>'''Atmiņas fragmentācija'''</big>
|}


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

|
* [[[LU-LSP-b:MD5 | MD5]] '''MD_Frag: Atmiņas fragmentācijas algoritmu novērtējums ('''grupās''')''']

|- style='vertical-align: top;'
|
====21.03.10====
15:00
|
{| width='100%' style='background-color:#ddd;'
|<big>'''KD1'''</big>
|}


KD1 kontroldarbs

|

|- style='vertical-align: top;'
|
====21.03.10====
17:00
|
{| width='100%' style='background-color:#ddd;'
|<big>'''PD'''</big>
|}


|
PD_KD: Kontroldarba analīze.

|- style='vertical-align: top;'
|
====21.03.15====
08:30
|
{| width='100%' style='background-color:#ddd;'
|<big>'''Atkļūdošana'''</big>
|}


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

|
* '''MP_Game: Kursa projekta tēmas (spēles) izvēle'''

|- style='vertical-align: top;'
|
====21.03.17====
15:00
|
{| width='100%' style='background-color:#ddd;'
|<big>'''Daudz-uzdevumu vide'''</big>
|}


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

|

|- style='vertical-align: top;'
|
====21.03.17====
17:00
|
{| width='100%' style='background-color:#ddd;'
|<big>'''PD'''</big>
|}


|
PD_Dbg: Atkļūdošanas rīki.

|- style='vertical-align: top;'
|
====21.03.22====
08:30
|
{| width='100%' style='background-color:#ddd;'
|<big>'''Procesa dzīves cikls'''</big>
|}


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

|
* '''MP_Spec: Spēles noteikumu specifikācija'''

|- style='vertical-align: top;'
|
====21.03.24====
15:00
|
{| width='100%' style='background-color:#ddd;'
|<big>'''Pavedieni'''</big>
|}


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

|

|- style='vertical-align: top;'
|
====21.03.24====
17:00
|
{| width='100%' style='background-color:#ddd;'
|<big>'''PD'''</big>
|}


|
PD_Thread: Programma kas taisa N pavedienus, kur katrs izdrukā M burtus.

|- style='vertical-align: top;'
|
====21.03.29====
08:30
|
{| width='100%' style='background-color:#ddd;'
|<big>'''Starpprocesu komunikācija.'''</big>
|}


Starpprocesu komunikācija. Faili. Pipes. Koplietošanas atmiņa. Signāli. Alarm serviss un signāls. Sockets.

|
* '''MP_Prot1: Spēles komunikāciju protokols, 1. versija'''

|- style='vertical-align: top;'
|
====21.03.31====
15:00
|
{| width='100%' style='background-color:#ddd;'
|<big>'''Sockets'''</big>
|}


Sockets abstrakcija komunikācijai. Klienta un servera arhitektūra. Iteratīvie un paralēlie serveri. Komunikācija starp nesaistītiem procesiem.

|

|- style='vertical-align: top;'
|
====21.03.31====
17:00
|
{| width='100%' style='background-color:#ddd;'
|<big>'''PD'''</big>
|}


|
PD_Jmp: ''setjmp()'',''longjmp()'' un taimera signāls.

|- style='vertical-align: top;'
|
====21.04.07====
15:00
|
{| width='100%' style='background-color:#ddd;'
|<big>'''PD'''</big>
|}


|
PD_PSpec: Darbs pie kursa projekta. Spēles izvēle un specifikācija.

|- style='vertical-align: top;'
|
====21.04.07====
17:00
|
{| width='100%' style='background-color:#ddd;'
|<big>'''Servera klienta arhitektūra'''</big>
|}


TBD: Ieskatam servera/klienta komunikācijā [http://selavo.lv/wiki/index.php/LU-LSP-b13:L11 PD11], bet nav jānodod.

|
* '''MP_Prot2: Spēles komunikāciju protokols, gala versija'''

|- style='vertical-align: top;'
|
====21.04.12====
08:30
|
{| width='100%' style='background-color:#ddd;'
|<big>'''PD'''</big>
|}


|
PD_Net: Starpprocesu komunikācija tīklā.

|- style='vertical-align: top;'
|
====21.04.14====
15:00
|
{| width='100%' style='background-color:#ddd;'
|<big>'''TBD'''</big>
|}


TBD

|

|- style='vertical-align: top;'
|
====21.04.14====
17:00
|
{| width='100%' style='background-color:#ddd;'
|<big>'''Tekstuālā lietotāja saskarne.'''</big>
|}


Tekstuālā lietotāja saskarne. Ncurses bibliotēka.

|

|- style='vertical-align: top;'
|
====21.04.19====
08:30
|
{| width='100%' style='background-color:#ddd;'
|<big>'''PD'''</big>
|}


|
PD_PProt: Darbs pie kursa projekta. Komunikāciju protokola izstrāde.

|- style='vertical-align: top;'
|
====21.04.21====
15:00
|
{| width='100%' style='background-color:#ddd;'
|<big>'''TBD'''</big>
|}


TBD

|

|- style='vertical-align: top;'
|
====21.04.21====
17:00
|
{| width='100%' style='background-color:#ddd;'
|<big>'''Grafiskā lietotāja saskarne'''</big>
|}


Grafiskā lietotāja saskarne. OpenGL. X-server.

|

|- style='vertical-align: top;'
|
====21.04.26====
08:30
|
{| width='100%' style='background-color:#ddd;'
|<big>'''PD'''</big>
|}


|
PD_KP: Darbs pie kursa projekta.

|- style='vertical-align: top;'
|
====21.04.28====
15:00
|
{| width='100%' style='background-color:#ddd;'
|<big>'''Konsultācija'''</big>
|}


Atbildes uz studentu jautājumiem

|

|- style='vertical-align: top;'
|
====21.04.28====
17:00
|
|
{| width='100%' style='background-color:#ddd;'
{| width='100%' style='background-color:#ddd;'
Line 75: Line 529:




Eksāmena forma: projektu demonstrācija un prezentācija (darbība, pirmkods, diskusijas).
Eksāmens, projektu demonstrācijas 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!

|

|- style='vertical-align: top;'
|
====21.05.03====
14
|
{| width='100%' style='background-color:#ddd;'
|<big>'''Sesija - vērtējumu izlikšana'''</big>
|}


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'''


|- style='vertical-align: top;'
|- style='vertical-align: top;'
|
|}
|}



Revision as of 00:07, 6 February 2021

Īssaites: Kalendārs | Uzdevumi | Resursi | Šodiena: 25.11.20 : Rītdiena: 26.11.20 (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, 25% mājas darbi, 10% dalība klasē, 20% KD1 un 30% 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 (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

21.02.08

08:30

Ievads kursā


Unix un Linux operētājsistēmu pamatkoncepcijas. Linux sistēmprogrammētaja rīki (shell, gcc, make, manpages u.c.).

  • [

MD1 MD0: Programmēšanas stils

MD_Koks: Dzimtas koks.]

21.02.10

15:00

Programmēšanas valoda C


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.

21.02.10

17:00

PD


PD_Intro: * Iekārtot darba vidi (linux, teksta redaktors, kompilators) * Izveidot un pašiem nokompilēt Hello world"" C valodā * Iepazīties ar UNIX čaulas komandām un uzdot jautājumus par neskaidrībām. * Versiju kontroles sistēmas github pamati.""

21.02.15

08: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.

21.02.17

15:00

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

21.02.17

17:00

PD


PD_File: Failu kopēšana.

21.02.22

08: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.

  • [[[LU-LSP-b:MD3 | MD3]] MD_Dir: Direktoriju koka apstaigāšana.]

21.02.24

15:00

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.

21.02.24

17:00

PD


PD_Dir: Direktoriju koka apstaigāšana.

21.03.01

08:30

Virtuālā atmiņa


Virtuālās atmiņas lapas. Page fault un segmentation fault. Atmiņas aizsardzība. setjmp() un longjmp().

  • [[[LU-LSP-b:MD4 | MD4]] MD_Mem: Atmiņas rezervācijas funkciju salīdzinājums.]

21.03.03

15:00

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.

21.03.03

17:00

PD


PD_An: Programmas analīze.

21.03.08

08: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'.

  • [[[LU-LSP-b:MD5 | MD5]] MD_Frag: Atmiņas fragmentācijas algoritmu novērtējums (grupās)]

21.03.10

15:00

KD1


KD1 kontroldarbs

21.03.10

17:00

PD


PD_KD: Kontroldarba analīze.

21.03.15

08:30

Atkļūdošana


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

  • MP_Game: Kursa projekta tēmas (spēles) izvēle

21.03.17

15:00

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

21.03.17

17:00

PD


PD_Dbg: Atkļūdošanas rīki.

21.03.22

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

  • MP_Spec: Spēles noteikumu specifikācija

21.03.24

15:00

Pavedieni


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

21.03.24

17:00

PD


PD_Thread: Programma kas taisa N pavedienus, kur katrs izdrukā M burtus.

21.03.29

08:30

Starpprocesu komunikācija.


Starpprocesu komunikācija. Faili. Pipes. Koplietošanas atmiņa. Signāli. Alarm serviss un signāls. Sockets.

  • MP_Prot1: Spēles komunikāciju protokols, 1. versija

21.03.31

15:00

Sockets


Sockets abstrakcija komunikācijai. Klienta un servera arhitektūra. Iteratīvie un paralēlie serveri. Komunikācija starp nesaistītiem procesiem.

21.03.31

17:00

PD


PD_Jmp: setjmp(),longjmp() un taimera signāls.

21.04.07

15:00

PD


PD_PSpec: Darbs pie kursa projekta. Spēles izvēle un specifikācija.

21.04.07

17:00

Servera klienta arhitektūra


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

  • MP_Prot2: Spēles komunikāciju protokols, gala versija

21.04.12

08:30

PD


PD_Net: Starpprocesu komunikācija tīklā.

21.04.14

15:00

TBD


TBD

21.04.14

17:00

Tekstuālā lietotāja saskarne.


Tekstuālā lietotāja saskarne. Ncurses bibliotēka.

21.04.19

08:30

PD


PD_PProt: Darbs pie kursa projekta. Komunikāciju protokola izstrāde.

21.04.21

15:00

TBD


TBD

21.04.21

17:00

Grafiskā lietotāja saskarne


Grafiskā lietotāja saskarne. OpenGL. X-server.

21.04.26

08:30

PD


PD_KP: Darbs pie kursa projekta.

21.04.28

15:00

Konsultācija


Atbildes uz studentu jautājumiem

21.04.28

17:00

Eksāmens


Eksāmens, projektu demonstrācijas 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!

21.05.03

14

Sesija - vērtējumu izlikšana


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