Difference between revisions of "LU-LSP-b:MD4"

From DiLab
Jump to: navigation, search
(New page: {{TocRight}} ===Mērķi=== * Apgūt setjmp() un longjmp() lietojumu un asinhronu koda vadību. ===Uzdevums=== # Realizēt procedūru myExit(int ret_code), kas no jebkuras vietas kodā iz...)
 
Line 1: Line 1:
{{TocRight}}
{{TocRight}}


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.
===Mērķi===
* Apgūt setjmp() un longjmp() lietojumu un asinhronu koda vadību.


2. Salīdzināt trīs dažādus atmiņas rezervācijas veidus:
===Uzdevums===
# Realizēt procedūru myExit(int ret_code), kas no jebkuras vietas kodā iziet no programmas ar kodu kurš padots kā parametrs (darbojas līdzīgi exit()). Darba izpildei nav atļauts izmantot exit(). Tā vietā jāizmanto setjmp() un longjmp(). Galvenajā funkcijā main() atļauts ievietot savu makro izsaukumu:
# Reaģēt uz signālu SIGHUP (''SIGnal Hung UP'') saskaņā ar sekojošu pseido-kodu:
On SIG_HUP
print "Bye bye!\n";
exit(1);


* Ar malloc() funkciju
===Jāiesniedz===
* 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)
* Ar sbrk() funkciju


Rezervēt atmiņu pa vienam megabaitam (= 1024*1024 baitu).
* Jāiesniedz C programmas pirmkods.
* Koda fails sūtāms pa epastu piekabē, ar sekojošu "Subject:" LSP MD4 vards uzvards


Katram veidam izpētīt:
# Kāds ir maksimālais atmiņas daudzums, ko tādā veidā var alocēt?
# Kāds programmas darbības laiks, ja tiek rezervēti 100 megabaiti daudzumu?


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ā?
===Vērtējums===


''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)''
Uzdevums tiks vērtēts sekojoši:
# 70% - Korekta myExit() funkcionalitāte
# 30% - Reaģēšana uz SIGHUP signālu.


===Piemēri===
int main()
{
MY_INIT();
...
}
...
void a()
{
...
myExit(7);
...
}


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:
# TEXT segmenta izmēru baitos
# DATA segmenta izmēru baitos
# BSS segmenta izmēru baitos


===Derīga informācija===


Iesūtīt:
* [http://linux.die.net/man/3/setjmp man 3 setjmp]
# programmas kodu (C failā)
* [http://linux.die.net/man/3/longjmp man 3 longjmp]
# atbildes uz jautājumiem (e-pasta tekstā)
* [http://linux.die.net/man/2/sigaction man 2 sigaction]

==J&A (jautājumi un atbildes)==

====J: Uzdevums pārāk grūts, vai var pagarināt termiņu?====

A: Noteiktais termiņš paliek spēkā. Iesaku risināt savlaicīgi, lai pietiek laika neparedzētu problēmu risināšanai.


----
----

Revision as of 15:44, 29 October 2013

1. Uzrakstīt programmu, kas rezervē atmiņu (drīkst pēc tam neatbrīvot). Uzdevums līdzīgs PD#6, drīkst izmantot tā kodu.

2. Salīdzināt trīs dažādus atmiņas rezervācijas veidus:

  • Ar malloc() funkciju
  • 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)
  • Ar sbrk() funkciju

Rezervēt atmiņu pa vienam megabaitam (= 1024*1024 baitu).

Katram veidam izpētīt:

  1. Kāds ir maksimālais atmiņas daudzums, ko tādā veidā var alocēt?
  2. Kāds programmas darbības laiks, ja tiek rezervēti 100 megabaiti daudzumu?

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ā?

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)


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:

  1. TEXT segmenta izmēru baitos
  2. DATA segmenta izmēru baitos
  3. BSS segmenta izmēru baitos


Iesūtīt:

  1. programmas kodu (C failā)
  2. atbildes uz jautājumiem (e-pasta tekstā)

Uz LSP kursa sākuma lapu.