Termin ten spotkałem wiele razy w różnych materiałach edukacyjnych CS:
L2 CS162 (UC Berkeley):
We / wy mapowane na pamięć
L4 CS162 (UC Berkeley):
Pliki mapowane w pamięci
L24 CS61 (UC Berkeley):
„We / wy mapowane na pamięć”: Rejestry sterowania / danych mapowane na przestrzeń adresową procesora
- Nawet po „mapowaniu” google otrzymałem artykuł Map_ (funkcja wyższego rzędu) , ale nie było to dla mnie jasne.
Co więcej, starałem się zrozumieć znaczenie w kontekście
bitmap
, czytając artykuł w Wikipedii :Tablica bitów jest odwzorowaniem z pewnej domeny (prawie zawsze zakresu liczb całkowitych) na wartości w zbiorze {0, 1}
Nie jestem pewien, ale w powyższym kontekście brzmi dla mnie o konwersji danych.
Później po przeczytaniu książki CS znalazłem tylko ten akapit, ale nie wyjaśnił mi on znaczenia „mapowania”:
Mapowanie pamięci Linux (wraz z innymi formami Uniksa) inicjuje zawartość wirtualnego obszaru pamięci, kojarząc go z obiektem na dysku, proces znany jako mapowanie pamięci.
Otrzymałem również MapReduce jako wynik wyszukiwania: gdzie mapa jest wyjaśniona jako „idiom w obliczeniach równoległych, w którym prostą operację stosuje się do wszystkich elementów sekwencji, potencjalnie równolegle”.
Nadal jestem zdezorientowany tym terminem. Czy ktoś może wyjaśnić, co oznacza „mapa” w kontekście, o którym wspomniałem?
Functor
nazwie linku - za mało, by sugerować edycję).map
Zwraca wynik w której każdy element jest powiązany z odpowiednim elementem na wejściu. Różnica polega na tym, że pierwsze użycie opisuje istniejącą relację, a drugie odnosi się do operacji, która tworzy relację.W dalszej części będę mniej niż dokładny na wiele sposobów, poświęcając techniczną dokładność, aby zapewnić podstawowe zrozumienie. Oczywiste jest, że zapoznałeś się z wieloma źródłami technicznymi, a sama techniczność materiału utrudnia zrozumienie, co jest dość podstawową i prostą koncepcją.
Mówiąc najprościej, najczęstszym zastosowaniem mapy słów jest opisanie związku między rzeczami w dwóch różnych zestawach. Może to być funkcja matematyczna lub inny rodzaj reprezentacji i mechanizmu. Najczęstszą, która przychodzi mi na myśl, jest mapa ulic.
Mapa ulic jest obrazem konkretnego terenu lub obszaru w prawdziwym świecie, w którym linie, rysunki i słowa zapisane na mapie odpowiadają rzeczywistym ulicom i budynkom. Istnieje relacja jeden do jednego między reprezentacją terenu przedstawioną na mapie ulic a rzeczywistym terenem.
Patrząc dalej, możemy również zobaczyć, że mapa ulic reprezentuje rzeczywisty teren. Rzeczywisty teren ma obiekty i szczegóły oraz dynamiczne procesy, których mapa ulic nie przedstawia. Mapa ulic jest abstrakcyjnym przedstawieniem rzeczywistego terenu, a to, co jest przedstawione na mapie ulic, jest tylko tym, co jest potrzebne do spełnienia jej celu, aby zapewnić pomoc nawigacyjną na prawdziwym terenie.
Wiele przykładów w pytaniu dotyczy utworzenia reprezentacji z mechanizmami pomocniczymi, aby osoba mogła korzystać z reprezentacji, a mechanizm tłumaczy działania tej osoby na to, co jest potrzebne do podstawowej funkcjonalności, która jest ukryta przez fasadę reprezentacji.
Plik we / wy mapowany w pamięci pozwala programistom myśleć o pliku jako dużym obszarze pamięci, aby użyć reprezentacji pamięci rzeczywistego pliku. Programista nie uważa pliku za plik, ale zamiast tego myśli o nim jako o dużym obszarze pamięci. Funkcja We / Wy pliku odwzorowanego na pamięć zapewnia, że gdy programista odwołuje się do określonego przesunięcia pamięci, uzyskuje się dostęp do odpowiednich danych w pliku.
Urządzenie we / wy mapowane na pamięć pozwala uprościć interfejs programowania urządzenia poprzez zapis do adresów pamięci lub odczyt z adresów pamięci. Te operacje zapisu i odczytu są tłumaczone przez podstawową funkcjonalność urządzenia we / wy mapowanego na pamięć na konkretne działania specyficzne dla urządzenia potrzebne do przeprowadzenia żądanej usługi lub akcji.
Mapa bitowa to zestaw bitów, które zapewniają zgodność jeden do jednego z wartościami innego zestawu. Na przykład
CreateFile()
funkcja Win32 API ma kilka argumentów mapy bitowej, które są używane do wskazywania różnego rodzaju atrybutów pliku. Określone bity w mapie bitowej odpowiadają konkretnemu zachowaniu pliku, np. „Otwórz jako tylko do odczytu” lub „Zawsze twórz nowy pusty plik”. Zapewnione są specjalne stałe, które są łączone za pomocą binarnych operacji bitowych w celu określenia rzeczywistych argumentów. Zobacz funkcję CreateFile i przykładowy kod źródłowy przy otwieraniu pliku do odczytu lub zapisu .źródło
Memory mapped file I/O
, czy jest to alternatywa dla standardowych plików we / wy (fopen, fgetc ..)? czy przewaga wydajności wynika z faktu, że dostęp do pamięci RAM jest szybszy w porównaniu do dysków?setbuf()
funkcji do ustawienia dużego bufora we / wy pliku. Wszystko, co możesz zrobić, aby ograniczyć dostęp do urządzenia pamięci masowej, zwykle stanowi bonus. W przypadku napędów dyskowych zmniejszenie liczby wyszukiwań może mieć dużą różnicę, jednak istnieje wiele czynników, na które niewiele można poradzić, na przykład sposób organizacji danych na talerzach, prędkość obrotowa talerzy, prędkość ruchu głowy, buforowanie dane, jak dobrze trafienia w pamięci podręcznej zmniejszają przechodzenie na dysk elektromechaniczny itp.Mapowanie to po prostu proces kojarzenia jednej jednostki danych z inną jednostką danych. Celem mapowania jest umożliwienie uproszczonego dostępu do mapowanych danych. Na przykład w klasycznych systemach kompatybilnych z IBM adres pamięci 0xB8000 został zmapowany na pamięć wideo karty graficznej. Zapis do tej pamięci zaktualizowałby zawartość ekranu, a odczytanie z niej spowodowałoby odzyskanie zawartości ekranu. Mapowanie plików, mapowanie urządzeń, a nawet mapowanie struktury danych (zwykle nazywane Mapą, HashMapą lub Słownikiem), wszystkie sposoby kojarzenia jednej jednostki danych z inną jednostką danych.
Mapowanie ma dwie podstawowe zalety. Po pierwsze, mapowanie zmniejsza złożoność dostępu do powiązanego urządzenia lub pliku. Na przykład mapowanie plików i mapowanie urządzeń pozwala traktować te urządzenia tak, jakby były zwykłą pamięcią. Zamiast uczyć się różnych portów I / O, poleceń danych itd., Otrzymujesz jeden prosty interfejs, który jest tak naturalny i oczywisty jak zapis do pamięci RAM.
Drugą korzyścią jest to, że może zmniejszyć wymagania dotyczące pamięci. Na przykład, a
Map<Integer, SomeDataType>
może wytworzyć „rzadką tablicę”, która jest użyteczna tam, gdzie potrzebna jest tablica, która zawiera głównie nieprawidłowe / nieużywane dane, i można uzyskać do niej dostęp w czasie prawie liniowym. Może to być znacznie bardziej wydajne niż lista połączona (gdzie dostęp do n-tego elementu zajmuje O ( n ) ).Mapowanie jest przede wszystkim używane jako abstrakcja, aby ukryć skomplikowane algorytmy / funkcje przed deweloperem, aby mogli skupić się na zadaniu wdrożenia programu. Należy pamiętać, że mapowanie nie zawsze jest tak wydajne pod względem czasu przetwarzania, jak bezpośredni dostęp do urządzenia lub pliku, ale zawsze jest mniej skomplikowane niż to (np. Mapowanie zmniejsza ilość specjalistycznego kodu, który programista musi napisać, aby uzyskać dostęp do danych ).
źródło