---
# System prepended metadata

title: 'Lista 10, 26 maja 2021'
tags: [sju21, ćwiczenia]

---

# Lista 10, 26 maja 2021

###### tags: `sju21` `ćwiczenia`

## Deklaracje

Gotowość rozwiązania zadania należy wyrazić poprzez postawienie X w odpowiedniej kolumnie! Jeśli pożądasz zreferować dane zadanie w trakcie dyskusji (co najwyżej jedno!) oznacz je znakiem ==X== na żółtym tle.

**UWAGA: Tabelkę wolno edytować tylko wtedy, gdy jest na zielonym tle!**

:::success
|                       |10-1 |10-2 |10-3 |
| ---------------------:| --- | --- | --- |
|           Jacek Bizub |  X  |  X  |     | 2
|     Wojciech Jasiński |     |     |     | 0
|        Artur Juraszek |  X  |  X  |     | 2
|     Michał Myczkowski |     |     |     | 0
|       Michał Odorczuk |  X  |  X  |     | 2
|       Damian Ratajski |     |     |     | 0
|         Łukasz Siudek |     |     |     | 0
|           Błażej Sowa |==X==|  X  |     | 2
|         Andrzej Turko |  X  |  X  |     | 2
|  Maksymilian Zawartko |  X  |  X  |  X  | 3
:::

## Zadanie 10-1

:::info
Autor: Błażej Sowa
:::

> Rozważmy wielowątkowy proces, w którym jeden z wątków wywołał [exit(2)]. Na podstawie implementacji procedury [exit_lwps] wyjaśnij uczestnikom zajęć w jaki sposób jądro kończy wykonanie pozostałych wątków w procesie.

[exit(2)]: https://mimiker.ii.uni.wroc.pl/source/xref/NetBSD/sys/kern/kern_exit.c?r=1fe5c4da&mo=6017&fi=170#170
[exit_lwps]: https://mimiker.ii.uni.wroc.pl/source/xref/NetBSD/sys/kern/kern_exit.c?r=1fe5c4da#exit_lwps


Wywołanie systemowe [sys_exit] przed zwolnieniem zasobów procesu, musi zakończyć wszystkie inne wątki korzystające z tych zasobów. Dzieje się to przez wywołanie procedury [exit_lwps], która:
1. Dla każdego bliźniaczego procesu:
    1. Ustawia flagę `LW_EXIT`, która sprawi, że wątek wywoła exit przy powrocie do userspace.
    1. Jeśli wątek jest w śnie przerywalnym albo jest wstrzymany, dodajemy go do run queue. ([setrunnable])
    1. W p.p. próbujemy wymusić powrót do userspace ([lwp_need_userret])
1. Dopóki nie wszystkie wątki zostały zamknięte:
    1. Czekamy na następny wątek zombie i zwalniamy jego zasoby ([lwp_wait])
    1. Jeśli przy czekaniu wystąpił błąd (np. wykryto deadlock), uruchamiamy [exit_lwps] ponownie.

> Czy można wyznaczyć górne ograniczenie na czas wykonania wywołania `«exit»`?

Nie, ponieważ musimy poczekać na wątki, które są w śnie nieprzerywalnym (np. przez wywołanie systemowe), a nie wiemy ile to może potrwać.

> Gdzie jeszcze w jądrze wymagane jest użycie procedury «exit_lwps»?

