LU-LSP-b14: Difference between revisions
No edit summary |
|||
| 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 --> |
||
| Line 49: | Line 49: | ||
| |
| |
||
Uzdots [[LU-LSP- |
Uzdots [[LU-LSP-b:MD0 | MD0]] mājas darbs - programmēšanas stils - izlasīt un ņemt vērā turpmākajos darbos. |
||
|- |
|- |
||
| |
| |
||
| Line 60: | Line 60: | ||
| |
| |
||
'''Uzdots''' [[LU-LSP- |
'''Uzdots''' [[LU-LSP-b:MD1 | MD1]] mājas darbs - dzimtas koks. |
||
|- |
|- |
||
| |
| |
||
| Line 88: | Line 88: | ||
| |
| |
||
<!-- |
<!-- |
||
'''Uzdots''' [[LU-LSP- |
'''Uzdots''' [[LU-LSP-b:MD2 | MD2]] mājas darbs - datubāze. |
||
--> |
--> |
||
|- |
|- |
||
| Line 97: | Line 97: | ||
| |
| |
||
Mājas darba [[LU-LSP- |
Mājas darba [[LU-LSP-b:MD1 | MD1]] '''nodošanas''' termiņš. |
||
|- |
|- |
||
| |
| |
||
| Line 109: | Line 109: | ||
| |
| |
||
<!--Mājas darba [[LU-LSP- |
<!--Mājas darba [[LU-LSP-b:MD2 | MD2]] '''nodošanas''' termiņš. --> |
||
'''Uzdots''' [[LU-LSP- |
'''Uzdots''' [[LU-LSP-b:MD3 | MD3]] mājas darbs - direktoriju koka apstaigāšana. |
||
|- |
|- |
||
| |
| |
||
| Line 129: | Line 129: | ||
| |
| |
||
Mājas darba [[LU-LSP- |
Mājas darba [[LU-LSP-b:MD3 | MD3]] '''nodošanas''' termiņš. |
||
|- |
|- |
||
| |
| |
||
| Line 139: | Line 139: | ||
| |
| |
||
'''Uzdots''' [[LU-LSP- |
'''Uzdots''' [[LU-LSP-b:MD4 | MD4]] mājas darbs - atmiņas rezervācijas funkciju salīdzinājums. |
||
|- |
|- |
||
| |
| |
||
| Line 147: | Line 147: | ||
Atmiņas fragmentācija. Atmiņas rezervēšanas (allocation) algoritmi, kas darbojas uz atmiņas fragmentiem. |
Atmiņas fragmentācija. Atmiņas rezervēšanas (allocation) algoritmi, kas darbojas uz atmiņas fragmentiem. |
||
[[LU-LSP- |
[[LU-LSP-b:L08 | Praktiskais darbs #8]] - vienkāršs atmiņas alokators fiksēta izmēra objektiem. |
||
| |
| |
||
'''Uzdots''' [[LU-LSP- |
'''Uzdots''' [[LU-LSP-b:MD5 | MD5]] - atmiņas fragmentācijas algoritmu novērtējums |
||
|- |
|- |
||
| |
| |
||
| Line 161: | 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- |
Mājas darba [[LU-LSP-b:MD4 | MD4]] '''nodošanas''' termiņš. |
||
|- |
|- |
||
| |
| |
||
| Line 179: | Line 179: | ||
<!-- [[LU-LSP-b13:L09 | Praktiskais darbs #9]] - steka satura analīze un piekļuve stekam. --> |
<!-- [[LU-LSP-b13:L09 | Praktiskais darbs #9]] - steka satura analīze un piekļuve stekam. --> |
||
<!-- |
<!-- |
||
Mājas darba [[LU-LSP- |
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! |
||
| Line 188: | Line 188: | ||
[[LU-LSP-b13:L10 | Praktiskais darbs #10]] - starpprocesu komunikācija. |
[[LU-LSP-b13:L10 | Praktiskais darbs #10]] - starpprocesu komunikācija. |
||
| |
| |
||
Mājas darba [[LU-LSP- |
Mājas darba [[LU-LSP-b:MD5 | MD5]] '''nodošanas''' termiņš. |
||
|- |
|- |
||
| |
| |
||
| Line 239: | Line 239: | ||
== Mājas darbi == |
== Mājas darbi == |
||
* [[LU-LSP- |
* [[LU-LSP-b:MD0 | MD0]]: Izlasīt kodēšanas stila dokumentus. |
||
* [[LU-LSP- |
* [[LU-LSP-b:MD1 | MD1]]: Ģimenes koka ģenerēšanas programma. |
||
* MD2 - ''nav uzdots''. |
* MD2 - ''nav uzdots''. |
||
* [[LU-LSP- |
* [[LU-LSP-b:MD3 | MD3]]: Vienādo failu meklēšana direktorijas kokā. |
||
* [[LU-LSP- |
* [[LU-LSP-b:MD4 | MD4]]: Atmiņas rezervācijas funkciju salīdzināšana. |
||
* [[LU-LSP- |
* [[LU-LSP-b:MD5 | MD5]]: Atmiņas fragmentācijas algoritmu novērtējums. |
||
<!-- * [[LU-LSP- |
<!-- * [[LU-LSP-b:MD5 | MD5]]: Procedūru izsaukumu steka izdruka. --> |
||
| Line 293: | 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] |
||
* Protokola piemērs: [http://wiki.vg/Protocol Minecraft] komunikācija. |
|||
=== Programmēšanas analīzes rīki === |
=== Programmēšanas analīzes rīki === |
||
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:
- Google grupa lu-lsp-b@googlegroups.com Lai pieteiktos, sekot http://groups.google.lv/group/lu-lsp-b un pieslēgties ar savu google kontu, vai arī sūtīt epastu pasniedzējam.
- Vērtējums = 15% praktiskie darbi, 25% mājas darbi, 10% dalība klasē, 20% KD1 un 30% KD2(eksāmens).
- LSP kursa atsauksmes no iepriekšējiem gadiem.
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. | |
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. | |
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().
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. |
|
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().
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
- Advanced Linux Programming by CodeSourcery LLC,
- "Building Embedded Linux Systems" O'Reilly Media, 2008, ISBN 0596529686
- Sublime_Text_cheat_sheet - Lieliskā Sublime teksta redaktora taustiņu kombinācijas
Saites
- Bash by Example @ibm/developerworks
- Intro to Linux kernel
- Programming in C: A Tutorial (by Brian W. Kernighan)
- Gnu make dokumentācija
- Tipiskas unix direktoriju hierarhijas īss apraksts.
- Sockets:
- Programming IP Sockets on Linux (tutorial @ gnosis.cx)
- Sockets Tutorial @ Linux Howtos
- Berkeley sockets (Wikipēdija)
- http://www.hiraeth.com/alan/tutorials/courses/unixprog.html
- http://lkml.org/
- The Linux Kernel Module Programming Guide
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
- Top 20 Linux monitoring tools @cyberciti
- 20 rīki Linux veikstpējas monitoringam (IPTraf u.c.) @tecmint
- CPU analīze
- Disku I/O analīze
- IO profiling at Linux programming blog