Funkcja mlock 2 c

Funkcja mlock 2 c
Strony fizyczne połączone z zwirtualizowanym zakresem adresów rozpoczynających się w AddR są zablokowane w RAM dla znaków LEN głównie przez funkcję systemu MLOCK. Strony ograniczone za pomocą jednej lub jeszcze większej liczby metod Mlock są odblokowane przez funkcję Munlock (). Pamięć powinna być przypisana w całym jej zakresie. Określone strony po takim wywołaniu MLOCK nie spowodują błędnych stron lub problemów z tłumaczeniem, chyba że zostaną zwolnione. W systemach z narzędziem programistycznym TLB mogą jednak skutkować awarią ochrony lub problemów TLB-Miss. Po usunięciu wszystkich ograniczonych mapowań dla stron rzeczywiste strony są przechowywane.

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:

  • Eagain: Ten błąd może wystąpić, gdy blokowanie określonego zakresu pójdzie dalej niż próg serwera lub na proces dla ograniczonej pamięci, a zatem mlock () awaria w takim przypadku.
  • Einval: Ten błąd może wystąpić, gdy podany adres, ale długość nie jest koordynowana strona. W takim przypadku rozwiązanie nie działa tak, jak powinno.
  • Enomem: Problem z usterką lub tłumaczeniem strony występuje po znalezieniu tego błędu. Dzieje się tak, ponieważ w kilku dostarczonych zakresach adresów mogą istnieć pewne nie do zorganizowania.
  • Eperm: Błąd EPERM znajduje się do tej pory na platformie, na której nie jest obsługiwana rachunkowość strony blokującej, a funkcja mlock () jest wywoływana przez jakiegoś użytkownika nie-root.

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:

  • Einval: Rozwiązanie nie okrążyło i ani adres, ani podana długość nie są wyrównane.
  • Enomem: Istnieją niezrównane adresy w kilku dostarczonych zakresach adresów. Dany zakres adresu nie jest całkowicie ograniczony.

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.