http://andromeda.df.lu.lv/wiki/api.php?action=feedcontributions&user=Atis&feedformat=atomDiLab - User contributions [en]2024-03-28T21:03:15ZUser contributionsMediaWiki 1.31.0http://andromeda.df.lu.lv/wiki/index.php?title=LU-LSP-b13&diff=4867LU-LSP-b132013-12-17T14:52:00Z<p>Atis: </p>
<hr />
<div>{{LUDFKurss|Linux sistēmas programmēšana|LSP|DatZ3122|2DAT3122}}<br />
<br />
* Pasniedzējs: Leo Seļāvo ''(epasts: vards.uzvards @ gmail.com)''<br />
* Asistents: Atis Elsts ''(epasts: vards.uzvards @ gmail.com)''<br />
<br />
* {{KursiGGroup|lu-lsp-b}}<br />
<br />
* Vērtējums = 15% praktiskie darbi, 25% mājas darbi, 10% dalība klasē, 20% KD1 un 30% KD2(eksāmens).<br />
<br />
==== Praktisko un mājas darbu iesniegšana ==== <br />
* Darbi jāiesniedz uz '''kursa asistenta''' e-pastu [[Image:atis-email.gif]]<br />
* Darbi jāiesniedz kā '''pielikums''' e-pasta vēstulei, nevis vēstules tekstā<br />
* 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<br />
* Faila nosaukumam jābūt formā LSP_MD1_Vards_Uzvards.c<br />
* Nevajag arhivēt failus, ja vien tas nav prasīts uzdevuma nosacījumos<br />
<br />
==== Praktisko darbu vērtēšanas kritēriji ==== <br />
* No kursa kopējā vērtējuma 15% var saņemt par praktisko darbu kvalitatīvu izpildīšanu<br />
* Papildus par praktiskajiem darbiem saņem plusiņus, kas ietilpst 10% no kopējā vērtējuma "par darbu klasē". Tie pienākas ikvienam, kas iesniedz PD '''patstāvīgu''' risinājumu lekcijas laikā.<br />
* Ja lekcijas beigu daļā PD risinājums tiek apskatīts publiski, PD jāiesūta līdz šim laikam. Vēlāk iesniegti darbi netiek vērtēti.<br />
* Vēlāk (arī stipri) iesūtīti darbi var tikt izlaboti, bet netiek vērtēti.<br />
<br />
==== Mājas darbu vērtēšanas kritēriji ====<br />
* No kursa kopējā vērtējuma 25% veido mājas darbi<br />
* Mājas darbu iesniegšanas termiņa laiks ir 30 minūtes pirms lekcijas sākuma<br />
* Ja darbs tiek iesniegts ar novēlošanos (kaut vai 1 min), rezultāts tiek samazināts par:<br />
** '''10%''' par ik dienu pirmo piecu dienu laikā pēc termiņa, un<br />
** '''50%''' piecas vai vairāk dienas pēc termiņa. <br />
** Visi mājas darbi jāiesūta līdz kursa beigās noteiktam ''deadline'', vēlāk iesniegtie netiek vērtēti.<br />
** 2013./14. m.g. pēdējā diena MD iesniegšanai ir '''17. janvāris.'''<br />
<br />
<br />
<br />
== Kalendārs ==<br />
<br />
{| border=1 cellspacing=0 cellpadding=4<br />
|-<br />
! Datums, nedēļa <br />
! Kursa saturs<br />
! Uzdevumi<br />
|-<br />
| 03.09.2013. <br />
| <br />
Virtuāla lekcija. 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.)<br />
<br />
* [http://bit.ly/1a2rHMW Kas tas ir, Linux?] - lasīt Linux.com rakstu<br />
<br />
* [[LU-LSP-B11:shell-cheatsheet | UNIX čaulas populārākās komandas un lietojumi]].<br />
<br />
<!-- [[LU-LSP-b13:L01 | Praktiskais darbs #1]]. <br />
--><br />
|<br />
Uzdots [[LU-LSP-b:MD0 | MD0]] mājas darbs - programmēšanas stils - izlasīt un ņemt vērā turpmākajos darbos.<br />
|-<br />
| 10.09.2013. <br />
| <br />
Virtuāla lekcija. Vispārīgs pārskats par valodu C.<br />
<br />
Lasīt [http://bit.ly/1a2rsl3 C valodas pamācību] no Drexel universitātes.<br />
<br />
<!-- [[LU-LSP-b13:L02 | Praktiskais darbs #2]]. <br />
--><br />
|<br />
'''Uzdots''' [[LU-LSP-b:MD1 | MD1]] mājas darbs - dzimtas koks.<br />
|-<br />
| 17.09.2013. <br />
| Datu struktūras un algoritmi valodā C.<br />
<br />
[http://jupiter.cs.fmf.lu.lv/~kursi/lsp/1-apvienota-ievadlekcija.pdf Lekcijas piezīmes]<br />
<br />
[[LU-LSP-b13:L01 | Praktiskais darbs #1]]<br />
<br />
|<br />
|-<br />
| 24.09.2013.<br />
| 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. <br />
<br />
[http://jupiter.cs.fmf.lu.lv/~kursi/lsp/2-faili.pdf Lekcijas piezīmes]<br />
<br />
[[LU-LSP-b13:L02 | Praktiskais darbs #2]]. <br />
|<br />
<!--<br />
'''Uzdots''' [[LU-LSP-b:MD2 | MD2]] mājas darbs - datubāze. --><br />
|-<br />
| 01.10.2013.<br />
| 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().<br />
<br />
|<br />
Mājas darba [[LU-LSP-b:MD1 | MD1]] '''nodošanas''' termiņš.<br />
|-<br />
| 08.10.2013.<br />
| 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().<br />
<br />
[http://jupiter.cs.fmf.lu.lv/~kursi/lsp/4-faili.pdf Lekcijas piezīmes]<br />
<br />
[[LU-LSP-b13:L03 | Praktiskais darbs #3]] - direktoriju koka apstaigāšana.<br />
|<br />
<!--Mājas darba [[LU-LSP-b:MD2 | MD2]] '''nodošanas''' termiņš. --><br />
<br />
'''Uzdots''' [[LU-LSP-b:MD3-2013 | MD3]] mājas darbs - direktoriju koka apstaigāšana.<br />
|-<br />
| 15.10.2013.<br />
| <br />
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.<br />
<br />
[[LU-LSP-b13:L04 | Praktiskais darbs #4]].<br />
|<br />
|-<br />
| 22.10.2013.<br />
| 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()''. <br />
<br />
[[LU-LSP-b13:L05 | Praktiskais darbs #5]] - ''setjmp()'',''longjmp()'' un taimera signāls.<br />
|<br />
Mājas darba [[LU-LSP-b:MD3 | MD3]] '''nodošanas''' termiņš.<br />
<br />
<!-- '''Uzdots''' [[LU-LSP-b:MD4 | MD4]] mājas darbs - setjmp() un longjmp() lietojums. --><br />
|-<br />
| 29.10.2013.<br />
| 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.<br />
Atmiņas fragmentācija. Atmiņas rezervēšanas (allocation) algoritmi, kas darbojas uz atmiņas fragmentiem.<br />
<br />
[[LU-LSP-b13:L06 | Praktiskais darbs #6]] - atmiņas rezervācija.<br />
<br />
|<br />
'''Uzdots''' [[LU-LSP-b:MD4 | MD4]] mājas darbs - atmiņas rezervācijas funkciju salīdzinājums.<br />
|-<br />
| 05.11.2013.<br />
|<br />
Daudz-uzdevumu vide. Procesi un procesu kontrole. Pavedieni. Kooperējošies procesi un preemptīvā daudz-uzdevumu metode. Komanda '''ps'''. getpid() un getppid(). fork().<br />
<br />
Apspriede par iepriekšējo PD risinājumiem.<br />
<br />
<!-- [[LU-LSP-b13:L08 | Praktiskais darbs #8]] - vienkāršs atmiņas alokators fiksēta izmēra objektiem. --><br />
|<br />
Mājas darba [[LU-LSP-b:MD4 | MD4]] '''nodošanas''' termiņš.<br />
<br />
'''Uzdots''' [[LU-LSP-b:MD5 | MD5]] - atmiņas fragmentācijas algoritmu novērtējums<br />
|-<br />
| 12.11.2013.<br />
|<br />
Vidus semestra '''kontroldarbs'''.<br />
<br />
[[LU-LSP-b13:LA | Atkļūdošana]]: Linux rīki un to lietošana. Darbs pie mājasdarbiem.<br />
|<br />
|-<br />
| 19.11.2013.<br />
| Daudz-uzdevumu vide. ''wait()'' un ''exec()''. ''system()''.<br />
<br />
[[LU-LSP-b13:L09 | Praktiskais darbs #9]] - steka satura analīze un piekļuve stekam.<br />
|<br />
Mājas darba [[LU-LSP-b:MD5 | MD5]] grupu izveidošanas termiņš.<br />
<br />
Katra grupa: lūdzu atsūtiet vienu e-pastu ar paredzamajiem dalībniekiem!<br />
|-<br />
| 26.11.2013.<br />
| Klienta un servera arhitektūra. Sockets. Komunikācija starp nesaistītiem procesiem. Daudzlietotāju sistēmas (spēles) arhitektūra).<br />
<br />
[[LU-LSP-b13:L10 | Praktiskais darbs #10]] - starpprocesu komunikācija.<br />
|<br />
Mājas darba [[LU-LSP-b:MD5 | MD5]] '''nodošanas''' termiņš.<br />
|-<br />
| 03.12.2013.<br />
| 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().<br />
<br />
|<br />
<!--<br />
Kursa projekta definēšana. --><br />
<br />
|-<br />
| 10.12.2013.<br />
| Pavedieni.<br />
<br />
[[LU-LSP-b13:L11 | Praktiskais darbs #11]] - datortīkla klienta programma.<br />
<br />
<!-- [[LU-LSP-b13:L11 | Praktiskais darbs #11]] - servera programma. --><br />
|<br />
|-<br />
| 17.12.2013.<br />
| Kursa kopsavilkums. Darbs pie [[LU-LSP-b13:projekts | kursa projekta]]. <br />
<br />
Vienota komunikācijas protokola definēšana kursa projektam.<br />
|<br />
|-<br />
| 23.12.2013. - 01.01.2014.<br />
| Ziemassvētku un Jaungada brīvdienas<br />
|<br />
&nbsp;<br />
|-<br />
| 21.01.2013.<br />
| '''Eksāmens 14:30''' 312. telpā.<br />
|<br />
&nbsp;<br />
|-<br />
|}<br />
<br />
== Mājas darbi ==<br />
<br />
* [[LU-LSP-b:MD0 | MD0]]: Izlasīt kodēšanas stila dokumentus.<br />
* [[LU-LSP-b:MD1 | MD1]]: Ģimenes koka ģenerēšanas programma.<br />
* [[LU-LSP-b:MD3 | MD3]]: Vienādo failu meklēšana direktorijas kokā.<br />
* [[LU-LSP-b:MD4 | MD4]]: Atmiņas rezervācijas funkciju salīdzināšana.<br />
* [[LU-LSP-b:MD5 | MD5]]: Atmiņas fragmentācijas algoritmu novērtējums.<br />
<br />
<!-- * [[LU-LSP-b:MD5 | MD5]]: Procedūru izsaukumu steka izdruka. --><br />
<br />
<br />
Eksāmens izpaužas kā [[LU-LSP-b13:projekts | kursa projekta]] aizstāvēšana.<br />
<!--<br />
* MD7 - projekta protokola specifikācija. Skatīt arī [[LU-LSP-b13:PD_client_server | PD: Klienta un servera arhitektūra]]<br />
** [[LU-LSP-b11:PD_client_server | PD: Klienta un servera arhitektūra]] (praktiskā darba piezīmes)<br />
** [http://selavo.lv/~kursi/LSP/md7 MD7 projekta grupu risinājumi]<br />
<br />
Eksāmens izpaužas kā kursa projekta aizstāvēšana.<br />
--><br />
<br />
== Literatūra ==<br />
<br />
* 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)<br />
<br />
* "Linux system programming" by Robert Love, O'Reilly Media, 2007, ISBN 0596009585<br />
<br />
* [http://www.advancedlinuxprogramming.com/ Advanced Linux Programming] by CodeSourcery LLC,<br />
<br />
* "Building Embedded Linux Systems" O'Reilly Media, 2008, ISBN 0596529686<br />
<br />
== Saites ==<br />
<br />
* [http://tuxradar.com/content/how-linux-kernel-works Intro to Linux kernel]<br />
<br />
* [http://www.lysator.liu.se/c/bwk-tutor.html Programming in C: A Tutorial] (by Brian W. Kernighan)<br />
* [http://www.gnu.org/software/make/manual/make.html Gnu make] dokumentācija<br />
* [http://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard Tipiskas unix direktoriju hierarhijas] īss apraksts.<br />
<br />
* Sockets:<br />
** [http://gnosis.cx/publish/programming/sockets.html Programming IP Sockets on Linux] (tutorial)<br />
** [http://en.wikipedia.org/wiki/Berkeley_sockets Berkeley sockets] (Wikipēdija)<br />
<br />
* http://www.hiraeth.com/alan/tutorials/courses/unixprog.html<br />
* http://lkml.org/<br />
* [http://tldp.org/LDP/lkmpg/2.6/html/index.html The Linux Kernel Module Programming Guide]<br />
<br />
=== Linux veiktspējas analīze ===<br />
* [http://www.cyberciti.biz/tips/top-linux-monitoring-tools.html Top 10 Linux monitoring tools]<br />
* [http://www.cyberciti.biz/tips/how-do-i-find-out-linux-cpu-utilization.html CPU analīze]<br />
* [http://www.cyberciti.biz/tips/linux-disk-performance-monitoring-howto.html Disku I/O analīze]<br />
<br />
== Atziņas ==<br />
* [http://norvig.com/21-days.html Teach yourself programming in 10 years] by Peter Norvig</div>Atishttp://andromeda.df.lu.lv/wiki/index.php?title=LU-LSP-b13&diff=4866LU-LSP-b132013-12-17T14:51:48Z<p>Atis: </p>
<hr />
<div>{{LUDFKurss|Linux sistēmas programmēšana|LSP|DatZ3122|2DAT3122}}<br />
<br />
* Pasniedzējs: Leo Seļāvo ''(epasts: vards.uzvards @ gmail.com)''<br />
* Asistents: Atis Elsts ''(epasts: vards.uzvards @ gmail.com)''<br />
<br />
* {{KursiGGroup|lu-lsp-b}}<br />
<br />
* Vērtējums = 15% praktiskie darbi, 25% mājas darbi, 10% dalība klasē, 20% KD1 un 30% KD2(eksāmens).<br />
<br />
==== Praktisko un mājas darbu iesniegšana ==== <br />
* Darbi jāiesniedz uz '''kursa asistenta''' e-pastu [[Image:atis-email.gif]]<br />
* Darbi jāiesniedz kā '''pielikums''' e-pasta vēstulei, nevis vēstules tekstā<br />
* 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<br />
* Faila nosaukumam jābūt formā LSP_MD1_Vards_Uzvards.c<br />
* Nevajag arhivēt failus, ja vien tas nav prasīts uzdevuma nosacījumos<br />
<br />
==== Praktisko darbu vērtēšanas kritēriji ==== <br />
* No kursa kopējā vērtējuma 15% var saņemt par praktisko darbu kvalitatīvu izpildīšanu<br />
* Papildus par praktiskajiem darbiem saņem plusiņus, kas ietilpst 10% no kopējā vērtējuma "par darbu klasē". Tie pienākas ikvienam, kas iesniedz PD '''patstāvīgu''' risinājumu lekcijas laikā.<br />
* Ja lekcijas beigu daļā PD risinājums tiek apskatīts publiski, PD jāiesūta līdz šim laikam. Vēlāk iesniegti darbi netiek vērtēti.<br />
* Vēlāk (arī stipri) iesūtīti darbi var tikt izlaboti, bet netiek vērtēti.<br />
<br />
==== Mājas darbu vērtēšanas kritēriji ====<br />
* No kursa kopējā vērtējuma 25% veido mājas darbi<br />
* Mājas darbu iesniegšanas termiņa laiks ir 30 minūtes pirms lekcijas sākuma<br />
* Ja darbs tiek iesniegts ar novēlošanos (kaut vai 1 min), rezultāts tiek samazināts par:<br />
** '''10%''' par ik dienu pirmo piecu dienu laikā pēc termiņa, un<br />
** '''50%''' piecas vai vairāk dienas pēc termiņa. <br />
** Visi mājas darbi jāiesūta līdz kursa beigās noteiktam ''deadline'', vēlāk iesniegtie netiek vērtēti.<br />
** 2013./14. m.g. pēdējā diena MD iesniegšanai ir ''17. janvāris.''<br />
<br />
<br />
<br />
== Kalendārs ==<br />
<br />
{| border=1 cellspacing=0 cellpadding=4<br />
|-<br />
! Datums, nedēļa <br />
! Kursa saturs<br />
! Uzdevumi<br />
|-<br />
| 03.09.2013. <br />
| <br />
Virtuāla lekcija. 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.)<br />
<br />
* [http://bit.ly/1a2rHMW Kas tas ir, Linux?] - lasīt Linux.com rakstu<br />
<br />
* [[LU-LSP-B11:shell-cheatsheet | UNIX čaulas populārākās komandas un lietojumi]].<br />
<br />
<!-- [[LU-LSP-b13:L01 | Praktiskais darbs #1]]. <br />
--><br />
|<br />
Uzdots [[LU-LSP-b:MD0 | MD0]] mājas darbs - programmēšanas stils - izlasīt un ņemt vērā turpmākajos darbos.<br />
|-<br />
| 10.09.2013. <br />
| <br />
Virtuāla lekcija. Vispārīgs pārskats par valodu C.<br />
<br />
Lasīt [http://bit.ly/1a2rsl3 C valodas pamācību] no Drexel universitātes.<br />
<br />
<!-- [[LU-LSP-b13:L02 | Praktiskais darbs #2]]. <br />
--><br />
|<br />
'''Uzdots''' [[LU-LSP-b:MD1 | MD1]] mājas darbs - dzimtas koks.<br />
|-<br />
| 17.09.2013. <br />
| Datu struktūras un algoritmi valodā C.<br />
<br />
[http://jupiter.cs.fmf.lu.lv/~kursi/lsp/1-apvienota-ievadlekcija.pdf Lekcijas piezīmes]<br />
<br />
[[LU-LSP-b13:L01 | Praktiskais darbs #1]]<br />
<br />
|<br />
|-<br />
| 24.09.2013.<br />
| 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. <br />
<br />
[http://jupiter.cs.fmf.lu.lv/~kursi/lsp/2-faili.pdf Lekcijas piezīmes]<br />
<br />
[[LU-LSP-b13:L02 | Praktiskais darbs #2]]. <br />
|<br />
<!--<br />
'''Uzdots''' [[LU-LSP-b:MD2 | MD2]] mājas darbs - datubāze. --><br />
|-<br />
| 01.10.2013.<br />
| 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().<br />
<br />
|<br />
Mājas darba [[LU-LSP-b:MD1 | MD1]] '''nodošanas''' termiņš.<br />
|-<br />
| 08.10.2013.<br />
| 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().<br />
<br />
[http://jupiter.cs.fmf.lu.lv/~kursi/lsp/4-faili.pdf Lekcijas piezīmes]<br />
<br />
[[LU-LSP-b13:L03 | Praktiskais darbs #3]] - direktoriju koka apstaigāšana.<br />
|<br />
<!--Mājas darba [[LU-LSP-b:MD2 | MD2]] '''nodošanas''' termiņš. --><br />
<br />
'''Uzdots''' [[LU-LSP-b:MD3-2013 | MD3]] mājas darbs - direktoriju koka apstaigāšana.<br />
|-<br />
| 15.10.2013.<br />
| <br />
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.<br />
<br />
[[LU-LSP-b13:L04 | Praktiskais darbs #4]].<br />
|<br />
|-<br />
| 22.10.2013.<br />
| 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()''. <br />
<br />
[[LU-LSP-b13:L05 | Praktiskais darbs #5]] - ''setjmp()'',''longjmp()'' un taimera signāls.<br />
|<br />
Mājas darba [[LU-LSP-b:MD3 | MD3]] '''nodošanas''' termiņš.<br />
<br />
<!-- '''Uzdots''' [[LU-LSP-b:MD4 | MD4]] mājas darbs - setjmp() un longjmp() lietojums. --><br />
|-<br />
| 29.10.2013.<br />
| 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.<br />
Atmiņas fragmentācija. Atmiņas rezervēšanas (allocation) algoritmi, kas darbojas uz atmiņas fragmentiem.<br />
<br />
[[LU-LSP-b13:L06 | Praktiskais darbs #6]] - atmiņas rezervācija.<br />
<br />
|<br />
'''Uzdots''' [[LU-LSP-b:MD4 | MD4]] mājas darbs - atmiņas rezervācijas funkciju salīdzinājums.<br />
|-<br />
| 05.11.2013.<br />
|<br />
Daudz-uzdevumu vide. Procesi un procesu kontrole. Pavedieni. Kooperējošies procesi un preemptīvā daudz-uzdevumu metode. Komanda '''ps'''. getpid() un getppid(). fork().<br />
<br />
Apspriede par iepriekšējo PD risinājumiem.<br />
<br />
<!-- [[LU-LSP-b13:L08 | Praktiskais darbs #8]] - vienkāršs atmiņas alokators fiksēta izmēra objektiem. --><br />
|<br />
Mājas darba [[LU-LSP-b:MD4 | MD4]] '''nodošanas''' termiņš.<br />
<br />
'''Uzdots''' [[LU-LSP-b:MD5 | MD5]] - atmiņas fragmentācijas algoritmu novērtējums<br />
|-<br />
| 12.11.2013.<br />
|<br />
Vidus semestra '''kontroldarbs'''.<br />
<br />
[[LU-LSP-b13:LA | Atkļūdošana]]: Linux rīki un to lietošana. Darbs pie mājasdarbiem.<br />
|<br />
|-<br />
| 19.11.2013.<br />
| Daudz-uzdevumu vide. ''wait()'' un ''exec()''. ''system()''.<br />
<br />
[[LU-LSP-b13:L09 | Praktiskais darbs #9]] - steka satura analīze un piekļuve stekam.<br />
|<br />
Mājas darba [[LU-LSP-b:MD5 | MD5]] grupu izveidošanas termiņš.<br />
<br />
Katra grupa: lūdzu atsūtiet vienu e-pastu ar paredzamajiem dalībniekiem!<br />
|-<br />
| 26.11.2013.<br />
| Klienta un servera arhitektūra. Sockets. Komunikācija starp nesaistītiem procesiem. Daudzlietotāju sistēmas (spēles) arhitektūra).<br />
<br />
[[LU-LSP-b13:L10 | Praktiskais darbs #10]] - starpprocesu komunikācija.<br />
|<br />
Mājas darba [[LU-LSP-b:MD5 | MD5]] '''nodošanas''' termiņš.<br />
|-<br />
| 03.12.2013.<br />
| 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().<br />
<br />
|<br />
<!--<br />
Kursa projekta definēšana. --><br />
<br />
|-<br />
| 10.12.2013.<br />
| Pavedieni.<br />
<br />
[[LU-LSP-b13:L11 | Praktiskais darbs #11]] - datortīkla klienta programma.<br />
<br />
<!-- [[LU-LSP-b13:L11 | Praktiskais darbs #11]] - servera programma. --><br />
|<br />
|-<br />
| 17.12.2013.<br />
| Kursa kopsavilkums. Darbs pie [[LU-LSP-b13:projekts | kursa projekta]]. <br />
<br />
Vienota komunikācijas protokola definēšana kursa projektam.<br />
|<br />
|-<br />
| 23.12.2013. - 01.01.2014.<br />
| Ziemassvētku un Jaungada brīvdienas<br />
|<br />
&nbsp;<br />
|-<br />
| 21.01.2013.<br />
| '''Eksāmens 14:30''' 312. telpā.<br />
|<br />
&nbsp;<br />
|-<br />
|}<br />
<br />
== Mājas darbi ==<br />
<br />
* [[LU-LSP-b:MD0 | MD0]]: Izlasīt kodēšanas stila dokumentus.<br />
* [[LU-LSP-b:MD1 | MD1]]: Ģimenes koka ģenerēšanas programma.<br />
* [[LU-LSP-b:MD3 | MD3]]: Vienādo failu meklēšana direktorijas kokā.<br />
* [[LU-LSP-b:MD4 | MD4]]: Atmiņas rezervācijas funkciju salīdzināšana.<br />
* [[LU-LSP-b:MD5 | MD5]]: Atmiņas fragmentācijas algoritmu novērtējums.<br />
<br />
<!-- * [[LU-LSP-b:MD5 | MD5]]: Procedūru izsaukumu steka izdruka. --><br />
<br />
<br />
Eksāmens izpaužas kā [[LU-LSP-b13:projekts | kursa projekta]] aizstāvēšana.<br />
<!--<br />
* MD7 - projekta protokola specifikācija. Skatīt arī [[LU-LSP-b13:PD_client_server | PD: Klienta un servera arhitektūra]]<br />
** [[LU-LSP-b11:PD_client_server | PD: Klienta un servera arhitektūra]] (praktiskā darba piezīmes)<br />
** [http://selavo.lv/~kursi/LSP/md7 MD7 projekta grupu risinājumi]<br />
<br />
Eksāmens izpaužas kā kursa projekta aizstāvēšana.<br />
--><br />
<br />
== Literatūra ==<br />
<br />
* 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)<br />
<br />
* "Linux system programming" by Robert Love, O'Reilly Media, 2007, ISBN 0596009585<br />
<br />
* [http://www.advancedlinuxprogramming.com/ Advanced Linux Programming] by CodeSourcery LLC,<br />
<br />
* "Building Embedded Linux Systems" O'Reilly Media, 2008, ISBN 0596529686<br />
<br />
== Saites ==<br />
<br />
* [http://tuxradar.com/content/how-linux-kernel-works Intro to Linux kernel]<br />
<br />
* [http://www.lysator.liu.se/c/bwk-tutor.html Programming in C: A Tutorial] (by Brian W. Kernighan)<br />
* [http://www.gnu.org/software/make/manual/make.html Gnu make] dokumentācija<br />
* [http://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard Tipiskas unix direktoriju hierarhijas] īss apraksts.<br />
<br />
* Sockets:<br />
** [http://gnosis.cx/publish/programming/sockets.html Programming IP Sockets on Linux] (tutorial)<br />
** [http://en.wikipedia.org/wiki/Berkeley_sockets Berkeley sockets] (Wikipēdija)<br />
<br />
* http://www.hiraeth.com/alan/tutorials/courses/unixprog.html<br />
* http://lkml.org/<br />
* [http://tldp.org/LDP/lkmpg/2.6/html/index.html The Linux Kernel Module Programming Guide]<br />
<br />
=== Linux veiktspējas analīze ===<br />
* [http://www.cyberciti.biz/tips/top-linux-monitoring-tools.html Top 10 Linux monitoring tools]<br />
* [http://www.cyberciti.biz/tips/how-do-i-find-out-linux-cpu-utilization.html CPU analīze]<br />
* [http://www.cyberciti.biz/tips/linux-disk-performance-monitoring-howto.html Disku I/O analīze]<br />
<br />
== Atziņas ==<br />
* [http://norvig.com/21-days.html Teach yourself programming in 10 years] by Peter Norvig</div>Atishttp://andromeda.df.lu.lv/wiki/index.php?title=LU-LSP-b13&diff=4823LU-LSP-b132013-12-10T14:17:14Z<p>Atis: </p>
<hr />
<div>{{LUDFKurss|Linux sistēmas programmēšana|LSP|DatZ3122|2DAT3122}}<br />
<br />
* Pasniedzējs: Leo Seļāvo ''(epasts: vards.uzvards @ gmail.com)''<br />
* Asistents: Atis Elsts ''(epasts: vards.uzvards @ gmail.com)''<br />
<br />
* {{KursiGGroup|lu-lsp-b}}<br />
<br />
* Vērtējums = 15% praktiskie darbi, 25% mājas darbi, 10% dalība klasē, 20% KD1 un 30% KD2(eksāmens).<br />
<br />
==== Praktisko un mājas darbu iesniegšana ==== <br />
* Darbi jāiesniedz uz '''kursa asistenta''' e-pastu [[Image:atis-email.gif]]<br />
* Darbi jāiesniedz kā '''pielikums''' e-pasta vēstulei, nevis vēstules tekstā<br />
* 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<br />
* Faila nosaukumam jābūt formā LSP_MD1_Vards_Uzvards.c<br />
* Nevajag arhivēt failus, ja vien tas nav prasīts uzdevuma nosacījumos<br />
<br />
==== Praktisko darbu vērtēšanas kritēriji ==== <br />
* No kursa kopējā vērtējuma 15% var saņemt par praktisko darbu kvalitatīvu izpildīšanu<br />
* Papildus par praktiskajiem darbiem saņem plusiņus, kas ietilpst 10% no kopējā vērtējuma "par darbu klasē". Tie pienākas ikvienam, kas iesniedz PD '''patstāvīgu''' risinājumu lekcijas laikā.<br />
* Ja lekcijas beigu daļā PD risinājums tiek apskatīts publiski, PD jāiesūta līdz šim laikam. Vēlāk iesniegti darbi netiek vērtēti.<br />
* Vēlāk (arī stipri) iesūtīti darbi var tikt izlaboti, bet netiek vērtēti.<br />
<br />
==== Mājas darbu vērtēšanas kritēriji ====<br />
* No kursa kopējā vērtējuma 25% veido mājas darbi<br />
* Mājas darbu iesniegšanas termiņa laiks ir 30 minūtes pirms lekcijas sākuma<br />
* Ja darbs tiek iesniegts ar novēlošanos (kaut vai 1 min), rezultāts tiek samazināts par:<br />
** '''10%''' par ik dienu pirmo piecu dienu laikā pēc termiņa, un<br />
** '''50%''' piecas vai vairāk dienas pēc termiņa. <br />
** Visi mājas darbi jāiesūta līdz kursa beigās noteiktam ''deadline'', vēlāk iesniegtie netiek vērtēti.<br />
<br />
<br />
<br />
== Kalendārs ==<br />
<br />
{| border=1 cellspacing=0 cellpadding=4<br />
|-<br />
! Datums, nedēļa <br />
! Kursa saturs<br />
! Uzdevumi<br />
|-<br />
| 03.09.2013. <br />
| <br />
Virtuāla lekcija. 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.)<br />
<br />
* [http://bit.ly/1a2rHMW Kas tas ir, Linux?] - lasīt Linux.com rakstu<br />
<br />
* [[LU-LSP-B11:shell-cheatsheet | UNIX čaulas populārākās komandas un lietojumi]].<br />
<br />
<!-- [[LU-LSP-b13:L01 | Praktiskais darbs #1]]. <br />
--><br />
|<br />
Uzdots [[LU-LSP-b:MD0 | MD0]] mājas darbs - programmēšanas stils - izlasīt un ņemt vērā turpmākajos darbos.<br />
|-<br />
| 10.09.2013. <br />
| <br />
Virtuāla lekcija. Vispārīgs pārskats par valodu C.<br />
<br />
Lasīt [http://bit.ly/1a2rsl3 C valodas pamācību] no Drexel universitātes.<br />
<br />
<!-- [[LU-LSP-b13:L02 | Praktiskais darbs #2]]. <br />
--><br />
|<br />
'''Uzdots''' [[LU-LSP-b:MD1 | MD1]] mājas darbs - dzimtas koks.<br />
|-<br />
| 17.09.2013. <br />
| Datu struktūras un algoritmi valodā C.<br />
<br />
[http://jupiter.cs.fmf.lu.lv/~kursi/lsp/1-apvienota-ievadlekcija.pdf Lekcijas piezīmes]<br />
<br />
[[LU-LSP-b13:L01 | Praktiskais darbs #1]]<br />
<br />
|<br />
|-<br />
| 24.09.2013.<br />
| 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. <br />
<br />
[http://jupiter.cs.fmf.lu.lv/~kursi/lsp/2-faili.pdf Lekcijas piezīmes]<br />
<br />
[[LU-LSP-b13:L02 | Praktiskais darbs #2]]. <br />
|<br />
<!--<br />
'''Uzdots''' [[LU-LSP-b:MD2 | MD2]] mājas darbs - datubāze. --><br />
|-<br />
| 01.10.2013.<br />
| 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().<br />
<br />
|<br />
Mājas darba [[LU-LSP-b:MD1 | MD1]] '''nodošanas''' termiņš.<br />
|-<br />
| 08.10.2013.<br />
| 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().<br />
<br />
[http://jupiter.cs.fmf.lu.lv/~kursi/lsp/4-faili.pdf Lekcijas piezīmes]<br />
<br />
[[LU-LSP-b13:L03 | Praktiskais darbs #3]] - direktoriju koka apstaigāšana.<br />
|<br />
<!--Mājas darba [[LU-LSP-b:MD2 | MD2]] '''nodošanas''' termiņš. --><br />
<br />
'''Uzdots''' [[LU-LSP-b:MD3-2013 | MD3]] mājas darbs - direktoriju koka apstaigāšana.<br />
|-<br />
| 15.10.2013.<br />
| <br />
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.<br />
<br />
[[LU-LSP-b13:L04 | Praktiskais darbs #4]].<br />
|<br />
|-<br />
| 22.10.2013.<br />
| 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()''. <br />
<br />
[[LU-LSP-b13:L05 | Praktiskais darbs #5]] - ''setjmp()'',''longjmp()'' un taimera signāls.<br />
|<br />
Mājas darba [[LU-LSP-b:MD3 | MD3]] '''nodošanas''' termiņš.<br />
<br />
<!-- '''Uzdots''' [[LU-LSP-b:MD4 | MD4]] mājas darbs - setjmp() un longjmp() lietojums. --><br />
|-<br />
| 29.10.2013.<br />
| 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.<br />
Atmiņas fragmentācija. Atmiņas rezervēšanas (allocation) algoritmi, kas darbojas uz atmiņas fragmentiem.<br />
<br />
[[LU-LSP-b13:L06 | Praktiskais darbs #6]] - atmiņas rezervācija.<br />
<br />
|<br />
'''Uzdots''' [[LU-LSP-b:MD4 | MD4]] mājas darbs - atmiņas rezervācijas funkciju salīdzinājums.<br />
|-<br />
| 05.11.2013.<br />
|<br />
Daudz-uzdevumu vide. Procesi un procesu kontrole. Pavedieni. Kooperējošies procesi un preemptīvā daudz-uzdevumu metode. Komanda '''ps'''. getpid() un getppid(). fork().<br />
<br />
Apspriede par iepriekšējo PD risinājumiem.<br />
<br />
<!-- [[LU-LSP-b13:L08 | Praktiskais darbs #8]] - vienkāršs atmiņas alokators fiksēta izmēra objektiem. --><br />
|<br />
Mājas darba [[LU-LSP-b:MD4 | MD4]] '''nodošanas''' termiņš.<br />
<br />
'''Uzdots''' [[LU-LSP-b:MD5 | MD5]] - atmiņas fragmentācijas algoritmu novērtējums<br />
|-<br />
| 12.11.2013.<br />
|<br />
Vidus semestra '''kontroldarbs'''.<br />
<br />
[[LU-LSP-b13:LA | Atkļūdošana]]: Linux rīki un to lietošana. Darbs pie mājasdarbiem.<br />
|<br />
|-<br />
| 19.11.2013.<br />
| Daudz-uzdevumu vide. ''wait()'' un ''exec()''. ''system()''.<br />
<br />
[[LU-LSP-b13:L09 | Praktiskais darbs #9]] - steka satura analīze un piekļuve stekam.<br />
|<br />
Mājas darba [[LU-LSP-b:MD5 | MD5]] grupu izveidošanas termiņš.<br />
<br />
Katra grupa: lūdzu atsūtiet vienu e-pastu ar paredzamajiem dalībniekiem!<br />
|-<br />
| 26.11.2013.<br />
| Klienta un servera arhitektūra. Sockets. Komunikācija starp nesaistītiem procesiem. Daudzlietotāju sistēmas (spēles) arhitektūra).<br />
<br />
[[LU-LSP-b13:L10 | Praktiskais darbs #10]] - starpprocesu komunikācija.<br />
|<br />
Mājas darba [[LU-LSP-b:MD5 | MD5]] '''nodošanas''' termiņš.<br />
|-<br />
| 03.12.2013.<br />
| 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().<br />
<br />
|<br />
<!--<br />
Kursa projekta definēšana. --><br />
<br />
|-<br />
| 10.12.2013.<br />
| Pavedieni.<br />
<br />
[[LU-LSP-b13:L11 | Praktiskais darbs #11]] - datortīkla klienta programma.<br />
<br />
<!-- [[LU-LSP-b13:L11 | Praktiskais darbs #11]] - servera programma. --><br />
|<br />
|-<br />
| 17.12.2013.<br />
| Kursa kopsavilkums. Darbs pie [[LU-LSP-b13:projekts | kursa projekta]]. <br />
<br />
Vienota komunikācijas protokola definēšana kursa projektam.<br />
|<br />
|-<br />
| 23.12.2013. - 01.01.2014.<br />
| Ziemassvētku un Jaungada brīvdienas<br />
|<br />
&nbsp;<br />
|-<br />
| xx.01.2013.<br />
| '''Eksāmens xx:xx''' xxx. telpā.<br />
|<br />
&nbsp;<br />
|-<br />
|}<br />
<br />
== Mājas darbi ==<br />
<br />
* [[LU-LSP-b:MD0 | MD0]]: Izlasīt kodēšanas stila dokumentus.<br />
* [[LU-LSP-b:MD1 | MD1]]: Ģimenes koka ģenerēšanas programma.<br />
* [[LU-LSP-b:MD3 | MD3]]: Vienādo failu meklēšana direktorijas kokā.<br />
* [[LU-LSP-b:MD4 | MD4]]: Atmiņas rezervācijas funkciju salīdzināšana.<br />
* [[LU-LSP-b:MD5 | MD5]]: Atmiņas fragmentācijas algoritmu novērtējums.<br />
<br />
<!-- * [[LU-LSP-b:MD5 | MD5]]: Procedūru izsaukumu steka izdruka. --><br />
<br />
<br />
Eksāmens izpaužas kā [[LU-LSP-b13:projekts | kursa projekta]] aizstāvēšana.<br />
<!--<br />
* MD7 - projekta protokola specifikācija. Skatīt arī [[LU-LSP-b13:PD_client_server | PD: Klienta un servera arhitektūra]]<br />
** [[LU-LSP-b11:PD_client_server | PD: Klienta un servera arhitektūra]] (praktiskā darba piezīmes)<br />
** [http://selavo.lv/~kursi/LSP/md7 MD7 projekta grupu risinājumi]<br />
<br />
Eksāmens izpaužas kā kursa projekta aizstāvēšana.<br />
--><br />
<br />
== Literatūra ==<br />
<br />
* 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)<br />
<br />
* "Linux system programming" by Robert Love, O'Reilly Media, 2007, ISBN 0596009585<br />
<br />
* [http://www.advancedlinuxprogramming.com/ Advanced Linux Programming] by CodeSourcery LLC,<br />
<br />
* "Building Embedded Linux Systems" O'Reilly Media, 2008, ISBN 0596529686<br />
<br />
== Saites ==<br />
<br />
* [http://tuxradar.com/content/how-linux-kernel-works Intro to Linux kernel]<br />
<br />
* [http://www.lysator.liu.se/c/bwk-tutor.html Programming in C: A Tutorial] (by Brian W. Kernighan)<br />
* [http://www.gnu.org/software/make/manual/make.html Gnu make] dokumentācija<br />
* [http://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard Tipiskas unix direktoriju hierarhijas] īss apraksts.<br />
<br />
* Sockets:<br />
** [http://gnosis.cx/publish/programming/sockets.html Programming IP Sockets on Linux] (tutorial)<br />
** [http://en.wikipedia.org/wiki/Berkeley_sockets Berkeley sockets] (Wikipēdija)<br />
<br />
* http://www.hiraeth.com/alan/tutorials/courses/unixprog.html<br />
* http://lkml.org/<br />
* [http://tldp.org/LDP/lkmpg/2.6/html/index.html The Linux Kernel Module Programming Guide]<br />
<br />
=== Linux veiktspējas analīze ===<br />
* [http://www.cyberciti.biz/tips/top-linux-monitoring-tools.html Top 10 Linux monitoring tools]<br />
* [http://www.cyberciti.biz/tips/how-do-i-find-out-linux-cpu-utilization.html CPU analīze]<br />
* [http://www.cyberciti.biz/tips/linux-disk-performance-monitoring-howto.html Disku I/O analīze]<br />
<br />
== Atziņas ==<br />
* [http://norvig.com/21-days.html Teach yourself programming in 10 years] by Peter Norvig</div>Atishttp://andromeda.df.lu.lv/wiki/index.php?title=LU-LSP-b13:L11&diff=4822LU-LSP-b13:L112013-12-10T13:22:41Z<p>Atis: New page: == PD #11 - servera &amp; klienta programmu komunikācijas realizācija == === Uzdevums === Ir dots serveris, kas reaģē uz divām komandām - ECHO un GETHOSTNAME, un pieņem šīs koma...</p>
<hr />
<div>== PD #11 - servera &amp; klienta programmu komunikācijas realizācija ==<br />
<br />
=== Uzdevums ===<br />
<br />
Ir dots serveris, kas reaģē uz divām komandām - ECHO un GETHOSTNAME, un pieņem šīs komandas gan caur UDP, gan TCP. <br />
<br />
Jūsu uzdevums: notestēt vismaz vienas komandas darbība katrā no režīmiem (UDP un TCP).<br />
<br />
Servera kods, klienta koda aizmetņi, Makefile, un kopējais kods (common.{c,h}) dots [http://jupiter.df.lu.lv/~kursi/lsp/pd11.tgz šeit]. Uzdevums ir uzrakstīt klienta kodu, kas sūta pieprasījumu serverim, un izdrukā atbildi.<br />
<br />
<br />
Servera komandas:<br />
* Komanda ECHO: - sūta atpakaļ saņemtos datus.<br />
* Komanda GETHOSTNAME - sūta atpakaļ servera datora hosta vārdu.<br />
<br />
Testēšanu var veikt, pieslēdzoties pie pasniedzēja datora (IP adrese tiks pateikta). Kods, kas strādā tikai lokāli (pieslēdzas pie localhost) nevar saņemt maksimālo vērtējumu.<br />
<br />
=== Iesūtīšana ===<br />
<br />
Iesūtīt uz kursa asistenta e-pastu '''modificētu klienta kodu .c failā''' (citus failus nevajag!).</div>Atishttp://andromeda.df.lu.lv/wiki/index.php?title=LU-LSP-b13:L10&diff=4802LU-LSP-b13:L102013-11-26T14:48:28Z<p>Atis: </p>
<hr />
<div>== PD#10: Starprocesu komunikācija ==<br />
<br />
=== Uzdevums ===<br />
<br />
Realizēt komunikāciju starp ''parent'' un ''child'' progammām ar ''socket'' palīdzību.<br />
<br />
Parent process padod child procesam ASCII rindiņu, kura satur divus skaitļus.<br />
<br />
Child process rindiņu nolasa (piemēram, ar scanf funkciju), saskaita skatļus, izvada rezultātu (kā ASCII rindiņu) atpakaļ parentam.<br />
<br />
Koda šablons:<br />
<pre><br />
#include <sys/types.h><br />
#include <sys/socket.h><br />
#include <unistd.h><br />
#include <stdio.h><br />
#include <stdlib.h><br />
#include <string.h><br />
<br />
int main(void)<br />
{<br />
int ret = socketpair(AF_UNIX, SOCK_STREAM, 0, sock);<br />
if (ret) {<br />
perror("socketpair");<br />
return 1;<br />
}<br />
<br />
<br />
// fork<br />
<br />
// in parent code: write to socket, wait for reply, read it, and output it<br />
<br />
<br />
// in child code: read from socket, process arguments, write reply, exit<br />
<br />
return 0;<br />
}</pre><br />
<br />
=== Padomi ===<br />
<br />
* Izmantot funkciju ''fork()''.<br />
* Izmantot funkciju ''socketpair()''.<br />
<br />
<br />
=== Iesūtīšana ===<br />
<br />
Iesūtīt programmas C kodu uz kursa asistenta e-pastu.</div>Atishttp://andromeda.df.lu.lv/wiki/index.php?title=LU-LSP-b13:L10&diff=4801LU-LSP-b13:L102013-11-26T14:48:08Z<p>Atis: </p>
<hr />
<div>== PD#10: Starprocesu komunikācija ==<br />
<br />
=== Uzdevums ===<br />
<br />
Realizēt komunikāciju starp ''parent'' un ''child'' progammām ar ''socket'' palīdzību.<br />
<br />
Parent process padod child procesam ASCII rindiņu, kura satur divus skaitļus.<br />
<br />
Child process rindiņu nolasa (piemēram, ar scanf funkciju), saskaita skatļus, izvada rezultātu (kā ASCII rindiņu) atpakaļ parentam.<br />
<br />
Koda šablons:<br />
<pre><br />
#include <sys/types.h><br />
#include <sys/socket.h><br />
#include <unistd.h><br />
#include <stdio.h><br />
#include <stdlib.h><br />
#include <string.h><br />
<br />
int main(void)<br />
{<br />
int ret = socketpair(AF_UNIX, SOCK_STREAM, 0, sock);<br />
if (ret) {<br />
perror("socketpair");<br />
return 1;<br />
}<br />
<br />
<br />
// fork<br />
<br />
// in parent code: write to socket, wait for reply, read it, and output it<br />
<br />
<br />
// in child code: read from socket, process arguments, write reply, exit<br />
<br />
return 0;<br />
}</pre><br />
<br />
=== Padomi ===<br />
<br />
* Izmantot funkciju ''fork()''.<br />
* Izmantot funkciju ''scoketpair()''.<br />
<br />
<br />
=== Iesūtīšana ===<br />
<br />
Iesūtīt programmas C kodu uz kursa asistenta e-pastu.</div>Atishttp://andromeda.df.lu.lv/wiki/index.php?title=LU-LSP-b13:L10&diff=4800LU-LSP-b13:L102013-11-26T14:32:40Z<p>Atis: </p>
<hr />
<div>== PD#10: Starprocesu komunikācija ==<br />
<br />
=== Uzdevums ===<br />
<br />
Realizēt komunikāciju starp ''parent'' un ''child'' progammām ar ''socket'' palīdzību.<br />
<br />
Parent process padod child procesam ASCII rindiņu, kura satur divus skaitļus.<br />
<br />
Child process rindiņu nolasa (piemēram, ar scanf funkciju), saskaita skatļus, izvada rezultātu (kā ASCII rindiņu) atpakaļ parentam.<br />
<br />
Koda šablons:<br />
<pre><br />
#include <sys/types.h><br />
#include <unistd.h><br />
#include <stdio.h><br />
#include <stdlib.h><br />
#include <string.h><br />
#include <sys/socket.h><br />
<br />
#include <stdio.h><br />
<br />
int main(void)<br />
{<br />
int ret = socketpair(AF_UNIX, SOCK_STREAM, 0, sock);<br />
if (ret) {<br />
perror("socketpair");<br />
return 1;<br />
}<br />
<br />
<br />
// fork<br />
<br />
// in parent code: write to socket, wait for reply, read it, and output it<br />
<br />
<br />
// in child code: read from socket, process arguments, write reply, exit<br />
<br />
return 0;<br />
}</pre><br />
<br />
=== Padomi ===<br />
<br />
* Izmantot funkciju ''fork()''.<br />
* Izmantot funkciju ''scoketpair()''.<br />
<br />
<br />
=== Iesūtīšana ===<br />
<br />
Iesūtīt programmas C kodu uz kursa asistenta e-pastu.</div>Atishttp://andromeda.df.lu.lv/wiki/index.php?title=LU-LSP-b13:L10&diff=4799LU-LSP-b13:L102013-11-26T14:31:23Z<p>Atis: New page: == PD#10: Starprocesu komunikācija == === Uzdevums === Realizēt komunikāciju starp ''parent'' un ''child'' progammām ar ''socket'' palīdzību. Dota programma, kura saskaita divus s...</p>
<hr />
<div>== PD#10: Starprocesu komunikācija ==<br />
<br />
=== Uzdevums ===<br />
<br />
Realizēt komunikāciju starp ''parent'' un ''child'' progammām ar ''socket'' palīdzību.<br />
<br />
Dota programma, kura saskaita divus skaitļus. Programma ielasa datus no stdin, izvada tos uz stdout. Uzdevums: noprogrammēt otru programmu, kas izmanoto šo pirmo saskaitīšanas funkcijas realizācijai. (Testa piemēriem nav obligāti jātiek ievadītiem no konsoles, tos var iekļaut otrās programmas C kodā.)<br />
<br />
Koda šablons<br />
<pre><br />
#include <sys/types.h><br />
#include <unistd.h><br />
#include <stdio.h><br />
#include <stdlib.h><br />
#include <string.h><br />
#include <sys/socket.h><br />
<br />
#include <stdio.h><br />
<br />
int main(void)<br />
{<br />
int ret = socketpair(AF_UNIX, SOCK_STREAM, 0, sock);<br />
if (ret) {<br />
perror("socketpair");<br />
return 1;<br />
}<br />
<br />
<br />
// fork<br />
<br />
// in parent code: write to socket, wait for reply, read it, and output it<br />
<br />
<br />
// in child code: read from socket, process arguments, write reply, exit<br />
<br />
return 0;<br />
}</pre><br />
<br />
=== Padomi ===<br />
<br />
* Izmantot funkciju ''fork()''.<br />
* Izmantot funkciju ''scoketpair()''.<br />
<br />
<br />
=== Iesūtīšana ===<br />
<br />
Iesūtīt programmas C kodu uz kursa asistenta e-pastu.</div>Atishttp://andromeda.df.lu.lv/wiki/index.php?title=LU-LSP-b13&diff=4798LU-LSP-b132013-11-26T14:28:34Z<p>Atis: </p>
<hr />
<div>{{LUDFKurss|Linux sistēmas programmēšana|LSP|DatZ3122|2DAT3122}}<br />
<br />
* Pasniedzējs: Leo Seļāvo ''(epasts: vards.uzvards @ gmail.com)''<br />
* Asistents: Atis Elsts ''(epasts: vards.uzvards @ gmail.com)''<br />
<br />
* {{KursiGGroup|lu-lsp-b}}<br />
<br />
* Vērtējums = 15% praktiskie darbi, 25% mājas darbi, 10% dalība klasē, 20% KD1 un 30% KD2(eksāmens).<br />
<br />
==== Praktisko un mājas darbu iesniegšana ==== <br />
* Darbi jāiesniedz uz '''kursa asistenta''' e-pastu [[Image:atis-email.gif]]<br />
* Darbi jāiesniedz kā '''pielikums''' e-pasta vēstulei, nevis vēstules tekstā<br />
* 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<br />
* Faila nosaukumam jābūt formā LSP_MD1_Vards_Uzvards.c<br />
* Nevajag arhivēt failus, ja vien tas nav prasīts uzdevuma nosacījumos<br />
<br />
==== Praktisko darbu vērtēšanas kritēriji ==== <br />
* No kursa kopējā vērtējuma 15% var saņemt par praktisko darbu kvalitatīvu izpildīšanu<br />
* Papildus par praktiskajiem darbiem saņem plusiņus, kas ietilpst 10% no kopējā vērtējuma "par darbu klasē". Tie pienākas ikvienam, kas iesniedz PD '''patstāvīgu''' risinājumu lekcijas laikā.<br />
* Ja lekcijas beigu daļā PD risinājums tiek apskatīts publiski, PD jāiesūta līdz šim laikam. Vēlāk iesniegti darbi netiek vērtēti.<br />
* Vēlāk (arī stipri) iesūtīti darbi var tikt izlaboti, bet netiek vērtēti.<br />
<br />
==== Mājas darbu vērtēšanas kritēriji ====<br />
* No kursa kopējā vērtējuma 25% veido mājas darbi<br />
* Mājas darbu iesniegšanas termiņa laiks ir 30 minūtes pirms lekcijas sākuma<br />
* Ja darbs tiek iesniegts ar novēlošanos (kaut vai 1 min), rezultāts tiek samazināts par:<br />
** '''10%''' par ik dienu pirmo piecu dienu laikā pēc termiņa, un<br />
** '''50%''' piecas vai vairāk dienas pēc termiņa. <br />
** Visi mājas darbi jāiesūta līdz kursa beigās noteiktam ''deadline'', vēlāk iesniegtie netiek vērtēti.<br />
<br />
<br />
<br />
== Kalendārs ==<br />
<br />
{| border=1 cellspacing=0 cellpadding=4<br />
|-<br />
! Datums, nedēļa <br />
! Kursa saturs<br />
! Uzdevumi<br />
|-<br />
| 03.09.2013. <br />
| <br />
Virtuāla lekcija. 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.)<br />
<br />
* [http://bit.ly/1a2rHMW Kas tas ir, Linux?] - lasīt Linux.com rakstu<br />
<br />
* [[LU-LSP-B11:shell-cheatsheet | UNIX čaulas populārākās komandas un lietojumi]].<br />
<br />
<!-- [[LU-LSP-b13:L01 | Praktiskais darbs #1]]. <br />
--><br />
|<br />
Uzdots [[LU-LSP-b:MD0 | MD0]] mājas darbs - programmēšanas stils - izlasīt un ņemt vērā turpmākajos darbos.<br />
|-<br />
| 10.09.2013. <br />
| <br />
Virtuāla lekcija. Vispārīgs pārskats par valodu C.<br />
<br />
Lasīt [http://bit.ly/1a2rsl3 C valodas pamācību] no Drexel universitātes.<br />
<br />
<!-- [[LU-LSP-b13:L02 | Praktiskais darbs #2]]. <br />
--><br />
|<br />
'''Uzdots''' [[LU-LSP-b:MD1 | MD1]] mājas darbs - dzimtas koks.<br />
|-<br />
| 17.09.2013. <br />
| Datu struktūras un algoritmi valodā C.<br />
<br />
[http://jupiter.cs.fmf.lu.lv/~kursi/lsp/1-apvienota-ievadlekcija.pdf Lekcijas piezīmes]<br />
<br />
[[LU-LSP-b13:L01 | Praktiskais darbs #1]]<br />
<br />
|<br />
|-<br />
| 24.09.2013.<br />
| 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. <br />
<br />
[http://jupiter.cs.fmf.lu.lv/~kursi/lsp/2-faili.pdf Lekcijas piezīmes]<br />
<br />
[[LU-LSP-b13:L02 | Praktiskais darbs #2]]. <br />
|<br />
<!--<br />
'''Uzdots''' [[LU-LSP-b:MD2 | MD2]] mājas darbs - datubāze. --><br />
|-<br />
| 01.10.2013.<br />
| 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().<br />
<br />
|<br />
Mājas darba [[LU-LSP-b:MD1 | MD1]] '''nodošanas''' termiņš.<br />
|-<br />
| 08.10.2013.<br />
| 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().<br />
<br />
[http://jupiter.cs.fmf.lu.lv/~kursi/lsp/4-faili.pdf Lekcijas piezīmes]<br />
<br />
[[LU-LSP-b13:L03 | Praktiskais darbs #3]] - direktoriju koka apstaigāšana.<br />
|<br />
<!--Mājas darba [[LU-LSP-b:MD2 | MD2]] '''nodošanas''' termiņš. --><br />
<br />
'''Uzdots''' [[LU-LSP-b:MD3-2013 | MD3]] mājas darbs - direktoriju koka apstaigāšana.<br />
|-<br />
| 15.10.2013.<br />
| <br />
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.<br />
<br />
[[LU-LSP-b13:L04 | Praktiskais darbs #4]].<br />
|<br />
|-<br />
| 22.10.2013.<br />
| 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()''. <br />
<br />
[[LU-LSP-b13:L05 | Praktiskais darbs #5]] - ''setjmp()'',''longjmp()'' un taimera signāls.<br />
|<br />
Mājas darba [[LU-LSP-b:MD3 | MD3]] '''nodošanas''' termiņš.<br />
<br />
<!-- '''Uzdots''' [[LU-LSP-b:MD4 | MD4]] mājas darbs - setjmp() un longjmp() lietojums. --><br />
|-<br />
| 29.10.2013.<br />
| 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.<br />
Atmiņas fragmentācija. Atmiņas rezervēšanas (allocation) algoritmi, kas darbojas uz atmiņas fragmentiem.<br />
<br />
[[LU-LSP-b13:L06 | Praktiskais darbs #6]] - atmiņas rezervācija.<br />
<br />
|<br />
'''Uzdots''' [[LU-LSP-b:MD4 | MD4]] mājas darbs - atmiņas rezervācijas funkciju salīdzinājums.<br />
|-<br />
| 05.11.2013.<br />
|<br />
Daudz-uzdevumu vide. Procesi un procesu kontrole. Pavedieni. Kooperējošies procesi un preemptīvā daudz-uzdevumu metode. Komanda '''ps'''. getpid() un getppid(). fork().<br />
<br />
Apspriede par iepriekšējo PD risinājumiem.<br />
<br />
<!-- [[LU-LSP-b13:L08 | Praktiskais darbs #8]] - vienkāršs atmiņas alokators fiksēta izmēra objektiem. --><br />
|<br />
Mājas darba [[LU-LSP-b:MD4 | MD4]] '''nodošanas''' termiņš.<br />
<br />
'''Uzdots''' [[LU-LSP-b:MD5 | MD5]] - atmiņas fragmentācijas algoritmu novērtējums<br />
|-<br />
| 12.11.2013.<br />
|<br />
Vidus semestra '''kontroldarbs'''.<br />
<br />
[[LU-LSP-b13:LA | Atkļūdošana]]: Linux rīki un to lietošana. Darbs pie mājasdarbiem.<br />
|<br />
|-<br />
| 19.11.2013.<br />
| Daudz-uzdevumu vide. ''wait()'' un ''exec()''. ''system()''.<br />
<br />
[[LU-LSP-b13:L09 | Praktiskais darbs #9]] - steka satura analīze un piekļuve stekam.<br />
|<br />
Mājas darba [[LU-LSP-b:MD5 | MD5]] grupu izveidošanas termiņš.<br />
<br />
Katra grupa: lūdzu atsūtiet vienu e-pastu ar paredzamajiem dalībniekiem!<br />
|-<br />
| 26.11.2013.<br />
| Klienta un servera arhitektūra. Sockets. Komunikācija starp nesaistītiem procesiem. Daudzlietotāju sistēmas (spēles) arhitektūra).<br />
<br />
[[LU-LSP-b13:L10 | Praktiskais darbs #10]] - starpprocesu komunikācija.<br />
|<br />
Mājas darba [[LU-LSP-b:MD5 | MD5]] '''nodošanas''' termiņš.<br />
|-<br />
| 03.12.2013.<br />
| 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().<br />
<br />
<!-- [[LU-LSP-b13:L10 | Praktiskais darbs #10]] - datortīkla klienta programma. --><br />
|<br />
<!--<br />
Kursa projekta definēšana. --><br />
<br />
|-<br />
| 10.12.2013.<br />
| Pavedieni.<br />
<br />
<!-- [[LU-LSP-b13:L11 | Praktiskais darbs #11]] - servera programma. --><br />
|<br />
|-<br />
| 17.12.2013.<br />
| Kursa kopsavilkums. Darbs pie [[LU-LSP-b13:projekts | kursa projekta]]. <br />
<br />
Vienota komunikācijas protokola definēšana kursa projektam.<br />
|<br />
|-<br />
| 23.12.2013. - 01.01.2014.<br />
| Ziemassvētku un Jaungada brīvdienas<br />
|<br />
&nbsp;<br />
|-<br />
| xx.01.2013.<br />
| '''Eksāmens xx:xx''' xxx. telpā.<br />
|<br />
&nbsp;<br />
|-<br />
|}<br />
<br />
== Mājas darbi ==<br />
<br />
* [[LU-LSP-b:MD0 | MD0]]: Izlasīt kodēšanas stila dokumentus.<br />
* [[LU-LSP-b:MD1 | MD1]]: Ģimenes koka ģenerēšanas programma.<br />
* [[LU-LSP-b:MD3 | MD3]]: Vienādo failu meklēšana direktorijas kokā.<br />
* [[LU-LSP-b:MD4 | MD4]]: Atmiņas rezervācijas funkciju salīdzināšana.<br />
* [[LU-LSP-b:MD5 | MD5]]: Atmiņas fragmentācijas algoritmu novērtējums.<br />
<br />
<!-- * [[LU-LSP-b:MD5 | MD5]]: Procedūru izsaukumu steka izdruka. --><br />
<br />
<br />
Eksāmens izpaužas kā [[LU-LSP-b13:projekts | kursa projekta]] aizstāvēšana.<br />
<!--<br />
* MD7 - projekta protokola specifikācija. Skatīt arī [[LU-LSP-b13:PD_client_server | PD: Klienta un servera arhitektūra]]<br />
** [[LU-LSP-b11:PD_client_server | PD: Klienta un servera arhitektūra]] (praktiskā darba piezīmes)<br />
** [http://selavo.lv/~kursi/LSP/md7 MD7 projekta grupu risinājumi]<br />
<br />
Eksāmens izpaužas kā kursa projekta aizstāvēšana.<br />
--><br />
<br />
== Literatūra ==<br />
<br />
* 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)<br />
<br />
* "Linux system programming" by Robert Love, O'Reilly Media, 2007, ISBN 0596009585<br />
<br />
* [http://www.advancedlinuxprogramming.com/ Advanced Linux Programming] by CodeSourcery LLC,<br />
<br />
* "Building Embedded Linux Systems" O'Reilly Media, 2008, ISBN 0596529686<br />
<br />
== Saites ==<br />
<br />
* [http://tuxradar.com/content/how-linux-kernel-works Intro to Linux kernel]<br />
<br />
* [http://www.lysator.liu.se/c/bwk-tutor.html Programming in C: A Tutorial] (by Brian W. Kernighan)<br />
* [http://www.gnu.org/software/make/manual/make.html Gnu make] dokumentācija<br />
* [http://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard Tipiskas unix direktoriju hierarhijas] īss apraksts.<br />
<br />
* Sockets:<br />
** [http://gnosis.cx/publish/programming/sockets.html Programming IP Sockets on Linux] (tutorial)<br />
** [http://en.wikipedia.org/wiki/Berkeley_sockets Berkeley sockets] (Wikipēdija)<br />
<br />
* http://www.hiraeth.com/alan/tutorials/courses/unixprog.html<br />
* http://lkml.org/<br />
* [http://tldp.org/LDP/lkmpg/2.6/html/index.html The Linux Kernel Module Programming Guide]<br />
<br />
=== Linux veiktspējas analīze ===<br />
* [http://www.cyberciti.biz/tips/top-linux-monitoring-tools.html Top 10 Linux monitoring tools]<br />
* [http://www.cyberciti.biz/tips/how-do-i-find-out-linux-cpu-utilization.html CPU analīze]<br />
* [http://www.cyberciti.biz/tips/linux-disk-performance-monitoring-howto.html Disku I/O analīze]<br />
<br />
== Atziņas ==<br />
* [http://norvig.com/21-days.html Teach yourself programming in 10 years] by Peter Norvig</div>Atishttp://andromeda.df.lu.lv/wiki/index.php?title=LU-LSP-b13:L09&diff=4785LU-LSP-b13:L092013-11-19T15:35:49Z<p>Atis: </p>
<hr />
<div>=== Praktiskais darbs #9 - steka satura analīze un piekļuve stekam. ===<br />
<br />
* [http://www.codeproject.com/KB/windows/CallStackTest/StackLayout2.jpg Steka kadra uzbūve x86 arhitektūrā].<br />
<br />
* Funkciju izsaukumu analīze. printf() lietošana steka satura izdrukai.<br />
<br />
* Koda disasamblēšana ar ''objdump'' vai ''gdb'' programmām.<br />
objdump -dS <binary-file> | less<br />
<br />
* Piekļuve reģistru saturam caur inline asamblera kodu.<br />
#define GET_EBP_VALUE(result) \<br />
asm volatile("movl %%ebp, %0\n" : "=m" (result))<br />
<br />
==== Iesūtīšana ====<br />
<br />
Šis PD ir opcionāls.<br />
<br />
Uzdevumi:<br />
<br />
1) Panākt, ka f() izsauc sevi izmantojot steka pārpildi (bez ASM koda).<br />
<br />
2) Panākt, ka f() veiksmīgi izsauc funkciju system() ar argumentu "touch file.txt", izmantojot steka pārpildi<br />
<br />
==== Programmas kods ====<br />
<br />
Kompilēt ar opcijām "-g -fno-stack-protector"<br />
<pre><br />
#include <stdio.h><br />
#include <sys/types.h><br />
#include <sys/stat.h><br />
#include <fcntl.h><br />
<br />
void f(void) {<br />
char s[16];<br />
gets(s);<br />
printf("%s\n", s);<br />
}<br />
<br />
int main(void) {<br />
f();<br />
return 0;<br />
}<br />
</pre><br />
<br />
<br />
Modificēts kods:<br />
<pre><br />
#include <stdio.h><br />
#include <stdint.h><br />
#include <sys/types.h><br />
#include <sys/stat.h><br />
#include <fcntl.h><br />
<br />
#define GET_EBP_VALUE(result) \<br />
asm volatile("movl %%ebp, %0\n" : "=m" (result))<br />
<br />
#define GET_ESP_VALUE(result) \<br />
asm volatile("movl %%esp, %0\n" : "=m" (result))<br />
<br />
uint32_t esp, ebp;<br />
<br />
void f(void) {<br />
GET_EBP_VALUE(ebp);<br />
printf("%p\n", (void *) ebp);<br />
<br />
char s[16];<br />
gets(s);<br />
printf("%s\n", s);<br />
<br />
asm("leave");<br />
GET_ESP_VALUE(esp);<br />
*(uint32_t *) esp = f;<br />
asm("pop %eax");<br />
asm("push %eax");<br />
asm("jmp %eax");<br />
}<br />
<br />
int main(void) {<br />
f();<br />
return 0;<br />
}<br />
</pre></div>Atishttp://andromeda.df.lu.lv/wiki/index.php?title=LU-LSP-b13:L09&diff=4784LU-LSP-b13:L092013-11-19T15:33:36Z<p>Atis: </p>
<hr />
<div>=== Praktiskais darbs #9 - steka satura analīze un piekļuve stekam. ===<br />
<br />
* [http://www.codeproject.com/KB/windows/CallStackTest/StackLayout2.jpg Steka kadra uzbūve x86 arhitektūrā].<br />
<br />
* Funkciju izsaukumu analīze. printf() lietošana steka satura izdrukai.<br />
<br />
* Koda disasamblēšana ar ''objdump'' vai ''gdb'' programmām.<br />
objdump -dS <binary-file> | less<br />
<br />
* Piekļuve reģistru saturam caur inline asamblera kodu.<br />
#define GET_EBP_VALUE(result) \<br />
asm volatile("movl %%ebp, %0\n" : "=m" (result))<br />
<br />
==== Iesūtīšana ====<br />
<br />
Šis PD ir opcionāls.<br />
<br />
Uzdevumi:<br />
<br />
1) Panākt, ka f() izsauc sevi izmantojot steka pārpildi (bez ASM koda).<br />
<br />
2) Panākt, ka f() veiksmīgi izsauc funkciju system() ar argumentu "touch file.txt", izmantojot steka pārpildi<br />
<br />
==== Programmas kods ====<br />
<br />
<pre><br />
#include <stdio.h><br />
#include <sys/types.h><br />
#include <sys/stat.h><br />
#include <fcntl.h><br />
<br />
void f(void) {<br />
char s[16];<br />
gets(s);<br />
printf("%s\n", s);<br />
}<br />
<br />
int main(void) {<br />
f();<br />
return 0;<br />
}<br />
</pre><br />
<br />
<br />
Modificēts kods:<br />
<pre><br />
#include <stdio.h><br />
#include <stdint.h><br />
#include <sys/types.h><br />
#include <sys/stat.h><br />
#include <fcntl.h><br />
<br />
#define GET_EBP_VALUE(result) \<br />
asm volatile("movl %%ebp, %0\n" : "=m" (result))<br />
<br />
#define GET_ESP_VALUE(result) \<br />
asm volatile("movl %%esp, %0\n" : "=m" (result))<br />
<br />
uint32_t esp, ebp;<br />
<br />
void f(void) {<br />
GET_EBP_VALUE(ebp);<br />
printf("%p\n", (void *) ebp);<br />
<br />
char s[16];<br />
gets(s);<br />
printf("%s\n", s);<br />
<br />
asm("leave");<br />
GET_ESP_VALUE(esp);<br />
*(uint32_t *) esp = f;<br />
asm("pop %eax");<br />
asm("push %eax");<br />
asm("jmp %eax");<br />
}<br />
<br />
int main(void) {<br />
f();<br />
return 0;<br />
}<br />
</pre></div>Atishttp://andromeda.df.lu.lv/wiki/index.php?title=LU-LSP-b13:L09&diff=4783LU-LSP-b13:L092013-11-19T15:32:06Z<p>Atis: </p>
<hr />
<div>=== Praktiskais darbs #9 - steka satura analīze un piekļuve stekam. ===<br />
<br />
* [http://www.codeproject.com/KB/windows/CallStackTest/StackLayout2.jpg Steka kadra uzbūve x86 arhitektūrā].<br />
<br />
* Funkciju izsaukumu analīze. printf() lietošana steka satura izdrukai.<br />
<br />
* Koda disasamblēšana ar ''objdump'' vai ''gdb'' programmām.<br />
<br />
* Piekļuve reģistru saturam caur inline asamblera kodu.<br />
#define GET_EBP_VALUE(result) \<br />
asm volatile("movl %%ebp, %0\n" : "=m" (result))<br />
<br />
==== Iesūtīšana ====<br />
<br />
Šis PD ir opcionāls.<br />
<br />
Uzdevumi:<br />
<br />
1) Panākt, ka f() izsauc sevi izmantojot steka pārpildi (bez ASM koda).<br />
<br />
2) Panākt, ka f() veiksmīgi izsauc funkciju system() ar argumentu "touch file.txt", izmantojot steka pārpildi<br />
<br />
==== Programmas kods ====<br />
<br />
<pre><br />
#include <stdio.h><br />
#include <sys/types.h><br />
#include <sys/stat.h><br />
#include <fcntl.h><br />
<br />
void f(void) {<br />
char s[16];<br />
gets(s);<br />
printf("%s\n", s);<br />
}<br />
<br />
int main(void) {<br />
f();<br />
return 0;<br />
}<br />
</pre><br />
<br />
<br />
Modificēts kods:<br />
<pre><br />
#include <stdio.h><br />
#include <stdint.h><br />
#include <sys/types.h><br />
#include <sys/stat.h><br />
#include <fcntl.h><br />
<br />
#define GET_EBP_VALUE(result) \<br />
asm volatile("movl %%ebp, %0\n" : "=m" (result))<br />
<br />
#define GET_ESP_VALUE(result) \<br />
asm volatile("movl %%esp, %0\n" : "=m" (result))<br />
<br />
uint32_t esp, ebp;<br />
<br />
void f(void) {<br />
GET_EBP_VALUE(ebp);<br />
printf("%p\n", (void *) ebp);<br />
<br />
char s[16];<br />
gets(s);<br />
printf("%s\n", s);<br />
<br />
asm("leave");<br />
GET_ESP_VALUE(esp);<br />
*(uint32_t *) esp = f;<br />
asm("pop %eax");<br />
asm("push %eax");<br />
asm("jmp %eax");<br />
}<br />
<br />
int main(void) {<br />
f();<br />
return 0;<br />
}<br />
</pre></div>Atishttp://andromeda.df.lu.lv/wiki/index.php?title=LU-LSP-b13:L09&diff=4782LU-LSP-b13:L092013-11-19T15:12:25Z<p>Atis: </p>
<hr />
<div>=== Praktiskais darbs #9 - steka satura analīze un piekļuve stekam. ===<br />
<br />
* [http://www.codeproject.com/KB/windows/CallStackTest/StackLayout2.jpg Steka kadra uzbūve x86 arhitektūrā].<br />
<br />
* Funkciju izsaukumu analīze. printf() lietošana steka satura izdrukai.<br />
<br />
* Koda disasamblēšana ar ''objdump'' vai ''gdb'' programmām.<br />
<br />
* Piekļuve reģistru saturam caur inline asamblera kodu.<br />
#define GET_EBP_VALUE(result) \<br />
asm volatile("movl %%ebp, %0\n" : "=m" (result))<br />
<br />
==== Iesūtīšana ====<br />
<br />
Šis PD ir opcionāls.<br />
<br />
Uzdevumi:<br />
<br />
1) Panākt, ka f() izsauc sevi izmantojot steka pārpildi (bez ASM koda).<br />
<br />
2) Panākt, ka f() veiksmīgi izsauc funkciju system() ar argumentu "touch file.txt", izmantojot steka pārpildi<br />
<br />
==== Programmas kods ====<br />
<br />
<pre><br />
#include <stdio.h><br />
#include <sys/types.h><br />
#include <sys/stat.h><br />
#include <fcntl.h><br />
<br />
void f(void) {<br />
char s[16];<br />
gets(s);<br />
printf("%s\n", s);<br />
}<br />
<br />
int main(void) {<br />
f();<br />
return 0;<br />
}<br />
</pre></div>Atishttp://andromeda.df.lu.lv/wiki/index.php?title=LU-LSP-b13:L09&diff=4781LU-LSP-b13:L092013-11-19T15:12:11Z<p>Atis: New page: === Praktiskais darbs #9 - steka satura analīze un piekļuve stekam. === * [http://www.codeproject.com/KB/windows/CallStackTest/StackLayout2.jpg Steka kadra uzbūve x86 arhitektūrā]. ...</p>
<hr />
<div>=== Praktiskais darbs #9 - steka satura analīze un piekļuve stekam. ===<br />
<br />
* [http://www.codeproject.com/KB/windows/CallStackTest/StackLayout2.jpg Steka kadra uzbūve x86 arhitektūrā].<br />
<br />
* Funkciju izsaukumu analīze. printf() lietošana steka satura izdrukai.<br />
<br />
* Koda disasamblēšana ar ''objdump'' vai '''gdb'' programmām.<br />
<br />
* Piekļuve reģistru saturam caur inline asamblera kodu.<br />
#define GET_EBP_VALUE(result) \<br />
asm volatile("movl %%ebp, %0\n" : "=m" (result))<br />
<br />
==== Iesūtīšana ====<br />
<br />
Šis PD ir opcionāls.<br />
<br />
Uzdevumi:<br />
<br />
1) Panākt, ka f() izsauc sevi izmantojot steka pārpildi (bez ASM koda).<br />
<br />
2) Panākt, ka f() veiksmīgi izsauc funkciju system() ar argumentu "touch file.txt", izmantojot steka pārpildi<br />
<br />
==== Programmas kods ====<br />
<br />
<pre><br />
#include <stdio.h><br />
#include <sys/types.h><br />
#include <sys/stat.h><br />
#include <fcntl.h><br />
<br />
void f(void) {<br />
char s[16];<br />
gets(s);<br />
printf("%s\n", s);<br />
}<br />
<br />
int main(void) {<br />
f();<br />
return 0;<br />
}<br />
</pre></div>Atishttp://andromeda.df.lu.lv/wiki/index.php?title=LU-LSP-b13&diff=4780LU-LSP-b132013-11-19T15:06:32Z<p>Atis: </p>
<hr />
<div>{{LUDFKurss|Linux sistēmas programmēšana|LSP|DatZ3122|2DAT3122}}<br />
<br />
* Pasniedzējs: Leo Seļāvo ''(epasts: vards.uzvards @ gmail.com)''<br />
* Asistents: Atis Elsts ''(epasts: vards.uzvards @ gmail.com)''<br />
<br />
* {{KursiGGroup|lu-lsp-b}}<br />
<br />
* Vērtējums = 15% praktiskie darbi, 25% mājas darbi, 10% dalība klasē, 20% KD1 un 30% KD2(eksāmens).<br />
<br />
==== Praktisko un mājas darbu iesniegšana ==== <br />
* Darbi jāiesniedz uz '''kursa asistenta''' e-pastu [[Image:atis-email.gif]]<br />
* Darbi jāiesniedz kā '''pielikums''' e-pasta vēstulei, nevis vēstules tekstā<br />
* 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<br />
* Faila nosaukumam jābūt formā LSP_MD1_Vards_Uzvards.c<br />
* Nevajag arhivēt failus, ja vien tas nav prasīts uzdevuma nosacījumos<br />
<br />
==== Praktisko darbu vērtēšanas kritēriji ==== <br />
* No kursa kopējā vērtējuma 15% var saņemt par praktisko darbu kvalitatīvu izpildīšanu<br />
* Papildus par praktiskajiem darbiem saņem plusiņus, kas ietilpst 10% no kopējā vērtējuma "par darbu klasē". Tie pienākas ikvienam, kas iesniedz PD '''patstāvīgu''' risinājumu lekcijas laikā.<br />
* Ja lekcijas beigu daļā PD risinājums tiek apskatīts publiski, PD jāiesūta līdz šim laikam. Vēlāk iesniegti darbi netiek vērtēti.<br />
* Vēlāk (arī stipri) iesūtīti darbi var tikt izlaboti, bet netiek vērtēti.<br />
<br />
==== Mājas darbu vērtēšanas kritēriji ====<br />
* No kursa kopējā vērtējuma 25% veido mājas darbi<br />
* Mājas darbu iesniegšanas termiņa laiks ir 30 minūtes pirms lekcijas sākuma<br />
* Ja darbs tiek iesniegts ar novēlošanos (kaut vai 1 min), rezultāts tiek samazināts par:<br />
** '''10%''' par ik dienu pirmo piecu dienu laikā pēc termiņa, un<br />
** '''50%''' piecas vai vairāk dienas pēc termiņa. <br />
** Visi mājas darbi jāiesūta līdz kursa beigās noteiktam ''deadline'', vēlāk iesniegtie netiek vērtēti.<br />
<br />
<br />
<br />
== Kalendārs ==<br />
<br />
{| border=1 cellspacing=0 cellpadding=4<br />
|-<br />
! Datums, nedēļa <br />
! Kursa saturs<br />
! Uzdevumi<br />
|-<br />
| 03.09.2013. <br />
| <br />
Virtuāla lekcija. 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.)<br />
<br />
* [http://bit.ly/1a2rHMW Kas tas ir, Linux?] - lasīt Linux.com rakstu<br />
<br />
* [[LU-LSP-B11:shell-cheatsheet | UNIX čaulas populārākās komandas un lietojumi]].<br />
<br />
<!-- [[LU-LSP-b13:L01 | Praktiskais darbs #1]]. <br />
--><br />
|<br />
Uzdots [[LU-LSP-b:MD0 | MD0]] mājas darbs - programmēšanas stils - izlasīt un ņemt vērā turpmākajos darbos.<br />
|-<br />
| 10.09.2013. <br />
| <br />
Virtuāla lekcija. Vispārīgs pārskats par valodu C.<br />
<br />
Lasīt [http://bit.ly/1a2rsl3 C valodas pamācību] no Drexel universitātes.<br />
<br />
<!-- [[LU-LSP-b13:L02 | Praktiskais darbs #2]]. <br />
--><br />
|<br />
'''Uzdots''' [[LU-LSP-b:MD1 | MD1]] mājas darbs - dzimtas koks.<br />
|-<br />
| 17.09.2013. <br />
| Datu struktūras un algoritmi valodā C.<br />
<br />
[http://jupiter.cs.fmf.lu.lv/~kursi/lsp/1-apvienota-ievadlekcija.pdf Lekcijas piezīmes]<br />
<br />
[[LU-LSP-b13:L01 | Praktiskais darbs #1]]<br />
<br />
|<br />
|-<br />
| 24.09.2013.<br />
| 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. <br />
<br />
[http://jupiter.cs.fmf.lu.lv/~kursi/lsp/2-faili.pdf Lekcijas piezīmes]<br />
<br />
[[LU-LSP-b13:L02 | Praktiskais darbs #2]]. <br />
|<br />
<!--<br />
'''Uzdots''' [[LU-LSP-b:MD2 | MD2]] mājas darbs - datubāze. --><br />
|-<br />
| 01.10.2013.<br />
| 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().<br />
<br />
|<br />
Mājas darba [[LU-LSP-b:MD1 | MD1]] '''nodošanas''' termiņš.<br />
|-<br />
| 08.10.2013.<br />
| 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().<br />
<br />
[http://jupiter.cs.fmf.lu.lv/~kursi/lsp/4-faili.pdf Lekcijas piezīmes]<br />
<br />
[[LU-LSP-b13:L03 | Praktiskais darbs #3]] - direktoriju koka apstaigāšana.<br />
|<br />
<!--Mājas darba [[LU-LSP-b:MD2 | MD2]] '''nodošanas''' termiņš. --><br />
<br />
'''Uzdots''' [[LU-LSP-b:MD3-2013 | MD3]] mājas darbs - direktoriju koka apstaigāšana.<br />
|-<br />
| 15.10.2013.<br />
| <br />
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.<br />
<br />
[[LU-LSP-b13:L04 | Praktiskais darbs #4]].<br />
|<br />
|-<br />
| 22.10.2013.<br />
| 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()''. <br />
<br />
[[LU-LSP-b13:L05 | Praktiskais darbs #5]] - ''setjmp()'',''longjmp()'' un taimera signāls.<br />
|<br />
Mājas darba [[LU-LSP-b:MD3 | MD3]] '''nodošanas''' termiņš.<br />
<br />
<!-- '''Uzdots''' [[LU-LSP-b:MD4 | MD4]] mājas darbs - setjmp() un longjmp() lietojums. --><br />
|-<br />
| 29.10.2013.<br />
| 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.<br />
Atmiņas fragmentācija. Atmiņas rezervēšanas (allocation) algoritmi, kas darbojas uz atmiņas fragmentiem.<br />
<br />
[[LU-LSP-b13:L06 | Praktiskais darbs #6]] - atmiņas rezervācija.<br />
<br />
|<br />
'''Uzdots''' [[LU-LSP-b:MD4 | MD4]] mājas darbs - atmiņas rezervācijas funkciju salīdzinājums.<br />
|-<br />
| 05.11.2013.<br />
|<br />
Daudz-uzdevumu vide. Procesi un procesu kontrole. Pavedieni. Kooperējošies procesi un preemptīvā daudz-uzdevumu metode. Komanda '''ps'''. getpid() un getppid(). fork().<br />
<br />
Apspriede par iepriekšējo PD risinājumiem.<br />
<br />
<!-- [[LU-LSP-b13:L08 | Praktiskais darbs #8]] - vienkāršs atmiņas alokators fiksēta izmēra objektiem. --><br />
|<br />
Mājas darba [[LU-LSP-b:MD4 | MD4]] '''nodošanas''' termiņš.<br />
<br />
'''Uzdots''' [[LU-LSP-b:MD5 | MD5]] - atmiņas fragmentācijas algoritmu novērtējums<br />
|-<br />
| 12.11.2013.<br />
|<br />
Vidus semestra '''kontroldarbs'''.<br />
<br />
[[LU-LSP-b13:LA | Atkļūdošana]]: Linux rīki un to lietošana. Darbs pie mājasdarbiem.<br />
|<br />
|-<br />
| 19.11.2013.<br />
| Daudz-uzdevumu vide. ''wait()'' un ''exec()''. ''system()''.<br />
<br />
[[LU-LSP-b13:L09 | Praktiskais darbs #9]] - steka satura analīze un piekļuve stekam.<br />
|<br />
Mājas darba [[LU-LSP-b:MD5 | MD5]] grupu izveidošanas termiņš.<br />
<br />
Katra grupa: lūdzu atsūtiet vienu e-pastu ar paredzamajiem dalībniekiem!<br />
|-<br />
| 26.11.2013.<br />
| Klienta un servera arhitektūra. Sockets. Komunikācija starp nesaistītiem procesiem. Daudzlietotāju sistēmas (spēles) arhitektūra).<br />
|<br />
Mājas darba [[LU-LSP-b:MD5 | MD5]] '''nodošanas''' termiņš.<br />
|-<br />
| 03.12.2013.<br />
| 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().<br />
<br />
<!-- [[LU-LSP-b13:L10 | Praktiskais darbs #10]] - datortīkla klienta programma. --><br />
|<br />
<!--<br />
Kursa projekta definēšana. --><br />
<br />
|-<br />
| 10.12.2013.<br />
| Pavedieni.<br />
<br />
<!-- [[LU-LSP-b13:L11 | Praktiskais darbs #11]] - servera programma. --><br />
|<br />
|-<br />
| 17.12.2013.<br />
| Kursa kopsavilkums. Darbs pie [[LU-LSP-b13:projekts | kursa projekta]]. <br />
<br />
Vienota komunikācijas protokola definēšana kursa projektam.<br />
|<br />
|-<br />
| 23.12.2013. - 01.01.2014.<br />
| Ziemassvētku un Jaungada brīvdienas<br />
|<br />
&nbsp;<br />
|-<br />
| xx.01.2013.<br />
| '''Eksāmens xx:xx''' xxx. telpā.<br />
|<br />
&nbsp;<br />
|-<br />
|}<br />
<br />
== Mājas darbi ==<br />
<br />
* [[LU-LSP-b:MD0 | MD0]]: Izlasīt kodēšanas stila dokumentus.<br />
* [[LU-LSP-b:MD1 | MD1]]: Ģimenes koka ģenerēšanas programma.<br />
* [[LU-LSP-b:MD3 | MD3]]: Vienādo failu meklēšana direktorijas kokā.<br />
* [[LU-LSP-b:MD4 | MD4]]: Atmiņas rezervācijas funkciju salīdzināšana.<br />
* [[LU-LSP-b:MD5 | MD5]]: Atmiņas fragmentācijas algoritmu novērtējums.<br />
<br />
<!-- * [[LU-LSP-b:MD5 | MD5]]: Procedūru izsaukumu steka izdruka. --><br />
<br />
<br />
Eksāmens izpaužas kā [[LU-LSP-b13:projekts | kursa projekta]] aizstāvēšana.<br />
<!--<br />
* MD7 - projekta protokola specifikācija. Skatīt arī [[LU-LSP-b13:PD_client_server | PD: Klienta un servera arhitektūra]]<br />
** [[LU-LSP-b11:PD_client_server | PD: Klienta un servera arhitektūra]] (praktiskā darba piezīmes)<br />
** [http://selavo.lv/~kursi/LSP/md7 MD7 projekta grupu risinājumi]<br />
<br />
Eksāmens izpaužas kā kursa projekta aizstāvēšana.<br />
--><br />
<br />
== Literatūra ==<br />
<br />
* 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)<br />
<br />
* "Linux system programming" by Robert Love, O'Reilly Media, 2007, ISBN 0596009585<br />
<br />
* [http://www.advancedlinuxprogramming.com/ Advanced Linux Programming] by CodeSourcery LLC,<br />
<br />
* "Building Embedded Linux Systems" O'Reilly Media, 2008, ISBN 0596529686<br />
<br />
== Saites ==<br />
<br />
* [http://tuxradar.com/content/how-linux-kernel-works Intro to Linux kernel]<br />
<br />
* [http://www.lysator.liu.se/c/bwk-tutor.html Programming in C: A Tutorial] (by Brian W. Kernighan)<br />
* [http://www.gnu.org/software/make/manual/make.html Gnu make] dokumentācija<br />
* [http://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard Tipiskas unix direktoriju hierarhijas] īss apraksts.<br />
<br />
* Sockets:<br />
** [http://gnosis.cx/publish/programming/sockets.html Programming IP Sockets on Linux] (tutorial)<br />
** [http://en.wikipedia.org/wiki/Berkeley_sockets Berkeley sockets] (Wikipēdija)<br />
<br />
* http://www.hiraeth.com/alan/tutorials/courses/unixprog.html<br />
* http://lkml.org/<br />
* [http://tldp.org/LDP/lkmpg/2.6/html/index.html The Linux Kernel Module Programming Guide]<br />
<br />
=== Linux veiktspējas analīze ===<br />
* [http://www.cyberciti.biz/tips/top-linux-monitoring-tools.html Top 10 Linux monitoring tools]<br />
* [http://www.cyberciti.biz/tips/how-do-i-find-out-linux-cpu-utilization.html CPU analīze]<br />
* [http://www.cyberciti.biz/tips/linux-disk-performance-monitoring-howto.html Disku I/O analīze]<br />
<br />
== Atziņas ==<br />
* [http://norvig.com/21-days.html Teach yourself programming in 10 years] by Peter Norvig</div>Atishttp://andromeda.df.lu.lv/wiki/index.php?title=LU-LSP-b:MD5&diff=4779LU-LSP-b:MD52013-11-14T11:12:10Z<p>Atis: </p>
<hr />
<div>{{TocRight}}<br />
=MD=<br />
<br />
===Mērķi===<br />
Novērtēt dinamiskās atmiņas izdalīšanas algoritmu veiktspēju.<br />
<br />
===Uzdevums===<br />
Darbs veicams studentu grupās, kas noteiktas lekcijas laikā.<br />
<br />
Izveidot testa vidi dinamiskās atmiņas izdalīšanas algoritmiem. Vide ir programma, kam kā ieejas dati ir divi teksta faili "chunks" un "sizes".<br />
Abos failos rakstīti skaitļi, katrs savā rindā. "Chunks" definē sarakstu ar brīvo atmiņas bloku lielumiem. "Sizes" definē atmiņas pieprasījumus baitos.<br />
md5 -c chunks -s sizes<br />
<br />
Pieņemt, ka izdalītās atmiņas kopējais apjoms ir 1024 baiti.<br />
<br />
[http://en.wikipedia.org/wiki/Fragmentation_%28computer%29 Fragmentāciju] vērtē kā attiecību starp kopējo pieejamās atmiņas daudzumu un fragmentēto atmiņu. ''(Uzmanību! Kontroldarba uzdevumā dotā fragmentācijas aprēķināšanas formula ir pārāk vienkāršota un nav tieši izmantojama šim uzdevumam!)'' Ja visi testa atmiņas pieprasījumi ietilpst atmiņā, tad testu rezultāti neatšķirsies, ja lietotas vienlīdzīgas datu struktūras atmiņas rezervēšanai. Toties, ja visi pieprasījumi nesaiet, tad uzskaitiet to apjomu kas nesaiet atmiņā lai salīdzinātu algoritmus.<br />
<br />
Izvērtēt sekojošus algoritmus, un noteikt labāko pēc veiktspējas (ātrdarbības) un pēc fragmentācijas.<br />
Vērtējumam jānorāda konkrēti un salīdzināmi veiktspējas rezultāti katram algoritmam un katram testam.<br />
* BestFit<br />
* WorstFit<br />
* FirstFit<br />
* NextFit<br />
* Jūsu alternatīvais risinājums (ja tāds ir).<br />
<br />
Vairāki publiski pieejami testa failu komplekti atrodami šeit: http://jupiter.df.lu.lv/kursi/lsp/2013/mem-frag-tests/<br />
<br />
Raksts par atmiņas fragmentāciju un algoritmiem atrodams [http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.45.3382&rep=rep1&type=pdf šeit]<br />
<br />
===Jāiesniedz===<br />
<br />
* Jāiesniedz:<br />
** C programmas pirmkods un jūsu testa failu komplekts<br />
** Eseja, kur izklāstīti testa rezultāti (fails ''pdf'' formātā)<br />
* Rezultāti sūtāmi pa epastu piekabē, ar sekojošu "Subject:" LSP MD5 Vards Uzvards<br />
* E-pastā jānorāda visi komandas dalībnieki, dalībnieku skaits, kā arī katra procentuālais ieguldījums, piemēram 50/100 nozīmē 50% no visa projekta. Visu komandas dalībnieku sniegumam summā jābūt 100%.<br />
<br />
===Vērtējums===<br />
<br />
Uzdevums tiks vērtēts sekojoši:<br />
* 50% - Korekts programmas kods<br />
** Komandrindas interfeiss<br />
** First fit realizācija<br />
** Next fit realizācija<br />
** Best fit realizācija<br />
** Worst fit realizācija<br />
** Citu algoritmu realizācija, ja tāda ir<br />
** Fragmentācijas mērījumi<br />
** Laika mērījumi<br />
** Komentāri kodā<br />
* 50% - Eseja ar rezultātiem.<br />
** Algoritmu apraksts<br />
** Mērījumu / eksperimenta apraksts<br />
** Fragmentācijas novērtējums un secinājumi<br />
** Ātrdarbības novērtējums un secinājumi<br />
** Kopējie secinājumi algoritmu izvēlei<br />
** Rakstīt īsi, bet aptveroši! (Tā, lai visi punkti būtu pieminēti.)<br />
<br />
===Piemēri===<br />
<br />
md5 -c chunks1 -s sizes1<br />
<br />
==J&A (jautājumi un atbildes)==<br />
<br />
====J: Uzdevums pārāk grūts, vai var pagarināt termiņu?====<br />
<br />
A: Noteiktais termiņš paliek spēkā. Iesaku risināt savlaicīgi, lai pietiek laika neparedzētu problēmu risināšanai.<br />
<br />
====J: Vai jārealizē arī atmiņas atbrīvošanas?====<br />
<br />
A. Nē, tas nav obligāti.<br />
<br />
====J: Vai dienesta informācija jāglabā dotajos chunkos? ====<br />
<br />
A. Nē, "chunk" izmērs norāda izmantojamās brīvās atmiņas daudzumu. Brīvs "chunk" ar izmēru ''n'' vienmēr var tikt izmantots, lai rezervētu no 1 līdz ''n'' baitus atmiņas.<br />
<br />
----<br />
<br />
Uz [[LU-LSP-b | LSP kursa ]] sākuma lapu.</div>Atishttp://andromeda.df.lu.lv/wiki/index.php?title=LU-LSP-b:MD5&diff=4778LU-LSP-b:MD52013-11-14T11:11:59Z<p>Atis: </p>
<hr />
<div>{{TocRight}}<br />
=MD=<br />
<br />
===Mērķi===<br />
Novērtēt dinamiskās atmiņas izdalīšanas algoritmu veiktspēju.<br />
<br />
===Uzdevums===<br />
Darbs veicams studentu grupās, kas noteiktas lekcijas laikā.<br />
<br />
Izveidot testa vidi dinamiskās atmiņas izdalīšanas algoritmiem. Vide ir programma, kam kā ieejas dati ir divi teksta faili "chunks" un "sizes".<br />
Abos failos rakstīti skaitļi, katrs savā rindā. "Chunks" definē sarakstu ar brīvo atmiņas bloku lielumiem. "Sizes" definē atmiņas pieprasījumus baitos.<br />
md5 -c chunks -s sizes<br />
<br />
Pieņemt, ka izdalītās atmiņas kopējais apjoms ir 1024 baiti.<br />
<br />
[http://en.wikipedia.org/wiki/Fragmentation_%28computer%29 Fragmentāciju] vērtē kā attiecību starp kopējo pieejamās atmiņas daudzumu un fragmentēto atmiņu. ''(Uzmanību! Kontroldarba uzdevumā dotā fragmentācijas aprēķināšanas formula ir pārāk vienkāršota un nav tieši izmantojama šim uzdevumam!)'' Ja visi testa atmiņas pieprasījumi ietilpst atmiņā, tad testu rezultāti neatšķirsies, ja lietotas vienlīdzīgas datu struktūras atmiņas rezervēšanai. Toties, ja visi pieprasījumi nesaiet, tad uzskaitiet to apjomu kas nesaiet atmiņā lai salīdzinātu algoritmus.<br />
<br />
Izvērtēt sekojošus algoritmus, un noteikt labāko pēc veiktspējas (ātrdarbības) un pēc fragmentācijas.<br />
Vērtējumam jānorāda konkrēti un salīdzināmi veiktspējas rezultāti katram algoritmam un katram testam.<br />
* BestFit<br />
* WorstFit<br />
* FirstFit<br />
* NextFit<br />
* Jūsu alternatīvais risinājums (ja tāds ir).<br />
<br />
Vairāki publiski pieejami testa failu komplekti atrodami šeit: http://jupiter.df.lu.lv/kursi/lsp/2013/mem-frag-tests/<br />
<br />
Raksts par atmiņas fragmentāciju un algoritmiem atrodams [http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.45.3382&rep=rep1&type=pdf šeit]<br />
<br />
===Jāiesniedz===<br />
<br />
* Jāiesniedz:<br />
** C programmas pirmkods un jūsu testa failu komplekts<br />
** Eseja, kur izklāstīti testa rezultāti (fails ''pdf'' formātā)<br />
* Rezultāti sūtāmi pa epastu piekabē, ar sekojošu "Subject:" LSP MD5 Vards Uzvards<br />
* E-pastā jānorāda visi komandas dalībnieki, dalībnieku skaits, kā arī katra procentuālais ieguldījums, piemēram 50/100 nozīmē 50% no visa projekta. Visu komandas dalībnieku sniegumam summā jābūt 100%.<br />
<br />
===Vērtējums===<br />
<br />
Uzdevums tiks vērtēts sekojoši:<br />
* 50% - Korekts programmas kods<br />
** Komandrindas interfeiss<br />
** First fit realizācija<br />
** Next fit realizācija<br />
** Best fit realizācija<br />
** Worst fit realizācija<br />
** Citu algoritmu realizācija, ja tāda ir<br />
** Fragmentācijas mērījumi<br />
** Laika mērījumi<br />
** Komentāri kodā<br />
* 50% - Eseja ar rezultātiem.<br />
** Algoritmu apraksts<br />
** Mērījumu / eksperimenta apraksts<br />
** Fragmentācijas novērtējums un secinājumi<br />
** Ātrdarbības novērtējums un secinājumi<br />
** Kopējie secinājumi algoritmu izvēlei<br />
** Rakstīt īsi, bet aptveroši! (Tā, lai visi punkti būtu pieminēti.)<br />
<br />
===Piemēri===<br />
<br />
md5 -c chunks1 -s sizes1<br />
<br />
==J&A (jautājumi un atbildes)==<br />
<br />
====J: Uzdevums pārāk grūts, vai var pagarināt termiņu?====<br />
<br />
A: Noteiktais termiņš paliek spēkā. Iesaku risināt savlaicīgi, lai pietiek laika neparedzētu problēmu risināšanai.<br />
<br />
====J: Vai jārealizē arī atmiņas atbrīvošanas?====<br />
<br />
A. Nē, tas nav obligāti.<br />
<br />
====J: Vai dienesta informācija jāglabā dotajos chunkos? ===<br />
<br />
A. Nē, "chunk" izmērs norāda izmantojamās brīvās atmiņas daudzumu. Brīvs "chunk" ar izmēru ''n'' vienmēr var tikt izmantots, lai rezervētu no 1 līdz ''n'' baitus atmiņas.<br />
<br />
----<br />
<br />
Uz [[LU-LSP-b | LSP kursa ]] sākuma lapu.</div>Atishttp://andromeda.df.lu.lv/wiki/index.php?title=LU-LSP-b13&diff=4776LU-LSP-b132013-11-12T15:19:28Z<p>Atis: </p>
<hr />
<div>{{LUDFKurss|Linux sistēmas programmēšana|LSP|DatZ3122|2DAT3122}}<br />
<br />
* Pasniedzējs: Leo Seļāvo ''(epasts: vards.uzvards @ gmail.com)''<br />
* Asistents: Atis Elsts ''(epasts: vards.uzvards @ gmail.com)''<br />
<br />
* {{KursiGGroup|lu-lsp-b}}<br />
<br />
* Vērtējums = 15% praktiskie darbi, 25% mājas darbi, 10% dalība klasē, 20% KD1 un 30% KD2(eksāmens).<br />
<br />
==== Praktisko un mājas darbu iesniegšana ==== <br />
* Darbi jāiesniedz uz '''kursa asistenta''' e-pastu [[Image:atis-email.gif]]<br />
* Darbi jāiesniedz kā '''pielikums''' e-pasta vēstulei, nevis vēstules tekstā<br />
* 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<br />
* Faila nosaukumam jābūt formā LSP_MD1_Vards_Uzvards.c<br />
* Nevajag arhivēt failus, ja vien tas nav prasīts uzdevuma nosacījumos<br />
<br />
==== Praktisko darbu vērtēšanas kritēriji ==== <br />
* No kursa kopējā vērtējuma 15% var saņemt par praktisko darbu kvalitatīvu izpildīšanu<br />
* Papildus par praktiskajiem darbiem saņem plusiņus, kas ietilpst 10% no kopējā vērtējuma "par darbu klasē". Tie pienākas ikvienam, kas iesniedz PD '''patstāvīgu''' risinājumu lekcijas laikā.<br />
* Ja lekcijas beigu daļā PD risinājums tiek apskatīts publiski, PD jāiesūta līdz šim laikam. Vēlāk iesniegti darbi netiek vērtēti.<br />
* Vēlāk (arī stipri) iesūtīti darbi var tikt izlaboti, bet netiek vērtēti.<br />
<br />
==== Mājas darbu vērtēšanas kritēriji ====<br />
* No kursa kopējā vērtējuma 25% veido mājas darbi<br />
* Mājas darbu iesniegšanas termiņa laiks ir 30 minūtes pirms lekcijas sākuma<br />
* Ja darbs tiek iesniegts ar novēlošanos (kaut vai 1 min), rezultāts tiek samazināts par:<br />
** '''10%''' par ik dienu pirmo piecu dienu laikā pēc termiņa, un<br />
** '''50%''' piecas vai vairāk dienas pēc termiņa. <br />
** Visi mājas darbi jāiesūta līdz kursa beigās noteiktam ''deadline'', vēlāk iesniegtie netiek vērtēti.<br />
<br />
<br />
<br />
== Kalendārs ==<br />
<br />
{| border=1 cellspacing=0 cellpadding=4<br />
|-<br />
! Datums, nedēļa <br />
! Kursa saturs<br />
! Uzdevumi<br />
|-<br />
| 03.09.2013. <br />
| <br />
Virtuāla lekcija. 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.)<br />
<br />
* [http://bit.ly/1a2rHMW Kas tas ir, Linux?] - lasīt Linux.com rakstu<br />
<br />
* [[LU-LSP-B11:shell-cheatsheet | UNIX čaulas populārākās komandas un lietojumi]].<br />
<br />
<!-- [[LU-LSP-b13:L01 | Praktiskais darbs #1]]. <br />
--><br />
|<br />
Uzdots [[LU-LSP-b:MD0 | MD0]] mājas darbs - programmēšanas stils - izlasīt un ņemt vērā turpmākajos darbos.<br />
|-<br />
| 10.09.2013. <br />
| <br />
Virtuāla lekcija. Vispārīgs pārskats par valodu C.<br />
<br />
Lasīt [http://bit.ly/1a2rsl3 C valodas pamācību] no Drexel universitātes.<br />
<br />
<!-- [[LU-LSP-b13:L02 | Praktiskais darbs #2]]. <br />
--><br />
|<br />
'''Uzdots''' [[LU-LSP-b:MD1 | MD1]] mājas darbs - dzimtas koks.<br />
|-<br />
| 17.09.2013. <br />
| Datu struktūras un algoritmi valodā C.<br />
<br />
[http://jupiter.cs.fmf.lu.lv/~kursi/lsp/1-apvienota-ievadlekcija.pdf Lekcijas piezīmes]<br />
<br />
[[LU-LSP-b13:L01 | Praktiskais darbs #1]]<br />
<br />
|<br />
|-<br />
| 24.09.2013.<br />
| 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. <br />
<br />
[http://jupiter.cs.fmf.lu.lv/~kursi/lsp/2-faili.pdf Lekcijas piezīmes]<br />
<br />
[[LU-LSP-b13:L02 | Praktiskais darbs #2]]. <br />
|<br />
<!--<br />
'''Uzdots''' [[LU-LSP-b:MD2 | MD2]] mājas darbs - datubāze. --><br />
|-<br />
| 01.10.2013.<br />
| 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().<br />
<br />
|<br />
Mājas darba [[LU-LSP-b:MD1 | MD1]] '''nodošanas''' termiņš.<br />
|-<br />
| 08.10.2013.<br />
| 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().<br />
<br />
[http://jupiter.cs.fmf.lu.lv/~kursi/lsp/4-faili.pdf Lekcijas piezīmes]<br />
<br />
[[LU-LSP-b13:L03 | Praktiskais darbs #3]] - direktoriju koka apstaigāšana.<br />
|<br />
<!--Mājas darba [[LU-LSP-b:MD2 | MD2]] '''nodošanas''' termiņš. --><br />
<br />
'''Uzdots''' [[LU-LSP-b:MD3-2013 | MD3]] mājas darbs - direktoriju koka apstaigāšana.<br />
|-<br />
| 15.10.2013.<br />
| <br />
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.<br />
<br />
[[LU-LSP-b13:L04 | Praktiskais darbs #4]].<br />
|<br />
|-<br />
| 22.10.2013.<br />
| 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()''. <br />
<br />
[[LU-LSP-b13:L05 | Praktiskais darbs #5]] - ''setjmp()'',''longjmp()'' un taimera signāls.<br />
|<br />
Mājas darba [[LU-LSP-b:MD3 | MD3]] '''nodošanas''' termiņš.<br />
<br />
<!-- '''Uzdots''' [[LU-LSP-b:MD4 | MD4]] mājas darbs - setjmp() un longjmp() lietojums. --><br />
|-<br />
| 29.10.2013.<br />
| 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.<br />
Atmiņas fragmentācija. Atmiņas rezervēšanas (allocation) algoritmi, kas darbojas uz atmiņas fragmentiem.<br />
<br />
[[LU-LSP-b13:L06 | Praktiskais darbs #6]] - atmiņas rezervācija.<br />
<br />
|<br />
'''Uzdots''' [[LU-LSP-b:MD4 | MD4]] mājas darbs - atmiņas rezervācijas funkciju salīdzinājums.<br />
|-<br />
| 05.11.2013.<br />
|<br />
Daudz-uzdevumu vide. Procesi un procesu kontrole. Pavedieni. Kooperējošies procesi un preemptīvā daudz-uzdevumu metode. Komanda '''ps'''. getpid() un getppid(). fork().<br />
<br />
Apspriede par iepriekšējo PD risinājumiem.<br />
<br />
<!-- [[LU-LSP-b13:L08 | Praktiskais darbs #8]] - vienkāršs atmiņas alokators fiksēta izmēra objektiem. --><br />
|<br />
Mājas darba [[LU-LSP-b:MD4 | MD4]] '''nodošanas''' termiņš.<br />
<br />
'''Uzdots''' [[LU-LSP-b:MD5 | MD5]] - atmiņas fragmentācijas algoritmu novērtējums<br />
|-<br />
| 12.11.2013.<br />
|<br />
Vidus semestra '''kontroldarbs'''.<br />
<br />
[[LU-LSP-b13:LA | Atkļūdošana]]: Linux rīki un to lietošana. Darbs pie mājasdarbiem.<br />
|<br />
|-<br />
| 19.11.2013.<br />
| Daudz-uzdevumu vide. ''wait()'' un ''exec()''. ''system()''.<br />
<br />
<!-- [[LU-LSP-b13:L09 | Praktiskais darbs #9]] - steka satura analīze un piekļuve stekam. --><br />
|<br />
Mājas darba [[LU-LSP-b:MD5 | MD5]] grupu izveidošanas termiņš.<br />
<br />
Katra grupa: lūdzu atsūtiet vienu e-pastu ar paredzamajiem dalībniekiem!<br />
|-<br />
| 26.11.2013.<br />
| Klienta un servera arhitektūra. Sockets. Komunikācija starp nesaistītiem procesiem. Daudzlietotāju sistēmas (spēles) arhitektūra).<br />
|<br />
Mājas darba [[LU-LSP-b:MD5 | MD5]] '''nodošanas''' termiņš.<br />
|-<br />
| 03.12.2013.<br />
| 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().<br />
<br />
<!-- [[LU-LSP-b13:L10 | Praktiskais darbs #10]] - datortīkla klienta programma. --><br />
|<br />
<!--<br />
Kursa projekta definēšana. --><br />
<br />
|-<br />
| 10.12.2013.<br />
| Pavedieni.<br />
<br />
<!-- [[LU-LSP-b13:L11 | Praktiskais darbs #11]] - servera programma. --><br />
|<br />
|-<br />
| 17.12.2013.<br />
| Kursa kopsavilkums. Darbs pie [[LU-LSP-b13:projekts | kursa projekta]]. <br />
<br />
Vienota komunikācijas protokola definēšana kursa projektam.<br />
|<br />
|-<br />
| 23.12.2013. - 01.01.2014.<br />
| Ziemassvētku un Jaungada brīvdienas<br />
|<br />
&nbsp;<br />
|-<br />
| xx.01.2013.<br />
| '''Eksāmens xx:xx''' xxx. telpā.<br />
|<br />
&nbsp;<br />
|-<br />
|}<br />
<br />
== Mājas darbi ==<br />
<br />
* [[LU-LSP-b:MD0 | MD0]]: Izlasīt kodēšanas stila dokumentus.<br />
* [[LU-LSP-b:MD1 | MD1]]: Ģimenes koka ģenerēšanas programma.<br />
* [[LU-LSP-b:MD3 | MD3]]: Vienādo failu meklēšana direktorijas kokā.<br />
* [[LU-LSP-b:MD4 | MD4]]: Atmiņas rezervācijas funkciju salīdzināšana.<br />
* [[LU-LSP-b:MD5 | MD5]]: Atmiņas fragmentācijas algoritmu novērtējums.<br />
<br />
<!-- * [[LU-LSP-b:MD5 | MD5]]: Procedūru izsaukumu steka izdruka. --><br />
<br />
<br />
Eksāmens izpaužas kā [[LU-LSP-b13:projekts | kursa projekta]] aizstāvēšana.<br />
<!--<br />
* MD7 - projekta protokola specifikācija. Skatīt arī [[LU-LSP-b13:PD_client_server | PD: Klienta un servera arhitektūra]]<br />
** [[LU-LSP-b11:PD_client_server | PD: Klienta un servera arhitektūra]] (praktiskā darba piezīmes)<br />
** [http://selavo.lv/~kursi/LSP/md7 MD7 projekta grupu risinājumi]<br />
<br />
Eksāmens izpaužas kā kursa projekta aizstāvēšana.<br />
--><br />
<br />
== Literatūra ==<br />
<br />
* 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)<br />
<br />
* "Linux system programming" by Robert Love, O'Reilly Media, 2007, ISBN 0596009585<br />
<br />
* [http://www.advancedlinuxprogramming.com/ Advanced Linux Programming] by CodeSourcery LLC,<br />
<br />
* "Building Embedded Linux Systems" O'Reilly Media, 2008, ISBN 0596529686<br />
<br />
== Saites ==<br />
<br />
* [http://tuxradar.com/content/how-linux-kernel-works Intro to Linux kernel]<br />
<br />
* [http://www.lysator.liu.se/c/bwk-tutor.html Programming in C: A Tutorial] (by Brian W. Kernighan)<br />
* [http://www.gnu.org/software/make/manual/make.html Gnu make] dokumentācija<br />
* [http://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard Tipiskas unix direktoriju hierarhijas] īss apraksts.<br />
<br />
* Sockets:<br />
** [http://gnosis.cx/publish/programming/sockets.html Programming IP Sockets on Linux] (tutorial)<br />
** [http://en.wikipedia.org/wiki/Berkeley_sockets Berkeley sockets] (Wikipēdija)<br />
<br />
* http://www.hiraeth.com/alan/tutorials/courses/unixprog.html<br />
* http://lkml.org/<br />
* [http://tldp.org/LDP/lkmpg/2.6/html/index.html The Linux Kernel Module Programming Guide]<br />
<br />
=== Linux veiktspējas analīze ===<br />
* [http://www.cyberciti.biz/tips/top-linux-monitoring-tools.html Top 10 Linux monitoring tools]<br />
* [http://www.cyberciti.biz/tips/how-do-i-find-out-linux-cpu-utilization.html CPU analīze]<br />
* [http://www.cyberciti.biz/tips/linux-disk-performance-monitoring-howto.html Disku I/O analīze]<br />
<br />
== Atziņas ==<br />
* [http://norvig.com/21-days.html Teach yourself programming in 10 years] by Peter Norvig</div>Atishttp://andromeda.df.lu.lv/wiki/index.php?title=LU-LSP-b:MD5&diff=4775LU-LSP-b:MD52013-11-12T15:18:08Z<p>Atis: </p>
<hr />
<div>{{TocRight}}<br />
=MD=<br />
<br />
===Mērķi===<br />
Novērtēt dinamiskās atmiņas izdalīšanas algoritmu veiktspēju.<br />
<br />
===Uzdevums===<br />
Darbs veicams studentu grupās, kas noteiktas lekcijas laikā.<br />
<br />
Izveidot testa vidi dinamiskās atmiņas izdalīšanas algoritmiem. Vide ir programma, kam kā ieejas dati ir divi teksta faili "chunks" un "sizes".<br />
Abos failos rakstīti skaitļi, katrs savā rindā. "Chunks" definē sarakstu ar brīvo atmiņas bloku lielumiem. "Sizes" definē atmiņas pieprasījumus baitos.<br />
md5 -c chunks -s sizes<br />
<br />
Pieņemt, ka izdalītās atmiņas kopējais apjoms ir 1024 baiti.<br />
<br />
[http://en.wikipedia.org/wiki/Fragmentation_%28computer%29 Fragmentāciju] vērtē kā attiecību starp kopējo pieejamās atmiņas daudzumu un fragmentēto atmiņu. ''(Uzmanību! Kontroldarba uzdevumā dotā fragmentācijas aprēķināšanas formula ir pārāk vienkāršota un nav tieši izmantojama šim uzdevumam!)'' Ja visi testa atmiņas pieprasījumi ietilpst atmiņā, tad testu rezultāti neatšķirsies, ja lietotas vienlīdzīgas datu struktūras atmiņas rezervēšanai. Toties, ja visi pieprasījumi nesaiet, tad uzskaitiet to apjomu kas nesaiet atmiņā lai salīdzinātu algoritmus.<br />
<br />
Izvērtēt sekojošus algoritmus, un noteikt labāko pēc veiktspējas (ātrdarbības) un pēc fragmentācijas.<br />
Vērtējumam jānorāda konkrēti un salīdzināmi veiktspējas rezultāti katram algoritmam un katram testam.<br />
* BestFit<br />
* WorstFit<br />
* FirstFit<br />
* NextFit<br />
* Jūsu alternatīvais risinājums (ja tāds ir).<br />
<br />
Vairāki publiski pieejami testa failu komplekti atrodami šeit: http://jupiter.df.lu.lv/kursi/lsp/2013/mem-frag-tests/<br />
<br />
Raksts par atmiņas fragmentāciju un algoritmiem atrodams [http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.45.3382&rep=rep1&type=pdf šeit]<br />
<br />
===Jāiesniedz===<br />
<br />
* Jāiesniedz:<br />
** C programmas pirmkods un jūsu testa failu komplekts<br />
** Eseja, kur izklāstīti testa rezultāti (fails ''pdf'' formātā)<br />
* Rezultāti sūtāmi pa epastu piekabē, ar sekojošu "Subject:" LSP MD5 Vards Uzvards<br />
* E-pastā jānorāda visi komandas dalībnieki, dalībnieku skaits, kā arī katra procentuālais ieguldījums, piemēram 50/100 nozīmē 50% no visa projekta. Visu komandas dalībnieku sniegumam summā jābūt 100%.<br />
<br />
===Vērtējums===<br />
<br />
Uzdevums tiks vērtēts sekojoši:<br />
* 50% - Korekts programmas kods<br />
** Komandrindas interfeiss<br />
** First fit realizācija<br />
** Next fit realizācija<br />
** Best fit realizācija<br />
** Worst fit realizācija<br />
** Citu algoritmu realizācija, ja tāda ir<br />
** Fragmentācijas mērījumi<br />
** Laika mērījumi<br />
** Komentāri kodā<br />
* 50% - Eseja ar rezultātiem.<br />
** Algoritmu apraksts<br />
** Mērījumu / eksperimenta apraksts<br />
** Fragmentācijas novērtējums un secinājumi<br />
** Ātrdarbības novērtējums un secinājumi<br />
** Kopējie secinājumi algoritmu izvēlei<br />
** Rakstīt īsi, bet aptveroši! (Tā, lai visi punkti būtu pieminēti.)<br />
<br />
===Piemēri===<br />
<br />
md5 -c chunks1 -s sizes1<br />
<br />
==J&A (jautājumi un atbildes)==<br />
<br />
====J: Uzdevums pārāk grūts, vai var pagarināt termiņu?====<br />
<br />
A: Noteiktais termiņš paliek spēkā. Iesaku risināt savlaicīgi, lai pietiek laika neparedzētu problēmu risināšanai.<br />
<br />
----<br />
<br />
Uz [[LU-LSP-b | LSP kursa ]] sākuma lapu.</div>Atishttp://andromeda.df.lu.lv/wiki/index.php?title=LU-LSP-b:MD5&diff=4774LU-LSP-b:MD52013-11-12T15:17:54Z<p>Atis: </p>
<hr />
<div>{{TocRight}}<br />
=MD=<br />
<br />
===Mērķi===<br />
Novērtēt dinamiskās atmiņas izdalīšanas algoritmu veiktspēju.<br />
<br />
===Uzdevums===<br />
Darbs veicams studentu grupās, kas noteiktas lekcijas laikā.<br />
<br />
Izveidot testa vidi dinamiskās atmiņas izdalīšanas algoritmiem. Vide ir programma, kam kā ieejas dati ir divi teksta faili "chunks" un "sizes".<br />
Abos failos rakstīti skaitļi, katrs savā rindā. "Chunks" definē sarakstu ar brīvo atmiņas bloku lielumiem. "Sizes" definē atmiņas pieprasījumus baitos.<br />
md5 -c chunks -s sizes<br />
<br />
Pieņemt, ka izdalītās atmiņas kopējais apjoms ir 1024 baiti.<br />
<br />
[http://en.wikipedia.org/wiki/Fragmentation_%28computer%29 Fragmentāciju] vērtē kā attiecību starp kopējo pieejamās atmiņas daudzumu un fragmentēto atmiņu. ''(Uzmanību! Kontroldarba uzdevumā dotā fragmentācijas aprēķināšanas formula ir pārāk vienkāršotas un nav izmantojama šim uzdevumam!)'' Ja visi testa atmiņas pieprasījumi ietilpst atmiņā, tad testu rezultāti neatšķirsies, ja lietotas vienlīdzīgas datu struktūras atmiņas rezervēšanai. Toties, ja visi pieprasījumi nesaiet, tad uzskaitiet to apjomu kas nesaiet atmiņā lai salīdzinātu algoritmus.<br />
<br />
Izvērtēt sekojošus algoritmus, un noteikt labāko pēc veiktspējas (ātrdarbības) un pēc fragmentācijas.<br />
Vērtējumam jānorāda konkrēti un salīdzināmi veiktspējas rezultāti katram algoritmam un katram testam.<br />
* BestFit<br />
* WorstFit<br />
* FirstFit<br />
* NextFit<br />
* Jūsu alternatīvais risinājums (ja tāds ir).<br />
<br />
Vairāki publiski pieejami testa failu komplekti atrodami šeit: http://jupiter.df.lu.lv/kursi/lsp/2013/mem-frag-tests/<br />
<br />
Raksts par atmiņas fragmentāciju un algoritmiem atrodams [http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.45.3382&rep=rep1&type=pdf šeit]<br />
<br />
===Jāiesniedz===<br />
<br />
* Jāiesniedz:<br />
** C programmas pirmkods un jūsu testa failu komplekts<br />
** Eseja, kur izklāstīti testa rezultāti (fails ''pdf'' formātā)<br />
* Rezultāti sūtāmi pa epastu piekabē, ar sekojošu "Subject:" LSP MD5 Vards Uzvards<br />
* E-pastā jānorāda visi komandas dalībnieki, dalībnieku skaits, kā arī katra procentuālais ieguldījums, piemēram 50/100 nozīmē 50% no visa projekta. Visu komandas dalībnieku sniegumam summā jābūt 100%.<br />
<br />
===Vērtējums===<br />
<br />
Uzdevums tiks vērtēts sekojoši:<br />
* 50% - Korekts programmas kods<br />
** Komandrindas interfeiss<br />
** First fit realizācija<br />
** Next fit realizācija<br />
** Best fit realizācija<br />
** Worst fit realizācija<br />
** Citu algoritmu realizācija, ja tāda ir<br />
** Fragmentācijas mērījumi<br />
** Laika mērījumi<br />
** Komentāri kodā<br />
* 50% - Eseja ar rezultātiem.<br />
** Algoritmu apraksts<br />
** Mērījumu / eksperimenta apraksts<br />
** Fragmentācijas novērtējums un secinājumi<br />
** Ātrdarbības novērtējums un secinājumi<br />
** Kopējie secinājumi algoritmu izvēlei<br />
** Rakstīt īsi, bet aptveroši! (Tā, lai visi punkti būtu pieminēti.)<br />
<br />
===Piemēri===<br />
<br />
md5 -c chunks1 -s sizes1<br />
<br />
==J&A (jautājumi un atbildes)==<br />
<br />
====J: Uzdevums pārāk grūts, vai var pagarināt termiņu?====<br />
<br />
A: Noteiktais termiņš paliek spēkā. Iesaku risināt savlaicīgi, lai pietiek laika neparedzētu problēmu risināšanai.<br />
<br />
----<br />
<br />
Uz [[LU-LSP-b | LSP kursa ]] sākuma lapu.</div>Atishttp://andromeda.df.lu.lv/wiki/index.php?title=LU-LSP-b13&diff=4773LU-LSP-b132013-11-12T14:27:08Z<p>Atis: </p>
<hr />
<div>{{LUDFKurss|Linux sistēmas programmēšana|LSP|DatZ3122|2DAT3122}}<br />
<br />
* Pasniedzējs: Leo Seļāvo ''(epasts: vards.uzvards @ gmail.com)''<br />
* Asistents: Atis Elsts ''(epasts: vards.uzvards @ gmail.com)''<br />
<br />
* {{KursiGGroup|lu-lsp-b}}<br />
<br />
* Vērtējums = 15% praktiskie darbi, 25% mājas darbi, 10% dalība klasē, 20% KD1 un 30% KD2(eksāmens).<br />
<br />
==== Praktisko un mājas darbu iesniegšana ==== <br />
* Darbi jāiesniedz uz '''kursa asistenta''' e-pastu [[Image:atis-email.gif]]<br />
* Darbi jāiesniedz kā '''pielikums''' e-pasta vēstulei, nevis vēstules tekstā<br />
* 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<br />
* Faila nosaukumam jābūt formā LSP_MD1_Vards_Uzvards.c<br />
* Nevajag arhivēt failus, ja vien tas nav prasīts uzdevuma nosacījumos<br />
<br />
==== Praktisko darbu vērtēšanas kritēriji ==== <br />
* No kursa kopējā vērtējuma 15% var saņemt par praktisko darbu kvalitatīvu izpildīšanu<br />
* Papildus par praktiskajiem darbiem saņem plusiņus, kas ietilpst 10% no kopējā vērtējuma "par darbu klasē". Tie pienākas ikvienam, kas iesniedz PD '''patstāvīgu''' risinājumu lekcijas laikā.<br />
* Ja lekcijas beigu daļā PD risinājums tiek apskatīts publiski, PD jāiesūta līdz šim laikam. Vēlāk iesniegti darbi netiek vērtēti.<br />
* Vēlāk (arī stipri) iesūtīti darbi var tikt izlaboti, bet netiek vērtēti.<br />
<br />
==== Mājas darbu vērtēšanas kritēriji ====<br />
* No kursa kopējā vērtējuma 25% veido mājas darbi<br />
* Mājas darbu iesniegšanas termiņa laiks ir 30 minūtes pirms lekcijas sākuma<br />
* Ja darbs tiek iesniegts ar novēlošanos (kaut vai 1 min), rezultāts tiek samazināts par:<br />
** '''10%''' par ik dienu pirmo piecu dienu laikā pēc termiņa, un<br />
** '''50%''' piecas vai vairāk dienas pēc termiņa. <br />
** Visi mājas darbi jāiesūta līdz kursa beigās noteiktam ''deadline'', vēlāk iesniegtie netiek vērtēti.<br />
<br />
<br />
<br />
== Kalendārs ==<br />
<br />
{| border=1 cellspacing=0 cellpadding=4<br />
|-<br />
! Datums, nedēļa <br />
! Kursa saturs<br />
! Uzdevumi<br />
|-<br />
| 03.09.2013. <br />
| <br />
Virtuāla lekcija. 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.)<br />
<br />
* [http://bit.ly/1a2rHMW Kas tas ir, Linux?] - lasīt Linux.com rakstu<br />
<br />
* [[LU-LSP-B11:shell-cheatsheet | UNIX čaulas populārākās komandas un lietojumi]].<br />
<br />
<!-- [[LU-LSP-b13:L01 | Praktiskais darbs #1]]. <br />
--><br />
|<br />
Uzdots [[LU-LSP-b:MD0 | MD0]] mājas darbs - programmēšanas stils - izlasīt un ņemt vērā turpmākajos darbos.<br />
|-<br />
| 10.09.2013. <br />
| <br />
Virtuāla lekcija. Vispārīgs pārskats par valodu C.<br />
<br />
Lasīt [http://bit.ly/1a2rsl3 C valodas pamācību] no Drexel universitātes.<br />
<br />
<!-- [[LU-LSP-b13:L02 | Praktiskais darbs #2]]. <br />
--><br />
|<br />
'''Uzdots''' [[LU-LSP-b:MD1 | MD1]] mājas darbs - dzimtas koks.<br />
|-<br />
| 17.09.2013. <br />
| Datu struktūras un algoritmi valodā C.<br />
<br />
[http://jupiter.cs.fmf.lu.lv/~kursi/lsp/1-apvienota-ievadlekcija.pdf Lekcijas piezīmes]<br />
<br />
[[LU-LSP-b13:L01 | Praktiskais darbs #1]]<br />
<br />
|<br />
|-<br />
| 24.09.2013.<br />
| 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. <br />
<br />
[http://jupiter.cs.fmf.lu.lv/~kursi/lsp/2-faili.pdf Lekcijas piezīmes]<br />
<br />
[[LU-LSP-b13:L02 | Praktiskais darbs #2]]. <br />
|<br />
<!--<br />
'''Uzdots''' [[LU-LSP-b:MD2 | MD2]] mājas darbs - datubāze. --><br />
|-<br />
| 01.10.2013.<br />
| 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().<br />
<br />
|<br />
Mājas darba [[LU-LSP-b:MD1 | MD1]] '''nodošanas''' termiņš.<br />
|-<br />
| 08.10.2013.<br />
| 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().<br />
<br />
[http://jupiter.cs.fmf.lu.lv/~kursi/lsp/4-faili.pdf Lekcijas piezīmes]<br />
<br />
[[LU-LSP-b13:L03 | Praktiskais darbs #3]] - direktoriju koka apstaigāšana.<br />
|<br />
<!--Mājas darba [[LU-LSP-b:MD2 | MD2]] '''nodošanas''' termiņš. --><br />
<br />
'''Uzdots''' [[LU-LSP-b:MD3-2013 | MD3]] mājas darbs - direktoriju koka apstaigāšana.<br />
|-<br />
| 15.10.2013.<br />
| <br />
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.<br />
<br />
[[LU-LSP-b13:L04 | Praktiskais darbs #4]].<br />
|<br />
|-<br />
| 22.10.2013.<br />
| 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()''. <br />
<br />
[[LU-LSP-b13:L05 | Praktiskais darbs #5]] - ''setjmp()'',''longjmp()'' un taimera signāls.<br />
|<br />
Mājas darba [[LU-LSP-b:MD3 | MD3]] '''nodošanas''' termiņš.<br />
<br />
<!-- '''Uzdots''' [[LU-LSP-b:MD4 | MD4]] mājas darbs - setjmp() un longjmp() lietojums. --><br />
|-<br />
| 29.10.2013.<br />
| 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.<br />
Atmiņas fragmentācija. Atmiņas rezervēšanas (allocation) algoritmi, kas darbojas uz atmiņas fragmentiem.<br />
<br />
[[LU-LSP-b13:L06 | Praktiskais darbs #6]] - atmiņas rezervācija.<br />
<br />
|<br />
'''Uzdots''' [[LU-LSP-b:MD4 | MD4]] mājas darbs - atmiņas rezervācijas funkciju salīdzinājums.<br />
|-<br />
| 05.11.2013.<br />
|<br />
Daudz-uzdevumu vide. Procesi un procesu kontrole. Pavedieni. Kooperējošies procesi un preemptīvā daudz-uzdevumu metode. Komanda '''ps'''. getpid() un getppid(). fork().<br />
<br />
Apspriede par iepriekšējo PD risinājumiem.<br />
<br />
<!-- [[LU-LSP-b13:L08 | Praktiskais darbs #8]] - vienkāršs atmiņas alokators fiksēta izmēra objektiem. --><br />
|<br />
Mājas darba [[LU-LSP-b:MD4 | MD4]] '''nodošanas''' termiņš.<br />
<br />
'''Uzdots''' [[LU-LSP-b:MD5 | MD5]] - atmiņas fragmentācijas algoritmu novērtējums<br />
|-<br />
| 12.11.2013.<br />
|<br />
Vidus semestra '''kontroldarbs'''.<br />
<br />
[[LU-LSP-b13:LA | Atkļūdošana]]: Linux rīki un to lietošana. Darbs pie mājasdarbiem.<br />
|<br />
<br />
Mājas darba [[LU-LSP-b:MD5 | MD5]] grupu izveidošanas termiņš. <br />
|-<br />
| 19.11.2013.<br />
| Daudz-uzdevumu vide. ''wait()'' un ''exec()''. ''system()''.<br />
<br />
<!-- [[LU-LSP-b13:L09 | Praktiskais darbs #9]] - steka satura analīze un piekļuve stekam. --><br />
|<br />
Mājas darba [[LU-LSP-b:MD5 | MD5]] '''nodošanas''' termiņš.<br />
|-<br />
| 26.11.2013.<br />
| Klienta un servera arhitektūra. Sockets. Komunikācija starp nesaistītiem procesiem. Daudzlietotāju sistēmas (spēles) arhitektūra).<br />
|<br />
|-<br />
| 03.12.2013.<br />
| 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().<br />
<br />
<!-- [[LU-LSP-b13:L10 | Praktiskais darbs #10]] - datortīkla klienta programma. --><br />
|<br />
<!--<br />
Kursa projekta definēšana. --><br />
<br />
|-<br />
| 10.12.2013.<br />
| Pavedieni.<br />
<br />
<!-- [[LU-LSP-b13:L11 | Praktiskais darbs #11]] - servera programma. --><br />
|<br />
|-<br />
| 17.12.2013.<br />
| Kursa kopsavilkums. Darbs pie [[LU-LSP-b13:projekts | kursa projekta]]. <br />
<br />
Vienota komunikācijas protokola definēšana kursa projektam.<br />
|<br />
|-<br />
| 23.12.2013. - 01.01.2014.<br />
| Ziemassvētku un Jaungada brīvdienas<br />
|<br />
&nbsp;<br />
|-<br />
| xx.01.2013.<br />
| '''Eksāmens xx:xx''' xxx. telpā.<br />
|<br />
&nbsp;<br />
|-<br />
|}<br />
<br />
== Mājas darbi ==<br />
<br />
* [[LU-LSP-b:MD0 | MD0]]: Izlasīt kodēšanas stila dokumentus.<br />
* [[LU-LSP-b:MD1 | MD1]]: Ģimenes koka ģenerēšanas programma.<br />
* [[LU-LSP-b:MD3 | MD3]]: Vienādo failu meklēšana direktorijas kokā.<br />
* [[LU-LSP-b:MD4 | MD4]]: Atmiņas rezervācijas funkciju salīdzināšana.<br />
* [[LU-LSP-b:MD5 | MD5]]: Atmiņas fragmentācijas algoritmu novērtējums.<br />
<br />
<!-- * [[LU-LSP-b:MD5 | MD5]]: Procedūru izsaukumu steka izdruka. --><br />
<br />
<br />
Eksāmens izpaužas kā [[LU-LSP-b13:projekts | kursa projekta]] aizstāvēšana.<br />
<!--<br />
* MD7 - projekta protokola specifikācija. Skatīt arī [[LU-LSP-b13:PD_client_server | PD: Klienta un servera arhitektūra]]<br />
** [[LU-LSP-b11:PD_client_server | PD: Klienta un servera arhitektūra]] (praktiskā darba piezīmes)<br />
** [http://selavo.lv/~kursi/LSP/md7 MD7 projekta grupu risinājumi]<br />
<br />
Eksāmens izpaužas kā kursa projekta aizstāvēšana.<br />
--><br />
<br />
== Literatūra ==<br />
<br />
* 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)<br />
<br />
* "Linux system programming" by Robert Love, O'Reilly Media, 2007, ISBN 0596009585<br />
<br />
* [http://www.advancedlinuxprogramming.com/ Advanced Linux Programming] by CodeSourcery LLC,<br />
<br />
* "Building Embedded Linux Systems" O'Reilly Media, 2008, ISBN 0596529686<br />
<br />
== Saites ==<br />
<br />
* [http://tuxradar.com/content/how-linux-kernel-works Intro to Linux kernel]<br />
<br />
* [http://www.lysator.liu.se/c/bwk-tutor.html Programming in C: A Tutorial] (by Brian W. Kernighan)<br />
* [http://www.gnu.org/software/make/manual/make.html Gnu make] dokumentācija<br />
* [http://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard Tipiskas unix direktoriju hierarhijas] īss apraksts.<br />
<br />
* Sockets:<br />
** [http://gnosis.cx/publish/programming/sockets.html Programming IP Sockets on Linux] (tutorial)<br />
** [http://en.wikipedia.org/wiki/Berkeley_sockets Berkeley sockets] (Wikipēdija)<br />
<br />
* http://www.hiraeth.com/alan/tutorials/courses/unixprog.html<br />
* http://lkml.org/<br />
* [http://tldp.org/LDP/lkmpg/2.6/html/index.html The Linux Kernel Module Programming Guide]<br />
<br />
=== Linux veiktspējas analīze ===<br />
* [http://www.cyberciti.biz/tips/top-linux-monitoring-tools.html Top 10 Linux monitoring tools]<br />
* [http://www.cyberciti.biz/tips/how-do-i-find-out-linux-cpu-utilization.html CPU analīze]<br />
* [http://www.cyberciti.biz/tips/linux-disk-performance-monitoring-howto.html Disku I/O analīze]<br />
<br />
== Atziņas ==<br />
* [http://norvig.com/21-days.html Teach yourself programming in 10 years] by Peter Norvig</div>Atishttp://andromeda.df.lu.lv/wiki/index.php?title=LU-LSP-b13:LA&diff=4772LU-LSP-b13:LA2013-11-12T13:24:45Z<p>Atis: </p>
<hr />
<div>=== Linux lietotāja programmatūras atkļūdošanas rīki ===<br />
<br />
* '''gdb''' - GNU debugger<br />
** '''gdbserver''' - GDB papildprogramma attālinātai atklūdošanai. gdbserver var palaist, piemēram, uz iegultas sistēmas bez grafiskās saskarnes, un atkļūdot tur esošās programmas caur TCP savienojumu, pieslēdzoties ar "parasto" GDB kā ar klientu.<br />
* '''valgrind''' - apvieno sevī vairākus jaudīgus rīkus: dinamiskās atmiņas lietošanas pārbaudes rīku (<code>--tool=memcheck</code>), profilētāju (<code>--tool=callgrind</code>) u.c.<br />
* '''objdump''' - disasemblēšanas rīks, simbolu informācija<br />
* '''/proc failusistēma''' - visa veida informācija par procesiem un sistēmas resursiem<br />
* '''strace''' & '''ltrace''' utilītas, '''ptrace''' sistēmas izsaukums - konkrēta procesa darbības izsekošana<br />
* Dažāda veida informācija par resursu lietojumu:<br />
** '''ps''' - procesi<br />
** '''top'''/'''htop''' - aktīvākie procesi<br />
** '''nstat''' - tīkls ("network status") <br />
** '''vmstat''' - atmiņa ("virtual memory status")<br />
* Vēl cita veida informācija par resursu lietojumu (vairāk kodola un HW atkļūdošanai?):<br />
** '''lsusb''' - parādīt pieslēgtās USB ierīces ("list usb")<br />
** '''lspci''' - parādīt pieslēgtās PCI ierīces ("list pci")<br />
** '''lsof''' - parādīt atvērtos failus ("list open files")<br />
<br />
<br />
<br />
=== Piemērs ===<br />
<br />
Atkļūdojamās programmas kods:<br />
<br />
<pre><br />
#include <stdio.h><br />
#include <stdlib.h><br />
<br />
void nullDeref(int *p) {<br />
*p = 0x1234;<br />
}<br />
<br />
void f(int param);<br />
void g(void) {<br />
printf("calling g\n");<br />
f(0);<br />
}<br />
<br />
void f(int param) {<br />
int localVariable = 1;<br />
printf("calling f, &localVariable=%p\n", &localVariable);<br />
g();<br />
}<br />
<br />
void stackOverflow(void) {<br />
f(1);<br />
}<br />
<br />
void memoryAllocate(void) {<br />
int i, j;<br />
char *array = malloc(10);<br />
i = j = 5;<br />
while (i-- >= 0) {<br />
array[i] = 0x13;<br />
}<br />
while (j++ >= 0) {<br />
array[j] = 0x13;<br />
}<br />
}<br />
<br />
<br />
int main(void) {<br />
int i;<br />
int *p = NULL;<br />
nullDeref(p);<br />
stackOverflow();<br />
for (i = 0; i < 100; ++i) {<br />
memoryAllocate();<br />
}<br />
return 0;<br />
}<br />
</pre></div>Atishttp://andromeda.df.lu.lv/wiki/index.php?title=LU-LSP-b13:LA&diff=4771LU-LSP-b13:LA2013-11-12T13:24:06Z<p>Atis: </p>
<hr />
<div>=== Linux lietotāja programmatūras atkļūdošanas rīki ===<br />
<br />
* '''gdb''' - GNU debugger<br />
** '''gdbserver''' - GDB papildprogramma attālinātai atklūdošanai. gdbserver var palaist, piemēram, uz iegultas sistēmas bez grafiskās saskarnes, un atkļūdot tur esošās programmas caur TCP savienojumu, pieslēdzoties ar "parasto" GDB kā ar klientu.<br />
* '''valgrind''' - apvieno sevī vairākus jaudīgus rīkus: dinamiskās atmiņas lietošanas pārbaudes rīku (<code>--tool=memcheck</code>), profilētāju (<code>--tool=callgrind</code>) u.c.<br />
* '''objdump''' - disasemblēšanas rīks, simbolu informācija<br />
* '''/proc failusistēma''' - visa veida informācija par procesiem un sistēmas resursiem<br />
* '''strace''' & '''ltrace''' utilītas, '''ptrace''' sistēmas izsaukums - konkrēta procesa darbības izsekošana<br />
* Dažāda veida informācija par resursu lietojumu:<br />
** '''ps''' - procesi<br />
** '''top'''/'''htop''' - aktīvākie procesi<br />
** '''nstat''' - tīkls ("network status") <br />
** '''vmstat''' - atmiņa ("virtual memory status")<br />
* Vēl cita veida informācija par resursu lietojumu (vairāk kodola un HW atkļūdošanai?):<br />
** '''lsusb''' - parādīt pieslēgtās USB ierīces<br />
** '''lspci''' - parādīt pieslēgtās PCI ierīces<br />
** '''lsof''' - parādīt atvērtos failus<br />
<br />
<br />
<br />
=== Piemērs ===<br />
<br />
Atkļūdojamās programmas kods:<br />
<br />
<pre><br />
#include <stdio.h><br />
#include <stdlib.h><br />
<br />
void nullDeref(int *p) {<br />
*p = 0x1234;<br />
}<br />
<br />
void f(int param);<br />
void g(void) {<br />
printf("calling g\n");<br />
f(0);<br />
}<br />
<br />
void f(int param) {<br />
int localVariable = 1;<br />
printf("calling f, &localVariable=%p\n", &localVariable);<br />
g();<br />
}<br />
<br />
void stackOverflow(void) {<br />
f(1);<br />
}<br />
<br />
void memoryAllocate(void) {<br />
int i, j;<br />
char *array = malloc(10);<br />
i = j = 5;<br />
while (i-- >= 0) {<br />
array[i] = 0x13;<br />
}<br />
while (j++ >= 0) {<br />
array[j] = 0x13;<br />
}<br />
}<br />
<br />
<br />
int main(void) {<br />
int i;<br />
int *p = NULL;<br />
nullDeref(p);<br />
stackOverflow();<br />
for (i = 0; i < 100; ++i) {<br />
memoryAllocate();<br />
}<br />
return 0;<br />
}<br />
</pre></div>Atishttp://andromeda.df.lu.lv/wiki/index.php?title=LU-LSP-b13:LA&diff=4770LU-LSP-b13:LA2013-11-12T13:22:13Z<p>Atis: </p>
<hr />
<div>=== Linux lietotāja programmatūras atkļūdošanas rīki ===<br />
<br />
* '''gdb''' - GNU debugger<br />
** '''gdbserver''' - GDB papildprogramma attālinātai atklūdošanai. gdbserver var palaist, piemēram, uz iegultas sistēmas bez grafiskās saskarnes, un atkļūdot tur esošās programmas caur TCP savienojumu, pieslēdzoties ar "parasto" GDB kā ar klientu.<br />
* '''valgrind''' - apvieno sevī vairākus jaudīgus rīkus: dinamiskās atmiņas lietošanas pārbaudes rīku (<code>--tool=memcheck</code>), profilētāju (<code>--tool=callgrind</code>) u.c.<br />
* '''objdump''' - disasemblēšanas rīks<br />
* '''/proc failusistēma''' - visa veida informācija par procesiem un sistēmas resursiem<br />
* '''strace''' & '''ltrace''' utilītas, '''ptrace''' sistēmas izsaukums - konkrēta procesa darbības izsekošana<br />
* Dažāda veida informācija par resursu lietojumu:<br />
** '''ps''' - procesi<br />
** '''top'''/'''htop''' - aktīvākie procesi<br />
** '''nstat''' - tīkls ("network status") <br />
** '''vmstat''' - atmiņa ("virtual memory status")<br />
* Vēl cita veida informācija par resursu lietojumu (vairāk kodola un HW atkļūdošanai?):<br />
** '''lsusb''' - parādīt pieslēgtās USB ierīces<br />
** '''lspci''' - parādīt pieslēgtās PCI ierīces<br />
** '''lsof''' - parādīt atvērtos failus<br />
<br />
<br />
<br />
=== Piemērs ===<br />
<br />
Atkļūdojamās programmas kods:<br />
<br />
<pre><br />
#include <stdio.h><br />
#include <stdlib.h><br />
<br />
void nullDeref(int *p) {<br />
*p = 0x1234;<br />
}<br />
<br />
void f(int param);<br />
void g(void) {<br />
printf("calling g\n");<br />
f(0);<br />
}<br />
<br />
void f(int param) {<br />
int localVariable = 1;<br />
printf("calling f, &localVariable=%p\n", &localVariable);<br />
g();<br />
}<br />
<br />
void stackOverflow(void) {<br />
f(1);<br />
}<br />
<br />
void memoryAllocate(void) {<br />
int i, j;<br />
char *array = malloc(10);<br />
i = j = 5;<br />
while (i-- >= 0) {<br />
array[i] = 0x13;<br />
}<br />
while (j++ >= 0) {<br />
array[j] = 0x13;<br />
}<br />
}<br />
<br />
<br />
int main(void) {<br />
int i;<br />
int *p = NULL;<br />
nullDeref(p);<br />
stackOverflow();<br />
for (i = 0; i < 100; ++i) {<br />
memoryAllocate();<br />
}<br />
return 0;<br />
}<br />
</pre></div>Atishttp://andromeda.df.lu.lv/wiki/index.php?title=LU-LSP-b13&diff=4769LU-LSP-b132013-11-12T13:20:35Z<p>Atis: </p>
<hr />
<div>{{LUDFKurss|Linux sistēmas programmēšana|LSP|DatZ3122|2DAT3122}}<br />
<br />
* Pasniedzējs: Leo Seļāvo ''(epasts: vards.uzvards @ gmail.com)''<br />
* Asistents: Atis Elsts ''(epasts: vards.uzvards @ gmail.com)''<br />
<br />
* {{KursiGGroup|lu-lsp-b}}<br />
<br />
* Vērtējums = 15% praktiskie darbi, 25% mājas darbi, 10% dalība klasē, 20% KD1 un 30% KD2(eksāmens).<br />
<br />
==== Praktisko un mājas darbu iesniegšana ==== <br />
* Darbi jāiesniedz uz '''kursa asistenta''' e-pastu [[Image:atis-email.gif]]<br />
* Darbi jāiesniedz kā '''pielikums''' e-pasta vēstulei, nevis vēstules tekstā<br />
* 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<br />
* Faila nosaukumam jābūt formā LSP_MD1_Vards_Uzvards.c<br />
* Nevajag arhivēt failus, ja vien tas nav prasīts uzdevuma nosacījumos<br />
<br />
==== Praktisko darbu vērtēšanas kritēriji ==== <br />
* No kursa kopējā vērtējuma 15% var saņemt par praktisko darbu kvalitatīvu izpildīšanu<br />
* Papildus par praktiskajiem darbiem saņem plusiņus, kas ietilpst 10% no kopējā vērtējuma "par darbu klasē". Tie pienākas ikvienam, kas iesniedz PD '''patstāvīgu''' risinājumu lekcijas laikā.<br />
* Ja lekcijas beigu daļā PD risinājums tiek apskatīts publiski, PD jāiesūta līdz šim laikam. Vēlāk iesniegti darbi netiek vērtēti.<br />
* Vēlāk (arī stipri) iesūtīti darbi var tikt izlaboti, bet netiek vērtēti.<br />
<br />
==== Mājas darbu vērtēšanas kritēriji ====<br />
* No kursa kopējā vērtējuma 25% veido mājas darbi<br />
* Mājas darbu iesniegšanas termiņa laiks ir 30 minūtes pirms lekcijas sākuma<br />
* Ja darbs tiek iesniegts ar novēlošanos (kaut vai 1 min), rezultāts tiek samazināts par:<br />
** '''10%''' par ik dienu pirmo piecu dienu laikā pēc termiņa, un<br />
** '''50%''' piecas vai vairāk dienas pēc termiņa. <br />
** Visi mājas darbi jāiesūta līdz kursa beigās noteiktam ''deadline'', vēlāk iesniegtie netiek vērtēti.<br />
<br />
<br />
<br />
== Kalendārs ==<br />
<br />
{| border=1 cellspacing=0 cellpadding=4<br />
|-<br />
! Datums, nedēļa <br />
! Kursa saturs<br />
! Uzdevumi<br />
|-<br />
| 03.09.2013. <br />
| <br />
Virtuāla lekcija. 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.)<br />
<br />
* [http://bit.ly/1a2rHMW Kas tas ir, Linux?] - lasīt Linux.com rakstu<br />
<br />
* [[LU-LSP-B11:shell-cheatsheet | UNIX čaulas populārākās komandas un lietojumi]].<br />
<br />
<!-- [[LU-LSP-b13:L01 | Praktiskais darbs #1]]. <br />
--><br />
|<br />
Uzdots [[LU-LSP-b:MD0 | MD0]] mājas darbs - programmēšanas stils - izlasīt un ņemt vērā turpmākajos darbos.<br />
|-<br />
| 10.09.2013. <br />
| <br />
Virtuāla lekcija. Vispārīgs pārskats par valodu C.<br />
<br />
Lasīt [http://bit.ly/1a2rsl3 C valodas pamācību] no Drexel universitātes.<br />
<br />
<!-- [[LU-LSP-b13:L02 | Praktiskais darbs #2]]. <br />
--><br />
|<br />
'''Uzdots''' [[LU-LSP-b:MD1 | MD1]] mājas darbs - dzimtas koks.<br />
|-<br />
| 17.09.2013. <br />
| Datu struktūras un algoritmi valodā C.<br />
<br />
[http://jupiter.cs.fmf.lu.lv/~kursi/lsp/1-apvienota-ievadlekcija.pdf Lekcijas piezīmes]<br />
<br />
[[LU-LSP-b13:L01 | Praktiskais darbs #1]]<br />
<br />
|<br />
|-<br />
| 24.09.2013.<br />
| 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. <br />
<br />
[http://jupiter.cs.fmf.lu.lv/~kursi/lsp/2-faili.pdf Lekcijas piezīmes]<br />
<br />
[[LU-LSP-b13:L02 | Praktiskais darbs #2]]. <br />
|<br />
<!--<br />
'''Uzdots''' [[LU-LSP-b:MD2 | MD2]] mājas darbs - datubāze. --><br />
|-<br />
| 01.10.2013.<br />
| 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().<br />
<br />
|<br />
Mājas darba [[LU-LSP-b:MD1 | MD1]] '''nodošanas''' termiņš.<br />
|-<br />
| 08.10.2013.<br />
| 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().<br />
<br />
[http://jupiter.cs.fmf.lu.lv/~kursi/lsp/4-faili.pdf Lekcijas piezīmes]<br />
<br />
[[LU-LSP-b13:L03 | Praktiskais darbs #3]] - direktoriju koka apstaigāšana.<br />
|<br />
<!--Mājas darba [[LU-LSP-b:MD2 | MD2]] '''nodošanas''' termiņš. --><br />
<br />
'''Uzdots''' [[LU-LSP-b:MD3-2013 | MD3]] mājas darbs - direktoriju koka apstaigāšana.<br />
|-<br />
| 15.10.2013.<br />
| <br />
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.<br />
<br />
[[LU-LSP-b13:L04 | Praktiskais darbs #4]].<br />
|<br />
|-<br />
| 22.10.2013.<br />
| 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()''. <br />
<br />
[[LU-LSP-b13:L05 | Praktiskais darbs #5]] - ''setjmp()'',''longjmp()'' un taimera signāls.<br />
|<br />
Mājas darba [[LU-LSP-b:MD3 | MD3]] '''nodošanas''' termiņš.<br />
<br />
<!-- '''Uzdots''' [[LU-LSP-b:MD4 | MD4]] mājas darbs - setjmp() un longjmp() lietojums. --><br />
|-<br />
| 29.10.2013.<br />
| 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.<br />
Atmiņas fragmentācija. Atmiņas rezervēšanas (allocation) algoritmi, kas darbojas uz atmiņas fragmentiem.<br />
<br />
[[LU-LSP-b13:L06 | Praktiskais darbs #6]] - atmiņas rezervācija.<br />
<br />
|<br />
'''Uzdots''' [[LU-LSP-b:MD4 | MD4]] mājas darbs - atmiņas rezervācijas funkciju salīdzinājums.<br />
|-<br />
| 05.11.2013.<br />
|<br />
Daudz-uzdevumu vide. Procesi un procesu kontrole. Pavedieni. Kooperējošies procesi un preemptīvā daudz-uzdevumu metode. Komanda '''ps'''. getpid() un getppid(). fork().<br />
<br />
Apspriede par iepriekšējo PD risinājumiem.<br />
<br />
<!-- [[LU-LSP-b13:L08 | Praktiskais darbs #8]] - vienkāršs atmiņas alokators fiksēta izmēra objektiem. --><br />
|<br />
Mājas darba [[LU-LSP-b:MD4 | MD4]] '''nodošanas''' termiņš.<br />
<br />
'''Uzdots''' [[LU-LSP-b:MD5 | MD5]] - atmiņas fragmentācijas algoritmu novērtējums<br />
|-<br />
| 12.11.2013.<br />
|<br />
Vidus semestra '''kontroldarbs'''.<br />
<br />
[[LU-LSP-b13:LA | Atkļūdošana]]: Linux rīki un to lietošana. Darbs pie mājasdarbiem.<br />
|<br />
<br />
Mājas darba [[LU-LSP-b:MD5 | MD5]] grupu izveidošanas termiņš. <br />
|-<br />
| 19.11.2013.<br />
| Daudz-uzdevumu vide. ''wait()'' un ''exec()''. ''system()''.<br />
<br />
<!-- [[LU-LSP-b13:L09 | Praktiskais darbs #9]] - steka satura analīze un piekļuve stekam. --><br />
|<br />
Mājas darba [[LU-LSP-b:MD5 | MD5]] '''nodošanas''' termiņš.<br />
|-<br />
| 26.11.2013.<br />
| Klienta un servera arhitektūra. Sockets. Komunikācija starp nesaistītiem procesiem. Daudzlietotāju sistēmas (spēles) arhitektūra).<br />
|<br />
|-<br />
| 03.12.2013.<br />
| 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().<br />
<br />
<!-- [[LU-LSP-b13:L10 | Praktiskais darbs #10]] - datortīkla klienta programma. --><br />
|<br />
<!--<br />
Kursa projekta definēšana. --><br />
<br />
|-<br />
| 10.12.2013.<br />
| Pavedieni.<br />
<br />
<!-- [[LU-LSP-b13:L11 | Praktiskais darbs #11]] - servera programma. --><br />
|<br />
|-<br />
| 17.12.2013.<br />
| Kursa kopsavilkums. Darbs pie [[LU-LSP-b13:projekts | kursa projekta]]. <br />
<br />
Vienota komunikācijas protokola definēšana kursa projektam.<br />
|<br />
|-<br />
| 23.12.2013. - 01.01.2014.<br />
| Ziemassvētku un Jaungada brīvdienas<br />
|<br />
&nbsp;<br />
|-<br />
| xx.01.2013.<br />
| '''Eksāmens xx:xx''' xxx. telpā.<br />
|<br />
&nbsp;<br />
|-<br />
|}<br />
<br />
== Mājas darbi ==<br />
<br />
* [[LU-LSP-b:MD0 | MD0]]: Izlasīt kodēšanas stila dokumentus.<br />
* [[LU-LSP-b:MD1 | MD1]]: Ģimenes koka ģenerēšanas programma.<br />
<!--<br />
* [[LU-LSP-b:MD2 | MD2]]: Datu bāze ģimenes kokam.<br />
* [[LU-LSP-b:MD3 | MD3]]: Vienādo failu meklēšana direktorijas kokā.<br />
* [[LU-LSP-b:MD4 | MD4]]: Setjmp un longjmp.<br />
* [[LU-LSP-b:MD5 | MD5]]: Atmiņas fragmentācijas algoritmu novērtējums.<br />
--><br />
<br />
<!-- * [[LU-LSP-b:MD5 | MD5]]: Procedūru izsaukumu steka izdruka. --><br />
<br />
<br />
Eksāmens izpaužas kā [[LU-LSP-b13:projekts | kursa projekta]] aizstāvēšana.<br />
<!--<br />
* MD7 - projekta protokola specifikācija. Skatīt arī [[LU-LSP-b13:PD_client_server | PD: Klienta un servera arhitektūra]]<br />
** [[LU-LSP-b11:PD_client_server | PD: Klienta un servera arhitektūra]] (praktiskā darba piezīmes)<br />
** [http://selavo.lv/~kursi/LSP/md7 MD7 projekta grupu risinājumi]<br />
<br />
Eksāmens izpaužas kā kursa projekta aizstāvēšana.<br />
--><br />
<br />
== Literatūra ==<br />
<br />
* 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)<br />
<br />
* "Linux system programming" by Robert Love, O'Reilly Media, 2007, ISBN 0596009585<br />
<br />
* [http://www.advancedlinuxprogramming.com/ Advanced Linux Programming] by CodeSourcery LLC,<br />
<br />
* "Building Embedded Linux Systems" O'Reilly Media, 2008, ISBN 0596529686<br />
<br />
== Saites ==<br />
<br />
* [http://tuxradar.com/content/how-linux-kernel-works Intro to Linux kernel]<br />
<br />
* [http://www.lysator.liu.se/c/bwk-tutor.html Programming in C: A Tutorial] (by Brian W. Kernighan)<br />
* [http://www.gnu.org/software/make/manual/make.html Gnu make] dokumentācija<br />
* [http://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard Tipiskas unix direktoriju hierarhijas] īss apraksts.<br />
<br />
* Sockets:<br />
** [http://gnosis.cx/publish/programming/sockets.html Programming IP Sockets on Linux] (tutorial)<br />
** [http://en.wikipedia.org/wiki/Berkeley_sockets Berkeley sockets] (Wikipēdija)<br />
<br />
* http://www.hiraeth.com/alan/tutorials/courses/unixprog.html<br />
* http://lkml.org/<br />
* [http://tldp.org/LDP/lkmpg/2.6/html/index.html The Linux Kernel Module Programming Guide]<br />
<br />
=== Linux veiktspējas analīze ===<br />
* [http://www.cyberciti.biz/tips/top-linux-monitoring-tools.html Top 10 Linux monitoring tools]<br />
* [http://www.cyberciti.biz/tips/how-do-i-find-out-linux-cpu-utilization.html CPU analīze]<br />
* [http://www.cyberciti.biz/tips/linux-disk-performance-monitoring-howto.html Disku I/O analīze]<br />
<br />
== Atziņas ==<br />
* [http://norvig.com/21-days.html Teach yourself programming in 10 years] by Peter Norvig</div>Atishttp://andromeda.df.lu.lv/wiki/index.php?title=LU-LSP-b13:LA&diff=4768LU-LSP-b13:LA2013-11-12T13:20:26Z<p>Atis: </p>
<hr />
<div>=== Linux lietotāja programmatūras atkļūdošanas rīki ===<br />
<br />
* '''gdb''' - GNU debugger<br />
** '''gdbserver''' - GDB papildprogramma attālinātai atklūdošanai. gdbserver var palaist, piemēram, uz iegultas sistēmas bez grafiskās saskarnes, un atkļūdot tur esošās programmas caur TCP savienojumu, pieslēdzoties ar "parasto" GDB kā ar klientu.<br />
* '''valgrind''' - apvieno sevī vairākus jaudīgus rīkus: dinamiskās atmiņas lietošanas pārbaudes rīku (<code>--tool=memcheck</code>), profilētāju (<code>--tool=callgrind</code>) u.c.<br />
* '''objdump''' - disasemblēšanas rīks<br />
* '''/proc failusistēma''' - visa veida informācija par procesiem un sistēmas resursiem<br />
* '''strace''' &a '''ltrace''' utilītas, ''ptrace'' sistēmas izsaukums - konkrēta procesa darbības izsekošana<br />
* Dažāda veida informācija par resursu lietojumu:<br />
** '''ps''' - procesi<br />
** '''top'''/'''htop''' - aktīvākie procesi<br />
** '''nstat''' - tīkls ("network status") <br />
** '''vmstat''' - atmiņa ("virtual memory status")<br />
* Vēl cita veida informācija par resursu lietojumu (vairāk kodola un HW atkļūdošanai?):<br />
** '''lsusb''' - parādīt pieslēgtās USB ierīces<br />
** '''lspci''' - parādīt pieslēgtās PCI ierīces<br />
** '''lsof''' - parādīt atvērtos failus<br />
<br />
<br />
<br />
=== Piemērs ===<br />
<br />
Atkļūdojamās programmas kods:<br />
<br />
<pre><br />
#include <stdio.h><br />
#include <stdlib.h><br />
<br />
void nullDeref(int *p) {<br />
*p = 0x1234;<br />
}<br />
<br />
void f(int param);<br />
void g(void) {<br />
printf("calling g\n");<br />
f(0);<br />
}<br />
<br />
void f(int param) {<br />
int localVariable = 1;<br />
printf("calling f, &localVariable=%p\n", &localVariable);<br />
g();<br />
}<br />
<br />
void stackOverflow(void) {<br />
f(1);<br />
}<br />
<br />
void memoryAllocate(void) {<br />
int i, j;<br />
char *array = malloc(10);<br />
i = j = 5;<br />
while (i-- >= 0) {<br />
array[i] = 0x13;<br />
}<br />
while (j++ >= 0) {<br />
array[j] = 0x13;<br />
}<br />
}<br />
<br />
<br />
int main(void) {<br />
int i;<br />
int *p = NULL;<br />
nullDeref(p);<br />
stackOverflow();<br />
for (i = 0; i < 100; ++i) {<br />
memoryAllocate();<br />
}<br />
return 0;<br />
}<br />
</pre></div>Atishttp://andromeda.df.lu.lv/wiki/index.php?title=LU-LSP-b13:LA&diff=4767LU-LSP-b13:LA2013-11-12T13:14:40Z<p>Atis: New page: === Linux lietotāja programmatūras atkļūdošanas rīki === * '''GDB''' - GNU debugger * '''valgrind''' - apvieno sevī vairākus jaudīgus rīkus: dinamiskās atmiņas lietošanas pā...</p>
<hr />
<div>=== Linux lietotāja programmatūras atkļūdošanas rīki ===<br />
<br />
* '''GDB''' - GNU debugger<br />
* '''valgrind''' - apvieno sevī vairākus jaudīgus rīkus: dinamiskās atmiņas lietošanas pārbaudes rīku (<code>--tool=memcheck</code>), profilētāju (<code>--tool=callgrind</code>) u.c.<br />
* '''objdump''' - disasemblēšanas rīks<br />
* '''/proc failusistēma''' - visa veida informācija par procesiem un sistēmas resursiem<br />
* '''strace''' &a '''ltrace''' utilītas, ''ptrace'' sistēmas izsaukums - konkrēta procesa darbības izsekošana<br />
* Dažāda veida informācija par resursu lietojumu:<br />
** '''ps''' - procesi<br />
** '''top'''/'''htop''' - aktīvākie procesi<br />
** '''nstat''' - tīkls ("network status") <br />
** '''vmstat''' - atmiņa ("virtual memory status")<br />
* Vēl cita veida informācija par resursu lietojumu (vairāk kodola un HW atkļūdošanai?):<br />
** '''lsusb''' - parādīt pieslēgtās USB ierīces<br />
** '''lspci''' - parādīt pieslēgtās PCI ierīces<br />
** '''lsof''' - parādīt atvērtos failus<br />
<br />
<br />
<br />
=== Piemērs ===<br />
<br />
Atkļūdojamās programmas kods:<br />
<br />
<pre><br />
#include <stdio.h><br />
#include <stdlib.h><br />
<br />
void nullDeref(int *p) {<br />
*p = 0x1234;<br />
}<br />
<br />
void f(int param);<br />
void g(void) {<br />
printf("calling g\n");<br />
f(0);<br />
}<br />
<br />
void f(int param) {<br />
int localVariable = 1;<br />
printf("calling f, &localVariable=%p\n", &localVariable);<br />
g();<br />
}<br />
<br />
void stackOverflow(void) {<br />
f(1);<br />
}<br />
<br />
void memoryAllocate(void) {<br />
int i, j;<br />
char *array = malloc(10);<br />
i = j = 5;<br />
while (i-- >= 0) {<br />
array[i] = 0x13;<br />
}<br />
while (j++ >= 0) {<br />
array[j] = 0x13;<br />
}<br />
}<br />
<br />
<br />
int main(void) {<br />
int i;<br />
int *p = NULL;<br />
nullDeref(p);<br />
stackOverflow();<br />
for (i = 0; i < 100; ++i) {<br />
memoryAllocate();<br />
}<br />
return 0;<br />
}<br />
</pre></div>Atishttp://andromeda.df.lu.lv/wiki/index.php?title=LU-LSP-b:MD4&diff=4748LU-LSP-b:MD42013-11-05T13:04:11Z<p>Atis: </p>
<hr />
<div><!-- Precizējums nākošajam gadam: norādīt, ka atmiņu nevajag aizpildīt (ar memset un tamlīdzīgi) ! --><br />
{{TocRight}}<br />
<br />
1. Uzrakstīt programmu, kas rezervē atmiņu (drīkst pēc tam neatbrīvot). Uzdevums līdzīgs [[LU-LSP-b13:L06|PD#6]], drīkst izmantot tā kodu.<br />
<br />
2. Salīdzināt trīs dažādus atmiņas rezervācijas veidus:<br />
<br />
* Ar malloc() funkciju<br />
* Ar mmap() funkciju (lietojot to bez konkrētas atmiņas adreses norādīšanas, bez "apakšā esoša" faila, un tā, lai varētu rezervēto atmiņu lietot gan lasīšanai, gan rakstīšanai)<br />
* Ar sbrk() funkciju<br />
<br />
Rezervēt atmiņu pa vienam megabaitam (= 1024*1024 baitu).<br />
<br />
Katram veidam izpētīt:<br />
# Kāds ir maksimālais atmiņas daudzums, ko tādā veidā var alocēt?<br />
# Kāds programmas darbības laiks, ja tiek rezervēti 100 megabaiti atmiņas?<br />
<br />
Kurš ir '''ātrākais''' veids šim konkrētajam lietojumam? Ar kuru veidu var rezervēt '''visvairāk''' atmiņas? Uzrakstīt 1-2 teikumu garu skaidrojumu - kāpēc tā?<br />
<br />
''Padoms. Laiku ērti ir mērīt ar programmu '''time'''. (Lai korekti interpretētu programmas dotos rezultātus, jāsaskaita kopā "system" un "user" laiks; pirmais atbilst laikam, kas pavadīts sistēmas izsaukumos, otrais: laikam, ko programma patērējusi izpildot pati savu kodu)''<br />
<br />
<br />
3. Izvēlēties vienu no rezervācijas veidiem, un izpētīt, kā uzrakstītajā programmā tiek izmantota statiskā atmiņa (tā atmiņa, kas ir rezervēta jau tās palaišanas brīdī). Ar programmu '''size''' vai '''objdump''' palīdzību noteikt:<br />
# TEXT segmenta izmēru baitos<br />
# DATA segmenta izmēru baitos<br />
# BSS segmenta izmēru baitos<br />
<br />
=== Iesūtīšana ===<br />
Iesūtīt:<br />
# programmas kodu (C failā)<br />
# atbildes uz jautājumiem (e-pasta tekstā)<br />
<br />
----<br />
<br />
Uz [[LU-LSP-b | LSP kursa ]] sākuma lapu.</div>Atishttp://andromeda.df.lu.lv/wiki/index.php?title=LU-LSP-b:MD1&diff=4746LU-LSP-b:MD12013-11-05T09:51:11Z<p>Atis: </p>
<hr />
<div><!--<br />
Nākošgad tieši norādīt, ka vecākas paaudzes cilvēki jāizdrukā vispirms!<br />
<br />
Kā arī precizēt, ka programmai jāspēj "sagremot" ievads no faila (caur shell redirection).<br />
Piemēram, programma tiks testēta šādi:<br />
./md1 < in.txt > out.txt<br />
kur "in.txt" ir fails ar ievaddatiem, bet "out.txt" - fails, kurā saglabāt programmas izvadu.<br />
--><br />
<br />
{{TocRight}}<br />
=MD1=<br />
<br />
===Uzdevums===<br />
Ģenerēt ģimenes koku. Ievaddatos ir informācija par personām. Jāizvada personu vārdi atkarība no to vecuma dilstošā kārtībā (vecāki vispirms).<br />
<br />
'''Ievadā''' ir fails ar personu aprakstiem sekojošā formātā:<br />
* VARDS personas-vards<br />
* MATE personas-mates-vards<br />
* TEVS personas-tēva-vārds<br />
<br />
Personu apraksts vienmēr sākas ar lauku VARDS. Pārējie divi lauki var nebūt norādīti, piemēram, kādai personai var nebūt zināms tēva vārds.<br />
<br />
Personu skaits nav ierobežots, bet ir saprātīgs un ietilps pieejamajā operatīvajā atmiņā. Risinājums tiks pārbaudīts ar vismaz 1000 personu testa piemēriem.<br />
<br />
Ja nav iespējams noteikt savstarpējo kārtību starp personām, tas nozīmē, ka pieļaujami vairāki korekti risinājumi. Piemēram, A ir tēvs B un A ir tēvs C - visi sekojošie risinājumi ir korekti: ABC un ACB. Jādrukā tikai viens no tiem, pēc jūsu izvēles.<br />
<br />
Var pieņemt, ka visas personas sadalās pa paaudzēm, un ka atšķirīgu paaudžu cilvēki savā starpā neprecēsies.<br />
<br />
Vienam cilvēkam var būt bērni no dažādiem partneriem.<br />
<br />
Ievaddati var saturēt divus vai vairāk nesaistītus ģimenes kokus. Tādā gadījumā tos vajag izvadīt atsevišķi: vispirms vienu koku, tukša rinda, tad nākamo koku.<br />
<br />
Ievaddati var būt arī nekorekti. Piemēram, ja vienai personai ir divas mātes, vai saites veido ciklu. To jāspēj detektēt un izdot attiecīgu paziņojumu, kā arī programmai jābeidzas ar kodu 1. Veiksmīgas izpildes gadījumā programma beidzas ar kodu 0.<br />
<br />
Tehniska informācija:<br />
* Ievaddati nāk no stdin. <br />
* Izvads jādod uz stdout.<br />
* Ievada rindas garums nepārsniedz 63 simbolus.<br />
* Ievadā iespējamas tukšas rindas, kas jāignorē.<br />
<br />
===Jāiesniedz===<br />
<br />
* C programmas pirmkods.<br />
* Koda fails sūtāms pa epastu piekabē, ar sekojošu "Subject:" LSP MD1 vards uzvards<br />
* Iesūtīt uz adresi atis punkts elsts pie gmail.com<br />
<br />
===Vērtējums===<br />
<br />
Uzdevums tiks vērtēts sekojoši:<br />
# 80% - Korektu ievaddatu apstrāde un pareiza rezultātu izdruka.<br />
# 20% - Nekorektu ievaddatu atpazīšana un kļūdas paziņojuma izdruka. Piemēram, A tēvs B un B tēvs A ir cikliskas attiecības. <br />
<br />
===Piemēri===<br />
Ievada faila piemērs:<br />
VARDS Dels<br />
TEVS Tevs<br />
MATE Mate<br />
<br />
VARDS Tevs<br />
MATE Vecmate<br />
<br />
VARDS CitsDels<br />
MATE CitaMate<br />
TEVS CitsTevs<br />
<br />
Izvada faila piemērs:<br />
Vecmate<br />
Mate<br />
Tevs<br />
Dels<br />
<br />
CitsTevs<br />
CitaMate<br />
CitsDels</div>Atishttp://andromeda.df.lu.lv/wiki/index.php?title=LU-LSP-b:MD1&diff=4745LU-LSP-b:MD12013-11-05T09:41:28Z<p>Atis: </p>
<hr />
<div><!--<br />
Nākošgad tieši norādīt, ka vecākas paaudzes cilvēki jāizdrukā vispirms!<br />
--><br />
<br />
{{TocRight}}<br />
=MD1=<br />
<br />
===Uzdevums===<br />
Ģenerēt ģimenes koku. Ievaddatos ir informācija par personām. Jāizvada personu vārdi atkarība no to vecuma dilstošā kārtībā (vecāki vispirms).<br />
<br />
'''Ievadā''' ir fails ar personu aprakstiem sekojošā formātā:<br />
* VARDS personas-vards<br />
* MATE personas-mates-vards<br />
* TEVS personas-tēva-vārds<br />
<br />
Personu apraksts vienmēr sākas ar lauku VARDS. Pārējie divi lauki var nebūt norādīti, piemēram, kādai personai var nebūt zināms tēva vārds.<br />
<br />
Personu skaits nav ierobežots, bet ir saprātīgs un ietilps pieejamajā operatīvajā atmiņā. Risinājums tiks pārbaudīts ar vismaz 1000 personu testa piemēriem.<br />
<br />
Ja nav iespējams noteikt savstarpējo kārtību starp personām, tas nozīmē, ka pieļaujami vairāki korekti risinājumi. Piemēram, A ir tēvs B un A ir tēvs C - visi sekojošie risinājumi ir korekti: ABC un ACB. Jādrukā tikai viens no tiem, pēc jūsu izvēles.<br />
<br />
Var pieņemt, ka visas personas sadalās pa paaudzēm, un ka atšķirīgu paaudžu cilvēki savā starpā neprecēsies.<br />
<br />
Vienam cilvēkam var būt bērni no dažādiem partneriem.<br />
<br />
Ievaddati var saturēt divus vai vairāk nesaistītus ģimenes kokus. Tādā gadījumā tos vajag izvadīt atsevišķi: vispirms vienu koku, tukša rinda, tad nākamo koku.<br />
<br />
Ievaddati var būt arī nekorekti. Piemēram, ja vienai personai ir divas mātes, vai saites veido ciklu. To jāspēj detektēt un izdot attiecīgu paziņojumu, kā arī programmai jābeidzas ar kodu 1. Veiksmīgas izpildes gadījumā programma beidzas ar kodu 0.<br />
<br />
Tehniska informācija:<br />
* Ievaddati nāk no stdin. <br />
* Izvads jādod uz stdout.<br />
* Ievada rindas garums nepārsniedz 63 simbolus.<br />
* Ievadā iespējamas tukšas rindas, kas jāignorē.<br />
<br />
===Jāiesniedz===<br />
<br />
* C programmas pirmkods.<br />
* Koda fails sūtāms pa epastu piekabē, ar sekojošu "Subject:" LSP MD1 vards uzvards<br />
* Iesūtīt uz adresi atis punkts elsts pie gmail.com<br />
<br />
===Vērtējums===<br />
<br />
Uzdevums tiks vērtēts sekojoši:<br />
# 80% - Korektu ievaddatu apstrāde un pareiza rezultātu izdruka.<br />
# 20% - Nekorektu ievaddatu atpazīšana un kļūdas paziņojuma izdruka. Piemēram, A tēvs B un B tēvs A ir cikliskas attiecības. <br />
<br />
===Piemēri===<br />
Ievada faila piemērs:<br />
VARDS Dels<br />
TEVS Tevs<br />
MATE Mate<br />
<br />
VARDS Tevs<br />
MATE Vecmate<br />
<br />
VARDS CitsDels<br />
MATE CitaMate<br />
TEVS CitsTevs<br />
<br />
Izvada faila piemērs:<br />
Vecmate<br />
Mate<br />
Tevs<br />
Dels<br />
<br />
CitsTevs<br />
CitaMate<br />
CitsDels</div>Atishttp://andromeda.df.lu.lv/wiki/index.php?title=LU-LSP-b:MD3&diff=4744LU-LSP-b:MD32013-11-05T09:40:24Z<p>Atis: </p>
<hr />
<div><!--<br />
Precizējumi nākošajam gadam (2014):<br />
<br />
Argumentus varētu formulēt, teiksim, šādi:<br />
md3 -d pārbauda arī izveidošanas datumu sakritību<br />
md3 -m aprēķina un salīdzina MD5 vērtību faila saturam (bez vārda un datuma). <br />
md3 -h izvada palīga tekstu par parametriem<br />
<br />
<br />
Jādod padoms: drīkst lietot gatavu MD5 implementāciju, piemēram, no libcrytpo. Tādā gadījumā programmu jābūvē ar:<br />
gcc -Wall -o md5 md5.c -lcrypto<br />
<br />
<br />
--><br />
<br />
{{TocRight}}<br />
=MD3=<br />
<br />
===Mērķi===<br />
<br />
* Direktorijas koka rekursīva apstaigāšana<br />
* Failu parametru nolasīšana un analīze<br />
* Darbs ar stat(), opendir(),readdir(),closedir()<br />
* Hash tabulas pielietojumi<br />
* MD5 pielietojums<br />
<br />
<br />
===Uzdevums===<br />
<br />
Uzrakstīt programmu '''md3''', kas apstaigā direktoriju koku un atrod tos failus kas ir duplikāti, respektīvi, atrodami vairākos eksemplāros. <br />
<br />
Apstaigāšana jāsāk no tās direktorijas, kurā programma izpildās (t.i. direktorijas ar nosaukumu ".").<br />
<br />
Faili tiek uzskatīti par vienādiem, ja tiem ir vienāds izmērs un faila vārds, izņemot MD5 režīmā, kad failu vienādību nosaka MD5 vērtības.<br />
<br />
Saites (symbolic links, t.i. "vājās" saites) jāignorē. Divas vājās saites, vai arī fails un vājā saite uz to nav jāsalīdzina.<br />
<br />
Vārds un izmērs jāpārbauda vienmēr, izņemot MD5 režīmu. Papildus pārbaudes nosaka parametri:<br />
md3 -d pārbauda arī izveidošanas datumu sakritību<br />
md3 -md5 vai --md5 aprēķina un salīdzina MD5 vērtību faila saturam (bez vārda un datuma). <br />
md3 --help izvada palīga tekstu par parametriem (divas domu zīmes!)<br />
<br />
'''Izdrukas formāts''':<br />
=== date size filename1 [MD5]<br />
path1/filename1 <br />
path2/filename1 <br />
...<br />
<br />
=== date size filename2 [MD5]<br />
path1/filename2 <br />
path2/filename2 <br />
...<br />
<br />
Datuma formāts ir tāds pat kā ls -l: (yyyy-mm-dd hh:mm). Piemēram: 2010-09-25 21:45<br />
<br />
MD5 jādrukā tikai tad, ja pie programmas izsaukuma parametrs bija -md5<br />
<br />
Šajā gadījumā failu vienādību nosaka tikai MD5 sakritība, un izvads var nedaudz atšķirties - jo vienādiem failiem var atšķirties to vārdi un izveidošanas datumi. Datums izvadāms tika vienam failam.<br />
<br />
=== date size filename1 [MD5]<br />
path1/filename1 <br />
path2/filename2 <br />
path3/filename3 <br />
...<br />
<br />
===Jāiesniedz===<br />
<br />
* Jāiesniedz C programmas pirmkods.<br />
* Iesniedzamais fails jānosauc šādi: LSP_MD3_vards_uzvards.c<br />
* Fails sūtāms pa e-pastu piekabē, ar sekojošu "Subject:" LSP MD3 vards uzvards <br />
* Risinājums jānosūta uz kursa asistenta e-pastu.<br />
<br />
===Vērtējums===<br />
<br />
Uzdevums tiks vērtēts sekojoši:<br />
# 60% - Korekta programmas darbība salīdzinot tikai failu vārdus un izmērus<br />
# 10% - -d datuma salīdzināšanas opcijas realizācija<br />
# 20% - -md5 opcijas realizācija<br />
# 10% - --help realizācija<br />
<br />
===Piemēri===<br />
<br />
Darbinām md3, salīdzinām arī datumus, izvadam rezultātus log failā.<br />
<br />
md3 -d > log<br />
<br />
Salīdzinām failus tikai pēc vārdiem<br />
md3<br />
Salīdzinām failus pēc vārdiem un izveidošanas datumiem<br />
md3 -d<br />
Salīdzinām failus pēc satura<br />
md3 -md5<br />
Salīdzinām failus pēc satura, vārdiem un datumiem. Izvadam tikai tos, kam visi vienādi.<br />
md3 -d -md5<br />
<br />
===Derīga informācija===<br />
<br />
* [http://linux.die.net/man/2/stat stat()]<br />
* [http://linux.die.net/man/3/opendir opendir()], [http://linux.die.net/man/3/readdir readdir()], [http://linux.die.net/man/3/closedir closedir()]<br />
* [http://xml-lit.sourceforge.net/doc/indexs05.html Hash funkcijas un tabulas piemērs]<br />
* [http://userpages.umbc.edu/~mabzug1/cs/md5/md5.html MD5]<br />
<br />
* Ieteikums: izstrādājiet programmatūru pakāpeniski. Piemēram, vispirms ielasiet un izdrukājiet datus. Tad pievienojiet datu analīzi un reģistrēšanu savās datu struktūrās. Tad pievienojiet datu analīzi lai tos sakārtotu izdrukai. Testējiet vispirms uz pareiziem datiem. tad uz kļūdainiem datiem.<br />
<br />
==J&A (jautājumi un atbildes)==<br />
<br />
====J: Uzdevums pārāk grūts, vai var pagarināt termiņu?====<br />
<br />
A: Noteiktais termiņš paliek spēkā. Iesaku risināt savlaicīgi, lai pietiek laika neparedzētu problēmu risināšanai.<br />
<br />
====J: Vai jāignorē gan "soft", gan "hard" saites?====<br />
<br />
A: Vājās saites (soft links) jāignorē. Stingrās saites (hard links) nav jāignorē.<br />
Lielākā daļa failu, ko mēs ikdienā redzam savās direktorijās ir cietās <br />
saites uz failu i-node struktūrām. Tāpēc ignorējot arī stingrās saites mēs ignorētu <br />
praktiski visus failus.<br />
<br />
----<br />
<br />
Uz [[LU-LSP-b | LSP kursa ]] sākuma lapu.</div>Atishttp://andromeda.df.lu.lv/wiki/index.php?title=LU-LSP-b:MD5&diff=4743LU-LSP-b:MD52013-11-05T09:37:38Z<p>Atis: </p>
<hr />
<div>{{TocRight}}<br />
=MD=<br />
<br />
===Mērķi===<br />
Novērtēt dinamiskās atmiņas izdalīšanas algoritmu veiktspēju.<br />
<br />
===Uzdevums===<br />
Darbs veicams studentu grupās, kas noteiktas lekcijas laikā.<br />
<br />
Izveidot testa vidi dinamiskās atmiņas izdalīšanas algoritmiem. Vide ir programma, kam kā ieejas dati ir divi teksta faili "chunks" un "sizes".<br />
Abos failos rakstīti skaitļi, katrs savā rindā. "Chunks" definē sarakstu ar brīvo atmiņas bloku lielumiem. "Sizes" definē atmiņas pieprasījumus baitos.<br />
md5 -c chunks -s sizes<br />
<br />
Pieņemt, ka izdalītās atmiņas kopējais apjoms ir 1024 baiti.<br />
<br />
[http://en.wikipedia.org/wiki/Fragmentation_%28computer%29 Fragmentāciju] vērtē kā attiecību starp kopējo pieejamās atmiņas daudzumu un fragmentēto atmiņu. Ja visi testa atmiņas pieprasījumi ietilpst atmiņā, tad testu rezultāti neatšķirsies, ja lietotas vienlīdzīgas datu struktūras atmiņas rezervēšanai. Toties, ja visi pieprasījumi nesaiet, tad uzskaitiet to apjomu kas nesaiet atmiņā lai salīdzinātu algoritmus.<br />
<br />
Izvērtēt sekojošus algoritmus, un noteikt labāko pēc veiktspējas (ātrdarbības) un pēc fragmentācijas.<br />
Vērtējumam jānorāda konkrēti un salīdzināmi veiktspējas rezultāti katram algoritmam un katram testam.<br />
* BestFit<br />
* WorstFit<br />
* FirstFit<br />
* NextFit<br />
* Jūsu alternatīvais risinājums (ja tāds ir).<br />
<br />
Vairāki publiski pieejami testa failu komplekti atrodami šeit: http://jupiter.df.lu.lv/kursi/lsp/2013/mem-frag-tests/<br />
<br />
Raksts par atmiņas fragmentāciju un algoritmiem atrodams [http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.45.3382&rep=rep1&type=pdf šeit]<br />
<br />
===Jāiesniedz===<br />
<br />
* Jāiesniedz:<br />
** C programmas pirmkods un jūsu testa failu komplekts<br />
** Eseja, kur izklāstīti testa rezultāti (fails ''pdf'' formātā)<br />
* Rezultāti sūtāmi pa epastu piekabē, ar sekojošu "Subject:" LSP MD5 Vards Uzvards<br />
* E-pastā jānorāda visi komandas dalībnieki, dalībnieku skaits, kā arī katra procentuālais ieguldījums, piemēram 50/100 nozīmē 50% no visa projekta. Visu komandas dalībnieku sniegumam summā jābūt 100%.<br />
<br />
===Vērtējums===<br />
<br />
Uzdevums tiks vērtēts sekojoši:<br />
* 50% - Korekts programmas kods<br />
** Komandrindas interfeiss<br />
** First fit realizācija<br />
** Next fit realizācija<br />
** Best fit realizācija<br />
** Worst fit realizācija<br />
** Citu algoritmu realizācija, ja tāda ir<br />
** Fragmentācijas mērījumi<br />
** Laika mērījumi<br />
** Komentāri kodā<br />
* 50% - Eseja ar rezultātiem.<br />
** Algoritmu apraksts<br />
** Mērījumu / eksperimenta apraksts<br />
** Fragmentācijas novērtējums un secinājumi<br />
** Ātrdarbības novērtējums un secinājumi<br />
** Kopējie secinājumi algoritmu izvēlei<br />
** Rakstīt īsi, bet aptveroši! (Tā, lai visi punkti būtu pieminēti.)<br />
<br />
===Piemēri===<br />
<br />
md5 -c chunks1 -s sizes1<br />
<br />
==J&A (jautājumi un atbildes)==<br />
<br />
====J: Uzdevums pārāk grūts, vai var pagarināt termiņu?====<br />
<br />
A: Noteiktais termiņš paliek spēkā. Iesaku risināt savlaicīgi, lai pietiek laika neparedzētu problēmu risināšanai.<br />
<br />
----<br />
<br />
Uz [[LU-LSP-b | LSP kursa ]] sākuma lapu.</div>Atishttp://andromeda.df.lu.lv/wiki/index.php?title=LU-LSP-b:MD4&diff=4710LU-LSP-b:MD42013-10-29T14:42:44Z<p>Atis: </p>
<hr />
<div>{{TocRight}}<br />
<br />
1. Uzrakstīt programmu, kas rezervē atmiņu (drīkst pēc tam neatbrīvot). Uzdevums līdzīgs [[LU-LSP-b13:L06|PD#6]], drīkst izmantot tā kodu.<br />
<br />
2. Salīdzināt trīs dažādus atmiņas rezervācijas veidus:<br />
<br />
* Ar malloc() funkciju<br />
* Ar mmap() funkciju (lietojot to bez konkrētas atmiņas adreses norādīšanas, bez "apakšā esoša" faila, un tā, lai varētu rezervēto atmiņu lietot gan lasīšanai, gan rakstīšanai)<br />
* Ar sbrk() funkciju<br />
<br />
Rezervēt atmiņu pa vienam megabaitam (= 1024*1024 baitu).<br />
<br />
Katram veidam izpētīt:<br />
# Kāds ir maksimālais atmiņas daudzums, ko tādā veidā var alocēt?<br />
# Kāds programmas darbības laiks, ja tiek rezervēti 100 megabaiti atmiņas?<br />
<br />
Kurš ir '''ātrākais''' veids šim konkrētajam lietojumam? Ar kuru veidu var rezervēt '''visvairāk''' atmiņas? Uzrakstīt 1-2 teikumu garu skaidrojumu - kāpēc tā?<br />
<br />
''Padoms. Laiku ērti ir mērīt ar programmu '''time'''. (Lai korekti interpretētu programmas dotos rezultātus, jāsaskaita kopā "system" un "user" laiks; pirmais atbilst laikam, kas pavadīts sistēmas izsaukumos, otrais: laikam, ko programma patērējusi izpildot pati savu kodu)''<br />
<br />
<br />
3. Izvēlēties vienu no rezervācijas veidiem, un izpētīt, kā uzrakstītajā programmā tiek izmantota statiskā atmiņa (tā atmiņa, kas ir rezervēta jau tās palaišanas brīdī). Ar programmu '''size''' vai '''objdump''' palīdzību noteikt:<br />
# TEXT segmenta izmēru baitos<br />
# DATA segmenta izmēru baitos<br />
# BSS segmenta izmēru baitos<br />
<br />
=== Iesūtīšana ===<br />
Iesūtīt:<br />
# programmas kodu (C failā)<br />
# atbildes uz jautājumiem (e-pasta tekstā)<br />
<br />
----<br />
<br />
Uz [[LU-LSP-b | LSP kursa ]] sākuma lapu.</div>Atishttp://andromeda.df.lu.lv/wiki/index.php?title=LU-LSP-b:MD4&diff=4709LU-LSP-b:MD42013-10-29T14:42:33Z<p>Atis: </p>
<hr />
<div>{{TocRight}}<br />
<br />
1. Uzrakstīt programmu, kas rezervē atmiņu (drīkst pēc tam neatbrīvot). Uzdevums līdzīgs [[LU-LSP-b13:L06|PD#6]], drīkst izmantot tā kodu.<br />
<br />
2. Salīdzināt trīs dažādus atmiņas rezervācijas veidus:<br />
<br />
* Ar malloc() funkciju<br />
* Ar mmap() funkciju (lietojot to bez konkrētas atmiņas adreses norādīšanas, bez "apakšā esoša" faila, un tā, lai varētu rezervēto atmiņu lietot gan lasīšanai, gan rakstīšanai)<br />
* Ar sbrk() funkciju<br />
<br />
Rezervēt atmiņu pa vienam megabaitam (= 1024*1024 baitu).<br />
<br />
Katram veidam izpētīt:<br />
# Kāds ir maksimālais atmiņas daudzums, ko tādā veidā var alocēt?<br />
# Kāds programmas darbības laiks, ja tiek rezervēti 100 megabaiti atmiņas?<br />
<br />
Kurš ir '''ātrākais''' veids šim kokrētajam lietojumam? Ar kuru veidu var rezervēt '''visvairāk''' atmiņas? Uzrakstīt 1-2 teikumu garu skaidrojumu - kāpēc tā?<br />
<br />
''Padoms. Laiku ērti ir mērīt ar programmu '''time'''. (Lai korekti interpretētu programmas dotos rezultātus, jāsaskaita kopā "system" un "user" laiks; pirmais atbilst laikam, kas pavadīts sistēmas izsaukumos, otrais: laikam, ko programma patērējusi izpildot pati savu kodu)''<br />
<br />
<br />
3. Izvēlēties vienu no rezervācijas veidiem, un izpētīt, kā uzrakstītajā programmā tiek izmantota statiskā atmiņa (tā atmiņa, kas ir rezervēta jau tās palaišanas brīdī). Ar programmu '''size''' vai '''objdump''' palīdzību noteikt:<br />
# TEXT segmenta izmēru baitos<br />
# DATA segmenta izmēru baitos<br />
# BSS segmenta izmēru baitos<br />
<br />
=== Iesūtīšana ===<br />
Iesūtīt:<br />
# programmas kodu (C failā)<br />
# atbildes uz jautājumiem (e-pasta tekstā)<br />
<br />
----<br />
<br />
Uz [[LU-LSP-b | LSP kursa ]] sākuma lapu.</div>Atishttp://andromeda.df.lu.lv/wiki/index.php?title=LU-LSP-b13:L06&diff=4708LU-LSP-b13:L062013-10-29T14:42:01Z<p>Atis: </p>
<hr />
<div>===Praktiskais darbs #6 - atmiņas rezervācija ===<br />
<br />
1. Uzrakstīt programmu, kas rezervē atmiņu (drīkst to pēc tam neatbrīvot). Par pamatu var izmantot šo skeletu:<br />
<br />
#include <stdio.h><br />
#include <stdlib.h><br />
#include <string.h><br />
<br />
int main(void)<br />
{<br />
printf("allocating...\n");<br />
<br />
// ...<br />
<br />
printf("done\n");<br />
return 0;<br />
}<br />
<br />
2. Eksperimentāli noskaidrot, cik daudz atmiņas iespējams rezervēt ''heap'' segmentā (var lietot <code>malloc()</code>). Salīdziniet - vai un kā šis apjoms mainās, ja:<br />
** Atmiņa tiek rezervēta "vienā gabalā" (one chunk)<br />
** Atmiņa tiek rezervēta pa 1MB lieliem gabaliem (many chunks)<br />
* Secinājumi?<br />
<br />
3. Salīdziniet programmu ātrdarbību:<br />
** 1. variants - atmiņa tiek rezervēta, bet netiek izmantota.<br />
** 2. variants - atmiņa tiek rezervēta un tiek izmantota (piemēram, aizpildīta ar 0, izmantojot <code>memset()</code> funkciju)<br />
* Salīdziniet izpildes laiku, ja tiek veikta 100MB atmiņas rezervāciju.<br />
<br />
''Padoms. Laiku ērti ir mērīt ar programmu time. (Lai korekti interpretētu programmas dotos rezultātus, jāsaskaita kopā "system" un "user" laiks; pirmais atbilst laikam, kas pavadīts sistēmas izsaukumos, otrais: laikam, ko programma patērējusi izpildot pati savu kodu).''<br />
<br />
Izmantojot proc failusistēmu vai '''ps''' programmu, novērtējiet (1) kopējās rezervētās virtuālās atmiņas (VmSize), (2) ''resident set size'' izmērus (VmRSS) abos gadījumos. Secinājumi?<br />
<br />
4. Eksperimentāli noskaidrot, cik daudz atmiņas iespējams rezervēt stekā. Padoms - atmiņas rezervācijai stekā izmantot funkciju <code>alloca()</code>!<br />
* Kas notiks, ja programmas darbības laikā tiks izsaukta šāda funkcija:<br />
void f() {<br />
char array[100 * 1024 * 1024];<br />
memset(array, 0, sizeof(array));<br />
}<br />
* Izskaidrot, kāpēc. Kas mainītos, ja mainīgais array būtu deklarēts kā "static"?<br />
<br />
==== Iesūtīšana ====<br />
<br />
Risinājumus nosūtīt uz kursa asistenta e-pastu, '''rakstot atbildes vēstules tekstā'''. E-pasta "Subject" obligāti iekļaut burtus "LSP".</div>Atishttp://andromeda.df.lu.lv/wiki/index.php?title=LU-LSP-b13:L06&diff=4707LU-LSP-b13:L062013-10-29T14:23:03Z<p>Atis: </p>
<hr />
<div>===Praktiskais darbs #6 - atmiņas rezervācija ===<br />
<br />
1. Uzrakstīt programmu, kas rezervē atmiņu (drīkst to pēc tam neatbrīvot). Par pamatu var izmantot šo skeletu:<br />
<br />
#include <stdio.h><br />
#include <stdlib.h><br />
#include <string.h><br />
<br />
int main(void)<br />
{<br />
printf("allocating...\n");<br />
<br />
// ...<br />
<br />
printf("done\n");<br />
return 0;<br />
}<br />
<br />
2. Eksperimentāli noskaidrot, cik daudz atmiņas iespējams rezervēt ''heap'' segmentā (var lietot <code>malloc()</code>). Salīdziniet - vai un kā šis apjoms mainās, ja:<br />
** Atmiņa tiek rezervēta "vienā gabalā" (one chunk)<br />
** Atmiņa tiek rezervēta pa 1MB lieliem gabaliem (many chunks)<br />
* Secinājumi?<br />
<br />
3. Salīdziniet programmu ātrdarbību:<br />
** 1. variants - atmiņa tiek rezervēta, bet netiek izmantota.<br />
** 2. variants - atmiņa tiek rezervēta un tiek izmantota (piemēram, aizpildīta ar 0, izmantojot <code>memset()</code> funkciju)<br />
* Salīdziniet izpildes laiku, ja tiek veikta 100MB atmiņas rezervāciju.<br />
<br />
''Padoms. Laiku ērti ir mērīt ar programmu time. (Lai korekti interpretētu programmas dotos rezultātus,. jāsaskaitea kopā "system" un "user" laiks; pirmais atbilst laikam, kas pavadīts sistēmas izsaukumos, otrais: laikam, ko programma patērējusi izpildot pati savu kodu).''<br />
<br />
Izmantojot proc failusistēmu vai '''ps''' programmu, novērtējiet (1) kopējās rezervētās virtuālās atmiņas (VmSize), (2) ''resident set size'' izmērus (VmRSS) abos gadījumos. Secinājumi?<br />
<br />
4. Eksperimentāli noskaidrot, cik daudz atmiņas iespējams rezervēt stekā. Padoms - atmiņas rezervācijai stekā izmantot funkciju <code>alloca()</code>!<br />
* Kas notiks, ja programmas darbības laikā tiks izsaukta šāda funkcija:<br />
void f() {<br />
char array[100 * 1024 * 1024];<br />
memset(array, 0, sizeof(array));<br />
}<br />
* Izskaidrot, kāpēc. Kas mainītos, ja mainīgais array būtu deklarēts kā "static"?<br />
<br />
==== Iesūtīšana ====<br />
<br />
Risinājumus nosūtīt uz kursa asistenta e-pastu, '''rakstot atbildes vēstules tekstā'''. E-pasta "Subject" obligāti iekļaut burtus "LSP".</div>Atishttp://andromeda.df.lu.lv/wiki/index.php?title=LU-LSP-b13:L06&diff=4706LU-LSP-b13:L062013-10-29T14:20:58Z<p>Atis: New page: ===Praktiskais darbs #6 - atmiņas rezervācija === 1. Uzrakstīt programmu, kas rezervē atmiņu (drīkst to pēc tam neatbrīvot). Par pamatu var izmantot šo skeletu: #include <stdio...</p>
<hr />
<div>===Praktiskais darbs #6 - atmiņas rezervācija ===<br />
<br />
1. Uzrakstīt programmu, kas rezervē atmiņu (drīkst to pēc tam neatbrīvot). Par pamatu var izmantot šo skeletu:<br />
<br />
#include <stdio.h><br />
#include <stdlib.h><br />
#include <string.h><br />
<br />
int main(void)<br />
{<br />
printf("allocating...\n");<br />
<br />
// ...<br />
<br />
printf("done\n");<br />
return 0;<br />
}<br />
<br />
2. Eksperimentāli noskaidrot, cik daudz atmiņas iespējams rezervēt ''heap'' segmentā (var lietot <code>malloc()</code>). Salīdziniet - vai un kā šis apjoms mainās, ja:<br />
** Atmiņa tiek rezervēta "vienā gabalā" (one chunk)<br />
** Atmiņa tiek rezervēta pa 1MB lieliem gabaliem (many chunks)<br />
* Secinājumi?<br />
<br />
3. Salīdziniet programmu ātrdarbību:<br />
** 1. variants - atmiņa tiek rezervēta, bet netiek izmantota.<br />
** 2. variants - atmiņa tiek rezervēta un tiek izmantota (piemēram, aizpildīta ar 0, izmantojot <code>memset()</code> funkciju)<br />
* Salīdziniet uz 100MB atmiņas rezervāciju. Ieteicams izpildes laika novērtēšanai izmantot programmu "time".<br />
Izmantojot proc failusistēmu, novērtējiet (1) kopējās rezervētās virtuālās atmiņas (VmSize), (2) ''resident set size'' izmērus (VmRSS) abos gadījumos. Secinājumi?<br />
<br />
4. Eksperimentāli noskaidrot, cik daudz atmiņas iespējams rezervēt stekā. Padoms - atmiņas rezervācijai stekā izmantot funkciju <code>alloca()</code>!<br />
* Kas notiks, ja programmas darbības laikā tiks izsaukta šāda funkcija:<br />
void f() {<br />
char array[100 * 1024 * 1024];<br />
memset(array, 0, sizeof(array));<br />
}<br />
* Izskaidrot, kāpēc. Kas mainītos, ja mainīgais array būtu deklarēts kā "static"?<br />
<br />
==== Iesūtīšana ====<br />
<br />
Risinājumus nosūtīt uz kursa asistenta e-pastu, '''rakstot atbildes vēstules tekstā'''. E-pasta "Subject" obligāti iekļaut burtus "LSP".</div>Atishttp://andromeda.df.lu.lv/wiki/index.php?title=LU-LSP-b:MD5&diff=4705LU-LSP-b:MD52013-10-29T14:12:47Z<p>Atis: </p>
<hr />
<div>{{TocRight}}<br />
=MD=<br />
<br />
===Mērķi===<br />
Novērtēt dinamiskās atmiņas izdalīšanas algoritmu veiktspēju.<br />
<br />
===Uzdevums===<br />
Darbs veicams studentu grupās, kas noteiktas lekcijas laikā.<br />
<br />
Izveidot testa vidi dinamiskās atmiņas izdalīšanas algoritmiem. Vide ir programma, kam kā ieejas dati ir divi teksta faili "chunks" un "sizes".<br />
Abos failos rakstīti skaitļi, katrs savā rindā. "Chunks" definē sarakstu ar brīvo atmiņas bloku lielumiem. "Sizes" definē atmiņas pieprasījumus baitos.<br />
md5 -c chunks -s sizes<br />
<br />
Pieņemt, ka izdalītās atmiņas kopējais apjoms ir 1024 baiti.<br />
<br />
[http://en.wikipedia.org/wiki/Fragmentation_%28computer%29 Fragmentāciju] vērtē kā attiecību starp kopējo pieejamās atmiņas daudzumu un fragmentēto atmiņu. Ja visi testa atmiņas pieprasījumi ietilpst atmiņā, tad testu rezultāti neatšķirsies, ja lietotas vienlīdzīgas datu struktūras atmiņas rezervēšanai. Toties, ja visi pieprasījumi nesaiet, tad uzskaitiet to apjomu kas nesaiet atmiņā lai salīdzinātu algoritmus.<br />
<br />
Izvērtēt sekojošus algoritmus, un noteikt labāko pēc veiktspējas (ātrdarbības) un pēc fragmentācijas.<br />
Vērtējumam jānorāda konkrēti un salīdzināmi veiktspējas rezultāti katram algoritmam un katram testam.<br />
* BestFit<br />
* WorstFit<br />
* FirstFit<br />
* NextFit<br />
* Jūsu alternatīvais risinājums (ja tāds ir).<br />
<br />
Vairāki publiski pieejami testa failu komplekti atrodami šeit: http://jupiter.cs.fmf.lu.lv/kursi/lsp/2013/mem-frag-tests/<br />
<br />
Raksts par atmiņas fragmentāciju un algoritmiem atrodams [http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.45.3382&rep=rep1&type=pdf šeit]<br />
<br />
===Jāiesniedz===<br />
<br />
* Jāiesniedz:<br />
** C programmas pirmkods un jūsu testa failu komplekts<br />
** Eseja, kur izklāstīti testa rezultāti (fails ''pdf'' formātā)<br />
* Rezultāti sūtāmi pa epastu piekabē, ar sekojošu "Subject:" LSP MD5 Vards Uzvards<br />
* E-pastā jānorāda visi komandas dalībnieki, dalībnieku skaits, kā arī katra procentuālais ieguldījums, piemēram 50/100 nozīmē 50% no visa projekta. Visu komandas dalībnieku sniegumam summā jābūt 100%.<br />
<br />
===Vērtējums===<br />
<br />
Uzdevums tiks vērtēts sekojoši:<br />
* 50% - Korekts programmas kods<br />
** Komandrindas interfeiss<br />
** First fit realizācija<br />
** Next fit realizācija<br />
** Best fit realizācija<br />
** Worst fit realizācija<br />
** Citu algoritmu realizācija, ja tāda ir<br />
** Fragmentācijas mērījumi<br />
** Laika mērījumi<br />
** Komentāri kodā<br />
* 50% - Eseja ar rezultātiem.<br />
** Algoritmu apraksts<br />
** Mērījumu / eksperimenta apraksts<br />
** Fragmentācijas novērtējums un secinājumi<br />
** Ātrdarbības novērtējums un secinājumi<br />
** Kopējie secinājumi algoritmu izvēlei<br />
** Rakstīt īsi, bet aptveroši! (Tā, lai visi punkti būtu pieminēti.)<br />
<br />
===Piemēri===<br />
<br />
md5 -c chunks1 -s sizes1<br />
<br />
==J&A (jautājumi un atbildes)==<br />
<br />
====J: Uzdevums pārāk grūts, vai var pagarināt termiņu?====<br />
<br />
A: Noteiktais termiņš paliek spēkā. Iesaku risināt savlaicīgi, lai pietiek laika neparedzētu problēmu risināšanai.<br />
<br />
----<br />
<br />
Uz [[LU-LSP-b | LSP kursa ]] sākuma lapu.</div>Atishttp://andromeda.df.lu.lv/wiki/index.php?title=LU-LSP-b13&diff=4704LU-LSP-b132013-10-29T14:10:01Z<p>Atis: </p>
<hr />
<div>{{LUDFKurss|Linux sistēmas programmēšana|LSP|DatZ3122|2DAT3122}}<br />
<br />
* Pasniedzējs: Leo Seļāvo ''(epasts: vards.uzvards @ gmail.com)''<br />
* Asistents: Atis Elsts ''(epasts: vards.uzvards @ gmail.com)''<br />
<br />
* {{KursiGGroup|lu-lsp-b}}<br />
<br />
* Vērtējums = 15% praktiskie darbi, 25% mājas darbi, 10% dalība klasē, 20% KD1 un 30% KD2(eksāmens).<br />
<br />
==== Praktisko un mājas darbu iesniegšana ==== <br />
* Darbi jāiesniedz uz '''kursa asistenta''' e-pastu [[Image:atis-email.gif]]<br />
* Darbi jāiesniedz kā '''pielikums''' e-pasta vēstulei, nevis vēstules tekstā<br />
* 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<br />
* Faila nosaukumam jābūt formā LSP_MD1_Vards_Uzvards.c<br />
* Nevajag arhivēt failus, ja vien tas nav prasīts uzdevuma nosacījumos<br />
<br />
==== Praktisko darbu vērtēšanas kritēriji ==== <br />
* No kursa kopējā vērtējuma 15% var saņemt par praktisko darbu kvalitatīvu izpildīšanu<br />
* Papildus par praktiskajiem darbiem saņem plusiņus, kas ietilpst 10% no kopējā vērtējuma "par darbu klasē". Tie pienākas ikvienam, kas iesniedz PD '''patstāvīgu''' risinājumu lekcijas laikā.<br />
* Ja lekcijas beigu daļā PD risinājums tiek apskatīts publiski, PD jāiesūta līdz šim laikam. Vēlāk iesniegti darbi netiek vērtēti.<br />
* Vēlāk (arī stipri) iesūtīti darbi var tikt izlaboti, bet netiek vērtēti.<br />
<br />
==== Mājas darbu vērtēšanas kritēriji ====<br />
* No kursa kopējā vērtējuma 25% veido mājas darbi<br />
* Mājas darbu iesniegšanas termiņa laiks ir 30 minūtes pirms lekcijas sākuma<br />
* Ja darbs tiek iesniegts ar novēlošanos (kaut vai 1 min), rezultāts tiek samazināts par:<br />
** '''10%''' par ik dienu pirmo piecu dienu laikā pēc termiņa, un<br />
** '''50%''' piecas vai vairāk dienas pēc termiņa. <br />
** Visi mājas darbi jāiesūta līdz kursa beigās noteiktam ''deadline'', vēlāk iesniegtie netiek vērtēti.<br />
<br />
<br />
<br />
== Kalendārs ==<br />
<br />
{| border=1 cellspacing=0 cellpadding=4<br />
|-<br />
! Datums, nedēļa <br />
! Kursa saturs<br />
! Uzdevumi<br />
|-<br />
| 03.09.2013. <br />
| <br />
Virtuāla lekcija. 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.)<br />
<br />
* [http://bit.ly/1a2rHMW Kas tas ir, Linux?] - lasīt Linux.com rakstu<br />
<br />
* [[LU-LSP-B11:shell-cheatsheet | UNIX čaulas populārākās komandas un lietojumi]].<br />
<br />
<!-- [[LU-LSP-b13:L01 | Praktiskais darbs #1]]. <br />
--><br />
|<br />
Uzdots [[LU-LSP-b:MD0 | MD0]] mājas darbs - programmēšanas stils - izlasīt un ņemt vērā turpmākajos darbos.<br />
|-<br />
| 10.09.2013. <br />
| <br />
Virtuāla lekcija. Vispārīgs pārskats par valodu C.<br />
<br />
Lasīt [http://bit.ly/1a2rsl3 C valodas pamācību] no Drexel universitātes.<br />
<br />
<!-- [[LU-LSP-b13:L02 | Praktiskais darbs #2]]. <br />
--><br />
|<br />
'''Uzdots''' [[LU-LSP-b:MD1 | MD1]] mājas darbs - dzimtas koks.<br />
|-<br />
| 17.09.2013. <br />
| Datu struktūras un algoritmi valodā C.<br />
<br />
[http://jupiter.cs.fmf.lu.lv/~kursi/lsp/1-apvienota-ievadlekcija.pdf Lekcijas piezīmes]<br />
<br />
[[LU-LSP-b13:L01 | Praktiskais darbs #1]]<br />
<br />
|<br />
|-<br />
| 24.09.2013.<br />
| 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. <br />
<br />
[http://jupiter.cs.fmf.lu.lv/~kursi/lsp/2-faili.pdf Lekcijas piezīmes]<br />
<br />
[[LU-LSP-b13:L02 | Praktiskais darbs #2]]. <br />
|<br />
<!--<br />
'''Uzdots''' [[LU-LSP-b:MD2 | MD2]] mājas darbs - datubāze. --><br />
|-<br />
| 01.10.2013.<br />
| 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().<br />
<br />
|<br />
Mājas darba [[LU-LSP-b:MD1 | MD1]] '''nodošanas''' termiņš.<br />
|-<br />
| 08.10.2013.<br />
| 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().<br />
<br />
[http://jupiter.cs.fmf.lu.lv/~kursi/lsp/4-faili.pdf Lekcijas piezīmes]<br />
<br />
[[LU-LSP-b13:L03 | Praktiskais darbs #3]] - direktoriju koka apstaigāšana.<br />
|<br />
<!--Mājas darba [[LU-LSP-b:MD2 | MD2]] '''nodošanas''' termiņš. --><br />
<br />
'''Uzdots''' [[LU-LSP-b:MD3-2013 | MD3]] mājas darbs - direktoriju koka apstaigāšana.<br />
|-<br />
| 15.10.2013.<br />
| <br />
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.<br />
<br />
[[LU-LSP-b13:L04 | Praktiskais darbs #4]].<br />
|<br />
|-<br />
| 22.10.2013.<br />
| 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()''. <br />
<br />
[[LU-LSP-b13:L05 | Praktiskais darbs #5]] - ''setjmp()'',''longjmp()'' un taimera signāls.<br />
|<br />
Mājas darba [[LU-LSP-b:MD3 | MD3]] '''nodošanas''' termiņš.<br />
<br />
<!-- '''Uzdots''' [[LU-LSP-b:MD4 | MD4]] mājas darbs - setjmp() un longjmp() lietojums. --><br />
|-<br />
| 29.10.2013.<br />
| 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.<br />
Atmiņas fragmentācija. Atmiņas rezervēšanas (allocation) algoritmi, kas darbojas uz atmiņas fragmentiem.<br />
<br />
[[LU-LSP-b13:L06 | Praktiskais darbs #6]] - atmiņas rezervācija.<br />
<br />
|<br />
'''Uzdots''' [[LU-LSP-b:MD4 | MD4]] mājas darbs - atmiņas rezervācijas funkciju salīdzinājums.<br />
|-<br />
| 05.11.2013.<br />
|<br />
Daudz-uzdevumu vide. Procesi un procesu kontrole. Pavedieni. Kooperējošies procesi un preemptīvā daudz-uzdevumu metode. Komanda '''ps'''. getpid() un getppid(). fork().<br />
<br />
<!-- [[LU-LSP-b13:L08 | Praktiskais darbs #8]] - vienkāršs atmiņas alokators fiksēta izmēra objektiem. --><br />
|<br />
Mājas darba [[LU-LSP-b:MD4 | MD4]] '''nodošanas''' termiņš.<br />
<br />
'''Uzdots''' [[LU-LSP-b:MD5 | MD5]] - atmiņas fragmentācijas algoritmu novērtējums<br />
|-<br />
| 12.11.2013.<br />
|<br />
Vidus semestra '''kontroldarbs'''.<br />
<br />
Apspriede par iepriekšējo PD risinājumiem. Atkļūdošana: Linux rīki un to lietošana. Darbs pie mājasdarbiem.<br />
|<br />
<br />
Mājas darba [[LU-LSP-b:MD5 | MD5]] grupu izveidošanas termiņš. <br />
|-<br />
| 19.11.2013.<br />
| Daudz-uzdevumu vide. ''wait()'' un ''exec()''. ''system()''.<br />
<br />
<!-- [[LU-LSP-b13:L09 | Praktiskais darbs #9]] - steka satura analīze un piekļuve stekam. --><br />
|<br />
Mājas darba [[LU-LSP-b:MD5 | MD5]] '''nodošanas''' termiņš.<br />
|-<br />
| 26.11.2013.<br />
| Klienta un servera arhitektūra. Sockets. Komunikācija starp nesaistītiem procesiem. Daudzlietotāju sistēmas (spēles) arhitektūra).<br />
|<br />
|-<br />
| 03.12.2013.<br />
| 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().<br />
<br />
<!-- [[LU-LSP-b13:L10 | Praktiskais darbs #10]] - datortīkla klienta programma. --><br />
|<br />
<!--<br />
Kursa projekta definēšana. --><br />
<br />
|-<br />
| 10.12.2013.<br />
| Pavedieni.<br />
<br />
<!-- [[LU-LSP-b13:L11 | Praktiskais darbs #11]] - servera programma. --><br />
|<br />
|-<br />
| 17.12.2013.<br />
| Kursa kopsavilkums. Darbs pie [[LU-LSP-b13:projekts | kursa projekta]]. <br />
<br />
Vienota komunikācijas protokola definēšana kursa projektam.<br />
|<br />
|-<br />
| 23.12.2013. - 01.01.2014.<br />
| Ziemassvētku un Jaungada brīvdienas<br />
|<br />
&nbsp;<br />
|-<br />
| xx.01.2013.<br />
| '''Eksāmens xx:xx''' xxx. telpā.<br />
|<br />
&nbsp;<br />
|-<br />
|}<br />
<br />
== Mājas darbi ==<br />
<br />
* [[LU-LSP-b:MD0 | MD0]]: Izlasīt kodēšanas stila dokumentus.<br />
* [[LU-LSP-b:MD1 | MD1]]: Ģimenes koka ģenerēšanas programma.<br />
<!--<br />
* [[LU-LSP-b:MD2 | MD2]]: Datu bāze ģimenes kokam.<br />
* [[LU-LSP-b:MD3 | MD3]]: Vienādo failu meklēšana direktorijas kokā.<br />
* [[LU-LSP-b:MD4 | MD4]]: Setjmp un longjmp.<br />
* [[LU-LSP-b:MD5 | MD5]]: Atmiņas fragmentācijas algoritmu novērtējums.<br />
--><br />
<br />
<!-- * [[LU-LSP-b:MD5 | MD5]]: Procedūru izsaukumu steka izdruka. --><br />
<br />
<br />
Eksāmens izpaužas kā [[LU-LSP-b13:projekts | kursa projekta]] aizstāvēšana.<br />
<!--<br />
* MD7 - projekta protokola specifikācija. Skatīt arī [[LU-LSP-b13:PD_client_server | PD: Klienta un servera arhitektūra]]<br />
** [[LU-LSP-b11:PD_client_server | PD: Klienta un servera arhitektūra]] (praktiskā darba piezīmes)<br />
** [http://selavo.lv/~kursi/LSP/md7 MD7 projekta grupu risinājumi]<br />
<br />
Eksāmens izpaužas kā kursa projekta aizstāvēšana.<br />
--><br />
<br />
== Literatūra ==<br />
<br />
* 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)<br />
<br />
* "Linux system programming" by Robert Love, O'Reilly Media, 2007, ISBN 0596009585<br />
<br />
* [http://www.advancedlinuxprogramming.com/ Advanced Linux Programming] by CodeSourcery LLC,<br />
<br />
* "Building Embedded Linux Systems" O'Reilly Media, 2008, ISBN 0596529686<br />
<br />
== Saites ==<br />
<br />
* [http://tuxradar.com/content/how-linux-kernel-works Intro to Linux kernel]<br />
<br />
* [http://www.lysator.liu.se/c/bwk-tutor.html Programming in C: A Tutorial] (by Brian W. Kernighan)<br />
* [http://www.gnu.org/software/make/manual/make.html Gnu make] dokumentācija<br />
* [http://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard Tipiskas unix direktoriju hierarhijas] īss apraksts.<br />
<br />
* Sockets:<br />
** [http://gnosis.cx/publish/programming/sockets.html Programming IP Sockets on Linux] (tutorial)<br />
** [http://en.wikipedia.org/wiki/Berkeley_sockets Berkeley sockets] (Wikipēdija)<br />
<br />
* http://www.hiraeth.com/alan/tutorials/courses/unixprog.html<br />
* http://lkml.org/<br />
* [http://tldp.org/LDP/lkmpg/2.6/html/index.html The Linux Kernel Module Programming Guide]<br />
<br />
=== Linux veiktspējas analīze ===<br />
* [http://www.cyberciti.biz/tips/top-linux-monitoring-tools.html Top 10 Linux monitoring tools]<br />
* [http://www.cyberciti.biz/tips/how-do-i-find-out-linux-cpu-utilization.html CPU analīze]<br />
* [http://www.cyberciti.biz/tips/linux-disk-performance-monitoring-howto.html Disku I/O analīze]<br />
<br />
== Atziņas ==<br />
* [http://norvig.com/21-days.html Teach yourself programming in 10 years] by Peter Norvig</div>Atishttp://andromeda.df.lu.lv/wiki/index.php?title=LU-LSP-b:MD4&diff=4703LU-LSP-b:MD42013-10-29T12:48:00Z<p>Atis: </p>
<hr />
<div>{{TocRight}}<br />
<br />
1. Uzrakstīt programmu, kas rezervē atmiņu (drīkst pēc tam neatbrīvot). Uzdevums līdzīgs [[LU-LSP-b13:L06|PD#6]], drīkst izmantot tā kodu.<br />
<br />
2. Salīdzināt trīs dažādus atmiņas rezervācijas veidus:<br />
<br />
* Ar malloc() funkciju<br />
* Ar mmap() funkciju (lietojot to bez konkrētas atmiņas adreses norādīšanas, bez "apakšā esoša" faila, un tā, lai varētu rezervēto atmiņu lietot gan lasīšanai, gan rakstīšanai)<br />
* Ar sbrk() funkciju<br />
<br />
Rezervēt atmiņu pa vienam megabaitam (= 1024*1024 baitu).<br />
<br />
Katram veidam izpētīt:<br />
# Kāds ir maksimālais atmiņas daudzums, ko tādā veidā var alocēt?<br />
# Kāds programmas darbības laiks, ja tiek rezervēti 100 megabaiti atmiņas?<br />
<br />
Kurš ir '''ātrākais''' veids šim kokrētajam lietojumam? Ar kuru veidu var rezervēt '''visvairāk''' atmiņas? Uzrakstīt 1-2 teikumu garu skaidrojumu - kāpēc tā?<br />
<br />
''Padoms. Laiku ērti ir mērīt ar programmu '''time'''. (Lai korekti interpretētu programmas dotos rezultātus,. jāsaskaitea kopā "system" un "user" laiks; pirmais atbilst laikam, kas pavadīts sistēmas izsaukumos, otrais: laikam, ko programma patērējusi izpildot pati savu kodu)''<br />
<br />
<br />
3. Izvēlēties vienu no rezervācijas veidiem, un izpētīt, kā uzrakstītajā programmā tiek izmantota statiskā atmiņa (tā atmiņa, kas ir rezervēta jau tās palaišanas brīdī). Ar programmu '''size''' vai '''objdump''' palīdzību noteikt:<br />
# TEXT segmenta izmēru baitos<br />
# DATA segmenta izmēru baitos<br />
# BSS segmenta izmēru baitos<br />
<br />
=== Iesūtīšana ===<br />
Iesūtīt:<br />
# programmas kodu (C failā)<br />
# atbildes uz jautājumiem (e-pasta tekstā)<br />
<br />
----<br />
<br />
Uz [[LU-LSP-b | LSP kursa ]] sākuma lapu.</div>Atishttp://andromeda.df.lu.lv/wiki/index.php?title=LU-LSP-b:MD4&diff=4702LU-LSP-b:MD42013-10-29T12:47:28Z<p>Atis: </p>
<hr />
<div>{{TocRight}}<br />
<br />
1. Uzrakstīt programmu, kas rezervē atmiņu (drīkst pēc tam neatbrīvot). Uzdevums līdzīgs [[LU-LSP-b12:L06|PD#6]], drīkst izmantot tā kodu.<br />
<br />
2. Salīdzināt trīs dažādus atmiņas rezervācijas veidus:<br />
<br />
* Ar malloc() funkciju<br />
* Ar mmap() funkciju (lietojot to bez konkrētas atmiņas adreses norādīšanas, bez "apakšā esoša" faila, un tā, lai varētu rezervēto atmiņu lietot gan lasīšanai, gan rakstīšanai)<br />
* Ar sbrk() funkciju<br />
<br />
Rezervēt atmiņu pa vienam megabaitam (= 1024*1024 baitu).<br />
<br />
Katram veidam izpētīt:<br />
# Kāds ir maksimālais atmiņas daudzums, ko tādā veidā var alocēt?<br />
# Kāds programmas darbības laiks, ja tiek rezervēti 100 megabaiti atmiņas?<br />
<br />
Kurš ir '''ātrākais''' veids šim kokrētajam lietojumam? Ar kuru veidu var rezervēt '''visvairāk''' atmiņas? Uzrakstīt 1-2 teikumu garu skaidrojumu - kāpēc tā?<br />
<br />
''Padoms. Laiku ērti ir mērīt ar programmu '''time'''. (Lai korekti interpretētu programmas dotos rezultātus,. jāsaskaitea kopā "system" un "user" laiks; pirmais atbilst laikam, kas pavadīts sistēmas izsaukumos, otrais: laikam, ko programma patērējusi izpildot pati savu kodu)''<br />
<br />
<br />
3. Izvēlēties vienu no rezervācijas veidiem, un izpētīt, kā uzrakstītajā programmā tiek izmantota statiskā atmiņa (tā atmiņa, kas ir rezervēta jau tās palaišanas brīdī). Ar programmu '''size''' vai '''objdump''' palīdzību noteikt:<br />
# TEXT segmenta izmēru baitos<br />
# DATA segmenta izmēru baitos<br />
# BSS segmenta izmēru baitos<br />
<br />
=== Iesūtīšana ===<br />
Iesūtīt:<br />
# programmas kodu (C failā)<br />
# atbildes uz jautājumiem (e-pasta tekstā)<br />
<br />
----<br />
<br />
Uz [[LU-LSP-b | LSP kursa ]] sākuma lapu.</div>Atishttp://andromeda.df.lu.lv/wiki/index.php?title=LU-LSP-b13&diff=4701LU-LSP-b132013-10-29T12:46:39Z<p>Atis: </p>
<hr />
<div>{{LUDFKurss|Linux sistēmas programmēšana|LSP|DatZ3122|2DAT3122}}<br />
<br />
* Pasniedzējs: Leo Seļāvo ''(epasts: vards.uzvards @ gmail.com)''<br />
* Asistents: Atis Elsts ''(epasts: vards.uzvards @ gmail.com)''<br />
<br />
* {{KursiGGroup|lu-lsp-b}}<br />
<br />
* Vērtējums = 15% praktiskie darbi, 25% mājas darbi, 10% dalība klasē, 20% KD1 un 30% KD2(eksāmens).<br />
<br />
==== Praktisko un mājas darbu iesniegšana ==== <br />
* Darbi jāiesniedz uz '''kursa asistenta''' e-pastu [[Image:atis-email.gif]]<br />
* Darbi jāiesniedz kā '''pielikums''' e-pasta vēstulei, nevis vēstules tekstā<br />
* 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<br />
* Faila nosaukumam jābūt formā LSP_MD1_Vards_Uzvards.c<br />
* Nevajag arhivēt failus, ja vien tas nav prasīts uzdevuma nosacījumos<br />
<br />
==== Praktisko darbu vērtēšanas kritēriji ==== <br />
* No kursa kopējā vērtējuma 15% var saņemt par praktisko darbu kvalitatīvu izpildīšanu<br />
* Papildus par praktiskajiem darbiem saņem plusiņus, kas ietilpst 10% no kopējā vērtējuma "par darbu klasē". Tie pienākas ikvienam, kas iesniedz PD '''patstāvīgu''' risinājumu lekcijas laikā.<br />
* Ja lekcijas beigu daļā PD risinājums tiek apskatīts publiski, PD jāiesūta līdz šim laikam. Vēlāk iesniegti darbi netiek vērtēti.<br />
* Vēlāk (arī stipri) iesūtīti darbi var tikt izlaboti, bet netiek vērtēti.<br />
<br />
==== Mājas darbu vērtēšanas kritēriji ====<br />
* No kursa kopējā vērtējuma 25% veido mājas darbi<br />
* Mājas darbu iesniegšanas termiņa laiks ir 30 minūtes pirms lekcijas sākuma<br />
* Ja darbs tiek iesniegts ar novēlošanos (kaut vai 1 min), rezultāts tiek samazināts par:<br />
** '''10%''' par ik dienu pirmo piecu dienu laikā pēc termiņa, un<br />
** '''50%''' piecas vai vairāk dienas pēc termiņa. <br />
** Visi mājas darbi jāiesūta līdz kursa beigās noteiktam ''deadline'', vēlāk iesniegtie netiek vērtēti.<br />
<br />
<br />
<br />
== Kalendārs ==<br />
<br />
{| border=1 cellspacing=0 cellpadding=4<br />
|-<br />
! Datums, nedēļa <br />
! Kursa saturs<br />
! Uzdevumi<br />
|-<br />
| 03.09.2013. <br />
| <br />
Virtuāla lekcija. 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.)<br />
<br />
* [http://bit.ly/1a2rHMW Kas tas ir, Linux?] - lasīt Linux.com rakstu<br />
<br />
* [[LU-LSP-B11:shell-cheatsheet | UNIX čaulas populārākās komandas un lietojumi]].<br />
<br />
<!-- [[LU-LSP-b13:L01 | Praktiskais darbs #1]]. <br />
--><br />
|<br />
Uzdots [[LU-LSP-b:MD0 | MD0]] mājas darbs - programmēšanas stils - izlasīt un ņemt vērā turpmākajos darbos.<br />
|-<br />
| 10.09.2013. <br />
| <br />
Virtuāla lekcija. Vispārīgs pārskats par valodu C.<br />
<br />
Lasīt [http://bit.ly/1a2rsl3 C valodas pamācību] no Drexel universitātes.<br />
<br />
<!-- [[LU-LSP-b13:L02 | Praktiskais darbs #2]]. <br />
--><br />
|<br />
'''Uzdots''' [[LU-LSP-b:MD1 | MD1]] mājas darbs - dzimtas koks.<br />
|-<br />
| 17.09.2013. <br />
| Datu struktūras un algoritmi valodā C.<br />
<br />
[http://jupiter.cs.fmf.lu.lv/~kursi/lsp/1-apvienota-ievadlekcija.pdf Lekcijas piezīmes]<br />
<br />
[[LU-LSP-b13:L01 | Praktiskais darbs #1]]<br />
<br />
|<br />
|-<br />
| 24.09.2013.<br />
| 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. <br />
<br />
[http://jupiter.cs.fmf.lu.lv/~kursi/lsp/2-faili.pdf Lekcijas piezīmes]<br />
<br />
[[LU-LSP-b13:L02 | Praktiskais darbs #2]]. <br />
|<br />
<!--<br />
'''Uzdots''' [[LU-LSP-b:MD2 | MD2]] mājas darbs - datubāze. --><br />
|-<br />
| 01.10.2013.<br />
| 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().<br />
<br />
|<br />
Mājas darba [[LU-LSP-b:MD1 | MD1]] '''nodošanas''' termiņš.<br />
|-<br />
| 08.10.2013.<br />
| 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().<br />
<br />
[http://jupiter.cs.fmf.lu.lv/~kursi/lsp/4-faili.pdf Lekcijas piezīmes]<br />
<br />
[[LU-LSP-b13:L03 | Praktiskais darbs #3]] - direktoriju koka apstaigāšana.<br />
|<br />
<!--Mājas darba [[LU-LSP-b:MD2 | MD2]] '''nodošanas''' termiņš. --><br />
<br />
'''Uzdots''' [[LU-LSP-b:MD3-2013 | MD3]] mājas darbs - direktoriju koka apstaigāšana.<br />
|-<br />
| 15.10.2013.<br />
| <br />
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.<br />
<br />
[[LU-LSP-b13:L04 | Praktiskais darbs #4]].<br />
|<br />
|-<br />
| 22.10.2013.<br />
| 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()''. <br />
<br />
[[LU-LSP-b13:L05 | Praktiskais darbs #5]] - ''setjmp()'',''longjmp()'' un taimera signāls.<br />
|<br />
Mājas darba [[LU-LSP-b:MD3 | MD3]] '''nodošanas''' termiņš.<br />
<br />
<!-- '''Uzdots''' [[LU-LSP-b:MD4 | MD4]] mājas darbs - setjmp() un longjmp() lietojums. --><br />
|-<br />
| 29.10.2013.<br />
| 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.<br />
Atmiņas fragmentācija. Atmiņas rezervēšanas (allocation) algoritmi, kas darbojas uz atmiņas fragmentiem.<br />
<br />
[[LU-LSP-b13:L06 | Praktiskais darbs #6]] - atmiņas rezervācija.<br />
<br />
|<br />
'''Uzdots''' [[LU-LSP-b:MD4 | MD4]] mājas darbs - atmiņas rezervācijas funkciju salīdzinājums.<br />
|-<br />
| 05.11.2013.<br />
|<br />
Daudz-uzdevumu vide. Procesi un procesu kontrole. Pavedieni. Kooperējošies procesi un preemptīvā daudz-uzdevumu metode. Komanda '''ps'''. getpid() un getppid(). fork().<br />
<br />
<!-- [[LU-LSP-b13:L08 | Praktiskais darbs #8]] - vienkāršs atmiņas alokators fiksēta izmēra objektiem. --><br />
|<br />
Mājas darba [[LU-LSP-b:MD4 | MD4]] '''nodošanas''' termiņš.<br />
<!--<br />
Mājas darba [[LU-LSP-b:MD4 | MD4]] '''nodošanas''' termiņš.<br />
<br />
'''Uzdots''' [[LU-LSP-b:MD5 | MD5]] - atmiņas fragmentācijas algoritmu novērtējums --><br />
|-<br />
| 12.11.2013.<br />
|<br />
Vidus semestra '''kontroldarbs'''.<br />
<br />
Apspriede par iepriekšējo PD risinājumiem. Atkļūdošana: Linux rīki un to lietošana. Darbs pie mājasdarbiem.<br />
|<br />
<br />
<!--<br />
Mājas darba [[LU-LSP-b:MD5 | MD5]] grupu izveidošanas termiņš. Katra grupa: atsūtiet vienu e-pastu ar paredzamo sastāvu! --><br />
|-<br />
| 19.11.2013.<br />
| Daudz-uzdevumu vide. ''wait()'' un ''exec()''. ''system()''.<br />
<br />
<!-- [[LU-LSP-b13:L09 | Praktiskais darbs #9]] - steka satura analīze un piekļuve stekam. --><br />
|<br />
|-<br />
| 26.11.2013.<br />
| Klienta un servera arhitektūra. Sockets. Komunikācija starp nesaistītiem procesiem. Daudzlietotāju sistēmas (spēles) arhitektūra).<br />
|<br />
<!--<br />
Mājas darba [[LU-LSP-b:MD5 | MD5]] '''nodošanas''' termiņš. --><br />
|-<br />
| 03.12.2013.<br />
| 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().<br />
<br />
<!-- [[LU-LSP-b13:L10 | Praktiskais darbs #10]] - datortīkla klienta programma. --><br />
|<br />
<!--<br />
Kursa projekta definēšana. --><br />
<br />
|-<br />
| 10.12.2013.<br />
| Pavedieni.<br />
<br />
<!-- [[LU-LSP-b13:L11 | Praktiskais darbs #11]] - servera programma. --><br />
|<br />
|-<br />
| 17.12.2013.<br />
| Kursa kopsavilkums. Darbs pie [[LU-LSP-b13:projekts | kursa projekta]]. <br />
<br />
Vienota komunikācijas protokola definēšana kursa projektam.<br />
|<br />
|-<br />
| 23.12.2013. - 01.01.2014.<br />
| Ziemassvētku un Jaungada brīvdienas<br />
|<br />
&nbsp;<br />
|-<br />
| xx.01.2013.<br />
| '''Eksāmens xx:xx''' xxx. telpā.<br />
|<br />
&nbsp;<br />
|-<br />
|}<br />
<br />
== Mājas darbi ==<br />
<br />
* [[LU-LSP-b:MD0 | MD0]]: Izlasīt kodēšanas stila dokumentus.<br />
* [[LU-LSP-b:MD1 | MD1]]: Ģimenes koka ģenerēšanas programma.<br />
<!--<br />
* [[LU-LSP-b:MD2 | MD2]]: Datu bāze ģimenes kokam.<br />
* [[LU-LSP-b:MD3 | MD3]]: Vienādo failu meklēšana direktorijas kokā.<br />
* [[LU-LSP-b:MD4 | MD4]]: Setjmp un longjmp.<br />
* [[LU-LSP-b:MD5 | MD5]]: Atmiņas fragmentācijas algoritmu novērtējums.<br />
--><br />
<br />
<!-- * [[LU-LSP-b:MD5 | MD5]]: Procedūru izsaukumu steka izdruka. --><br />
<br />
<br />
Eksāmens izpaužas kā [[LU-LSP-b13:projekts | kursa projekta]] aizstāvēšana.<br />
<!--<br />
* MD7 - projekta protokola specifikācija. Skatīt arī [[LU-LSP-b13:PD_client_server | PD: Klienta un servera arhitektūra]]<br />
** [[LU-LSP-b11:PD_client_server | PD: Klienta un servera arhitektūra]] (praktiskā darba piezīmes)<br />
** [http://selavo.lv/~kursi/LSP/md7 MD7 projekta grupu risinājumi]<br />
<br />
Eksāmens izpaužas kā kursa projekta aizstāvēšana.<br />
--><br />
<br />
== Literatūra ==<br />
<br />
* 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)<br />
<br />
* "Linux system programming" by Robert Love, O'Reilly Media, 2007, ISBN 0596009585<br />
<br />
* [http://www.advancedlinuxprogramming.com/ Advanced Linux Programming] by CodeSourcery LLC,<br />
<br />
* "Building Embedded Linux Systems" O'Reilly Media, 2008, ISBN 0596529686<br />
<br />
== Saites ==<br />
<br />
* [http://tuxradar.com/content/how-linux-kernel-works Intro to Linux kernel]<br />
<br />
* [http://www.lysator.liu.se/c/bwk-tutor.html Programming in C: A Tutorial] (by Brian W. Kernighan)<br />
* [http://www.gnu.org/software/make/manual/make.html Gnu make] dokumentācija<br />
* [http://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard Tipiskas unix direktoriju hierarhijas] īss apraksts.<br />
<br />
* Sockets:<br />
** [http://gnosis.cx/publish/programming/sockets.html Programming IP Sockets on Linux] (tutorial)<br />
** [http://en.wikipedia.org/wiki/Berkeley_sockets Berkeley sockets] (Wikipēdija)<br />
<br />
* http://www.hiraeth.com/alan/tutorials/courses/unixprog.html<br />
* http://lkml.org/<br />
* [http://tldp.org/LDP/lkmpg/2.6/html/index.html The Linux Kernel Module Programming Guide]<br />
<br />
=== Linux veiktspējas analīze ===<br />
* [http://www.cyberciti.biz/tips/top-linux-monitoring-tools.html Top 10 Linux monitoring tools]<br />
* [http://www.cyberciti.biz/tips/how-do-i-find-out-linux-cpu-utilization.html CPU analīze]<br />
* [http://www.cyberciti.biz/tips/linux-disk-performance-monitoring-howto.html Disku I/O analīze]<br />
<br />
== Atziņas ==<br />
* [http://norvig.com/21-days.html Teach yourself programming in 10 years] by Peter Norvig</div>Atishttp://andromeda.df.lu.lv/wiki/index.php?title=LU-LSP-b:MD4&diff=4700LU-LSP-b:MD42013-10-29T12:44:56Z<p>Atis: </p>
<hr />
<div>{{TocRight}}<br />
<br />
1. Uzrakstīt programmu, kas rezervē atmiņu (drīkst pēc tam neatbrīvot). Uzdevums līdzīgs [[LU-LSP-b12:L06|PD#6]], drīkst izmantot tā kodu.<br />
<br />
2. Salīdzināt trīs dažādus atmiņas rezervācijas veidus:<br />
<br />
* Ar malloc() funkciju<br />
* Ar mmap() funkciju (lietojot to bez konkrētas atmiņas adreses norādīšanas, bez "apakšā esoša" faila, un tā, lai varētu rezervēto atmiņu lietot gan lasīšanai, gan rakstīšanai)<br />
* Ar sbrk() funkciju<br />
<br />
Rezervēt atmiņu pa vienam megabaitam (= 1024*1024 baitu).<br />
<br />
Katram veidam izpētīt:<br />
# Kāds ir maksimālais atmiņas daudzums, ko tādā veidā var alocēt?<br />
# Kāds programmas darbības laiks, ja tiek rezervēti 100 megabaiti daudzumu?<br />
<br />
Kurš ir '''ātrākais''' veids šim kokrētajam lietojumam? Ar kuru veidu var rezervēt '''visvairāk''' atmiņas? Uzrakstīt 1-2 teikumu garu skaidrojumu - kāpēc tā?<br />
<br />
''Padoms. Laiku ērti ir mērīt ar programmu '''time'''. (Lai korekti interpretētu programmas dotos rezultātus,. jāsaskaitea kopā "system" un "user" laiks; pirmais atbilst laikam, kas pavadīts sistēmas izsaukumos, otrais: laikam, ko programma patērējusi izpildot pati savu kodu)''<br />
<br />
<br />
3. Izvēlēties vienu no rezervācijas veidiem, un izpētīt, kā uzrakstītajā programmā tiek izmantota statiskā atmiņa (tā atmiņa, kas ir rezervēta jau tās palaišanas brīdī). Ar programmu '''size''' vai '''objdump''' palīdzību noteikt:<br />
# TEXT segmenta izmēru baitos<br />
# DATA segmenta izmēru baitos<br />
# BSS segmenta izmēru baitos<br />
<br />
<br />
Iesūtīt:<br />
# programmas kodu (C failā)<br />
# atbildes uz jautājumiem (e-pasta tekstā)<br />
<br />
----<br />
<br />
Uz [[LU-LSP-b | LSP kursa ]] sākuma lapu.</div>Atishttp://andromeda.df.lu.lv/wiki/index.php?title=LU-LSP-b13&diff=4699LU-LSP-b132013-10-29T12:31:11Z<p>Atis: </p>
<hr />
<div>{{LUDFKurss|Linux sistēmas programmēšana|LSP|DatZ3122|2DAT3122}}<br />
<br />
* Pasniedzējs: Leo Seļāvo ''(epasts: vards.uzvards @ gmail.com)''<br />
* Asistents: Atis Elsts ''(epasts: vards.uzvards @ gmail.com)''<br />
<br />
* {{KursiGGroup|lu-lsp-b}}<br />
<br />
* Vērtējums = 15% praktiskie darbi, 25% mājas darbi, 10% dalība klasē, 20% KD1 un 30% KD2(eksāmens).<br />
<br />
==== Praktisko un mājas darbu iesniegšana ==== <br />
* Darbi jāiesniedz uz '''kursa asistenta''' e-pastu [[Image:atis-email.gif]]<br />
* Darbi jāiesniedz kā '''pielikums''' e-pasta vēstulei, nevis vēstules tekstā<br />
* 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<br />
* Faila nosaukumam jābūt formā LSP_MD1_Vards_Uzvards.c<br />
* Nevajag arhivēt failus, ja vien tas nav prasīts uzdevuma nosacījumos<br />
<br />
==== Praktisko darbu vērtēšanas kritēriji ==== <br />
* No kursa kopējā vērtējuma 15% var saņemt par praktisko darbu kvalitatīvu izpildīšanu<br />
* Papildus par praktiskajiem darbiem saņem plusiņus, kas ietilpst 10% no kopējā vērtējuma "par darbu klasē". Tie pienākas ikvienam, kas iesniedz PD '''patstāvīgu''' risinājumu lekcijas laikā.<br />
* Ja lekcijas beigu daļā PD risinājums tiek apskatīts publiski, PD jāiesūta līdz šim laikam. Vēlāk iesniegti darbi netiek vērtēti.<br />
* Vēlāk (arī stipri) iesūtīti darbi var tikt izlaboti, bet netiek vērtēti.<br />
<br />
==== Mājas darbu vērtēšanas kritēriji ====<br />
* No kursa kopējā vērtējuma 25% veido mājas darbi<br />
* Mājas darbu iesniegšanas termiņa laiks ir 30 minūtes pirms lekcijas sākuma<br />
* Ja darbs tiek iesniegts ar novēlošanos (kaut vai 1 min), rezultāts tiek samazināts par:<br />
** '''10%''' par ik dienu pirmo piecu dienu laikā pēc termiņa, un<br />
** '''50%''' piecas vai vairāk dienas pēc termiņa. <br />
** Visi mājas darbi jāiesūta līdz kursa beigās noteiktam ''deadline'', vēlāk iesniegtie netiek vērtēti.<br />
<br />
<br />
<br />
== Kalendārs ==<br />
<br />
{| border=1 cellspacing=0 cellpadding=4<br />
|-<br />
! Datums, nedēļa <br />
! Kursa saturs<br />
! Uzdevumi<br />
|-<br />
| 03.09.2013. <br />
| <br />
Virtuāla lekcija. 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.)<br />
<br />
* [http://bit.ly/1a2rHMW Kas tas ir, Linux?] - lasīt Linux.com rakstu<br />
<br />
* [[LU-LSP-B11:shell-cheatsheet | UNIX čaulas populārākās komandas un lietojumi]].<br />
<br />
<!-- [[LU-LSP-b13:L01 | Praktiskais darbs #1]]. <br />
--><br />
|<br />
Uzdots [[LU-LSP-b:MD0 | MD0]] mājas darbs - programmēšanas stils - izlasīt un ņemt vērā turpmākajos darbos.<br />
|-<br />
| 10.09.2013. <br />
| <br />
Virtuāla lekcija. Vispārīgs pārskats par valodu C.<br />
<br />
Lasīt [http://bit.ly/1a2rsl3 C valodas pamācību] no Drexel universitātes.<br />
<br />
<!-- [[LU-LSP-b13:L02 | Praktiskais darbs #2]]. <br />
--><br />
|<br />
'''Uzdots''' [[LU-LSP-b:MD1 | MD1]] mājas darbs - dzimtas koks.<br />
|-<br />
| 17.09.2013. <br />
| Datu struktūras un algoritmi valodā C.<br />
<br />
[http://jupiter.cs.fmf.lu.lv/~kursi/lsp/1-apvienota-ievadlekcija.pdf Lekcijas piezīmes]<br />
<br />
[[LU-LSP-b13:L01 | Praktiskais darbs #1]]<br />
<br />
|<br />
|-<br />
| 24.09.2013.<br />
| 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. <br />
<br />
[http://jupiter.cs.fmf.lu.lv/~kursi/lsp/2-faili.pdf Lekcijas piezīmes]<br />
<br />
[[LU-LSP-b13:L02 | Praktiskais darbs #2]]. <br />
|<br />
<!--<br />
'''Uzdots''' [[LU-LSP-b:MD2 | MD2]] mājas darbs - datubāze. --><br />
|-<br />
| 01.10.2013.<br />
| 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().<br />
<br />
|<br />
Mājas darba [[LU-LSP-b:MD1 | MD1]] '''nodošanas''' termiņš.<br />
|-<br />
| 08.10.2013.<br />
| 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().<br />
<br />
[http://jupiter.cs.fmf.lu.lv/~kursi/lsp/4-faili.pdf Lekcijas piezīmes]<br />
<br />
[[LU-LSP-b13:L03 | Praktiskais darbs #3]] - direktoriju koka apstaigāšana.<br />
|<br />
<!--Mājas darba [[LU-LSP-b:MD2 | MD2]] '''nodošanas''' termiņš. --><br />
<br />
'''Uzdots''' [[LU-LSP-b:MD3-2013 | MD3]] mājas darbs - direktoriju koka apstaigāšana.<br />
|-<br />
| 15.10.2013.<br />
| <br />
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.<br />
<br />
[[LU-LSP-b13:L04 | Praktiskais darbs #4]].<br />
|<br />
|-<br />
| 22.10.2013.<br />
| 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()''. <br />
<br />
[[LU-LSP-b13:L05 | Praktiskais darbs #5]] - ''setjmp()'',''longjmp()'' un taimera signāls.<br />
|<br />
Mājas darba [[LU-LSP-b:MD3 | MD3]] '''nodošanas''' termiņš.<br />
<br />
<!-- '''Uzdots''' [[LU-LSP-b:MD4 | MD4]] mājas darbs - setjmp() un longjmp() lietojums. --><br />
|-<br />
| 29.10.2013.<br />
| 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.<br />
Atmiņas fragmentācija. Atmiņas rezervēšanas (allocation) algoritmi, kas darbojas uz atmiņas fragmentiem.<br />
<br />
[[LU-LSP-b13:L06 | Praktiskais darbs #6]] - atmiņas rezervācija.<br />
<br />
|<br />
'''Uzdots''' [[LU-LSP-b:MD4 | MD4]] mājas darbs - atmiņas rezervācijas funkciju salīdzinājums.<br />
|-<br />
| 05.11.2013.<br />
|<br />
Daudz-uzdevumu vide. Procesi un procesu kontrole. Pavedieni. Kooperējošies procesi un preemptīvā daudz-uzdevumu metode. Komanda '''ps'''. getpid() un getppid(). fork().<br />
<br />
<!-- [[LU-LSP-b13:L08 | Praktiskais darbs #8]] - vienkāršs atmiņas alokators fiksēta izmēra objektiem. --><br />
|<br />
<!--<br />
Mājas darba [[LU-LSP-b:MD4 | MD4]] '''nodošanas''' termiņš.<br />
<br />
'''Uzdots''' [[LU-LSP-b:MD5 | MD5]] - atmiņas fragmentācijas algoritmu novērtējums --><br />
|-<br />
| 12.11.2013.<br />
|<br />
Vidus semestra '''kontroldarbs'''.<br />
<br />
Apspriede par iepriekšējo PD risinājumiem. Atkļūdošana: Linux rīki un to lietošana. Darbs pie mājasdarbiem.<br />
|<br />
Mājas darba [[LU-LSP-b:MD4 | MD4]] '''nodošanas''' termiņš.<br />
<!--<br />
Mājas darba [[LU-LSP-b:MD5 | MD5]] grupu izveidošanas termiņš. Katra grupa: atsūtiet vienu e-pastu ar paredzamo sastāvu! --><br />
|-<br />
| 19.11.2013.<br />
| Daudz-uzdevumu vide. ''wait()'' un ''exec()''. ''system()''.<br />
<br />
<!-- [[LU-LSP-b13:L09 | Praktiskais darbs #9]] - steka satura analīze un piekļuve stekam. --><br />
|<br />
|-<br />
| 26.11.2013.<br />
| Klienta un servera arhitektūra. Sockets. Komunikācija starp nesaistītiem procesiem. Daudzlietotāju sistēmas (spēles) arhitektūra).<br />
|<br />
<!--<br />
Mājas darba [[LU-LSP-b:MD5 | MD5]] '''nodošanas''' termiņš. --><br />
|-<br />
| 03.12.2013.<br />
| 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().<br />
<br />
<!-- [[LU-LSP-b13:L10 | Praktiskais darbs #10]] - datortīkla klienta programma. --><br />
|<br />
<!--<br />
Kursa projekta definēšana. --><br />
<br />
|-<br />
| 10.12.2013.<br />
| Pavedieni.<br />
<br />
<!-- [[LU-LSP-b13:L11 | Praktiskais darbs #11]] - servera programma. --><br />
|<br />
|-<br />
| 17.12.2013.<br />
| Kursa kopsavilkums. Darbs pie [[LU-LSP-b13:projekts | kursa projekta]]. <br />
<br />
Vienota komunikācijas protokola definēšana kursa projektam.<br />
|<br />
|-<br />
| 23.12.2013. - 01.01.2014.<br />
| Ziemassvētku un Jaungada brīvdienas<br />
|<br />
&nbsp;<br />
|-<br />
| xx.01.2013.<br />
| '''Eksāmens xx:xx''' xxx. telpā.<br />
|<br />
&nbsp;<br />
|-<br />
|}<br />
<br />
== Mājas darbi ==<br />
<br />
* [[LU-LSP-b:MD0 | MD0]]: Izlasīt kodēšanas stila dokumentus.<br />
* [[LU-LSP-b:MD1 | MD1]]: Ģimenes koka ģenerēšanas programma.<br />
<!--<br />
* [[LU-LSP-b:MD2 | MD2]]: Datu bāze ģimenes kokam.<br />
* [[LU-LSP-b:MD3 | MD3]]: Vienādo failu meklēšana direktorijas kokā.<br />
* [[LU-LSP-b:MD4 | MD4]]: Setjmp un longjmp.<br />
* [[LU-LSP-b:MD5 | MD5]]: Atmiņas fragmentācijas algoritmu novērtējums.<br />
--><br />
<br />
<!-- * [[LU-LSP-b:MD5 | MD5]]: Procedūru izsaukumu steka izdruka. --><br />
<br />
<br />
Eksāmens izpaužas kā [[LU-LSP-b13:projekts | kursa projekta]] aizstāvēšana.<br />
<!--<br />
* MD7 - projekta protokola specifikācija. Skatīt arī [[LU-LSP-b13:PD_client_server | PD: Klienta un servera arhitektūra]]<br />
** [[LU-LSP-b11:PD_client_server | PD: Klienta un servera arhitektūra]] (praktiskā darba piezīmes)<br />
** [http://selavo.lv/~kursi/LSP/md7 MD7 projekta grupu risinājumi]<br />
<br />
Eksāmens izpaužas kā kursa projekta aizstāvēšana.<br />
--><br />
<br />
== Literatūra ==<br />
<br />
* 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)<br />
<br />
* "Linux system programming" by Robert Love, O'Reilly Media, 2007, ISBN 0596009585<br />
<br />
* [http://www.advancedlinuxprogramming.com/ Advanced Linux Programming] by CodeSourcery LLC,<br />
<br />
* "Building Embedded Linux Systems" O'Reilly Media, 2008, ISBN 0596529686<br />
<br />
== Saites ==<br />
<br />
* [http://tuxradar.com/content/how-linux-kernel-works Intro to Linux kernel]<br />
<br />
* [http://www.lysator.liu.se/c/bwk-tutor.html Programming in C: A Tutorial] (by Brian W. Kernighan)<br />
* [http://www.gnu.org/software/make/manual/make.html Gnu make] dokumentācija<br />
* [http://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard Tipiskas unix direktoriju hierarhijas] īss apraksts.<br />
<br />
* Sockets:<br />
** [http://gnosis.cx/publish/programming/sockets.html Programming IP Sockets on Linux] (tutorial)<br />
** [http://en.wikipedia.org/wiki/Berkeley_sockets Berkeley sockets] (Wikipēdija)<br />
<br />
* http://www.hiraeth.com/alan/tutorials/courses/unixprog.html<br />
* http://lkml.org/<br />
* [http://tldp.org/LDP/lkmpg/2.6/html/index.html The Linux Kernel Module Programming Guide]<br />
<br />
=== Linux veiktspējas analīze ===<br />
* [http://www.cyberciti.biz/tips/top-linux-monitoring-tools.html Top 10 Linux monitoring tools]<br />
* [http://www.cyberciti.biz/tips/how-do-i-find-out-linux-cpu-utilization.html CPU analīze]<br />
* [http://www.cyberciti.biz/tips/linux-disk-performance-monitoring-howto.html Disku I/O analīze]<br />
<br />
== Atziņas ==<br />
* [http://norvig.com/21-days.html Teach yourself programming in 10 years] by Peter Norvig</div>Atishttp://andromeda.df.lu.lv/wiki/index.php?title=LU-LSP-b13&diff=4698LU-LSP-b132013-10-29T12:30:42Z<p>Atis: </p>
<hr />
<div>{{LUDFKurss|Linux sistēmas programmēšana|LSP|DatZ3122|2DAT3122}}<br />
<br />
* Pasniedzējs: Leo Seļāvo ''(epasts: vards.uzvards @ gmail.com)''<br />
* Asistents: Atis Elsts ''(epasts: vards.uzvards @ gmail.com)''<br />
<br />
* {{KursiGGroup|lu-lsp-b}}<br />
<br />
* Vērtējums = 15% praktiskie darbi, 25% mājas darbi, 10% dalība klasē, 20% KD1 un 30% KD2(eksāmens).<br />
<br />
==== Praktisko un mājas darbu iesniegšana ==== <br />
* Darbi jāiesniedz uz '''kursa asistenta''' e-pastu [[Image:atis-email.gif]]<br />
* Darbi jāiesniedz kā '''pielikums''' e-pasta vēstulei, nevis vēstules tekstā<br />
* 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<br />
* Faila nosaukumam jābūt formā LSP_MD1_Vards_Uzvards.c<br />
* Nevajag arhivēt failus, ja vien tas nav prasīts uzdevuma nosacījumos<br />
<br />
==== Praktisko darbu vērtēšanas kritēriji ==== <br />
* No kursa kopējā vērtējuma 15% var saņemt par praktisko darbu kvalitatīvu izpildīšanu<br />
* Papildus par praktiskajiem darbiem saņem plusiņus, kas ietilpst 10% no kopējā vērtējuma "par darbu klasē". Tie pienākas ikvienam, kas iesniedz PD '''patstāvīgu''' risinājumu lekcijas laikā.<br />
* Ja lekcijas beigu daļā PD risinājums tiek apskatīts publiski, PD jāiesūta līdz šim laikam. Vēlāk iesniegti darbi netiek vērtēti.<br />
* Vēlāk (arī stipri) iesūtīti darbi var tikt izlaboti, bet netiek vērtēti.<br />
<br />
==== Mājas darbu vērtēšanas kritēriji ====<br />
* No kursa kopējā vērtējuma 25% veido mājas darbi<br />
* Mājas darbu iesniegšanas termiņa laiks ir 30 minūtes pirms lekcijas sākuma<br />
* Ja darbs tiek iesniegts ar novēlošanos (kaut vai 1 min), rezultāts tiek samazināts par:<br />
** '''10%''' par ik dienu pirmo piecu dienu laikā pēc termiņa, un<br />
** '''50%''' piecas vai vairāk dienas pēc termiņa. <br />
** Visi mājas darbi jāiesūta līdz kursa beigās noteiktam ''deadline'', vēlāk iesniegtie netiek vērtēti.<br />
<br />
<br />
<br />
== Kalendārs ==<br />
<br />
{| border=1 cellspacing=0 cellpadding=4<br />
|-<br />
! Datums, nedēļa <br />
! Kursa saturs<br />
! Uzdevumi<br />
|-<br />
| 03.09.2013. <br />
| <br />
Virtuāla lekcija. 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.)<br />
<br />
* [http://bit.ly/1a2rHMW Kas tas ir, Linux?] - lasīt Linux.com rakstu<br />
<br />
* [[LU-LSP-B11:shell-cheatsheet | UNIX čaulas populārākās komandas un lietojumi]].<br />
<br />
<!-- [[LU-LSP-b13:L01 | Praktiskais darbs #1]]. <br />
--><br />
|<br />
Uzdots [[LU-LSP-b:MD0 | MD0]] mājas darbs - programmēšanas stils - izlasīt un ņemt vērā turpmākajos darbos.<br />
|-<br />
| 10.09.2013. <br />
| <br />
Virtuāla lekcija. Vispārīgs pārskats par valodu C.<br />
<br />
Lasīt [http://bit.ly/1a2rsl3 C valodas pamācību] no Drexel universitātes.<br />
<br />
<!-- [[LU-LSP-b13:L02 | Praktiskais darbs #2]]. <br />
--><br />
|<br />
'''Uzdots''' [[LU-LSP-b:MD1 | MD1]] mājas darbs - dzimtas koks.<br />
|-<br />
| 17.09.2013. <br />
| Datu struktūras un algoritmi valodā C.<br />
<br />
[http://jupiter.cs.fmf.lu.lv/~kursi/lsp/1-apvienota-ievadlekcija.pdf Lekcijas piezīmes]<br />
<br />
[[LU-LSP-b13:L01 | Praktiskais darbs #1]]<br />
<br />
|<br />
|-<br />
| 24.09.2013.<br />
| 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. <br />
<br />
[http://jupiter.cs.fmf.lu.lv/~kursi/lsp/2-faili.pdf Lekcijas piezīmes]<br />
<br />
[[LU-LSP-b13:L02 | Praktiskais darbs #2]]. <br />
|<br />
<!--<br />
'''Uzdots''' [[LU-LSP-b:MD2 | MD2]] mājas darbs - datubāze. --><br />
|-<br />
| 01.10.2013.<br />
| 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().<br />
<br />
|<br />
Mājas darba [[LU-LSP-b:MD1 | MD1]] '''nodošanas''' termiņš.<br />
|-<br />
| 08.10.2013.<br />
| 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().<br />
<br />
[http://jupiter.cs.fmf.lu.lv/~kursi/lsp/4-faili.pdf Lekcijas piezīmes]<br />
<br />
[[LU-LSP-b13:L03 | Praktiskais darbs #3]] - direktoriju koka apstaigāšana.<br />
|<br />
<!--Mājas darba [[LU-LSP-b:MD2 | MD2]] '''nodošanas''' termiņš. --><br />
<br />
'''Uzdots''' [[LU-LSP-b:MD3-2013 | MD3]] mājas darbs - direktoriju koka apstaigāšana.<br />
|-<br />
| 15.10.2013.<br />
| <br />
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.<br />
<br />
[[LU-LSP-b13:L04 | Praktiskais darbs #4]].<br />
|<br />
|-<br />
| 22.10.2013.<br />
| 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()''. <br />
<br />
[[LU-LSP-b13:L05 | Praktiskais darbs #5]] - ''setjmp()'',''longjmp()'' un taimera signāls.<br />
|<br />
Mājas darba [[LU-LSP-b:MD3 | MD3]] '''nodošanas''' termiņš.<br />
<br />
<!-- '''Uzdots''' [[LU-LSP-b:MD4 | MD4]] mājas darbs - setjmp() un longjmp() lietojums. --><br />
|-<br />
| 29.10.2013.<br />
| 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.<br />
Atmiņas fragmentācija. Atmiņas rezervēšanas (allocation) algoritmi, kas darbojas uz atmiņas fragmentiem.<br />
<br />
[[LU-LSP-b13:L06 | Praktiskais darbs #6]] - atmiņas rezervācija.<br />
<br />
'''Uzdots''' [[LU-LSP-b:MD4 | MD4]] mājas darbs - atmiņas rezervācijas funkciju salīdzinājums.<br />
<br />
|<br />
|-<br />
| 05.11.2013.<br />
|<br />
Daudz-uzdevumu vide. Procesi un procesu kontrole. Pavedieni. Kooperējošies procesi un preemptīvā daudz-uzdevumu metode. Komanda '''ps'''. getpid() un getppid(). fork().<br />
<br />
<!-- [[LU-LSP-b13:L08 | Praktiskais darbs #8]] - vienkāršs atmiņas alokators fiksēta izmēra objektiem. --><br />
|<br />
<!--<br />
Mājas darba [[LU-LSP-b:MD4 | MD4]] '''nodošanas''' termiņš.<br />
<br />
'''Uzdots''' [[LU-LSP-b:MD5 | MD5]] - atmiņas fragmentācijas algoritmu novērtējums --><br />
|-<br />
| 12.11.2013.<br />
|<br />
Vidus semestra '''kontroldarbs'''.<br />
<br />
Apspriede par iepriekšējo PD risinājumiem. Atkļūdošana: Linux rīki un to lietošana. Darbs pie mājasdarbiem.<br />
|<br />
<!--<br />
Mājas darba [[LU-LSP-b:MD5 | MD5]] grupu izveidošanas termiņš. Katra grupa: atsūtiet vienu e-pastu ar paredzamo sastāvu! --><br />
|-<br />
| 19.11.2013.<br />
| Daudz-uzdevumu vide. ''wait()'' un ''exec()''. ''system()''.<br />
<br />
<!-- [[LU-LSP-b13:L09 | Praktiskais darbs #9]] - steka satura analīze un piekļuve stekam. --><br />
|<br />
|-<br />
| 26.11.2013.<br />
| Klienta un servera arhitektūra. Sockets. Komunikācija starp nesaistītiem procesiem. Daudzlietotāju sistēmas (spēles) arhitektūra).<br />
|<br />
<!--<br />
Mājas darba [[LU-LSP-b:MD5 | MD5]] '''nodošanas''' termiņš. --><br />
|-<br />
| 03.12.2013.<br />
| 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().<br />
<br />
<!-- [[LU-LSP-b13:L10 | Praktiskais darbs #10]] - datortīkla klienta programma. --><br />
|<br />
<!--<br />
Kursa projekta definēšana. --><br />
<br />
|-<br />
| 10.12.2013.<br />
| Pavedieni.<br />
<br />
<!-- [[LU-LSP-b13:L11 | Praktiskais darbs #11]] - servera programma. --><br />
|<br />
|-<br />
| 17.12.2013.<br />
| Kursa kopsavilkums. Darbs pie [[LU-LSP-b13:projekts | kursa projekta]]. <br />
<br />
Vienota komunikācijas protokola definēšana kursa projektam.<br />
|<br />
|-<br />
| 23.12.2013. - 01.01.2014.<br />
| Ziemassvētku un Jaungada brīvdienas<br />
|<br />
&nbsp;<br />
|-<br />
| xx.01.2013.<br />
| '''Eksāmens xx:xx''' xxx. telpā.<br />
|<br />
&nbsp;<br />
|-<br />
|}<br />
<br />
== Mājas darbi ==<br />
<br />
* [[LU-LSP-b:MD0 | MD0]]: Izlasīt kodēšanas stila dokumentus.<br />
* [[LU-LSP-b:MD1 | MD1]]: Ģimenes koka ģenerēšanas programma.<br />
<!--<br />
* [[LU-LSP-b:MD2 | MD2]]: Datu bāze ģimenes kokam.<br />
* [[LU-LSP-b:MD3 | MD3]]: Vienādo failu meklēšana direktorijas kokā.<br />
* [[LU-LSP-b:MD4 | MD4]]: Setjmp un longjmp.<br />
* [[LU-LSP-b:MD5 | MD5]]: Atmiņas fragmentācijas algoritmu novērtējums.<br />
--><br />
<br />
<!-- * [[LU-LSP-b:MD5 | MD5]]: Procedūru izsaukumu steka izdruka. --><br />
<br />
<br />
Eksāmens izpaužas kā [[LU-LSP-b13:projekts | kursa projekta]] aizstāvēšana.<br />
<!--<br />
* MD7 - projekta protokola specifikācija. Skatīt arī [[LU-LSP-b13:PD_client_server | PD: Klienta un servera arhitektūra]]<br />
** [[LU-LSP-b11:PD_client_server | PD: Klienta un servera arhitektūra]] (praktiskā darba piezīmes)<br />
** [http://selavo.lv/~kursi/LSP/md7 MD7 projekta grupu risinājumi]<br />
<br />
Eksāmens izpaužas kā kursa projekta aizstāvēšana.<br />
--><br />
<br />
== Literatūra ==<br />
<br />
* 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)<br />
<br />
* "Linux system programming" by Robert Love, O'Reilly Media, 2007, ISBN 0596009585<br />
<br />
* [http://www.advancedlinuxprogramming.com/ Advanced Linux Programming] by CodeSourcery LLC,<br />
<br />
* "Building Embedded Linux Systems" O'Reilly Media, 2008, ISBN 0596529686<br />
<br />
== Saites ==<br />
<br />
* [http://tuxradar.com/content/how-linux-kernel-works Intro to Linux kernel]<br />
<br />
* [http://www.lysator.liu.se/c/bwk-tutor.html Programming in C: A Tutorial] (by Brian W. Kernighan)<br />
* [http://www.gnu.org/software/make/manual/make.html Gnu make] dokumentācija<br />
* [http://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard Tipiskas unix direktoriju hierarhijas] īss apraksts.<br />
<br />
* Sockets:<br />
** [http://gnosis.cx/publish/programming/sockets.html Programming IP Sockets on Linux] (tutorial)<br />
** [http://en.wikipedia.org/wiki/Berkeley_sockets Berkeley sockets] (Wikipēdija)<br />
<br />
* http://www.hiraeth.com/alan/tutorials/courses/unixprog.html<br />
* http://lkml.org/<br />
* [http://tldp.org/LDP/lkmpg/2.6/html/index.html The Linux Kernel Module Programming Guide]<br />
<br />
=== Linux veiktspējas analīze ===<br />
* [http://www.cyberciti.biz/tips/top-linux-monitoring-tools.html Top 10 Linux monitoring tools]<br />
* [http://www.cyberciti.biz/tips/how-do-i-find-out-linux-cpu-utilization.html CPU analīze]<br />
* [http://www.cyberciti.biz/tips/linux-disk-performance-monitoring-howto.html Disku I/O analīze]<br />
<br />
== Atziņas ==<br />
* [http://norvig.com/21-days.html Teach yourself programming in 10 years] by Peter Norvig</div>Atishttp://andromeda.df.lu.lv/wiki/index.php?title=LU-LSP-b13:L05&diff=4680LU-LSP-b13:L052013-10-22T13:36:24Z<p>Atis: </p>
<hr />
<div>===Praktiskais darbs #5===<br />
<br />
Realizēt programmu, kas beidz darbību, notiekot taimera signālam.<br />
<br />
Darbības beigšanu realizēt caur <code>longjmp</code> uz <code>main()</code> funkciju, no kuras tad notiek <code>return 0;</code>.<br />
<br />
Izmantojamās funkcijas:<br />
* setjmp<br />
* longjmp<br />
* sigaction<br />
<br />
Koda šablons:<br />
<br />
<pre><br />
#include <setjmp.h><br />
#include <signal.h><br />
#include <stdio.h><br />
<br />
// TODO: jūsu kods te!<br />
<br />
int main(void)<br />
{<br />
// TODO: jūsu kods te!<br />
<br />
<br />
// taalaako kodu nemainiit!<br />
<br />
// taimeris uz 3 sekundeem<br />
alarm(3);<br />
<br />
// bezgaliigs cikls<br />
while (1);<br />
<br />
// atgriezh kaut kaadu nenulles kodu, lai kompilators nesuudzeetos<br />
return -1;<br />
}<br />
</pre><br />
<br />
<br />
Risinājumus nosūtīt uz kursa asistenta e-pastu. Iesniedzamais fails jānosauc šādi: LSP_PD5_vards_uzvards.c. Tas nav jāarhivē.</div>Atishttp://andromeda.df.lu.lv/wiki/index.php?title=LU-LSP-b13:L05&diff=4679LU-LSP-b13:L052013-10-22T13:30:07Z<p>Atis: New page: ===Praktiskais darbs #5=== Realizēt programmu, kas beidz darbību, notiekot taimera signālam. Izmantojamās funkcijas: * setjmp * longjmp * sigaction Koda šablons: <pre> #include <s...</p>
<hr />
<div>===Praktiskais darbs #5===<br />
<br />
Realizēt programmu, kas beidz darbību, notiekot taimera signālam.<br />
<br />
Izmantojamās funkcijas:<br />
* setjmp<br />
* longjmp<br />
* sigaction<br />
<br />
Koda šablons:<br />
<br />
<pre><br />
#include <setjmp.h><br />
#include <signal.h><br />
#include <stdio.h><br />
<br />
// TODO: jūsu kods te!<br />
<br />
int main(void)<br />
{<br />
// TODO: jūsu kods te!<br />
<br />
<br />
// taalaako kodu nemainiit!<br />
<br />
// taimeris uz 3 sekundeem<br />
alarm(3);<br />
<br />
// bezgaliigs cikls<br />
while (1);<br />
<br />
// atgriezh kaut kaadu nenulles kodu, lai kompilators nesuudzeetos<br />
return -1;<br />
}<br />
</pre><br />
<br />
<br />
Risinājumus nosūtīt uz kursa asistenta e-pastu. Iesniedzamais fails jānosauc šādi: LSP_PD5_vards_uzvards.c. Tas nav jāarhivē.</div>Atishttp://andromeda.df.lu.lv/wiki/index.php?title=LU-LSP-b13&diff=4678LU-LSP-b132013-10-22T13:26:05Z<p>Atis: </p>
<hr />
<div>{{LUDFKurss|Linux sistēmas programmēšana|LSP|DatZ3122|2DAT3122}}<br />
<br />
* Pasniedzējs: Leo Seļāvo ''(epasts: vards.uzvards @ gmail.com)''<br />
* Asistents: Atis Elsts ''(epasts: vards.uzvards @ gmail.com)''<br />
<br />
* {{KursiGGroup|lu-lsp-b}}<br />
<br />
* Vērtējums = 15% praktiskie darbi, 25% mājas darbi, 10% dalība klasē, 20% KD1 un 30% KD2(eksāmens).<br />
<br />
==== Praktisko un mājas darbu iesniegšana ==== <br />
* Darbi jāiesniedz uz '''kursa asistenta''' e-pastu [[Image:atis-email.gif]]<br />
* Darbi jāiesniedz kā '''pielikums''' e-pasta vēstulei, nevis vēstules tekstā<br />
* 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<br />
* Faila nosaukumam jābūt formā LSP_MD1_Vards_Uzvards.c<br />
* Nevajag arhivēt failus, ja vien tas nav prasīts uzdevuma nosacījumos<br />
<br />
==== Praktisko darbu vērtēšanas kritēriji ==== <br />
* No kursa kopējā vērtējuma 15% var saņemt par praktisko darbu kvalitatīvu izpildīšanu<br />
* Papildus par praktiskajiem darbiem saņem plusiņus, kas ietilpst 10% no kopējā vērtējuma "par darbu klasē". Tie pienākas ikvienam, kas iesniedz PD '''patstāvīgu''' risinājumu lekcijas laikā.<br />
* Ja lekcijas beigu daļā PD risinājums tiek apskatīts publiski, PD jāiesūta līdz šim laikam. Vēlāk iesniegti darbi netiek vērtēti.<br />
* Vēlāk (arī stipri) iesūtīti darbi var tikt izlaboti, bet netiek vērtēti.<br />
<br />
==== Mājas darbu vērtēšanas kritēriji ====<br />
* No kursa kopējā vērtējuma 25% veido mājas darbi<br />
* Mājas darbu iesniegšanas termiņa laiks ir 30 minūtes pirms lekcijas sākuma<br />
* Ja darbs tiek iesniegts ar novēlošanos (kaut vai 1 min), rezultāts tiek samazināts par:<br />
** '''10%''' par ik dienu pirmo piecu dienu laikā pēc termiņa, un<br />
** '''50%''' piecas vai vairāk dienas pēc termiņa. <br />
** Visi mājas darbi jāiesūta līdz kursa beigās noteiktam ''deadline'', vēlāk iesniegtie netiek vērtēti.<br />
<br />
<br />
<br />
== Kalendārs ==<br />
<br />
{| border=1 cellspacing=0 cellpadding=4<br />
|-<br />
! Datums, nedēļa <br />
! Kursa saturs<br />
! Uzdevumi<br />
|-<br />
| 03.09.2013. <br />
| <br />
Virtuāla lekcija. 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.)<br />
<br />
* [http://bit.ly/1a2rHMW Kas tas ir, Linux?] - lasīt Linux.com rakstu<br />
<br />
* [[LU-LSP-B11:shell-cheatsheet | UNIX čaulas populārākās komandas un lietojumi]].<br />
<br />
<!-- [[LU-LSP-b13:L01 | Praktiskais darbs #1]]. <br />
--><br />
|<br />
Uzdots [[LU-LSP-b:MD0 | MD0]] mājas darbs - programmēšanas stils - izlasīt un ņemt vērā turpmākajos darbos.<br />
|-<br />
| 10.09.2013. <br />
| <br />
Virtuāla lekcija. Vispārīgs pārskats par valodu C.<br />
<br />
Lasīt [http://bit.ly/1a2rsl3 C valodas pamācību] no Drexel universitātes.<br />
<br />
<!-- [[LU-LSP-b13:L02 | Praktiskais darbs #2]]. <br />
--><br />
|<br />
'''Uzdots''' [[LU-LSP-b:MD1 | MD1]] mājas darbs - dzimtas koks.<br />
|-<br />
| 17.09.2013. <br />
| Datu struktūras un algoritmi valodā C.<br />
<br />
[http://jupiter.cs.fmf.lu.lv/~kursi/lsp/1-apvienota-ievadlekcija.pdf Lekcijas piezīmes]<br />
<br />
[[LU-LSP-b13:L01 | Praktiskais darbs #1]]<br />
<br />
|<br />
|-<br />
| 24.09.2013.<br />
| 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. <br />
<br />
[http://jupiter.cs.fmf.lu.lv/~kursi/lsp/2-faili.pdf Lekcijas piezīmes]<br />
<br />
[[LU-LSP-b13:L02 | Praktiskais darbs #2]]. <br />
|<br />
<!--<br />
'''Uzdots''' [[LU-LSP-b:MD2 | MD2]] mājas darbs - datubāze. --><br />
|-<br />
| 01.10.2013.<br />
| 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().<br />
<br />
|<br />
Mājas darba [[LU-LSP-b:MD1 | MD1]] '''nodošanas''' termiņš.<br />
|-<br />
| 08.10.2013.<br />
| 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().<br />
<br />
[http://jupiter.cs.fmf.lu.lv/~kursi/lsp/4-faili.pdf Lekcijas piezīmes]<br />
<br />
[[LU-LSP-b13:L03 | Praktiskais darbs #3]] - direktoriju koka apstaigāšana.<br />
|<br />
<!--Mājas darba [[LU-LSP-b:MD2 | MD2]] '''nodošanas''' termiņš. --><br />
<br />
'''Uzdots''' [[LU-LSP-b:MD3-2013 | MD3]] mājas darbs - direktoriju koka apstaigāšana.<br />
|-<br />
| 15.10.2013.<br />
| <br />
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.<br />
<br />
[[LU-LSP-b13:L04 | Praktiskais darbs #4]].<br />
|<br />
|-<br />
| 22.10.2013.<br />
| 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()''. <br />
<br />
[[LU-LSP-b13:L05 | Praktiskais darbs #5]] - ''setjmp()'',''longjmp()'' un taimera signāls.<br />
|<br />
Mājas darba [[LU-LSP-b:MD3 | MD3]] '''nodošanas''' termiņš.<br />
<br />
<!-- '''Uzdots''' [[LU-LSP-b:MD4 | MD4]] mājas darbs - setjmp() un longjmp() lietojums. --><br />
|-<br />
| 29.10.2013.<br />
| 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.<br />
Atmiņas fragmentācija. Atmiņas rezervēšanas (allocation) algoritmi, kas darbojas uz atmiņas fragmentiem.<br />
<br />
<!-- [[LU-LSP-b13:L07 | Praktiskais darbs #7]] - vēlreiz par atmiņas alokāciju. --><br />
|<br />
|-<br />
| 05.11.2013.<br />
|<br />
Daudz-uzdevumu vide. Procesi un procesu kontrole. Pavedieni. Kooperējošies procesi un preemptīvā daudz-uzdevumu metode. Komanda '''ps'''. getpid() un getppid(). fork().<br />
<br />
<!-- [[LU-LSP-b13:L08 | Praktiskais darbs #8]] - vienkāršs atmiņas alokators fiksēta izmēra objektiem. --><br />
|<br />
<!--<br />
Mājas darba [[LU-LSP-b:MD4 | MD4]] '''nodošanas''' termiņš.<br />
<br />
'''Uzdots''' [[LU-LSP-b:MD5 | MD5]] - atmiņas fragmentācijas algoritmu novērtējums --><br />
|-<br />
| 12.11.2013.<br />
|<br />
Vidus semestra '''kontroldarbs'''.<br />
<br />
Apspriede par iepriekšējo PD risinājumiem. Atkļūdošana: Linux rīki un to lietošana. Darbs pie mājasdarbiem.<br />
|<br />
<!--<br />
Mājas darba [[LU-LSP-b:MD5 | MD5]] grupu izveidošanas termiņš. Katra grupa: atsūtiet vienu e-pastu ar paredzamo sastāvu! --><br />
|-<br />
| 19.11.2013.<br />
| Daudz-uzdevumu vide. ''wait()'' un ''exec()''. ''system()''.<br />
<br />
<!-- [[LU-LSP-b13:L09 | Praktiskais darbs #9]] - steka satura analīze un piekļuve stekam. --><br />
|<br />
|-<br />
| 26.11.2013.<br />
| Klienta un servera arhitektūra. Sockets. Komunikācija starp nesaistītiem procesiem. Daudzlietotāju sistēmas (spēles) arhitektūra).<br />
|<br />
<!--<br />
Mājas darba [[LU-LSP-b:MD5 | MD5]] '''nodošanas''' termiņš. --><br />
|-<br />
| 03.12.2013.<br />
| 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().<br />
<br />
<!-- [[LU-LSP-b13:L10 | Praktiskais darbs #10]] - datortīkla klienta programma. --><br />
|<br />
<!--<br />
Kursa projekta definēšana. --><br />
<br />
|-<br />
| 10.12.2013.<br />
| Pavedieni.<br />
<br />
<!-- [[LU-LSP-b13:L11 | Praktiskais darbs #11]] - servera programma. --><br />
|<br />
|-<br />
| 17.12.2013.<br />
| Kursa kopsavilkums. Darbs pie [[LU-LSP-b13:projekts | kursa projekta]]. <br />
<br />
Vienota komunikācijas protokola definēšana kursa projektam.<br />
|<br />
|-<br />
| 23.12.2013. - 01.01.2014.<br />
| Ziemassvētku un Jaungada brīvdienas<br />
|<br />
&nbsp;<br />
|-<br />
| xx.01.2013.<br />
| '''Eksāmens xx:xx''' xxx. telpā.<br />
|<br />
&nbsp;<br />
|-<br />
|}<br />
<br />
== Mājas darbi ==<br />
<br />
* [[LU-LSP-b:MD0 | MD0]]: Izlasīt kodēšanas stila dokumentus.<br />
* [[LU-LSP-b:MD1 | MD1]]: Ģimenes koka ģenerēšanas programma.<br />
<!--<br />
* [[LU-LSP-b:MD2 | MD2]]: Datu bāze ģimenes kokam.<br />
* [[LU-LSP-b:MD3 | MD3]]: Vienādo failu meklēšana direktorijas kokā.<br />
* [[LU-LSP-b:MD4 | MD4]]: Setjmp un longjmp.<br />
* [[LU-LSP-b:MD5 | MD5]]: Atmiņas fragmentācijas algoritmu novērtējums.<br />
--><br />
<br />
<!-- * [[LU-LSP-b:MD5 | MD5]]: Procedūru izsaukumu steka izdruka. --><br />
<br />
<br />
Eksāmens izpaužas kā [[LU-LSP-b13:projekts | kursa projekta]] aizstāvēšana.<br />
<!--<br />
* MD7 - projekta protokola specifikācija. Skatīt arī [[LU-LSP-b13:PD_client_server | PD: Klienta un servera arhitektūra]]<br />
** [[LU-LSP-b11:PD_client_server | PD: Klienta un servera arhitektūra]] (praktiskā darba piezīmes)<br />
** [http://selavo.lv/~kursi/LSP/md7 MD7 projekta grupu risinājumi]<br />
<br />
Eksāmens izpaužas kā kursa projekta aizstāvēšana.<br />
--><br />
<br />
== Literatūra ==<br />
<br />
* 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)<br />
<br />
* "Linux system programming" by Robert Love, O'Reilly Media, 2007, ISBN 0596009585<br />
<br />
* [http://www.advancedlinuxprogramming.com/ Advanced Linux Programming] by CodeSourcery LLC,<br />
<br />
* "Building Embedded Linux Systems" O'Reilly Media, 2008, ISBN 0596529686<br />
<br />
== Saites ==<br />
<br />
* [http://tuxradar.com/content/how-linux-kernel-works Intro to Linux kernel]<br />
<br />
* [http://www.lysator.liu.se/c/bwk-tutor.html Programming in C: A Tutorial] (by Brian W. Kernighan)<br />
* [http://www.gnu.org/software/make/manual/make.html Gnu make] dokumentācija<br />
* [http://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard Tipiskas unix direktoriju hierarhijas] īss apraksts.<br />
<br />
* Sockets:<br />
** [http://gnosis.cx/publish/programming/sockets.html Programming IP Sockets on Linux] (tutorial)<br />
** [http://en.wikipedia.org/wiki/Berkeley_sockets Berkeley sockets] (Wikipēdija)<br />
<br />
* http://www.hiraeth.com/alan/tutorials/courses/unixprog.html<br />
* http://lkml.org/<br />
* [http://tldp.org/LDP/lkmpg/2.6/html/index.html The Linux Kernel Module Programming Guide]<br />
<br />
=== Linux veiktspējas analīze ===<br />
* [http://www.cyberciti.biz/tips/top-linux-monitoring-tools.html Top 10 Linux monitoring tools]<br />
* [http://www.cyberciti.biz/tips/how-do-i-find-out-linux-cpu-utilization.html CPU analīze]<br />
* [http://www.cyberciti.biz/tips/linux-disk-performance-monitoring-howto.html Disku I/O analīze]<br />
<br />
== Atziņas ==<br />
* [http://norvig.com/21-days.html Teach yourself programming in 10 years] by Peter Norvig</div>Atishttp://andromeda.df.lu.lv/wiki/index.php?title=LU-LSP-b13:L03&diff=4657LU-LSP-b13:L032013-10-15T15:01:07Z<p>Atis: </p>
<hr />
<div>===Praktiskais darbs #3===<br />
<br />
Realizēt programmu, kas meklē failus direktoriju struktūrā.<br />
<br />
Programma saņem divus komandrindas argumentus: meklējamā faila vārdu<br />
un direktorijas nosaukumu.<br />
<br />
Izdrukāt '''visus''' gadījumus, kuros norādītajā direktorijā (iekļaujot<br />
apakšdirektorijas) atrodas fails ar norādīto nosaukumu. Izvaddatu<br />
formāts: ceļš uz failu relatīvi norādītajai direktorijai.<br />
<br />
Ņemt vērā, ka meklējamā faila tips var būt patvaļīgs! Tas var būt, piemēram, vājā saite, vai pat direktorija. Svarīgs ir tikai nosaukums.<br />
<br />
Piemēram:<br />
$ ./pd3 gcc /usr/bin<br />
Izvada:<br />
/usr/bin/gcc<br />
<br />
Cits piemērs:<br />
$ touch test.txt<br />
$ ./pd3 test.txt .<br />
Izvada:<br />
./test.txt<br />
vai arī<br />
test.txt<br />
<br />
Beigt darbu ar kodu -1, ja ievadargumenti nav padoti, vai arī otrais<br />
arguments nav direktorija. Citos gadījumos beigt darbu ar kodu 0.<br />
<br />
Precizējums: drīkst pieņemt, ka maksimālais ceļa garums (faila vārds + visas direktorijas pa ceļam uz to) nepārsniedz 255 simbolus.<br />
<br />
Precizējums #2: vājajām saitēm nevajag sekot.<br />
<br />
Risinājumus nosūtīt uz kursa asistenta e-pastu. Iesniedzamais fails jānosauc šādi: LSP_PD3_vards_uzvards.c. Tas nav jāarhivē.</div>Atishttp://andromeda.df.lu.lv/wiki/index.php?title=LU-LSP-b13:L04&diff=4656LU-LSP-b13:L042013-10-15T13:29:48Z<p>Atis: </p>
<hr />
<div>===Praktiskais darbs #4===<br />
<br />
Programmu analīze.<br />
<br />
Šoreiz nekas pašiem nav jāprogrammē - tā vietā jāanalizē gatavas programmas darbība un kods.<br />
<br />
Programmas kods dots [http://jupiter.cs.fmf.lu.lv/~kursi/lsp/pd4-2013.c šeit]. Uzdevumi:<br />
# '''Sakompilēt''' šo kodu, aizstājot NAME_FIRST_LETTER un SURNAME_FIRST_LETTER programmas kodā ar saviem personīgajiem iniciāļiem. Komanda:<br />
gcc -Wall pd4.c -o pd4<br />
# Palaist šo programmu. Noskaidrot, kādus sistēmas izsaukumus tā lieto. Kāds ir '''kopējais sistēmas izsaukumu skaits'''? Kāds konkrēti ir '''visbiežāk izmantotais''' sistēmas izsaukums? Kā izskaidrot lielo sistēmas izsaukumu skaitu?<br />
# Programmas darbības laikā Linux kodols uztur tai atbilstošus failus /proc failusistēmā. Tie atrodami zem /proc/<pid>/, kur <pid> ir programmas identifikators. Pēc jūsu izvēles, '''iepazīstieties ar trīs tur atrodamiem failiem''' (vēlams, lai visiem kursā nebūtu izvēlēti vieni un tie paši.) Kā šie konkrētie faili varētu palīdzēt programmu atkļūdošanai vai kontrolei? (Runājot par kontroli, svarīgi ir tas, ka daži no failiem ir rakstāmi.) '''Uzrakstiet vienu-divus teikumus par katru.''' Nav obligāti skaidrot katru failā esošo skaitli, bet aptuveno ideju "kas šajā failā glabājas"!<br />
# Opcionāls uzdevums papildus vērtējumam: izskaidrot programmas koda rindiņu, sākot no 120 rindiņas līdz 125 rindiņai, nozīmi un lietojumu.<br />
<br />
==== Izmantojamie rīki ====<br />
<br />
* '''strace''' utilīta<br />
* '''ps''' utilīta <br />
* '''proc''' failu sistēma (/proc)<br />
<br />
==== Iesūtīšana ====<br />
<br />
Risinājumus nosūtīt uz kursa asistenta e-pastu, '''rakstot atbildes vēstules tekstā'''. E-pasta "Subject" kā parasti, obligāti iekļaut burtus "LSP".</div>Atis