Valid HTML 4.01!

Zarządzanie procesami
Synchronizacja na poziomie jądra

Spis treści


Bibliografia


Podstawowe pojęcia


Synchronizacja na poziomie jądra


Wirujące blokady

Wirujące blokady są zaimplementowane w pliku include/asm-i386/spinlock.h, a interfejs jest dostępny w pliku include/linux/spinlock.h. Nazwa pochodzi stąd, że czekanie na zdjęcie blokady jest aktywne. Wirujące blokady zależą od architektury i są zaimplementowane w asemblerze.


Semafory systemowe - algorytmy up i down

Uwaga: w nowszych wersjach jądra semafory zostały zastapione przez muteksy (muteksty pojawiły się w 2.6.16, a semafory znikły w 2.6.24).

Semafory to mechanizm synchronizacji stosowany często zarówno w systemach jedno-, jak i wieloprocesorowych.

Semafory systemowe to obiekty typu struct semaphore (plik źródłowy include/asm-i386/semaphore.h):


struct semaphore {
        atomic_t count;
        int sleepers;
        wait_queue_head_t wait;
};

Pole count pełni rolę licznika. Wartość większa od zera oznacza, że semafor jest podniesiony, a mniejsza lub równa zero - semafor opuszczony. Pole sleepers służy do modyfikacji i poprawiania pola count. Pole wait to kolejka procesów oczekujących.

Znaczenia pola count:

Znaczenia pola sleepers:

Podstawowe operacje semaforowe to up i down. Ich implementacja jest dość złożona i częściowo wykonana w asemblerze.


   static inline void sema_init (struct semaphore *sem, int val)
   static inline void down(struct semaphore * sem)
   static inline int down_interruptible(struct semaphore * sem)
   static inline int down_trylock(struct semaphore * sem)
   static inline void up(struct semaphore * sem)


Janina Mincer-Daszkiewicz