Funkcja msync 2 c

Funkcja msync 2 c
Czy kiedykolwiek słyszałeś o jakiejś funkcji, wykorzystując i zarządzając pamięcią systemu w Linux? Funkcja msync () jest jedną z nich. Metoda synchronizuje zawartość pliku z bieżącą zawartością obszaru. Wśród użytkowników Linuksa jest powszechnie znane z synchronizacji pamięci z fizycznym przechowywaniem systemu. W tym artykule wyjaśnimy jego składnię i użycie. W tym celu przejdziemy przez każdy z jego argumentów jeden po drugim.

Składnia:

#włączać
Int msync (void * addr, size_t len, int flagi);

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":

  • MS_ASYNC: Przeprowadzać jednoczesne pisanie
  • MS_INVALIDADE: Niedokładne mapowania
  • MS_Sync: Przeprowadzać jednoczesne pisanie
  • MS_CACHE_ONLY: Ponieważ QNX Neutrino obsługuje obecnie kompatybilność POSIX dla dokumentów mapowanych na pamięci, MSYNC () realizuje pożądany cel pisania modyfikacji w przetłumaczonej pamięci z powrotem do rzeczywistego pliku. Tylko pamięć podręczna MS (dodanie QNX Neutrino; QNX Neutrino Core OS 6.3.2 lub więcej). Jeśli wolisz dodatek QNX Neutrino do standardowego zachowania POSIX, użyj tego bitu, aby poinstruować metodę wypłukiwania lub nasycenia pamięci podręcznej danych (poprzez flagi MS Async, MS Sync lub MS).
  • Jeśli dynamicznie zmieniasz kod, użyj rozszerzenia QNX Neutrino MS MS INVALIDE ICACHE, aby upewnić się, że zaktualizowany kod jest wykonywany.
  • Pracuj tylko na oczyszczonych stronach z rozszerzeniem QNX Neutrino MS_CLEAN (wersja 7.0 lub później).

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ść:

  • Funkcja msync () daje 0, jeśli jest zakończona.
  • MSYNC () Funkcja wyjściowa -1 i przypisuje errno do jednego z następujących parametrów błędu, jeśli się nie powiedzie.

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.