/ / Linux Kernel - Gdzie w jądrze są fizycznie zapisane bloki danych na określonych partycjach dysku? - jądro linux, jądro, moduł jądra

Linux Kernel - Gdzie w jądrze są bloki danych fizycznie zapisywane na konkretne partycje dyskowe? - jądro Linux, jądro, moduł jądra

Zmieniam jądro Linuksa i próbujędowiedzieć się, gdzie w źródle jądra bloki danych są fizycznie zapisywane na partycjach dysku, takich jak ubd0. Gdzie to się dzieje w źródle jądra? Rzeczywiste fizyczne wezwanie do zapisu? Nie mogę tego znaleźć. Dzięki!

Edycja: Celem końcowym jest lista numerów bloków, które zostały zapisane na kilku różnych partycjach. Ponieważ dane są fizycznie zapisywane na liście, zapisywane numery bloków są zwracane i utrzymywane.

Odpowiedzi:

1 dla odpowiedzi № 1

Zależy to od konkretnego sterownika i urządzeniarodzaj. W przypadku urządzenia SCSI polecenia SCSI przechodzą do sterownika urządzenia. Są one generowane w warstwie SCSI i wysyłane do urządzenia przez sterownik urządzenia, a następnie do urządzenia.

Istnieje wiele abstrakcji w wywołaniu systemowym sys_write, dopóki dane nie zostaną przekazane do urządzenia, a sam sterownik urządzenia może nawet nie wiedzieć, że wykonuje zapis.

Do edycji zajrzyj na blktrace: http://linux.die.net/man/8/blktrace

Ok, kolejna odpowiedź; bardziej ci się spodoba. Dzieje się tak w generic_make_request. Komentarze mają charakter opisowy: http://lxr.linux.no/#linux+v2.6.32/block/blk-core.c#L1380

Struktura biologiczna w tej funkcji, widziana tutaj: http://lxr.linux.no/#linux+v2.6.32/include/linux/bio.h#L58

pokazuje bio_vec, czyli listę rzeczy trafiających do urządzenia.

q-> make_request_fn (q, bio); to rzeczywiste wywołanie wskaźnika funkcji do samego urządzenia.

http://lxr.linux.no/#linux+v2.6.32/include/linux/types.h#L126

Pokazuje, w jaki sposób indeksy są używane do zapisu na partycji. Należy zauważyć, że nie służy to tylko do zapisu.


0 dla odpowiedzi nr 2

Jeśli naprawdę chcesz wymyślić to konkretne koło od zera, skorzystałbym z funkcji kolejki żądań. Na przykład, aby zarejestrować żądanie wchodzące do kolejki, możesz wstawić kod submit_bio().

Nie jestem pewien, czy jest to najlepsze miejsce do zaczepienia się o wyjście z kolejki. Być może elv_next_request() na starszych jądrach lub blk_start_request() na nowsze.


0 dla odpowiedzi № 3

Jest w sterownikach urządzeń i zwykle odbywa się to poprzez połączenie transferów DMA i przerwań sygnalizujących zakończenie operacji we / wy. Są one różne dla każdego konkretnego urządzenia sprzętowego. Spójrz tutaj jak skomplikowane jest to w przypadku zwykłej dyskietki.

Edytować:

Zbadać Harmonogram we / wy kod.