Struktury związane z szeregowaniem żądań do urządzeń blokowych


  • struktura "blk_dev_struct" - opisująca dane urządzenie blokowe.

    Struktura ta jest zdefiniowana dla każdego urządzenia blokowego. Jest przechowywana w tablicy blk_dev indeksowanej numerem głównym urządzenia. tablica ta jest zdefiniowana w pliku ll_rw_blk.c i inicjalizowana funkcją __init blk_dev_init. Funkcja ta oprócz inicjalizowania tablicy blk_dev ustala również zmienne określające maksymalną ilość buforów jakie mogą być zablokowane oraz ilość struktur request przypadających na każdą kolejkę żądań. Wartości te określane są na podstawie ilośći dostępnej pamięci w systemie.
    W strukturze blk_dev_struct istotne są dwa pola:
    • request_queue - czyli kolejka żądań związana z tym urządzeniem (opisana dalej).
    • queue - czyli wskaźnik do funkcji zwracającej kolejkę( domyślnie pole to ma wartość null).


  • struktura "request" - opisująca pojedyńcze żądanie operacji wejścia/wyjścia na urządzeniu.

    Istotne pola:
    • Status żądania: rq_status, określający między innymi czy dana struktura jest używana (RQ_ACTIVE) czy jest wolna (RQ_INACTIV).
    • Użądzenie którego dotyczy dane żądanie: rq_dev.
    • Komenda cmd czyli czy czytamy czy piszemy (READ / WRITE).
    • początkowy sektor żądania sector oraz długość żądania nr_sectors.
    • liczba sektorów które pozostały do wczytania/zapisania current_nr_sectors.
    • Wskaźnik na początek bh i koniec bhtail listy buforów odpowiadających fragmentowi urządzenia.
    • licznik błędów errors.

Wstecz Tomasz Wadowski Dalej