Funzione mlock 2 c

Funzione mlock 2 c
Le pagine fisiche collegate all'intervallo di indirizzi virtualizzati a partire dall'ADDR sono bloccate nella RAM per i caratteri LEN principalmente dalla funzione del sistema MLOCK. Le pagine che sono state limitate attraverso uno o anche più metodi Mlock sono sbloccate dalla funzione munlock (). La memoria dovrebbe essere assegnata per tutto il suo intervallo. Le pagine specificate dopo una tale chiamata Mlock non comporteranno pagine errate o affronterà problemi di traduzione a meno che non vengano rilasciate. Sui sistemi con strumenti di sviluppo TLBS, potrebbero comunque provocare guasti alla violazione della protezione o problemi di Miss TLB. Una volta che tutte le mappature limitate per le pagine vengono eliminate, le pagine reali vengono mantenute in memoria.

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:

  • Eagin: Questo errore può verificarsi quando si blocca l'intervallo specificato andrebbe oltre il server o la soglia per processo per l'archiviazione limitata, pertanto mlock () si blocca in tale caso.
  • Einval: Questo errore può verificarsi quando l'indirizzo fornito ma piuttosto la lunghezza non è coordinata da pagina. In questo caso, la soluzione non funziona come dovrebbe.
  • Enomem: Si verifica un problema di errore o traduzione di una pagina quando viene trovato questo errore. È perché potrebbero esserci alcuni indirizzi non allocati in diversi intervalli di indirizzo forniti.
  • Eperm: L'errore Eperm si trova finora su una piattaforma in cui la contabilità della pagina di bloccaggio non è supportata e la funzione MLOCK () è invocata da alcuni utenti non root.

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:

  • Einval: La soluzione non si arrotonda e né l'indirizzo né la lunghezza fornita è allineata a pagina.
  • Enomem: Ci sono indirizzi non allocati in diverse gamme di indirizzi forniti. L'intervallo di indirizzi dato non è completamente limitato.

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.