Difference between revisions of "LU-LKP-B10:index"

From DiLab
Jump to: navigation, search
(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: 0-201-43307-9. (Indiešu eksemplāram ir ISBN 81-317-0005-4)
* 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.

  • Uzdots 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 MD4.
  • Uzdots MD5. myExit - setjmp() un longjmp() lietojums.
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.
  • 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 MD6. Atmiņas fragmentācijas algoritmu novērtējums
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.
  • 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

  • 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

  • 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

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,
  • "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

Atziņas


2009 gada LU DF Linux kodola programmēšanas kursa apraksts