Następna Poprzednia Spis

5. Zadania

Zadanie 1

Jak można zaimplementować funkcję:

void list_add_tail(struct list_head *dodatkowa_lista, *stara_lista)

przy użyciu funkcji wewnętrznych (o nazwach zaczynający się od podwójnego podkreślenia)?

Zadanie 2

Załóżmy, że zasoby różnych rodzajów połączymy w kolejkę, przy użyciu pola "kolejka_zasobów" typu list_head. Czy jest to możliwe? Jakie napotykamy problemy?

Zadanie 3

W jaki sposób można zaimplementować funkcję:

move_last_ranqueue(struct task_struct * proces)

przy użyciu funkcji z zewnętrznych z list.h?

Zadanie 4

W jaki sposób można wykorzystać funkcje SET_LINKS i REMOVE_LINKS do zmiany zależności rodzinnych, gdy chcemy zmienić ojca danego procesu?

Zadanie 5

Dlaczego lepiej jest, gdy początek kolejki nie jest związany z żadnym procesem? W jakiej sytuacji ma to znaczenie?

Zadanie 6

Czy wstawienie procesu do kolejki oczekujących na dostęp do drukarki przy pomocy funkcji add_wait_queue_exclusive zapewnia, że tylko ten proces zostanie obudzony, gdy zasób będzie wolny?

Zadanie 7

Czy konieczne jest zabezpieczanie listy runqueue podczas jej przeglądania (nie zmieniamy jej) wewnątrz funkcji jądra? Przed czym jest to zabezpieczenie?


Następna Poprzednia Spis