Attraverso le loro traduzioni di indirizzi virtuali, le diverse operazioni possono bloccare le stesse pagine reali. Attraverso varie traduzioni virtuali delle stesse pagine o richieste Mlock impilate sull'intervallo di indirizzi molto identici, un metodo solitario può anche avere diverse pagine che sono bloccate. Un'invocazione alla funzione munmap () che sradisce l'intervallo di indirizzi non rintracciato fa lo sblocco espressamente o implicitamente.
Dopo solo una forchetta, le traduzioni bloccate non vengono trasmesse al processo figlio. I thread possono chiudere solo una certa quantità di RAM fisica in quanto è una merce relativamente scarsa. Sia la limitazione delle risorse RLIMIT_MEMLOCK per processo sia la limitazione di "pagine cablate" a livello di piattaforma possono essere bloccate da un singolo thread. Sebbene le implementazioni netBSD si svolgano al multiplo più vicino del numero di pagine, il codice trasportabile deve assicurarsi che forse gli argomenti ADDR e Len siano sincronizzati a uno.
Valori di ritorno
Il ritorno 0 significa che la chiamata ha successo e quasi tutte le pagine nell'ambito sono state bloccate o rilasciate. Lo stato di blocco di ogni pagina nel dominio rimane inalterato se il valore numerico è -1, indicando un'eccezione. L'errore è indicato in questa situazione impostando la posizione globale Errno.
Errori
La funzione mlock () può non riuscire a diversi motivi. All'interno di questa parte dell'articolo, discuteremo del numero di eccezioni che abbiamo ottenuto dopo il fallimento della funzione Mlock () insieme alle loro ragioni per accadere in esecuzione. Ecco alcuni degli errori che potremmo trovare finora:
La funzione munlock () utilizzata contemporaneamente alla funzione mlock () può fallire a causa di diversi motivi. All'interno di questa parte dell'articolo, discuteremo il numero di eccezioni che otteniamo dopo il fallimento della funzione Munlock () insieme alle loro ragioni per accadere in esecuzione. Ecco alcuni degli errori che potremmo trovare finora:
Esempio:
Per comprendere il concetto della funzione mlock () c, diamo un'occhiata a un semplice esempio. Abbiamo creato un nuovo file C chiamato "MSEG.C "nella cartella" Works "di Kali Linux.
Iniziamo questo codice con l'uso delle librerie C standard richieste per l'esecuzione regolare del codice C, i.e. stdio.H e unistd.H. Il sistema/mman.L'intestazione H viene utilizzata per consentire l'uso delle funzioni di blocco della memoria. Successivamente, l'esecuzione inizia dall'inizializzazione di una variabile intera Data_Size a 2048. L'array di caratteri “data_lock” di data_size viene definito e passato alla funzione memory_lock () definita dall'utente insieme alla variabile data_size come argomento all'interno della prima istruzione “if”.
La funzione Memory_lock () definita dall'utente viene eseguita e ottiene la dimensione di una pagina nella variabile Page_Size. Page_Offset viene calcolato e l'indirizzo è regolato al limite della pagina. La dimensione viene regolata con la funzione Page_Offset e la funzione mlock () viene invocata e restituita utilizzando le variabili "dimensioni" e "indirizzo". L'istruzione "if" perror () lancerà un errore "Lock_memory" se il risultato restituito è uguale a -1. Altrimenti, l'istruzione else stamperà la "memoria è bloccata in RAM" tramite la funzione printf.
Un'altra istruzione "if-else" viene utilizzata per rilasciare il blocco. La funzione Memory_unlock () viene invocata all'interno dell'istruzione "if" passando da data_lock e data_size come argomenti. La stessa procedura è seguita da questa funzione che abbiamo seguito nella funzione memory_lock (). L'unica modifica è l'uso della funzione munlock () con gli stessi argomenti per rilasciare il blocco e restituire il risultato. La seconda istruzione "if" lancerà un'eccezione "Unlock_memory" usando la funzione Perror se il risultato è equivalente a -1. Altrimenti, l'istruzione else visualizzerà che "la memoria è sbloccata" usando la funzione printf.
Abbiamo creato un file oggetto di questo file C utilizzando l'opzione Compilatori GCC “-O”.
Dopo aver eseguito il file dell'oggetto, abbiamo ricevuto i messaggi di visualizzazione poiché la memoria è stata bloccata e sbloccata tramite l'uso delle funzioni Mlock () e Munlock ().
Conclusione
Si tratta dell'uso della funzione Mlock di C nel sistema operativo Kali Linux per mostrarti la dimostrazione di come una memoria può essere bloccata e sbloccata senza alcun problema. Abbiamo aggiunto la spiegazione, la sintassi, gli errori e il valore di restituzione della funzione Mlock insieme a un esempio dettagliato. Questo tutorial sarebbe sufficiente per gli utenti per mettere le mani con questa funzione nel linguaggio di programmazione C.