Difference between revisions of "LU-LKP-B10:index"
(→Kalendārs) |
|||
(65 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
{{TocRight}} |
|||
Linux kodola programmēšana un Sistēmprogrammēšana. |
|||
='''Linux kodola programmēšana''' un '''Unix Sistēmprogrammēšana'''= |
|||
Kurss LU DF bakalaura studijām. |
Kurss LU DF bakalaura studijām. |
||
Pasniedzējs: Leo Seļāvo. ''(epasts: vards.uzvards @ gmail.lv vai @ lu.lv)'' |
|||
Vēstkopa - Google grupa [http://groups.google.lv/group/lu-lkp-b lu-lkp-b] (lai pieteiktos, sūtiet epastu pasniedzējam) |
|||
<small>Vērtējums = 40% mājas un praktiskie darbi, 10% dalība klasē, 20% KD1 un 30% KD2(eksāmens).</small> |
|||
Praktisko un mājas '''darbu iesniegšana''' izpildāma noteiktajos datumos un laikos elektroniski. |
|||
* Iesniegšanas termiņa laiks ir 30min pirms lekcijas, tātad 14:00. |
|||
* e-pasta Subj. jānorāda sekojošā formā "'''LKP MD1 Vards Uzvards'''" - piemers MD1 iesniegumam. |
|||
* Iesniegto failu vārdam arī jābūt līdzīga formātā, bet ar svītru tukšumu vietā, piemēram: "'''LKP_MD1_Vards_Uzvards.pdf'''" |
|||
* Ja iesniedzami vairāki faili, piemēram, programmas pirmkods, tad tie iepriekš arhivējami kā [[LU-LSP:notes#tgz | *.tgz]] arhīvs ar tadu pat faila vārdu kā aprakstīts iepriekš: "'''LKP_MD1_Vards_Uzvards.tgz'''". |
|||
* Ja iesniegts tiek ar novēlošanos, rezultāts tiek samazināts par '''10%''' par katru nokavēto dienu. |
|||
== Kalendārs == |
|||
{| border=1 cellspacing=0 cellpadding=4 |
|||
|- |
|||
! Datums, nedēļa |
|||
! Kursa saturs |
|||
! Uzdevumi |
|||
|- |
|||
| 07.09.2010. |
|||
| |
|||
Ievads Unix un Linux operētajsistēmās un to programmēšanā. |
|||
[[LU-LKP-B10:L01 | Lekcijas piezīmes un PD1]]: |
|||
| |
|||
Uzdots [[LU-LKP-B10:MD#MD0 | MD0]] mājas darbs - Programmēšanas stils. |
|||
|- |
|||
| 14.09.2010. |
|||
| |
|||
C elementi, kompilēšana un saites, atmiņas sadalījums procesā. [[LU-LKP-B10:L02 | Lekcijas piezīmes]] |
|||
| |
|||
Uzdots [[LU-LKP-B10:MD#MD1 | MD1]] mājas darbs - Ģimenes koks. |
|||
Termiņš: Pirmdiena, 20. septembris 23.59. |
|||
|- |
|||
| 21.09.2010. |
|||
| MD1 risinājums. Datu struktūras un algoritmi, datu tipi, kļūdu analīze, buferizēts un nebuferizēts failu ievads un izvads. |
|||
| |
|||
* '''Jānodod''' [[LU-LKP-B10:MD#MD1 | MD1]]. |
|||
* Uzdots [[LU-LKP-B10:MD2 | MD2]]. |
|||
|- |
|||
| 28.09.2010. |
|||
| Failu ievada un izvada ātrdarbība ņemot vēra sistēmas arhitektūru. Sistēmas izsaukumi faila ievadam un izvadam. Ātra "cat" sistēmprogrammas realizācija. Programma, procesi, lietotāja un grupas ID. Signāli. "echo" programmas koda analīze. |
|||
| |
|||
* '''Jānodod''' [[LU-LKP-B10:MD#MD2 | MD2]]. |
|||
|- |
|||
| 05.10.2010. |
|||
| 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-nodes. Sistēmas izsaukums stat(). Direktoriju struktūra. Izsaukumi opendir(), readdir() un closedir(). |
|||
| |
|||
* Uzdots [[LU-LKP-B10:MD3 | MD3]]. |
|||
|- |
|||
| 12.10.2010. |
|||
| Programma rakstīšanai log failā. Log faili. Ekskluzīva rakstīšana ar open(...O_SYNC) un fcntrl() 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(). |
|||
| |
|||
* '''Jānodod''' [[LU-LKP-B10:MD3 | MD3]]. |
|||
|- |
|||
| 19.10.2010. |
|||
| |
|||
Atmiņas arhitektūra. Virtualā 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. |
|||
| |
|||
* Uzdots [[LU-LKP-B10:MD4 | MD4]]. Procedūru izsaukumu steka izdruka. |
|||
|- |
|||
| 26.10.2010. |
|||
| 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()''. |
|||
| |
|||
* '''Jānodod''' [[LU-LKP-B10:MD4 | MD4]]. |
|||
* Uzdots [[LU-LKP-B10:MD5 | MD5]]. myExit - setjmp() un longjmp() lietojums. |
|||
|- |
|||
| 02.11.2010. |
|||
| Vidus semestra '''kontroldarbs'''. |
|||
| |
|||
* '''Jānodod''' [[LU-LKP-B10:MD5 | MD5]]. |
|||
|- |
|||
| 09.11.2010. |
|||
| Dinamiska atmiņas izdalīšana. Heap, malloc() un free(). Dienesta informacija pie atmiņas izdalīšanas un atbrīvošanas. Brīvas atmiņas saraksti. Prasības malloc() in free() veiktspējai. |
|||
| |
|||
|- |
|||
| 16.11.2010. |
|||
| |
|||
* Atmiņas fragmentācija. Alokācijas algoritmi kas darbojas uz atmiņas fragmentiem. |
|||
* Daudzuzdevumu vide. Procesi un procesu kontrole. Pavedieni. Kooperējošies procesi un preemptīvā daudzuzdevumu metode. Komanda ps. getpid() un getppid(). fork(). |
|||
| |
|||
* Uzdots [[LU-LKP-B10:MD6 | MD6]]. Atmiņas fragmentācijas algoritmu novērtējums |
|||
|- |
|||
| 23.11.2010. |
|||
| Daudzuzdevumu vide. Wait() un Exec(). System(). |
|||
| |
|||
* '''Jānodod''' [[LU-LKP-B10:MD6| MD6]]. |
|||
|- |
|||
| 30.11.2010. |
|||
| Klienta un servera arhitektūra. Sockets. Komunikācija starp nesaistītiem procesiem. Daudzlietotāju sistēmas (spēles) arhitektūra). |
|||
| |
|||
|- |
|||
| 07.12.2010. |
|||
| Serveri, iteratīvie un paralēlie. Klienta programmatūra un tas īpašības. Signāli. Alarm serviss un signāls. Procesa ielādēšana, uzsākšanās un pieci veidi kā process var beigties. exit() un _exit(). |
|||
| Kursa projekta definēšana. |
|||
|- |
|||
| 14.12.2010. |
|||
| Darbs pie projekta. |
|||
| |
|||
* '''Jānodod''' projekta specifikācija un esseja. |
|||
|- |
|||
| 21.12.2010. |
|||
| Pavedieni. |
|||
| |
|||
|- |
|||
| 24.12.2010. - xx.01.2010. |
|||
| Ziemassvētku un Jaungada brīvdienas |
|||
|- |
|||
| 20.01.2011. |
|||
| '''Eksāmens''' 14:30 - 16:30 |
|||
|- |
|||
| 27.01.2011. |
|||
| '''Eksāmens - otrais piegājiens''' 12:30 - 16:30 |
|||
|} |
|||
== Lekciju piezīmes == |
|||
* [[LU-LKP-B10:L01 | 1. lekcija]]: Ievads Linux operētajsistēmā |
|||
* [[LU-LKP-B10:L02 | 2. lekcija]]: C elementi, kompilēšana un saites, atmiņas sadalījums procesā. |
|||
== Praktiskie un mājas darbi == |
|||
* MD0: Izlasīt kodēšanas stila dokumentus. Nekas nav jāiesniedz, bet būs diskusija nākamās lekcijas sākumā. |
|||
** [http://cs.wellesley.edu/~cs249/Resources/coding-standard.html Kodēšanas stila ieteikumi] |
|||
** [http://cs.wellesley.edu/~cs249/Resources/LinusCodingStyle.txt Linux kodola kodēšanas stils] |
|||
* [[LU-LKP-B10:MD#MD1 | MD1]]: Ģimenes koka ģenerēšanas programma. |
|||
* [[LU-LKP-B10:MD2 | MD2]]: Datu bāze ģimenes kokam. |
|||
* [[LU-LKP-B10:MD3 | MD3]]: Vienādo failu meklēšana direktorijas kokā. |
|||
* [[LU-LKP-B10:MD4 | MD4]]: Procedūru izsaukumu steka izdruka. |
|||
* [[LU-LKP-B10:MD5 | MD5]]: Setjmp un longjmp. |
|||
* [[LU-LKP-B10:MD6 | MD6]]. Atmiņas fragmentācijas algoritmu novērtējums |
|||
* MD7 - projekta protokola specifikācija. Skatīt arī [[LU-LKP-B10:PD_client_server | PD: Klienta un servera arhitektūra]] |
|||
** [[LU-LKP-B10:PD_client_server | PD: Klienta un servera arhitektūra]] (praktiskā darba piezīmes) |
|||
** [http://selavo.lv/~kursi/lkp/md7 MD7 projekta grupu risinājumi] |
|||
== Literatūra == |
== Literatūra == |
||
* Advanced Programming in the UNIX(R) Envoronment, Second Edition, by W. Richard Stevens, Stephen A. Rago. Addison Wesley Professional, 2005, ISBN |
* Advanced Programming in the UNIX(R) Envoronment, Second Edition, by W. Richard Stevens, Stephen A. Rago. Addison Wesley Professional, 2005, ISBN 0-201-43307-9. (Indiešu eksemplāram ir ISBN 81-317-0005-4) |
||
* "Linux Device Drivers," 3rd ed. by J. Corbet, A. Rubini and G. Kroah-Hartman, |
|||
** O'Reilly Media, 2005, ISBN 0-596-00590-3, http://lwn.net/Kernel/LDD3/ |
|||
* "Linux system programming" by Robert Love, O'Reilly Media, 2007, ISBN 0596009585 |
|||
* "Understanding the Linux Kernel," 3rd ed. by D. P. Bovet and M. Cesati, O'Reilly Media, 2005, ISBN 0-596-00565-2 |
|||
* "Linux kernel development 3rd ed." by Robert Love, Addison Wesley Professional, ISBN 0672329468 |
|||
* "Building Embedded Linux Systems" O'Reilly Media, 2008, ISBN 0596529686 |
|||
* "Structure and Interpretation of Computer Programs," second edition Harold Abelson and Gerald Jay Sussman with Julie Sussman ([http://mitpress.mit.edu/sicp/full-text/book/book.html online version]) |
|||
== Saites == |
|||
* [http://www.lysator.liu.se/c/bwk-tutor.html Programming in C: A Tutorial] (by Brian W. Kernighan) |
|||
* [http://www.gnu.org/software/make/manual/make.html Gnu make] dokumentācija |
|||
* [http://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard Tipiskas unix direktoriju hierarhijas] īss apraksts. |
|||
* Sockets: |
|||
** [http://gnosis.cx/publish/programming/sockets.html Programming IP Sockets on Linux] (tutorial) |
|||
** [http://en.wikipedia.org/wiki/Berkeley_sockets Berkeley sockets] (Wikipēdija) |
|||
* http://www.hiraeth.com/alan/tutorials/courses/unixprog.html |
|||
* http://www.advancedlinuxprogramming.com/ |
|||
* http://lkml.org/ |
|||
* [http://tldp.org/LDP/lkmpg/2.6/html/index.html The Linux Kernel Module Programming Guide] |
|||
== Atziņas == |
|||
* [http://norvig.com/21-days.html Teach yourself programming in 10 years] by Peter Norvig |
|||
[https://luis.lanet.lv/pls/pub/kursi.kurss_dati?l=1&p_kods=2DAT3252&p_par=druk 2009 gada LU DF Linux kodola programmēšanas kursa apraksts] |
|||
* "Linux device drivers" (O'Reilly), |
|||
* "Understanding the Linux Kernel" (O'Reilly), |
|||
* "Linux kernel development 3rd ed." by Robert Love, |
|||
* "Linux system programming" by Robert Love" |
|||
* "Linux for embedded systems" (O'Reilly). |
Latest revision as of 17:08, 20 January 2011
Linux kodola programmēšana un Unix Sistēmprogrammēšana
Kurss LU DF bakalaura studijām.
Pasniedzējs: Leo Seļāvo. (epasts: vards.uzvards @ gmail.lv vai @ lu.lv)
Vēstkopa - Google grupa lu-lkp-b (lai pieteiktos, sūtiet epastu pasniedzējam)
Vērtējums = 40% mājas un praktiskie darbi, 10% dalība klasē, 20% KD1 un 30% KD2(eksāmens).
Praktisko un mājas darbu iesniegšana izpildāma noteiktajos datumos un laikos elektroniski.
- Iesniegšanas termiņa laiks ir 30min pirms lekcijas, tātad 14:00.
- e-pasta Subj. jānorāda sekojošā formā "LKP MD1 Vards Uzvards" - piemers MD1 iesniegumam.
- Iesniegto failu vārdam arī jābūt līdzīga formātā, bet ar svītru tukšumu vietā, piemēram: "LKP_MD1_Vards_Uzvards.pdf"
- Ja iesniedzami vairāki faili, piemēram, programmas pirmkods, tad tie iepriekš arhivējami kā *.tgz arhīvs ar tadu pat faila vārdu kā aprakstīts iepriekš: "LKP_MD1_Vards_Uzvards.tgz".
- Ja iesniegts tiek ar novēlošanos, rezultāts tiek samazināts par 10% par katru nokavēto dienu.
Kalendārs
Datums, nedēļa | Kursa saturs | Uzdevumi |
---|---|---|
07.09.2010. |
Ievads Unix un Linux operētajsistēmās un to programmēšanā. Lekcijas piezīmes un PD1: |
Uzdots MD0 mājas darbs - Programmēšanas stils. |
14.09.2010. |
C elementi, kompilēšana un saites, atmiņas sadalījums procesā. Lekcijas piezīmes |
Uzdots MD1 mājas darbs - Ģimenes koks. Termiņš: Pirmdiena, 20. septembris 23.59. |
21.09.2010. | MD1 risinājums. Datu struktūras un algoritmi, datu tipi, kļūdu analīze, buferizēts un nebuferizēts failu ievads un izvads. | |
28.09.2010. | Failu ievada un izvada ātrdarbība ņemot vēra sistēmas arhitektūru. Sistēmas izsaukumi faila ievadam un izvadam. Ātra "cat" sistēmprogrammas realizācija. Programma, procesi, lietotāja un grupas ID. Signāli. "echo" programmas koda analīze. |
|
05.10.2010. | 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-nodes. Sistēmas izsaukums stat(). Direktoriju struktūra. Izsaukumi opendir(), readdir() un closedir(). |
|
12.10.2010. | Programma rakstīšanai log failā. Log faili. Ekskluzīva rakstīšana ar open(...O_SYNC) un fcntrl() 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(). |
|
19.10.2010. |
Atmiņas arhitektūra. Virtualā 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. |
|
26.10.2010. | 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(). | |
02.11.2010. | Vidus semestra kontroldarbs. |
|
09.11.2010. | Dinamiska atmiņas izdalīšana. Heap, malloc() un free(). Dienesta informacija pie atmiņas izdalīšanas un atbrīvošanas. Brīvas atmiņas saraksti. Prasības malloc() in free() veiktspējai. | |
16.11.2010. |
|
|
23.11.2010. | Daudzuzdevumu vide. Wait() un Exec(). System(). |
|
30.11.2010. | Klienta un servera arhitektūra. Sockets. Komunikācija starp nesaistītiem procesiem. Daudzlietotāju sistēmas (spēles) arhitektūra). | |
07.12.2010. | Serveri, iteratīvie un paralēlie. Klienta programmatūra un tas īpašības. Signāli. Alarm serviss un signāls. Procesa ielādēšana, uzsākšanās un pieci veidi kā process var beigties. exit() un _exit(). | Kursa projekta definēšana. |
14.12.2010. | Darbs pie projekta. |
|
21.12.2010. | Pavedieni. | |
24.12.2010. - xx.01.2010. | Ziemassvētku un Jaungada brīvdienas | |
20.01.2011. | Eksāmens 14:30 - 16:30 | |
27.01.2011. | Eksāmens - otrais piegājiens 12:30 - 16:30 |
Lekciju piezīmes
- 1. lekcija: Ievads Linux operētajsistēmā
- 2. lekcija: C elementi, kompilēšana un saites, atmiņas sadalījums procesā.
Praktiskie un mājas darbi
- MD0: Izlasīt kodēšanas stila dokumentus. Nekas nav jāiesniedz, bet būs diskusija nākamās lekcijas sākumā.
- MD1: Ģimenes koka ģenerēšanas programma.
- MD2: Datu bāze ģimenes kokam.
- MD3: Vienādo failu meklēšana direktorijas kokā.
- MD4: Procedūru izsaukumu steka izdruka.
- MD5: Setjmp un longjmp.
- MD6. Atmiņas fragmentācijas algoritmu novērtējums
- MD7 - projekta protokola specifikācija. Skatīt arī PD: Klienta un servera arhitektūra
- PD: Klienta un servera arhitektūra (praktiskā darba piezīmes)
- MD7 projekta grupu risinājumi
Literatūra
- Advanced Programming in the UNIX(R) Envoronment, Second Edition, by W. Richard Stevens, Stephen A. Rago. Addison Wesley Professional, 2005, ISBN 0-201-43307-9. (Indiešu eksemplāram ir ISBN 81-317-0005-4)
- "Linux Device Drivers," 3rd ed. by J. Corbet, A. Rubini and G. Kroah-Hartman,
- O'Reilly Media, 2005, ISBN 0-596-00590-3, http://lwn.net/Kernel/LDD3/
- "Linux system programming" by Robert Love, O'Reilly Media, 2007, ISBN 0596009585
- "Understanding the Linux Kernel," 3rd ed. by D. P. Bovet and M. Cesati, O'Reilly Media, 2005, ISBN 0-596-00565-2
- "Linux kernel development 3rd ed." by Robert Love, Addison Wesley Professional, ISBN 0672329468
- "Building Embedded Linux Systems" O'Reilly Media, 2008, ISBN 0596529686
- "Structure and Interpretation of Computer Programs," second edition Harold Abelson and Gerald Jay Sussman with Julie Sussman (online version)
Saites
- Programming in C: A Tutorial (by Brian W. Kernighan)
- Gnu make dokumentācija
- Tipiskas unix direktoriju hierarhijas īss apraksts.
- Sockets:
- Programming IP Sockets on Linux (tutorial)
- Berkeley sockets (Wikipēdija)
- http://www.hiraeth.com/alan/tutorials/courses/unixprog.html
- http://www.advancedlinuxprogramming.com/
- http://lkml.org/
- The Linux Kernel Module Programming Guide
Atziņas
- Teach yourself programming in 10 years by Peter Norvig