This shows you the differences between two versions of the page.
so2:teme:tema5 [2018/02/28 17:33] elena.sandulescu [Tema 5 - Driver de sistem de fișiere] |
so2:teme:tema5 [2020/08/30 16:28] (current) razvan.deaconescu [Submitere] |
||
---|---|---|---|
Line 3: | Line 3: | ||
====== Tema 5 - Driver de sistem de fișiere ====== | ====== Tema 5 - Driver de sistem de fișiere ====== | ||
- | * Termen de predare: ** Miercuri, 23 Mai 2018 ** | + | * Termen de predare: |
+ | * **Sâmbătă, 25 Aprilie 2020, ora 23:00** (pentru Ixia Challenge - **2p**) | ||
+ | * **Dumincă, 03 Mai 2020, ora 23:00** (deadline hard - **1.5p**) | ||
===== Enunț ===== | ===== Enunț ===== | ||
Line 9: | Line 11: | ||
Să se scrie un modul de kernel care să implementeze sistemul de fișiere ''PITIX'', versiunea 2. Acest sistem de fișiere va oferi suport doar pentru fișiere și directoare. Nu se vor implementa operațiile de suport pentru link-uri hard sau simbolice. De asemenea, nu se vor implementa operațiile de suport pentru fișiere speciale (pipe-uri, dispozitive caracter sau bloc). Practic va trebui să implementați următoarele operații: | Să se scrie un modul de kernel care să implementeze sistemul de fișiere ''PITIX'', versiunea 2. Acest sistem de fișiere va oferi suport doar pentru fișiere și directoare. Nu se vor implementa operațiile de suport pentru link-uri hard sau simbolice. De asemenea, nu se vor implementa operațiile de suport pentru fișiere speciale (pipe-uri, dispozitive caracter sau bloc). Practic va trebui să implementați următoarele operații: | ||
* pentru directoare: ''lookup'', ''unlink'', ''mkdir'', ''rmdir'', ''iterate'' | * pentru directoare: ''lookup'', ''unlink'', ''mkdir'', ''rmdir'', ''iterate'' | ||
- | * pentru fișiere: ''create'', ''truncate'', funcția de bitmap (vezi [[http://lxr.free-electrons.com/source/fs/minix/inode.c?v=4.9#L375| minix_get_block]]) | + | * pentru fișiere: ''create'', ''truncate'', funcția de bitmap (vezi [[https://elixir.bootlin.com/linux/v4.15/source/fs/minix/inode.c#L375|minix_get_block]]) |
Restul funcțiilor fie au implementări generice în kernel, fie nu trebuie să le implementați. | Restul funcțiilor fie au implementări generice în kernel, fie nu trebuie să le implementați. | ||
Line 23: | Line 25: | ||
* ''Izone'' conține inode-urile (32 blocuri) | * ''Izone'' conține inode-urile (32 blocuri) | ||
* ''Dzone'' conține datele (conținutul efectiv al fișierelor) (8*block_size blocuri) | * ''Dzone'' conține datele (conținutul efectiv al fișierelor) (8*block_size blocuri) | ||
- | |||
Superblocul (**pe disc**) este descris de următoarea structură: | Superblocul (**pe disc**) este descris de următoarea structură: | ||
Line 107: | Line 108: | ||
Toate valorile numerice sunt stocate pe disc în CPU byte-order. | Toate valorile numerice sunt stocate pe disc în CPU byte-order. | ||
- | În [[http://elf.cs.pub.ro/so2/res/teme/pitix.h| header-ul temei]] găsiți structurile descrise anterior împreună cu unele macro-uri utile și declarațiile principalelor funcții de implementat. | + | În [[https://github.com/linux-kernel-labs/linux/blob/master/tools/labs/templates/assignments/5-pitix/pitix.h|header-ul temei]] găsiți structurile descrise anterior împreună cu unele macro-uri utile și declarațiile principalelor funcții de implementat. |
Modulul de kernel va avea numele **pitix.ko**. | Modulul de kernel va avea numele **pitix.ko**. | ||
Line 113: | Line 114: | ||
===== Testare ===== | ===== Testare ===== | ||
- | Pentru simplificarea procesului de corectare a temelor, dar și pentru a reduce greșelile temelor trimise, corectarea temelor se va face automat cu ajutorul unor [[http://elf.cs.pub.ro/so2/res/teme/4-pitix.zip|teste publice]]. Indicații despre utilizarea suitei de teste se găsesc în fișierul ''README'' din cadrul arhivei. | + | <note tip> |
+ | Activați suportul pentru ''Loop Devices'' folosind ''make menuconfig''. ''Device drivers'' -> ''Block devices'' -> ''Loopback device support'' | ||
+ | </note> | ||
+ | |||
+ | Pentru simplificarea procesului de corectare a temelor, dar și pentru a reduce greșelile temelor trimise, corectarea temelor se va face automat cu ajutorul testelor publice care se găsesc în noua infrastructură. Pentru testarea locală, folosiți următoarele comenzi: | ||
+ | |||
+ | <code> | ||
+ | $ git clone https://github.com/linux-kernel-labs/linux.git | ||
+ | $ cd linux/tools/labs | ||
+ | $ LABS=assignments/5-pitix make skels | ||
+ | # dezvoltarea temei se va efectua în directorul 5-pitix/ | ||
+ | $ make build | ||
+ | $ make copy | ||
+ | $ make boot | ||
+ | </code> | ||
+ | |||
+ | Indicații despre utilizarea suitei de teste se găsesc în fișierul ''README'' din cadrul arhivei. | ||
==== Sfaturi ==== | ==== Sfaturi ==== | ||
- | Pentru a vă mări șansele de a obține nota maximă, citiți și respectați coding style-ul kernelului Linux descris din documentul [[http://lxr.free-electrons.com/source/Documentation/process/coding-style.rst | Coding Style]]. | + | Pentru a vă mări șansele de a obține nota maximă, citiți și respectați coding style-ul kernelului Linux descris din documentul [[https://github.com/linux-kernel-labs/linux/blob/master/Documentation/process/coding-style.rst|Coding Style]]. |
De asemenea, folosiți următoarele tool-uri de analiza statică pentru a verifica codul: | De asemenea, folosiți următoarele tool-uri de analiza statică pentru a verifica codul: | ||
Line 124: | Line 141: | ||
* <code bash> /path/to/linux-4.9.11/scripts/checkpatch.pl --no-tree --terse -f /path/to/your/src-file.c </code> | * <code bash> /path/to/linux-4.9.11/scripts/checkpatch.pl --no-tree --terse -f /path/to/your/src-file.c </code> | ||
+ | |||
=== sparse === | === sparse === | ||
* <code bash> sudo apt-get install sparse </code> | * <code bash> sudo apt-get install sparse </code> | ||
Line 140: | Line 158: | ||
==== Depunctări ==== | ==== Depunctări ==== | ||
- | Depunctările generale pentru teme se găsesc pe pagina de [[so2:teme:general| Indicații generale]]. | + | Depunctările generale pentru teme se găsesc pe pagina de [[so2:teme:general|Indicații generale]]. |
În cazuri excepționale (tema trece testele prin nerespectarea cerințelor) și în cazul în care tema nu trece toate testele se poate scădea mai mult decât este menționat mai sus. | În cazuri excepționale (tema trece testele prin nerespectarea cerințelor) și în cazul în care tema nu trece toate testele se poate scădea mai mult decât este menționat mai sus. | ||
Line 146: | Line 164: | ||
==== Submitere ==== | ==== Submitere ==== | ||
- | Arhiva temei va fi submisă pe vmchecker, în conformitate cu [[:so2:reguli-notare#reguli_de_trimitere_a_temelor|precizările din pagina de reguli]]. | + | Arhiva temei va fi submisă pe vmchecker, în conformitate cu [[:so2:reguli-notare#reguli_de_realizare_a_temelor|precizările din pagina de reguli]]. |
Din interfața vmchecker alegeți opțiunea ''Sistem de fișiere'', aferentă acestei teme. | Din interfața vmchecker alegeți opțiunea ''Sistem de fișiere'', aferentă acestei teme. | ||
Line 152: | Line 170: | ||
===== Resurse ===== | ===== Resurse ===== | ||
- | * [[http://elf.cs.pub.ro/so2/res/teme/pitix.h| header-ul temei]] | + | * [[https://github.com/linux-kernel-labs/linux/blob/master/tools/labs/templates/assignments/5-pitix/pitix.h|header-ul temei]] |
* [[so2:laboratoare:lab08|Laboratorul 8. Drivere sisteme de fișiere (partea întăi)]] | * [[so2:laboratoare:lab08|Laboratorul 8. Drivere sisteme de fișiere (partea întăi)]] | ||
* [[so2:laboratoare:lab09|Laboratorul 9. Drivere sisteme de fișiere (partea a doua)]] | * [[so2:laboratoare:lab09|Laboratorul 9. Drivere sisteme de fișiere (partea a doua)]] | ||
- | * [[http://lxr.free-electrons.com/source/fs/minix/?v=4.9|Sursele sistemului de fișiere Minix]] | + | * [[https://elixir.bootlin.com/linux/v4.15/source/fs/minix|Sursele sistemului de fișiere Minix]] |
<note important> | <note important> | ||
- | Resursele temei ([[https://github.com/systems-cs-pub-ro/so2-assignments/tree/master/4-pitix-v2|4-pitix-v2]]) se găsesc și în repo-ul [[https://github.com/systems-cs-pub-ro/so2-assignments|so2-assignments]] de pe GitHub. Repo-ul conține și un [[https://github.com/systems-cs-pub-ro/so2-assignments/blob/master/so2-create-repo.sh|script Bash]] care vă ajută să vă creați un repository privat pe instanța de [[https://gitlab.cs.pub.ro|GitLab]] a facultății. Urmăriți indicațiile din [[https://github.com/systems-cs-pub-ro/so2-assignments/blob/master/README.md|README]] și de pe [[:so2:teme:folosire-gitlab| pagina de Wiki dedicată pentru git]]. | + | Resursele temei ([[https://github.com/linux-kernel-labs/linux/tree/master/tools/labs/templates/assignments/5-pitix|5-pitix]]) se găsesc și în repo-ul [[https://github.com/systems-cs-pub-ro/so2-assignments|so2-assignments]] de pe GitHub. Repo-ul conține și un [[https://github.com/systems-cs-pub-ro/so2-assignments/blob/master/so2-create-repo.sh|script Bash]] care vă ajută să vă creați un repository privat pe instanța de [[https://gitlab.cs.pub.ro|GitLab]] a facultății. Urmăriți indicațiile din [[https://github.com/systems-cs-pub-ro/so2-assignments/blob/master/README.md|README]] și de pe [[:so2:teme:folosire-gitlab| pagina de Wiki dedicată pentru git]]. |
</note> | </note> | ||
===== Întrebări ===== | ===== Întrebări ===== | ||
- | Pentru întrebări legate de temă puteți consulta [[http://cursuri.cs.pub.ro/pipermail/so2/ | arhivele]] listei de discuții sau puteți trimite un [[so2@cursuri.cs.pub.ro |e-mail]] (trebuie să fiți [[http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/so2 | înregistrați]]). | + | Pentru întrebări legate de temă puteți consulta [[http://cursuri.cs.pub.ro/pipermail/so2/|arhivele]] listei de discuții sau puteți trimite un [[so2@cursuri.cs.pub.ro|e-mail]] (trebuie să fiți [[http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/so2|înregistrați]]). |
- | + | ||
- | Vă rugăm să urmăriți și să respectați [[http://ocw.cs.pub.ro/courses/so2/resurse/lista-discutii#mailing-list-guidelines | indicațiile de utilizare a listei]]. | + | |
+ | Vă rugăm să urmăriți și să respectați [[http://ocw.cs.pub.ro/courses/so2/resurse/lista-discutii#mailing-list-guidelines|indicațiile de utilizare a listei]]. |