LU-LSP-b14: Difference between revisions

From DiLab
Jump to navigation Jump to search
Content deleted Content added
No edit summary
 
(20 intermediate revisions by the same user not shown)
Line 1: Line 1:
{{LUDFKurss|Linux sistēmas programmēšana|LSP|DatZ3101|2DAT3122}}
{{LUDFKurss|Linux sistēmas programmēšana|LSP|DatZ3101|2DAT3122}}
(2014.m.g.)

* Pasniedzējs: Leo Seļāvo ''(epasts: vards.uzvards @ gmail.com)''
* Pasniedzējs: Leo Seļāvo ''(epasts: vards.uzvards @ gmail.com)''
* Asistents: TBA
<!-- * Asistents: TBA -->
* {{KursiGGroup|lu-lsp-b}}
* {{KursiGGroup|lu-lsp-b}}


Line 40: Line 40:
|-
|-
|
|
==== 02.09.2013. ====
==== 02.09.2014. ====
|
|
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.)
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.)
Line 48: Line 48:
* [[LU-LSP-B11:shell-cheatsheet | UNIX čaulas populārākās komandas un lietojumi]].
* [[LU-LSP-B11:shell-cheatsheet | UNIX čaulas populārākās komandas un lietojumi]].


<!-- [[LU-LSP-b13:L01 | Praktiskais darbs #1]].
-->
|
|
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.
|-
|-
|
|

==== 09.09.2013. ====
==== 09.09.2014. ====
|
|
Vispārīgs pārskats par valodu C.
Vispārīgs pārskats par valodu C.
Line 60: Line 59:
Lasīt [http://bit.ly/1a2rsl3 C valodas pamācību] no Drexel universitātes.
Lasīt [http://bit.ly/1a2rsl3 C valodas pamācību] no Drexel universitātes.


<!-- [[LU-LSP-b13:L02 | Praktiskais darbs #2]].
-->
|
|
'''Uzdots''' [[LU-LSP-b:MD1 | MD1]] mājas darbs - dzimtas koks.
'''Uzdots''' [[LU-LSP-b:MD1 | MD1]] mājas darbs - dzimtas koks.
|-
|-
|
|

==== 16.09.2013. ====
==== 16.09.2014. ====
| Datu struktūras un algoritmi valodā C.
| Datu struktūras un algoritmi valodā C.


[http://jupiter.cs.fmf.lu.lv/~kursi/lsp/1-apvienota-ievadlekcija.pdf Lekcijas piezīmes]
[http://selavo.lv/~kursi/lsp/1-apvienota-ievadlekcija.pdf Lekcijas piezīmes: apvienota ievadlekcija]


[[LU-LSP-b13:L01 | Praktiskais darbs #1]]
[[LU-LSP-b13:L01 | Praktiskais darbs #1]]
Line 76: Line 74:
|-
|-
|
|

==== 23.09.2013. ====
==== 23.09.2014. ====
| Darbs ar failiem; sistēmas izsaukumi faila ievadam un izvadam. Linux piedāvātās programmas darbam ar failu izvadu/ievadu (''cat, tail, head, less, cp'' u.c.). Failu ievada un izvada ātrdarbība, ņemot vērā sistēmas arhitektūru.
| Darbs ar failiem; sistēmas izsaukumi faila ievadam un izvadam. Linux piedāvātās programmas darbam ar failu izvadu/ievadu (''cat, tail, head, less, cp'' u.c.). Failu ievada un izvada ātrdarbība, ņemot vērā sistēmas arhitektūru.


[http://jupiter.cs.fmf.lu.lv/~kursi/lsp/2-faili.pdf Lekcijas piezīmes]
[http://selavo.lv/~kursi/lsp/2-faili.pdf Lekcijas piezīmes: faili]

<!--
[http://selavo.lv/~kursi/lsp/2-valoda-c.pdf Lekcijas piezīmes: valoda-c]
[http://selavo.lv/~kursi/lsp/3-algoritmi.pdf Lekcijas piezīmes: algoritmi]
-->


[[LU-LSP-b13:L02 | Praktiskais darbs #2]].
[[LU-LSP-b13:L02 | Praktiskais darbs #2]].
|
|
<!--
<!--
'''Uzdots''' [[LU-LSP-b:MD2 | MD2]] mājas darbs - datubāze. -->
'''Uzdots''' [[LU-LSP-b:MD2 | MD2]] mājas darbs - datubāze.
-->
|-
|-
|
|

==== 30.09.2013.====
==== 30.09.2014.====
| 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().
| 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().


Line 95: Line 101:
|
|


==== 07.10.2013.====
==== 07.10.2014.====
| 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().
| 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().


[http://jupiter.cs.fmf.lu.lv/~kursi/lsp/4-faili.pdf Lekcijas piezīmes]
[http://selavo.lv/~kursi/lsp/4-faili.pdf Lekcijas piezīmes]


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


<!--Mājas darba [[LU-LSP-b:MD2 | MD2]] '''nodošanas''' termiņš. -->
<!--Mājas darba [[LU-LSP-b:MD2 | MD2]] '''nodošanas''' termiņš. -->
<!--'''Uzdots''' [[LU-LSP-b:MD3-2013 | MD3]] mājas darbs - direktoriju koka apstaigāšana.-->
'''Uzdots''' [[LU-LSP-b:MD3 | MD3]] mājas darbs - direktoriju koka apstaigāšana.
|-
|-
|
|


==== 14.10.2013.====
==== 14.10.2014.====
|
|
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.
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-b13:L04 | Praktiskais darbs #4]].-->
[[LU-LSP-b13:L04 | Praktiskais darbs #4]].
|
|
|-
|-
|
|

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


[[LU-LSP-b13:L05 | Praktiskais darbs #5]] - ''setjmp()'',''longjmp()'' un taimera signāls.
[[LU-LSP-b13:L05 | Praktiskais darbs #5]] - ''setjmp()'',''longjmp()'' un taimera signāls.
|
|
Mājas darba [[LU-LSP-b:MD3 | MD3]] '''nodošanas''' termiņš.


<!-- '''Uzdots''' [[LU-LSP-b:MD4 | MD4]] mājas darbs - setjmp() un longjmp() lietojums. -->
Mājas darba [[LU-LSP-b:MD3 | MD3]] '''nodošanas''' termiņš.
|-
|-
|
|

==== 28.10.2013.====
==== 28.10.2014.====
| 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.
| 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.
Atmiņas fragmentācija. Atmiņas rezervēšanas (allocation) algoritmi, kas darbojas uz atmiņas fragmentiem.


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

==== 04.11.2013.====
==== 04.11.2014.====
|
|
Atmiņas fragmentācija. Atmiņas rezervēšanas (allocation) algoritmi, kas darbojas uz atmiņas fragmentiem.
Daudz-uzdevumu vide. Procesi un procesu kontrole. Pavedieni. Kooperējošies procesi un preemptīvā daudz-uzdevumu metode. Komanda '''ps'''. getpid() un getppid(). fork().

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


<!-- [[LU-LSP-b13:L08 | Praktiskais darbs #8]] - vienkāršs atmiņas alokators fiksēta izmēra objektiem. -->
|
|
<!-- Mājas darba [[LU-LSP-b:MD4 | MD4]] '''nodošanas''' termiņš.-->


<!-- '''Uzdots''' [[LU-LSP-b:MD5 | MD5]] - atmiņas fragmentācijas algoritmu novērtējums -->
'''Uzdots''' [[LU-LSP-b:MD5 | MD5]] - atmiņas fragmentācijas algoritmu novērtējums
|-
|-
|
|

==== 11.11.2013.====
==== 11.11.2014.====
|
|
Vidus semestra '''kontroldarbs'''.
Vidus semestra '''kontroldarbs'''.
Line 153: Line 161:
[[LU-LSP-b13:LA | Atkļūdošana]]: Linux rīki un to lietošana. Darbs pie mājasdarbiem.
[[LU-LSP-b13:LA | Atkļūdošana]]: Linux rīki un to lietošana. Darbs pie mājasdarbiem.
|
|
Mājas darba [[LU-LSP-b:MD4 | MD4]] '''nodošanas''' termiņš.
|-
|-
|
|
==== 18.11.2013.====
| Daudz-uzdevumu vide. ''wait()'' un ''exec()''. ''system()''.


==== 18.11.2014.====
[[LU-LSP-b13:L09 | Praktiskais darbs #9]] - steka satura analīze un piekļuve stekam.
|
''Valsts svētki''
|-
|
|

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

<!-- [[LU-LSP-b13:L09 | Praktiskais darbs #9]] - steka satura analīze un piekļuve stekam. -->
<!--
Mājas darba [[LU-LSP-b:MD5 | MD5]] grupu izveidošanas termiņš.
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!
Katra grupa: lūdzu atsūtiet vienu e-pastu ar paredzamajiem dalībniekiem!
|-
-->

|
Klienta un servera arhitektūra. Sockets. Komunikācija starp nesaistītiem procesiem. Daudzlietotāju sistēmas (spēles) arhitektūra).
==== 25.11.2013.====
| Klienta un servera arhitektūra. Sockets. Komunikācija starp nesaistītiem procesiem. Daudzlietotāju sistēmas (spēles) arhitektūra).


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

==== 02.12.2013.====
==== 02.12.2014.====
| Serveri, iteratīvie un paralēlie. Klienta programmatūra un tas īpašības. Signāli. Alarm serviss un signāls. Procesa ielādēšana, uzsākšanās un pieci veidi kā process var beigties. exit() un _exit().
| Serveri, iteratīvie un paralēlie. Klienta programmatūra un tas īpašības. Signāli. Alarm serviss un signāls. Procesa ielādēšana, uzsākšanās un pieci veidi kā process var beigties. exit() un _exit().


|
|
Kursa projekta aktualizācija.
<!--
Kursa projekta definēšana. -->


|-
|-
|
|
==== 09.12.2013.====
==== 09.12.2014.====
| Pavedieni. POSIX pavedieni. Mutex. Datu skriešanās (data race condition). Strupceļš (deadlock).
| Pavedieni.


Diskusija par komunikacijas protokolu izstrādi.

Praktiskais darbs #9: Programma kas taisa N pavedienus, kur katrs izdrukā M burtus.
<!-- [[LU-LSP-b13:L11 | Praktiskais darbs #11]] - datortīkla klienta programma. -->
<!-- [[LU-LSP-b13:L11 | Praktiskais darbs #11]] - datortīkla klienta programma. -->
<!-- [[LU-LSP-b13:L11 | Praktiskais darbs #11]] - servera programma. -->
<!-- [[LU-LSP-b13:L11 | Praktiskais darbs #11]] - servera programma. -->
|
|
Termiņš: Kursa projekts: spēles noteikumi, GoogleDoc dokumentā.
|-
|-
|
|

==== 16.12.2013.====
==== 16.12.2014.====
| Kursa kopsavilkums. Darbs pie [[LU-LSP-b13:projekts | kursa projekta]].
| Kursa kopsavilkums. Darbs pie [[LU-LSP-b13:projekts | kursa projekta]].


Vienota komunikācijas protokola definēšana kursa projektam.
|
|
Termiņš: Protokola Alfa versija
|-
|-
|
|

==== 22.12.2014. - 04.01.2015.====
==== 22.12.2014. - 04.01.2015.====
| Ziemassvētku un Jaungada brīvdienas
| Ziemassvētku un Jaungada brīvdienas
Line 203: Line 228:
|-
|-
|
|
==== xx.01.2014.====
==== 13.01.2014.====
| '''Eksāmens xx:xx''' 312. telpā.
| '''Eksāmens 14:30''' 312. telpā.

Eksāmena forma: projektu demonstrācija (darbība, pirmkods, diskusijas).
|
|
&nbsp;
&nbsp;
Line 214: Line 241:
* [[LU-LSP-b:MD0 | MD0]]: Izlasīt kodēšanas stila dokumentus.
* [[LU-LSP-b:MD0 | MD0]]: Izlasīt kodēšanas stila dokumentus.
* [[LU-LSP-b:MD1 | MD1]]: Ģimenes koka ģenerēšanas programma.
* [[LU-LSP-b:MD1 | MD1]]: Ģimenes koka ģenerēšanas programma.
* MD2 - ''nav uzdots''.
* [[LU-LSP-b:MD3 | MD3]]: Vienādo failu meklēšana direktorijas kokā.
* [[LU-LSP-b:MD3 | MD3]]: Vienādo failu meklēšana direktorijas kokā.
* [[LU-LSP-b:MD4 | MD4]]: Atmiņas rezervācijas funkciju salīdzināšana.
* [[LU-LSP-b:MD4 | MD4]]: Atmiņas rezervācijas funkciju salīdzināšana.
Line 229: Line 257:
Eksāmens izpaužas kā kursa projekta aizstāvēšana.
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 ==
== Literatūra ==
Line 239: Line 273:


* "Building Embedded Linux Systems" O'Reilly Media, 2008, ISBN 0596529686
* "Building Embedded Linux Systems" O'Reilly Media, 2008, ISBN 0596529686

* [[Sublime_Text_cheat_sheet]] - Lieliskā Sublime teksta redaktora taustiņu kombinācijas


== Saites ==
== Saites ==


* [http://bit.ly/bashbyex Bash by Example] @ibm/developerworks
* [http://tuxradar.com/content/how-linux-kernel-works Intro to Linux kernel]
* [http://tuxradar.com/content/how-linux-kernel-works Intro to Linux kernel]


Line 249: Line 286:


* Sockets:
* Sockets:
** [http://gnosis.cx/publish/programming/sockets.html Programming IP Sockets on Linux] (tutorial)
** [http://gnosis.cx/publish/programming/sockets.html Programming IP Sockets on Linux] (tutorial @ gnosis.cx)
** [http://www.linuxhowtos.org/C_C++/socket.htm Sockets Tutorial] @ Linux Howtos
** [http://en.wikipedia.org/wiki/Berkeley_sockets Berkeley sockets] (Wikipēdija)
** [http://en.wikipedia.org/wiki/Berkeley_sockets Berkeley sockets] (Wikipēdija)


Line 255: Line 293:
* http://lkml.org/
* http://lkml.org/
* [http://tldp.org/LDP/lkmpg/2.6/html/index.html The Linux Kernel Module Programming Guide]
* [http://tldp.org/LDP/lkmpg/2.6/html/index.html The Linux Kernel Module Programming Guide]

=== Programmēšanas analīzes rīki ===
* [http://pmd.sourceforge.net/pmd-5.2.1/ PMD] - scans source code and looks for bugs, dead code, suboptimal code, overcomplicated expressions, duplicate code.


=== Linux veiktspējas analīze ===
=== Linux veiktspējas analīze ===
* [http://www.cyberciti.biz/tips/top-linux-monitoring-tools.html Top 10 Linux monitoring tools]
* [http://www.cyberciti.biz/tips/top-linux-monitoring-tools.html Top 20 Linux monitoring tools] @cyberciti
* [http://www.tecmint.com/command-line-tools-to-monitor-linux-performance/ 20 rīki Linux veikstpējas monitoringam] (IPTraf u.c.) @tecmint
* [http://www.cyberciti.biz/tips/how-do-i-find-out-linux-cpu-utilization.html CPU analīze]
* [http://www.cyberciti.biz/tips/how-do-i-find-out-linux-cpu-utilization.html CPU analīze]
* [http://www.cyberciti.biz/tips/linux-disk-performance-monitoring-howto.html Disku I/O analīze]
* [http://www.cyberciti.biz/tips/linux-disk-performance-monitoring-howto.html Disku I/O analīze]
* [http://www.linuxprogrammingblog.com/io-profiling IO profiling] at Linux programming blog


== Atziņas ==
== Atziņas ==
* [http://norvig.com/21-days.html Teach yourself programming in 10 years] by Peter Norvig
* [http://norvig.com/21-days.html Teach yourself programming in 10 years] by Peter Norvig
* [https://rhodecode.com/blog/code-review-learn-nasa-codes/ Code review: Learn how NASA codes (blog)], and [http://cacm.acm.org/magazines/2014/2/171689-mars-code/fulltext Mars Code (ACM article)]

Latest revision as of 12:22, 7 September 2015

Linux sistēmas programmēšana (LSP)

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

(2014.m.g.)

  • Pasniedzējs: Leo Seļāvo (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

  • Darbi jāiesniedz kā pielikums e-pasta vēstulei, nevis vēstules tekstā
  • E-pasta tēmai jābūt formā "LSP MD1 Vārds Uzvārds", aizstājot MD1 ar faktisko darba kodu, un ierakstot savu vārdu un uzvārdu
  • Faila nosaukumam jābūt formā LSP_MD1_Vards_Uzvards.c
  • Nevajag arhivēt failus, ja vien tas nav prasīts uzdevuma nosacījumos


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

02.09.2014.

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

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

09.09.2014.

Vispārīgs pārskats par valodu C.

Lasīt C valodas pamācību no Drexel universitātes.

Uzdots MD1 mājas darbs - dzimtas koks.

16.09.2014.

Datu struktūras un algoritmi valodā C.

Lekcijas piezīmes: apvienota ievadlekcija

Praktiskais darbs #1

23.09.2014.

Darbs ar failiem; sistēmas izsaukumi faila ievadam un izvadam. Linux piedāvātās programmas darbam ar failu izvadu/ievadu (cat, tail, head, less, cp u.c.). Failu ievada un izvada ātrdarbība, ņemot vērā sistēmas arhitektūru.

Lekcijas piezīmes: faili


Praktiskais darbs #2.

30.09.2014.

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

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

07.10.2014.

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

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

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

14.10.2014.

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.

Praktiskais darbs #4.

21.10.2014.

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

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

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

28.10.2014.

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.

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

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

04.11.2014.

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

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

Uzdots MD5 - atmiņas fragmentācijas algoritmu novērtējums

11.11.2014.

Vidus semestra kontroldarbs.

Atkļūdošana: Linux rīki un to lietošana. Darbs pie mājasdarbiem.

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

18.11.2014.

Valsts svētki

25.11.2014.

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


Klienta un servera arhitektūra. Sockets. Komunikācija starp nesaistītiem procesiem. Daudzlietotāju sistēmas (spēles) arhitektūra).

Praktiskais darbs #10 - starpprocesu komunikācija.

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

02.12.2014.

Serveri, iteratīvie un paralēlie. Klienta programmatūra un tas īpašības. Signāli. Alarm serviss un signāls. Procesa ielādēšana, uzsākšanās un pieci veidi kā process var beigties. exit() un _exit().

Kursa projekta aktualizācija.

09.12.2014.

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

Diskusija par komunikacijas protokolu izstrādi.

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

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

16.12.2014.

Kursa kopsavilkums. Darbs pie kursa projekta.

Termiņš: Protokola Alfa versija

22.12.2014. - 04.01.2015.

Ziemassvētku un Jaungada brīvdienas

 

13.01.2014.

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