Rozumiem, że istnieje coś takiego jak kontroler dysku, który zawiera bufor, ale zastanawiałem się, czy CPU odczytuje bezpośrednio z tego bufora, czy też dane muszą najpierw przejść do określonego miejsca w pamięci, a następnie pozwolić się odczytać przez procesor?
Czy ktoś wie również, jak nazywa się bufor? A jak DMA do tego pasuje?
W przypadku odczytu dysku przepływ danych jest zasadniczo:
po złożeniu odczytu / zapisu na żądanym cylindrze wybierana jest żądana głowica r / w.
w każdym sektorze odczytywany jest identyfikator sektora. Jeśli odczytany numer sektora odpowiada żądanemu numerowi sektora, to dane sektora są odczytywane.
dane sektora są odczytywane jako szeregowy strumień bitów i konwertowane na bajty.
bajty sektora są przechowywane w buforze sektora (zwykle SRAM w kontrolerze); ten bufor sektorowy różni się od „pamięci podręcznej dysku”.
po odczytaniu całego sektora dane są sprawdzane za pomocą ECC i być może poprawiane.
po zatwierdzeniu dane sektora są przesyłane z kontrolera do komputera hosta. Uwaga: istnienie tego bufora sektorowego nie jest dobrze znane i rozpowszechnione jest dezinformowanie, że prędkość transferu na interfejsie hosta (egATA) jest powiązana lub ograniczona przez przepływność na głowicy R / W. To całkowicie nieprawda, ponieważ te dwa transfery danych są niezależnymi i sekwencyjnymi operacjami, a nie współbieżnymi.
ponieważ komputer odbiera dane z kontrolera dysku za pośrednictwem interfejsu ATA, komputer może używać zaprogramowanego we / wy (procesor wielokrotnie odczytuje rejestr danych portu ATA i kopiuje wartość do pamięci docelowej) lub DMA (kontroler DMA jest konfiguracja kopiowania N bajtów z rejestru danych portu ATA do bufora pamięci bez dalszej interwencji procesora).
„bufor” pamięci komputera, który odbiera dane, może być buforem aplikacji (w przypadku korzystania z wywołania systemowego blokowego we / wy ) lub może być wewnętrznym buforem systemu pod kontrolą systemu plików, a nawet pamięcią programu lub pamięci, jeśli dane pochodzą z wymiany obszar (lub plik strony).
Zapis na dysk jest podobny, z tym wyjątkiem, że dane są przesyłane z komputera do kontrolera dysku, obliczane jest ECC, żądany sektor jest zlokalizowany, a następnie dane są zapisywane z bufora sektora na talerz.
Dla dodatkowego kredytu:
Przeczytaj o transferach „ scatter-gather ”, które wykorzystują łańcuchowanie DMA oraz listę adresów rozproszonych i długości buforów. Zamiast jednego dużego, ciągłego bufora pamięci, transfer „scatter-gather” umożliwia agregację użycia nieciągłych buforów pamięci dla żądania dysku I / O.
Być może może być nieco mniej szczegółowe w odniesieniu do „głowic r / w”, ponieważ w dzisiejszych czasach napędy niemechaniczne są znacznie częściej używane, ale to dobra odpowiedź.
Shinrai
@Shinrai - Mam doświadczenie w programowaniu z pierwszej ręki w przypadku napędów z ruchomymi ramionami (i korzystałem z napędów o stałej głowicy). Nie chcę spekulować ani powtarzać informacji z drugiej lub trzeciej ręki na temat działania dysków SSD.
trociny
+1 za tę świetną odpowiedź, dobrze udokumentowaną i napisaną. Bardzo profesjonalnie.
climenole
2
Przechodzi do określonego obszaru pamięci, w którym jądro przydzieliło sterownik dysku. Nie sądzę, że jest specjalnie nazwany. Ten obszar pamięci jest zwykle skonfigurowany jako bufor pierścieniowy . W zależności od systemu operacyjnego pamięć ta może zostać skopiowana po raz drugi w przestrzeń użytkownika, aby mogła z niej korzystać aplikacja.
DMA jest „bezpośredniego dostępu do pamięci”, co oznacza, że kontroler stacji dyskietek mogą pisać bezpośrednio do pamięci RAM, bez konieczności wielokrotnie CPU poprosić go, jeśli jest dostępny więcej danych (znany jako odpytywania - sposób rzeczy używane do zrobienia). Zamiast tego po przesłaniu całego bufora kontroler przerywa procesor, aby poinformować go, że dane są już dostępne.
Jeśli ciekawi Cię jeszcze niższy poziom, kierowca wykonuje połączenia ioctl .
Bufory pierścieniowe są zwykle stosowane przez urządzenia sieciowe (np. Kontroler Ethernet), ponieważ dane mogą dotrzeć niezamówione (nieoczekiwanie bez oczekiwania na żądanie odczytu). Dane z napędu dyskowego / kontrolera są zawsze odpowiedzią na żądanie hosta. Dane są żądane, więc nie ma potrzeby stosowania „bufora pierścieniowego” w sterowniku dysku.
trociny
OK, pracowałem tylko z przetwornikami cyfrowo-analogowymi na poziomie sterownika, a one także używają buforów pierścieniowych, więc założyłem.
Przechodzi do określonego obszaru pamięci, w którym jądro przydzieliło sterownik dysku. Nie sądzę, że jest specjalnie nazwany. Ten obszar pamięci jest zwykle skonfigurowany jako bufor pierścieniowy . W zależności od systemu operacyjnego pamięć ta może zostać skopiowana po raz drugi w przestrzeń użytkownika, aby mogła z niej korzystać aplikacja.
DMA jest „bezpośredniego dostępu do pamięci”, co oznacza, że kontroler stacji dyskietek mogą pisać bezpośrednio do pamięci RAM, bez konieczności wielokrotnie CPU poprosić go, jeśli jest dostępny więcej danych (znany jako odpytywania - sposób rzeczy używane do zrobienia). Zamiast tego po przesłaniu całego bufora kontroler przerywa procesor, aby poinformować go, że dane są już dostępne.
Jeśli ciekawi Cię jeszcze niższy poziom, kierowca wykonuje połączenia ioctl .
źródło