Next: Przykład funkcja write_some_buffers
Up: Obsługa nagłówków wolnych buforów
Previous: Obsługa nagłówków wolnych buforów
Zawiera informacje o danych(b_data), stronie do której jest
zamapowany(d_page), czas kiedy powinien być zapisany,
oraz gdzie ma być zapisany (b_dev, b_blocknr,
b_size).
Status bufora (flagi bitowe):
- BH_Uptodate - bufor zawiera aktualne dane
- BH_Dirty - bufor jest zabrudzony, różny od swej dyskowej kopii
- DH_Lock - trwa na nim operacja we/wy. Można poczekać na jej koniec.
w kolejce b_wait.
- BH_Mapped - bufor ma mapowanie w pamięci
- BH_New - nowy i nie zapisany.
- BH_Async - bufor jest obsłubiwany przez
end_buffer_io_async
- BH_Wait_IO - nalerzy zapisać ten bufor.
Bufory są umieszczone w tablicach rozproszonych z liniwyn rostżyganiem
kolizji. Kluczem słownika jest urządzenie i blok.
Drugą strukturą w której znajdują się bufory są kolejki lru.
Na kolejkach wykonuje się dwie podstawowe operacje:
- wyjęcie bufora z kolejki w której się aktualnie znajduje
- wstawienie na koniec kolejki.
Implementacją są listy dwukierunkowe z wartownikiem
(jak wszędzie w kernel'u) przez co operacje te wykonywane
są w czasie stałym. Jak widać na początku karzdej kolejki
będą znajdować się bufory będące tam najdłużej. Listy są
trzy:
- BUF_CLEAN
- - bufory czyste (zgodne z dyskiem)
- BUF_LOCKED
- - bufory w trakcie transmisji.
- BUF_DIRTY
- - bufory nie zsynchronizowane z dyskiem.
Next: Przykład funkcja write_some_buffers
Up: Obsługa nagłówków wolnych buforów
Previous: Obsługa nagłówków wolnych buforów
admin
2001-12-18