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)?
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?
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?
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?
Dlaczego lepiej jest, gdy początek kolejki nie jest związany z żadnym procesem? W jakiej sytuacji ma to znaczenie?
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?
Czy konieczne jest zabezpieczanie listy runqueue podczas jej przeglądania (nie zmieniamy jej) wewnątrz funkcji jądra? Przed czym jest to zabezpieczenie?