Differences

This shows you the differences between two versions of the page.

Link to this comparison view

so2:laboratoare:lab03:exercitii [2018/03/05 22:45]
ionel.ghita [7. [1p] Testare modul de lucru cu liste]
so2:laboratoare:lab03:exercitii [2018/03/06 23:09] (current)
anda.nicolae [2. [1p] Folosirea de operații blocante în context atomic]
Line 123: Line 123:
 ==== 2. [1p] Folosirea de operații blocante în context atomic ==== ==== 2. [1p] Folosirea de operații blocante în context atomic ====
  
-Intrați în directorul ''​2-sched-spin/''​ și parcurgeți conținutul fișierului ''​sched-spin.c''​. **Hint**: Funcția [[http://​elixir.bootlin.com/​linux/​v4.9/​source/​kernel/​time/​timer.c?#L1697|schedule_timeout]],​ coroborată cu macro-ul [[http://​elixir.bootlin.com/​linux/​v4.9/​source/​include/​linux/​sched.h?#L297|set_current_state]],​ forțează procesul curent să aștepte 5 secunde.+Intrați în directorul ''​2-sched-spin/''​ și parcurgeți conținutul fișierului ''​sched-spin.c''​. **Hint**: Funcția [[https://​elixir.bootlin.com/​linux/​v4.15.7/​source/​kernel/​time/​timer.c#​L1725|schedule_timeout]],​ coroborată cu macro-ul [[https://​elixir.bootlin.com/​linux/​v4.15.7/​source/​include/​linux/​sched.h#​L128|set_current_state]],​ forțează procesul curent să aștepte 5 secunde.
   - Compilați codul sursă într-un modul de kernel și copiați-l pe mașina virtuală, conform informațiilor de mai sus (''​make build''​ și ''​make copy''​).   - Compilați codul sursă într-un modul de kernel și copiați-l pe mașina virtuală, conform informațiilor de mai sus (''​make build''​ și ''​make copy''​).
   - Încărcați modulul în kernel folosind comanda ''​insmod sched-spin.ko''​.   - Încărcați modulul în kernel folosind comanda ''​insmod sched-spin.ko''​.
Line 146: Line 146:
   - (**TODO 2**) Folosiți funcția completată anterior pentru a inițializa cele 4 structuri cu următoarele informații:​   - (**TODO 2**) Folosiți funcția completată anterior pentru a inițializa cele 4 structuri cu următoarele informații:​
     * PID-ul procesului curent, dat de macro-ul ''​current'',​ de tipul ''​struct task_struct *''​.     * PID-ul procesului curent, dat de macro-ul ''​current'',​ de tipul ''​struct task_struct *''​.
-      * **Hint**: Căutați câmpul relevant pentru PID în structura [[http://​elixir.bootlin.com/​linux/​v4.9/​source/​include/​linux/​sched.h?#L1475|task_struct]].+      * **Hint**: Căutați câmpul relevant pentru PID în structura [[https://​elixir.bootlin.com/​linux/​v4.15.7/​source/​include/​linux/​sched.h#​L520|task_struct]].
     * PID-ul procesului părinte al procesului curent.     * PID-ul procesului părinte al procesului curent.
       * **Hints**:       * **Hints**:
-        * Căutați câmpul relevant din structura [[http://​elixir.bootlin.com/​linux/​v4.9/​source/​include/​linux/​sched.h?#L1475|task_struct]].+        * Căutați câmpul relevant din structura [[https://​elixir.bootlin.com/​linux/​v4.15.7/​source/​include/​linux/​sched.h#​L520|task_struct]].
         * Căutați după șirul "​parent"​.         * Căutați după șirul "​parent"​.
     * PID-ul procesului următor din lista de procese.     * PID-ul procesului următor din lista de procese.
       * **Hints**:       * **Hints**:
-        * Folosiți macro-ul [[http://​elixir.bootlin.com/​linux/​v4.9/​source/​include/​linux/​sched.h?#L2990|next_task]].+        * Folosiți macro-ul [[https://​elixir.bootlin.com/​linux/​v4.15.7/​source/​include/​linux/​sched/signal.h#L500|next_task]].
         * Macro-ul întoarce pointer-ul la următorul proces, adică de tipul ''​struct task_struct *''​.         * Macro-ul întoarce pointer-ul la următorul proces, adică de tipul ''​struct task_struct *''​.
     * PID-ul următorului proces după următorul.     * PID-ul următorului proces după următorul.
-        * **Hint**: Folosiți de două ori macro-ul [[http://​elixir.bootlin.com/​linux/​v4.9/​source/​include/​linux/​sched.h?#L2990|next_task]].+        * **Hint**: Folosiți de două ori macro-ul [[https://​elixir.bootlin.com/​linux/​v4.15.7/​source/​include/​linux/​sched/signal.h#L500|next_task]].
   - (**TODO 3**) Afișați cele patru structuri.   - (**TODO 3**) Afișați cele patru structuri.
     * Folosiți ''​printk''​ pentru a afișa cele două câmpuri ale acestora: ''​pid''​ și ''​timestamp''​.     * Folosiți ''​printk''​ pentru a afișa cele două câmpuri ale acestora: ''​pid''​ și ''​timestamp''​.
Line 185: Line 185:
 Revedeți secțiunea [[:​so2:​laboratoare:​lab03#​Liste|Liste]] din laborator. Revedeți secțiunea [[:​so2:​laboratoare:​lab03#​Liste|Liste]] din laborator.
  
-Atunci când ștergeți elemente din listă, va trebui să folosiți apelul [[http://​elixir.bootlin.com/​linux/​v4.9/​source/​include/​linux/​list.h?#L422|list_for_each_safe]]. Puteți folosi și apelul [[http://​elixir.bootlin.com/​linux/​v4.9/​source/​include/​linux/​list.h?#L516|list_for_each_entry_safe]].+Atunci când ștergeți elemente din listă, va trebui să folosiți apelul [[https://​elixir.bootlin.com/​linux/​v4.15.7/​source/​include/​linux/​list.h#​L436|list_for_each_safe]]. Puteți folosi și apelul [[https://​elixir.bootlin.com/​linux/​v4.15.7/​source/​include/​linux/​list.h#​L543|list_for_each_entry_safe]].
 </​note>​ </​note>​
  
Line 227: Line 227:
 Pentru exportarea funcțiilor de mai sus, din modulul de la ''​6-list-sync/''​ este nevoie de următorii pași: Pentru exportarea funcțiilor de mai sus, din modulul de la ''​6-list-sync/''​ este nevoie de următorii pași:
   - Funcțiile nu trebuie să fie statice.   - Funcțiile nu trebuie să fie statice.
-  - Se folosește macro-ul [[http://​elixir.bootlin.com/​linux/​v4.9/​source/​include/​linux/​export.h?#L70|EXPORT_SYMBOL]] pentru a exporta simbolurile în kernel. De exemplu: ''​EXPORT_SYMBOL(task_info_remove_expired);''​. Macro-ul trebuie folosit pentru fiecare funcție, **după** definirea funcției.+  - Se folosește macro-ul [[https://​elixir.bootlin.com/​linux/​v4.15.7/​source/​include/​linux/​export.h#​L77|EXPORT_SYMBOL]] pentru a exporta simbolurile în kernel. De exemplu: ''​EXPORT_SYMBOL(task_info_remove_expired);''​. Macro-ul trebuie folosit pentru fiecare funcție, **după** definirea funcției.
   - Eliminați din modulul de la ''​6-list-sync/''​ secvența cu evitarea expirării unui element al listei (se bate cap în cap cu ce face testul).   - Eliminați din modulul de la ''​6-list-sync/''​ secvența cu evitarea expirării unui element al listei (se bate cap în cap cu ce face testul).
   - Compilați și încărcați modulul de la ''​6-list-sync/''​. Odată încărcat va expune funcțiile exportate și vor putea fi folosite de modulul de test. Puteţi verifica acest lucru căutând numele funcţiilor în ''/​proc/​kallsyms''​ înainte şi după încărcarea modulului.   - Compilați și încărcați modulul de la ''​6-list-sync/''​. Odată încărcat va expune funcțiile exportate și vor putea fi folosite de modulul de test. Puteţi verifica acest lucru căutând numele funcţiilor în ''/​proc/​kallsyms''​ înainte şi după încărcarea modulului.
so2/laboratoare/lab03/exercitii.1520282739.txt.gz · Last modified: 2018/03/05 22:45 by ionel.ghita
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0