Poprzez ich tłumaczenia adresowe różne operacje mogą blokować te same prawdziwe strony. Poprzez różne wirtualne tłumaczenia tych samych stron lub ułożone żądania MLOCK na bardzo identycznym zakresie adresów, samotna metoda może również mieć kilka zablokowanych stron. Wywołanie do funkcji MUNMAP (), która descenia niezatrujony zakres adresu wykonuje odblokowanie wyraźnie lub dorozumialnie.
Po zaledwie widelcu zablokowane tłumaczenia nie są przekazywane procesowi dziecka. Wątki mogą zamknąć tylko pewną ilość fizycznego pamięci RAM, ponieważ jest to stosunkowo rzadki towar. Zarówno ograniczenie zasobów Rlimit_Memlock Rlimit_Memlock, jak i ograniczenie „Przewodowe strony” można zablokować przez pojedynczy wątek. Chociaż implementacje NetBSD zaokrąglałyby do najbliższej wielu stron, kod transportowy musi upewnić się, że być może argumenty ADDR i LEN są zsynchronizowane z jednym.
Wartości zwracane
Powrót 0 oznacza, że połączenie się powiodło, a prawie wszystkie strony w zakresie zostały zablokowane lub zwolnione. Stan blokowania każdej strony w domenie pozostaje niezmieniony, jeśli wartość numeryczna wynosi -1, co wskazuje na wyjątek. Błąd jest wskazany w tej sytuacji poprzez ustalenie globalnej lokalizacji Errno.
Błędy
Funkcja mlock () może się nie powieść z kilku powodów. W tej części artykułu omówimy liczbę wyjątków, które otrzymaliśmy po niepowodzeniu funkcji mlock () wraz z ich powodami w realizacji. Oto kilka błędów, które możemy znaleźć do tej pory:
Funkcja Munlock (), która jest używana jednocześnie z funkcją mlock () może zawieść z kilku powodów. W tej części artykułu omówimy liczbę wyjątków, które otrzymamy po niepowodzeniu funkcji Munlock () wraz z ich przyczynami wydarzenia w realizacji. Oto niektóre z błędów, które możemy znaleźć do tej pory:
Przykład:
Aby zrozumieć koncepcję funkcji mlock () c, przyjrzymy się prostemu przykładowi. Utworzyliśmy nowy plik C o nazwie „MSEG.c ”w folderze„ Works ”Kali Linux.
Rozpoczynamy ten kod przy użyciu standardowych bibliotek C wymaganych do sprawnego wykonywania kodu C, i.mi. Stdio.H i Unistd.H. Sys/Mman.Nagłówek H jest używany, aby umożliwić użycie funkcji blokowania pamięci. Następnie wykonywanie rozpoczyna się od inicjalizacji zmiennej liczbowej data_Size do 2048. Tablica znaków „data_lock” data_size jest zdefiniowana i przekazywana do funkcji memory_lock () zdefiniowanej przez użytkownika wraz ze zmienną data_size jako argumentu w pierwszej instrukcji „jeśli”.
Funkcja memory_lock () zdefiniowana przez użytkownika jest wykonywana i otrzymuje rozmiar strony w zmiennej Page_Size. Page_offset jest obliczany, a adres jest dostosowywany do granicy strony. Rozmiar jest dostosowywany do page_offset, a funkcja mlock () jest wywoływana i zwracana za pomocą zmiennych „rozmiar” i „adresu”. Metoda instrukcji „If” Perror () rzuci błąd „lock_memory”, jeśli zwrócony wynik jest równy -1. W przeciwnym razie instrukcja else wydrukuje „pamięć jest zablokowana w pamięci RAM” za pośrednictwem funkcji printF.
Kolejna instrukcja „IF-Else” służy do zwolnienia zamka. Funkcja Memory_unlock () jest wywoływana w instrukcji „If”, przekazując data_lock i data_size jako argumenty. Po tej samej procedurze następuje ta funkcja, którą obserwowaliśmy w funkcji pamięci_lock (). Jedyną zmianą jest użycie funkcji Munlock () z tymi samymi argumentami w celu zwolnienia blokady i zwrócenia wyniku. Druga instrukcja „jeśli” wyrzuci wyjątek „odblokowanie_memory” za pomocą funkcji Perror, jeśli wynik jest równoważny -1. W przeciwnym razie instrukcja else wyświetli się, że „pamięć jest odblokowana” za pomocą funkcji printF.
Utworzyliśmy plik obiektowy tego pliku C za pomocą opcji GCC „-O”.
Po wykonaniu pliku obiektu otrzymaliśmy komunikaty wyświetlania, ponieważ pamięć została zablokowana i odblokowana za pomocą funkcji mlock () i munlock ().
Wniosek
Chodzi o użycie funkcji MLOCK C w systemie operacyjnym Kali Linux, aby pokazać, jak pamięć można zablokować i odblokować bez żadnego problemu. Dodaliśmy wyjaśnienie, składnię, błędy i wartość zwracaną funkcji MLOCK wraz z jednym szczegółowym przykładem. Ten samouczek wystarczy, aby użytkownicy zdobyli ręce z tą funkcją w języku programowania C.