Zadanie dla studenta

    Zaimplementować jako funkcje jądra semafor uogólniony t.j. taki, którego stan można zmieniać o wartość będącą dowolną liczbą naturalną. Należy w tym celu wkompilować w jądro własne funkcje systemowe:

int gsem_get(int state, int perms) funkcja która tworzy semafor o stanie początkowym state, prawach dostępu do niego perms i zwraca jego identyfikator lub -1 i ustawia errno na stosowną (należy sprawdzić jakie wartości przyjmuje errno po wyjściu ze stosownych operacji semaforowych IPC)

int gsem_op(int op) gdzie op to wartość o jaką należy podwyższyć lub obniżyć semafor.

int gsem_ctl(int nr) funkcja likwidująca semafor o numerze nr.

Przy rozwiązywaniu zadania należy zadeklarować własne struktury (kolejkę procesów), takie aby np. przy podniesieniu semafora nie budzić wszystkich czekających na tym semaforze (jak ma to obecnie miejsce w semaforach systemowych). Opuszczenie semafora ma być funkcją w której proces przyjmuje sygnały. Przy wykonaniu wszystkich funkcji semaforowych mają być sprawdzane prawa dostępu.

Funkcje mają być w plikach gsem.h, gsem.c wkompilowywanych w jądro. Trzeba także pamiętać o prostych modyfikacji dodatkowych plików: /usr/include/syscall.h, linux/include/asm/unistd.h, linux/arch/i386/entry.S, linux/kernel/ksymc.c.

W programie użytkownika funkcje mają być definiowane poprzez makra syscall[n] (gdzie n-liczba parametrów) - Czytelniku nie twórz własnej biblioteki.

Oprócz tego zapogramować program służący do sprawdzenia nowych funkcji jądra np. czytelników i pisarzy.


Bartosz Kruszyński