LU-LSP-b: Difference between revisions

From DiLab
Jump to navigation Jump to search
Content deleted Content added
Line 46: Line 46:
|- style='vertical-align: top;'
|- style='vertical-align: top;'
|
|
====05.02.20====
====08.02.21====
08:30
08:30
|
|
Line 64: Line 64:
|- style='vertical-align: top;'
|- style='vertical-align: top;'
|
|
...
====06.02.20====
14:30
|
|
{| width='100%' style='background-color:#ddd;'
|<big>''' '''</big>
|}


[PD0] Praktiskais darbs #0:
* Iekārtot darba vidi (linux, teksta redaktors, kompilators)
* izveidot un pašiem nokompilēt ""Hello world"" C valodā
* Iepazīties ar shell komandām un uzdot jautājumus par neskaidrībām: [[LU-LSP-B11:shell-cheatsheet | UNIX čaulas populārākās komandas un lietojumi]]
* Lasīt [https://www.linux.com/what-is-linux Kas tas ir, Linux?] - tagad vai līdz nākamajai lekcijai
* Lasīt [https://web.archive.org/web/20160417114016/http://www.physics.drexel.edu/students/courses/Comp_Phys/General/C_basics/#first C valodas pamācību] no Drexel universitātes.

|

|- style='vertical-align: top;'
|
====06.02.20====
16:30
|
{| width='100%' style='background-color:#ddd;'
|<big>'''Datu struktūras un algoritmi valodā C.'''</big>
|}
* [https://www.dropbox.com/s/cyebsiafqrkykcq/L01_C_data_algorithms.pdf?raw=1 Slaidi]


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:MD1 | MD1]] mājas darbs - dzimtas koks.'''

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


[PD1] [[LU-LSP-b13:L01 | Praktiskais darbs #1]] - darbs ar tekstu.

|

|- style='vertical-align: top;'
|
====13.02.20====
14:30
|
{| width='100%' style='background-color:#ddd;'
|<big>'''Darbs ar failiem.'''</big>
|}
* [https://www.dropbox.com/s/1h0o1u3tjj0ph0m/L02_files.pdf?raw=1 Slaidi]


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;'
|
====13.02.20====
16:30
|
{| width='100%' style='background-color:#ddd;'
|<big>''' '''</big>
|}


[PD2] [[LU-LSP-b13:L02 | Praktiskais darbs #2]] - failu kopēšana.

|

|- style='vertical-align: top;'
|
====19.02.20====
08:30
|
{| width='100%' style='background-color:#ddd;'
|<big>'''Failu sistēma'''</big>
|}
* [https://www.dropbox.com/s/mjo8zcjux7ygq5b/L03_file_system.pdf?raw=1 Slaidi]


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: [[LU-LSP-b:MD3 | MD3]] mājas darbs - direktoriju koka apstaigāšana.'''

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


[PD3] [[LU-LSP-b13:L03 | Praktiskais darbs #3]] - direktoriju koka apstaigāšana.

|
* '''Termiņš: [[LU-LSP-b:MD1 | MD1]]'''

|- style='vertical-align: top;'
|
====20.02.20====
16:30
|
{| width='100%' style='background-color:#ddd;'
|<big>'''Failu piekļuves režīmi'''</big>
|}
* [https://www.dropbox.com/s/tl0cjj17yn0p859/L04_more_files.pdf?raw=1 Slaidi]


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;'
|
====26.02.20====
08:30
|
{| width='100%' style='background-color:#ddd;'
|<big>''' '''</big>
|}


[PD4] [[LU-LSP-b13:L04 | Praktiskais darbs #4]] - programmas analīze.

|

|- style='vertical-align: top;'
|
====27.02.20====
14:30
|
{| width='100%' style='background-color:#ddd;'
|<big>'''Atmiņas arhitektūra'''</big>
|}
* [https://www.dropbox.com/s/si26ce9jnmrtspa/L05_memory_arch_stack.pdf?raw=1 Slaidi]


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.

|

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


[PD_A] Praktiskajos darbos apskatīsim MD1.

|
* '''Uzdots: [[LU-LSP-b:MD4 | MD4]] mājas darbs - atmiņas rezervācijas funkciju salīdzinājums.'''

|- style='vertical-align: top;'
|
====04.03.20====
08:30
|
{| width='100%' style='background-color:#ddd;'
|<big>'''Virtuālā atmiņa'''</big>
|}
* [https://www.dropbox.com/s/b09vpj64cy60kme/L06_memory_paging_protection.pdf?raw=1 Slaidi]


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

|
* '''Termiņš: [[LU-LSP-b:MD3 | MD3]]'''

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


[KD1] Vidus semestra '''kontroldarbs'''.

|
* '''Kontroldarbs KD1'''

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


[PD5] [[LU-LSP-b13:L05 | Praktiskais darbs #5]] - ''setjmp()'',''longjmp()'' un taimera signāls.

|

|- style='vertical-align: top;'
|
====11.03.20====
08:30
|
{| width='100%' style='background-color:#ddd;'
|<big>'''Dinamiskā atmiņa'''</big>
|}
* [https://www.dropbox.com/s/zqq0jbldw0bciu4/L07_memory_dynamic_reservation.pdf?raw=1 Slaidi]


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;'
|
====12.03.20====
14:30
|
{| width='100%' style='background-color:#ddd;'
|<big>''' '''</big>
|}


[PD6] [[LU-LSP-b13:L06 | Praktiskais darbs #6]] - atmiņas rezervācija.

|

|- style='vertical-align: top;'
|
====12.03.20====
16:30
|
{| width='100%' style='background-color:#ddd;'
|<big>'''Atmiņas fragmentācija'''</big>
|}
* [https://www.dropbox.com/s/fr3i3tys808343j/L08_memory_algorithms.pdf?raw=1 Slaidi]


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

|
* '''Termiņš: [[LU-LSP-b:MD4 | MD4]]'''

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


[PD7] [[LU-LSP-b:L07 | Praktiskais darbs #7]] - vienkāršs atmiņas alokators fiksēta izmēra objektiem.

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

|- style='vertical-align: top;'
|
====19.03.20====
14:30
|
{| width='100%' style='background-color:#ddd;'
|<big>'''Atkļūdošana'''</big>
|}
* [https://www.dropbox.com/s/9tsu0fecra9f6y0/L09_KD_debugging.pdf?raw=1 Slaidi]


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

|

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


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

|
* '''Domāt kursa projekta tēmas!'''

|- style='vertical-align: top;'
|
====25.03.20====
08:30
|
{| width='100%' style='background-color:#ddd;'
|<big>'''Daudz-uzdevumu vide'''</big>
|}
* [https://www.dropbox.com/s/qx2ffq19u2rtx86/L10_multitasking_processes_threads.pdf?raw=1 Slaidi]


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 [[LU-LSP-b:MD5 | MD5]] grupu izveidošanas termiņš.

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

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


* [PD8] [[LU-LSP-b:L08 | Praktiskais darbs #8]]: Programma kas taisa N pavedienus, kur katrs izdrukā M burtus.
* Izvēles (nav jāiesūta): [[LU-LSP-b:L09b | Praktiskais darbs #9.b]] - steka satura analīze un piekļuve stekam.

|
* '''Apspriežam kursa projekta tēmas'''

|- style='vertical-align: top;'
|
====26.03.20====
16:30
|
{| width='100%' style='background-color:#ddd;'
|<big>'''Procesa dzīves cikls'''</big>
|}
* [https://www.dropbox.com/s/vkce978v56zk9uw/L11_lifecycle_ipc.pdf?raw=1 Slaidi]


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.
** Piemēram, [https://docs.google.com/document/d/1Lvo-8oxibzqM8ANdjn8lR4ueCwGLSIcpL1Xtu7InHEs/view iepriekšējā gada noteikumi]

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

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


[PD10] [[LU-LSP-b13:L10 | Praktiskais darbs #10]] - starpprocesu komunikācija.

|
* '''Termiņš: [[LU-LSP-b:MD5 | MD5]]'''

|- style='vertical-align: top;'
|
====02.04.20====
14:30
|
{| width='100%' style='background-color:#ddd;'
|<big>'''Signāli'''</big>
|}
* [https://www.dropbox.com/s/go536558ez25tip/L12_signals_course_project.pdf?raw=1 Slaidi]


Signāli. Alarm serviss un signāls.

Diskusija par komunikācijas protokolu izstrādi.

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

|- style='vertical-align: top;'
|
====02.04.20====
16:30
|
{| width='100%' style='background-color:#ddd;'
|<big>'''Pavedieni'''</big>
|}
* [https://www.dropbox.com/s/deyef80stvuqyu9/L13_posix_threads.pdf?raw=1 Slaidi]


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

'''Reading/Reference''':
* [https://www.cs.cmu.edu/afs/cs/academic/class/15492-f07/www/pthreads.html POSIX thread (pthread) libraries]

|

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


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

[PD_KP2] Darbs pie kursa projekta.

|
* '''Termiņš: Spēles protokola gala versija'''

|- style='vertical-align: top;'
|
====16.04.20====
14:30
|
{| width='100%' style='background-color:#ddd;'
|<big>'''Kursa kopsavilkums'''</big>
|}


|

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


[PD_KP2] Darbs pie kursa projekta.

'''Reading/Reference''':
* [https://www.cyberciti.biz/faq/linux-install-ncurses-library-headers-on-debian-ubuntu-centos-fedora/ Ncurses library, installation and use]

|
Termiņš projekta protokolam: 18.04.2020 (sestdiena) 12:00 (pusdienlaikā)
|- style='vertical-align: top;'
|

====23.04.20====
14:30
|
{| width='100%' style='background-color:#ddd;'
|<big>'''Konsultācija'''</big>
|}


Tiks noturēta tiešsaistē, pēc vajadzības

|

|- style='vertical-align: top;'
|- style='vertical-align: top;'
|
|
====07.05.20====
====29.04.21====
15:00
14:30
|
|
{| width='100%' style='background-color:#ddd;'
{| width='100%' style='background-color:#ddd;'

Revision as of 07:15, 5 February 2021

Īssaites: Kalendārs | Uzdevumi | Resursi | Šodiena: 10.11.20 : Rītdiena: 11.11.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

08.02.21

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.

...

29.04.21

15:00

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

$ yes | pv | ssh user@example.com "cat > /dev/null"
     97,3MiB 0:01:36 [1,28MiB/s][         <=>    ]
$ mtr -rw -c 100  <server_ip>
     HOST: <myhost>     Loss%   Snt   Last   Avg  Best  Wrst StDev
     1.|-- _gateway      0.0%   100    0.7   0.6   0.3   2.4   0.2
     2.|-- <server_ip>   1.0%   100    1.0   4.3   0.9  26.6   5.7
$ iperf3 -s    # startē serveri vienā galā
     Server listening on 5201
$ iperf3 -c <server_ip>    # startē klientu otrā galā
     Connecting to host <server_ip>, port 5201
     [  5] local 192.168.1.123 port 51846 connected to <server_ip> port 5201
     [ ID] Interval           Transfer     Bitrate         Retr  Cwnd
     [  5]   0.00-1.00   sec  1.42 MBytes  11.9 Mbits/sec    0   89.1 KBytes       
     [  5]   1.00-2.00   sec  1.62 MBytes  13.6 Mbits/sec    0    147 KBytes       
     ...
     [  5]   9.00-10.00  sec  2.30 MBytes  19.3 Mbits/sec    0    595 KBytes       
     - - - - - - - - - - - - - - - - - - - - - - - - -
     [ ID] Interval           Transfer     Bitrate         Retr
     [  5]   0.00-10.00  sec  14.2 MBytes  11.9 Mbits/sec    0             sender
     [  5]   0.00-10.42  sec  11.6 MBytes  9.36 Mbits/sec                  receiver
$ nstat -az | grep -Ei "drop|overflow|retrans"
     TcpRetransSegs                  127923             0.0
     TcpExtLockDroppedIcmps          0                  0.0
     TcpExtListenDrops               1                  0.0
     TcpExtTCPLostRetransmit         11837              0.0
     ...
$ ethtool eth0
     Settings for eth0:
     Supported ports: [ TP ]
     Supported link modes:   10baseT/Half 10baseT/Full
                       100baseT/Half 100baseT/Full
                       1000baseT/Full
     ...
$ sudo ethtool -S eth0 | grep -E "errors|dropped|fifo|collision"
     collisions: 0
     rx_crc_errors: 0
     rx_missed_errors: 0
     tx_aborted_errors: 0
     tx_carrier_errors: 0
     ...
  • "bashtop" rīks veiktspējas analīzei

Āķīgi uzdevumi un pieredze

Atziņas