This shows you the differences between two versions of the page.
|
sd-ca:teme:tema1-2024 [2024/03/20 19:26] radu.nichita |
sd-ca:teme:tema1-2024 [2024/03/27 21:24] (current) maria.sfiraiala [Actualizări] |
||
|---|---|---|---|
| Line 10: | Line 10: | ||
| * Deadline **HARD**: **07.04.2024 23:55:00** | * Deadline **HARD**: **07.04.2024 23:55:00** | ||
| + | ===== Actualizări ===== | ||
| + | |||
| + | * Eliminare mesaj de eroare INVALID_COMMAND: **22.03.2024** | ||
| + | * Publicare checker: **22.03.2024** | ||
| + | * Update checker: **26.03.2024** | ||
| + | * Mențiune privind obligativitatea eliminării blocurilor la alocare din vectorul de liste: **27.03.2024** | ||
| ===== Obiective ===== | ===== Obiective ===== | ||
| Line 49: | Line 55: | ||
| - Adresele din heap vor fi în intervalul [heap_base, heap_base + heap_size). | - Adresele din heap vor fi în intervalul [heap_base, heap_base + heap_size). | ||
| * Parametrul <tip_reconsituire> va fi relevant pentru cerința FREE, găsiți mai multe detalii la secțiunea acesteia. | * Parametrul <tip_reconsituire> va fi relevant pentru cerința FREE, găsiți mai multe detalii la secțiunea acesteia. | ||
| + | |||
| + | <note> | ||
| + | <adresă_start_heap> reprezintă un număr pozitiv, nenul. | ||
| + | </note> | ||
| <note> | <note> | ||
| Line 201: | Line 211: | ||
| * Dacă se dorește **scrierea** începând cu o adresă care nu a fost alocată, se afișează mesajul de eroare **“Segmentation fault (core dumped)\n”** și se face un dump al memoriei, după regulile de la funcția DUMP_MEMORY. | * Dacă se dorește **scrierea** începând cu o adresă care nu a fost alocată, se afișează mesajul de eroare **“Segmentation fault (core dumped)\n”** și se face un dump al memoriei, după regulile de la funcția DUMP_MEMORY. | ||
| * Dacă se dorește **scrierea** începând cu o adresă care a fost alocată, dar care pe parcursul scrierii conține zone nealocate, se afișează mesajul de eroare **“Segmentation fault (core dumped)\n”** și se face un dump al memoriei, după regulile de la funcția DUMP_MEMORY. | * Dacă se dorește **scrierea** începând cu o adresă care a fost alocată, dar care pe parcursul scrierii conține zone nealocate, se afișează mesajul de eroare **“Segmentation fault (core dumped)\n”** și se face un dump al memoriei, după regulile de la funcția DUMP_MEMORY. | ||
| - | * INVALID_COMMAND | ||
| - | * Dacă parametrul unei comenzi sau comanda în sine nu este validă, se afișează mesajul de eroare **"Invalid command\n"** și se citește următoare comandă. | ||
| ==== Bonus (20p) ==== | ==== Bonus (20p) ==== | ||
| Line 212: | Line 220: | ||
| <code> | <code> | ||
| Fie situația în care avem un singur bloc liber, de dimensiune 16 bytes, | Fie situația în care avem un singur bloc liber, de dimensiune 16 bytes, | ||
| - | care începe de la adresa 0x0. | + | care începe de la adresa 0x1. |
| MALLOC 6 | MALLOC 6 | ||
| ---> Se fragmentează blocul de 16 bytes într-o parte de 6 bytes | ---> Se fragmentează blocul de 16 bytes într-o parte de 6 bytes | ||
| ce va fi alocată și o parte de 10 bytes ce rămâne liberă | ce va fi alocată și o parte de 10 bytes ce rămâne liberă | ||
| - | Se întoarce adresa 0x0. | + | Se întoarce adresa 0x1. |
| MALLOC 5 | MALLOC 5 | ||
| ---> Se fragmentează blocul de 10 bytes într-o parte de 5 bytes | ---> Se fragmentează blocul de 10 bytes într-o parte de 5 bytes | ||
| ce va fi alocată și o parte de 5 bytes ce rămâne liberă | ce va fi alocată și o parte de 5 bytes ce rămâne liberă | ||
| - | Se întoarce adresa 0x6. | + | Se întoarce adresa 0x7. |
| - | FREE 0x6 | + | FREE 0x7 |
| ---> Se alipește fragmentul de 5 bytes cu fragmentul liber de | ---> Se alipește fragmentul de 5 bytes cu fragmentul liber de | ||
| 5 bytes. | 5 bytes. | ||
| Rezultă un bloc de dimensiune 10 bytes. | Rezultă un bloc de dimensiune 10 bytes. | ||
| - | FREE 0x0 | + | FREE 0x1 |
| ---> Se alipește fragmentul de 6 bytes cu fragmentul liber de | ---> Se alipește fragmentul de 6 bytes cu fragmentul liber de | ||
| 10 bytes. | 10 bytes. | ||
| Line 236: | Line 244: | ||
| <code> | <code> | ||
| Fie situația în care avem un singur bloc liber, de dimensiune 16 bytes, | Fie situația în care avem un singur bloc liber, de dimensiune 16 bytes, | ||
| - | care începe de la adresa 0x0. | + | care începe de la adresa 0x1. |
| MALLOC 6 | MALLOC 6 | ||
| ---> Se fragmentează blocul de 16 bytes într-o parte de 6 bytes | ---> Se fragmentează blocul de 16 bytes într-o parte de 6 bytes | ||
| ce va fi alocată și o parte de 10 bytes ce rămâne liberă | ce va fi alocată și o parte de 10 bytes ce rămâne liberă | ||
| - | Se întoarce adresa 0x0. | + | Se întoarce adresa 0x1. |
| MALLOC 5 | MALLOC 5 | ||
| ---> Se fragmentează blocul de 10 bytes într-o parte de 5 bytes | ---> Se fragmentează blocul de 10 bytes într-o parte de 5 bytes | ||
| ce va fi alocată și o parte de 5 bytes ce rămâne liberă | ce va fi alocată și o parte de 5 bytes ce rămâne liberă | ||
| - | Se întoarce adresa 0x6. | + | Se întoarce adresa 0x7. |
| - | FREE 0x0 | + | FREE 0x1 |
| ---> Se creează un bloc nou de dimensiune 6 bytes. | ---> Se creează un bloc nou de dimensiune 6 bytes. | ||
| Există 2 liste cu câte un bloc fiecare, unul de 5 bytes și unul de 6 bytes. | Există 2 liste cu câte un bloc fiecare, unul de 5 bytes și unul de 6 bytes. | ||
| - | FREE 0x6 | + | FREE 0x7 |
| ---> Se alipește fragmentul de 5 bytes cu fragmentele de 5 și 6 bytes. | ---> Se alipește fragmentul de 5 bytes cu fragmentele de 5 și 6 bytes. | ||
| Există o singură listă, cu un singur bloc, de dimensiune 16 | Există o singură listă, cu un singur bloc, de dimensiune 16 | ||
| Line 277: | Line 285: | ||
| <note warning> | <note warning> | ||
| - | * Este **obligatorie** construirea unei implementări care folosește conceptul de vector de liste. | + | * Este **obligatorie** construirea unei implementări care folosește conceptul de **vector de liste dublu înlănțuite**. |
| + | |||
| + | * Este **obligatoriu** să realizați eliminarea blocurilor din vectorul de liste atunci când acestea sunt alocate. | ||
| * Nerespectarea acestor constrângeri va conduce la **notarea temei cu 0 puncte**. | * Nerespectarea acestor constrângeri va conduce la **notarea temei cu 0 puncte**. | ||
| Line 285: | Line 295: | ||
| ===== Checker ===== | ===== Checker ===== | ||
| - | **TBD** | + | Arhivă checker: {{:sd-ca:teme:sfl_checker.zip|}} |
| + | |||
| + | <note> | ||
| + | Pentru a utiliza checker-ul: | ||
| + | * Dezarhivați fișierul .zip în folderul in care se află implementarea voastră. | ||
| + | * Asigurați-vă că Makefile-ul vostru conține regulile **build**, **run_sfl** și **clean**. | ||
| + | * Rulați folosind comanda "./check". | ||
| + | </note> | ||
| + | |||
| + | Temele vor fi trimise pe Moodle. | ||
| + | Arhiva trebuie sa contina: | ||
| + | * sursele **.c si .h** | ||
| + | * fișier Makefile cu trei reguli: | ||
| + | * regula **build**: în urma căreia se genereaza un executabil numit **sfl** | ||
| + | * regula **run_sfl**: în urma căreia va rula executabilul **sfl** | ||
| + | * regula **clean** care șterge executabilul și fișierele obiect | ||
| + | * Compilarea trebuie să se realizeze cu flagurile **-Wall -Wextra -std=c99** | ||
| + | * fișier **README** care să conțină detalii despre implementarea temei. | ||