Składnia:
#włączaćAddr: Początek adresów, które chcesz zsynchronizować jako zakres.
Len: Liczba długości lokalizacji wyrażonej w bajtach.
Wyjaśnienie:
Na tych pełnych stronach, które obejmują dowolną część przestrzeni adresowej procesu, zaczynając od Adres Addr i uruchomiony dla bajtów długości, metoda msync () musi zapisać wszystkie zaktualizowane informacje do trwałych obszarów przechowywania. Msync () nie powinien mieć wpływu, jeśli nie ma takiej pamięci. Metoda MSync () następnie usunie przechowywane kopie zapasowe informacji w razie potrzeby. ADDR musi być wielokrotnością liczby stron dostarczonych przez funkcję SYSCONF () dla wdrożenia do działania.
Metoda MSYNC (*) musi upewnić się, że wszystkie procesy zapisu są zakończone zgodnie z wymogami zsynchronizowanej bezpieczeństwa danych we/wy dla odwzorowań do dokumentów. Implementacja może opcjonalnie zapisywać dodatkowe cechy pliku, chociaż nie jest to zdefiniowane. Nie można przenosić żadnych zaktualizowanych danych do obiektu podstawowego ani nie udostępniane swobodnie do niektórych innych operacji, ilekroć metoda mSync () jest wykonywana w tłumaczeniach MAP_Private. Nie wiadomo, gdzie informacje w tłumaczeniach map_private są przechowywane na stałe. [SHM | TYM] [wybór start] msync () nie określa, czy wpływa on na wspólne obiekty pamięci, czy na wpisane obiekty pamięci masowej.
Koniec opcji: Jeśli żądanie mapy nie zostało użyte do utworzenia tłumaczenia, funkcjonalność tej metody jest niezdefiniowana.
Opcje flagi dostępne dla MSYNC ()
Parametr opcji składa się z bitwowców lub kilku flag wymienionych po następujących, które są określone w pliku nagłówka „SYS/MMAN.H":
Przed żądaniem wszystkie łącza zapisu do pamięci systemowej były dostępne do następujących procesów odczytu w dokumencie. Nie jest jasne, czy wskaźniki odczytu do obszaru przechowywania mogą uzyskać dostęp do modyfikacji do tego samego obszaru dokumentu, który został wykonany jeszcze przed żądaniem. Jeśli niezmienione strony w danym zakresie są dodatkowo zapisane do fundamentalnego sprzętu, nie wspomniano o tym. Po zaplanowaniu wszystkich procesów zapisu metoda może odpowiedzieć od razu, jeśli flaga jest MS_ASYNC. Gdy flagi są MS_Sync, metoda jakoś nie powraca, chyba że wszystkie procesy zapisu są zakończone.
Synchronizując dane regionu pamięci z istniejącymi przechowywanymi informacjami, MS_INVALIDATE sprawia, że się pokrywają. Kolejne dostęp do odczytu do połączonego obszaru pamięci może zobaczyć wszystkie zapisy do przetłumaczonego obszaru dokumentu, który został wykonany jeszcze przed żądaniem. Nie jest jasne, czy wskaźniki odczytu do obszarów przechowywania, które zostały przetłumaczone na ten sam obszar dokumentu z wykorzystaniem map_shared, nawet zanim zadzwonił przez jakąkolwiek funkcję. Kolumny ST_CTIME i ST_MTime pliku są oznaczone do aktualizacji, jeśli użycie funkcji mSync () powoduje dowolne operacje zapisu wykonywane w katalogu.
Zwrócona wartość:
Zastosowanie aplikacji:
Metoda msync () nie musi być dostępna we wszystkich wariantach, ponieważ jest dozwolona tylko wtedy. Aplikacje, które potrzebują obiektu pamięci, aby znajdować się w określonej pozycji, takiej jak te, które zapewniają obiekty transakcyjne, muszą skorzystać z metody mSync (). Strony mogą zostać przeniesione do dysku podczas rutynowej aktywności systemu.
Nie ma pewności, że msync () wydaje się być jedynym czynnikiem wpływającym na to, czy strony są przenoszone na dysk. Metoda msync () wysyła dane z zmapowanego obszaru do trwałego przechowywania jednostki podstawowej. Integralność danych dokumentu zapewnia żądanie MSync (). Jeśli w jakiś sposób podano flagę MS_INVALIDATE, wszelkie przechowywane dane mogą zostać wygasłe po wprowadzeniu danych. Na platformach, które nie zapewniają integralności odczytu/zapisu, jest to pomocne.
Przykład:
Utworzyliśmy nowy plik C za pomocą instrukcji VIM na powłoce. Jest tworzony w folderze Project1 naszego systemu Kali Linux zgodnie z wyjściem z listy instrukcji „LS” na następującym obrazie, i.mi. „Mysync.C".
Aby otworzyć ten plik, używamy edytora VIM zgodnie z następującą instrukcją:
Pusty plik otwiera się w ramach edytora VIM naszego systemu. Najpierw dodajemy niezbędne nagłówki w tym pliku kodu. Stdio.H, unistd.H i ciąg.h są używane do uzyskania standardowego wejścia i wyjścia. Podczas użycia „Sys/Mman.h ”i fcntl.H są używane do korzystania z funkcji i plików msync () w kodzie. Funkcja main () inicjuje wartość deskryptora pliku do -1 i otrzymuje rozmiar strony za pomocą funkcji getPageSize (). Otwieramy „Newfile.plik txt ”w trybie odczytu i zapisu. Jeśli nie ma pliku o tej nazwie, opcja „O_Create” tworzy nowy.
Zwrócona wartość jest przechowywana w deskryptorze pliku, a instrukcja „If” wykorzystuje ją, aby sprawdzić, czy wartość jest mniejsza niż 0, czy nie. Jeśli tak, wydrukuje to „otwarcie pliku nie powiodło się”. Wskaźnik map_address służy do mapowania adresu pliku, a jeśli się nie powiedzie, instrukcja „Jeśli” wydrukuje odpowiedni komunikat o błędzie. Funkcja strcpy () ma skopiować ciąg do zmiennej map_address, a instrukcja „IF-ELSE” używa funkcji msync () do synchronizacji mapowanej pamięci i wyświetlanie odpowiednich danych wyjściowych, i.mi. nieudane lub udane.
Skompilowaliśmy ten plik C z kompilatorem GCC i utworzyliśmy jego plik obiektu. Następnie wykonaliśmy jego plik obiektu i otrzymaliśmy wiadomość, że zmapowana pamięć została pomyślnie zsynchronizowana z plik.
Wniosek
Chodzi o użycie funkcji msync () 2 w naszym systemie. Omówiliśmy jego składnię wraz z jego parametrem, osobno. Omówiliśmy również opcje używane w nim i błędy, które możemy uzyskać z jego awarii. Dodaliśmy jeden szczegółowy przykład, aby wyjaśnić jego użycie w języku programowania C.