[execve_runproc](https://mimiker.ii.uni.wroc.pl/source/xref/NetBSD/sys/kern/kern_exec.c?r=1fe5c4da#execve_runproc) uruchomiony z wywołania systemowego [sys_execve](https://mimiker.ii.uni.wroc.pl/source/xref/NetBSD/sys/kern/kern_exec.c?r=1fe5c4da#598)


[sys_exit]: https://mimiker.ii.uni.wroc.pl/source/xref/NetBSD/sys/kern/kern_exit.c?r=1fe5c4da&mo=6017&fi=170#170
[lwp_need_userret]: https://mimiker.ii.uni.wroc.pl/source/xref/NetBSD/sys/kern/kern_lwp.c?r=1fe5c4da&fi=lwp_need_userret#1686
[setrunnable]: https://mimiker.ii.uni.wroc.pl/source/xref/NetBSD/sys/kern/kern_synch.c?r=1fe5c4da#842
[lwp_wait]: https://mimiker.ii.uni.wroc.pl/source/xref/NetBSD/sys/kern/kern_lwp.c?r=1fe5c4da#573
  
## Zadanie 10-2

:::info
Autor: Artur Juraszek
:::

- przekazane w `options` flagi muszą należeć do [zbioru znanych wartości]( https://mimiker.ii.uni.wroc.pl/source/xref/NetBSD/sys/kern/kern_exit.c?r=1fe5c4da#997)
- trzeba podać [przynajmniej jedną](https://mimiker.ii.uni.wroc.pl/source/xref/NetBSD/sys/kern/kern_exit.c?r=1fe5c4da#1002) flagę określającą typ eventu, na który czekamy
- [wymiana](https://mimiker.ii.uni.wroc.pl/source/xref/NetBSD/sys/kern/kern_exit.c?r=1fe5c4da#1013) meta-id "moja grupa" na konkretny pgid
- [matchujemy dany proces z naszymi oczekiwaniami](https://mimiker.ii.uni.wroc.pl/source/xref/NetBSD/sys/kern/kern_exit.c?r=1fe5c4da#819) - jeśli to nie jego szukamy, to wychodzimy
- na zombiaki czekamy jedynie z  [WEXITED](https://mimiker.ii.uni.wroc.pl/source/xref/NetBSD/sys/kern/kern_exit.c?r=1fe5c4da#868)
- [wypełniamy](https://mimiker.ii.uni.wroc.pl/source/xref/NetBSD/sys/kern/kern_exit.c?r=1fe5c4da#871) siginfo
- `WCONTINUED`, flagę wyrażającą chęć dowiedzenia się o tym, że zadanie zmieniło niedawno stan ze wstrzymanego na runnable obsługujemy [tutaj](https://mimiker.ii.uni.wroc.pl/source/xref/NetBSD/sys/kern/kern_exit.c?r=1fe5c4da#1065)
- `WSTOPPED`, analogiczna flaga, ale w drugą stronę - "`STOPPED`" znaczy tutaj "zatrzymany przez jeden z sygnałów: SIGTTIN, SIGTTOU, SIGTSTP, or SIGSTOP" https://mimiker.ii.uni.wroc.pl/source/xref/NetBSD/sys/kern/kern_exit.c?r=1fe5c4da#1080
- jeśli znaleziony wątek nie spełnił naszych oczekiwań, a nie czekamy na całą grupę, to nie warto pętlić się dalej bez sensu: https://mimiker.ii.uni.wroc.pl/source/xref/NetBSD/sys/kern/kern_exit.c?r=1fe5c4da#1097
- `WNOHANG`: jeśli nie wykryliśmy żadnych zmian w statusie potomków, to zamiast zasnąć w oczekiwaniu na wystąpienie jej wychodzimy z błędem: https://mimiker.ii.uni.wroc.pl/source/xref/NetBSD/sys/kern/kern_exit.c?r=1fe5c4da#1115
- zasypiamy na CV przypisanej do rodzica, a nie dzieci, bo dzięki temu łatwiej go potem znaleźć (każde dziecko zna swojego rodzica, więc wybudzić może dowolne z nich): https://mimiker.ii.uni.wroc.pl/source/xref/NetBSD/sys/kern/kern_exit.c?r=1fe5c4da#1124

## Zadanie 10-3

:::info
Autor: Maksymilian Zawartko
:::

Aktywator obrazu procesu rozpoznaje plik, który jest w stanie wykonać (różne aktywatory dla różnych formatów), a następnie przystępuje do wykonania. Aktywator może użyć swojej wiedzy o SO, dla którego plik został skompilowany, by poinstruować jądro, żeby używało odpowiednich implementacji wywołań systemowych podczas działania programu.

* `exec_elf64_makecmds` ustawia odpowiednio vmcmds / Prepare an Elf binary's exec package.
* `netbsd_elf64_probe`
* `elf64_copyargs` kopiuje argumenty na nowy stos.
* `coredump_elf64` robi core dumped
* `exec_setup_stack` prekonfiguruje stos.

https://mimiker.ii.uni.wroc.pl/source/xref/NetBSD/sys/kern/exec_elf.c?r=1fe5c4da#655

* `vn_marktext` oznacza vnode'a jako sekcję `.text`.

Interpreter – program wykonujący inne programy.