Mlock 2 C -funksjon

Mlock 2 C -funksjon
De fysiske sidene som er knyttet til det virtualiserte adresseområdet som begynner på Addr, er låst i RAM for Len -tegn, for det meste av MLOCK -systemfunksjonen. Sidene som er begrenset gjennom en eller enda flere Mlock -metoder, låses opp av Munlock () -funksjonen. Minnet skal tilordnes gjennom hele området. De spesifiserte sidene etter en slik Mlock -samtale vil ikke resultere i feilaktige sider eller adressere oversettelsesproblemer med mindre de blir utgitt. På systemer med utviklingsverktøy TLBS, kunne de likevel føre til beskyttelsesviolasjonssvikt eller TLB-MISS-problemer. Når alle begrensede kartlegginger for sidene er slettet, holdes de faktiske sidene i lagring.

Gjennom sine virtuelle adresseoversettelser kan de forskjellige operasjonene blokkere de samme virkelige sidene. Gjennom forskjellige virtuelle oversettelser av de samme sidene eller stablede Mlock -forespørsler om det veldig identiske adresseområdet, kan en ensommetode også ha flere sider som er låst. En påkallelse til MunMap () -funksjonen som de sporer det ikke-sporede adresseområdet, gjør låsingen enten uttrykkelig eller underforstått.

Etter bare en gaffel blir de blokkerte oversettelsene ikke gitt videre til barneprosessen. Tråder kan bare lukke en viss mengde fysisk RAM, da det er en relativt knapp vare. Både per-prosessen RLIMIT_MEMLOCK Asset Restriction og den plattformen "Wired Pages" -begrensningen kan blokkeres med en enkelt tråd. Selv om NetBSD -implementeringene vil runde til nærmeste multippel av antall sider, må den transporterbare koden sørge for at kanskje Addr- og LEN -argumentene blir synkronisert til en.

Returverdier

Å returnere 0 betyr at samtalen er vellykket og nesten alle sidene i omfanget ble enten blokkert eller utgitt. Låsetilstanden til hver side i domenet forblir uendret hvis den numeriske verdien er -1, noe som indikerer et unntak. Feilen er indikert i denne situasjonen ved å sette den globale plasseringen errno.

Feil

Mlock () -funksjonen kan mislykkes på grunn av flere grunner. Innenfor denne delen av artikkelen vil vi diskutere antall unntak vi fikk etter feilen i mlock () -funksjonen sammen med deres grunner til å skje i utførelse. Her er noen av feilene som vi kan finne så langt:

  • Eagain: Denne feilen kan oppstå når du låser det spesifiserte området vil gå lenger enn verken server- eller perprosessgrensen for begrenset lagring, og dermed krasjer Mlock () i et slikt tilfelle.
  • Einval: Denne feilen kan oppstå når den oppgitte adressen, men snarere ikke er sidekoordinert. I dette tilfellet fungerer ikke løsningen slik den skal.
  • Enomem: En sides feil- eller oversettelsesproblem oppstår når denne feilen blir funnet. Det er fordi det kan være noen ikke tildelte adresser i flere av de medfølgende adresseområdene.
  • Eperm: Eperm-feilen finnes så langt på en plattform der låsesidesregnskap ikke støttes og Mlock () -funksjonen blir påberopt av noen ikke-root-bruker.

Munlock () -funksjonen som brukes samtidig med mlock () -funksjonen kan mislykkes på grunn av flere årsaker. Innenfor denne delen av artikkelen vil vi diskutere antall unntak som vi får etter feilen i Munlock () -funksjonen sammen med deres grunner til å skje i utførelse. Her er noen av feilene vi kan finne så langt:

  • Einval: Løsningen runder ikke, og verken adressen eller den oppgitte lengden er på linje.
  • Enomem: Det er ikke tildelt adresser i flere av de medfølgende adresseriene. Det gitte adresseområdet er ikke helt begrenset.

Eksempel:

For å forstå konseptet med mlock () c -funksjonen, tar vi en titt på et enkelt eksempel. Vi opprettet en ny C -fil som heter “MSEG.C ”i Kali Linux“ Works ”-mappen.

Vi starter denne koden med bruk av standard C -biblioteker som kreves for jevn utførelse av C -koden, i.e. stdio.H og Unistd.h. SYS/MMAN.H header brukes til å tillate bruk av minnelåsefunksjonene. Etter dette starter utførelsen fra initialiseringen av en Data_Size Integer -variabel til 2048. Karakteroppstillingen “Data_lock” for Data_Size er definert og overført til den brukerdefinerte Memory_lock () -funksjonen sammen med Data_Size-variabelen som et argument i den første “if” -klæringen.

Den brukerdefinerte Memory_lock () -funksjonen blir utført og får størrelsen på en side i Side_Size-variabelen. Page_offset er beregnet og adressen justeres til sidegrensen. Størrelsen justeres med Page_Offset og mlock () -funksjonen blir påkalt og returnert ved hjelp av "størrelsen" og "adresse" -variablene. "IF" -uttalelsen Perror () -metoden vil kaste en feil "Lock_Memory" hvis det returnerte resultatet er lik -1. Ellers vil den andre uttalelsen skrive ut “Memory er låst i RAM” via Printf -funksjonen.

En annen "if-elv" -uttalelse brukes til å frigjøre låsen. Memory_unlock () -funksjonen påberopes innenfor "if" -uttalelsen ved å sende data_lock og data_størrelse som argumenter som argumenterer. Den samme prosedyren blir fulgt av denne funksjonen da vi fulgte innenfor meemon_lock () -funksjonen. Den eneste endringen er bruken av Munlock () -funksjonen med de samme argumentene for å frigjøre låsen og returnere resultatet. Den andre "if" -uttalelsen vil kaste et unntak for "unlock_memory" ved å bruke Perror -funksjonen hvis resultatet tilsvarer -1. Ellers vil den andre uttalelsen vise at "minnet er låst opp" ved hjelp av printf -funksjonen.

Vi opprettet en objektfil av denne C-filen ved å bruke GCC Compilers “-o” -alternativet.

Etter å ha utført objektfilen, fikk vi skjermmeldingene da minnet var låst og låst opp via bruk av Mlock () og Munlock () -funksjonene.

Konklusjon

Dette handler om bruken av Mlock -funksjonen til C i Kali Linux -operativsystemet for å vise deg demonstrasjonen av hvordan et minne kan låses og låses opp uten problemer. Vi la til forklaringen, syntaks, feil og returverdi på Mlock -funksjonen sammen med ett detaljert eksempel. Denne opplæringen vil være nok til at brukerne kan få tak i denne funksjonen på C -programmeringsspråket.