Função mlock 2 c

Função mlock 2 c
As páginas físicas ligadas ao intervalo de endereços virtualizadas que começam no addr são bloqueadas na RAM para caracteres len principalmente pela função do sistema mlock. As páginas que foram restritas por meio de um ou mais métodos MLOCK são desbloqueadas pela função munlock (). A memória deve ser atribuída durante todo o seu alcance. As páginas especificadas após uma chamada MLOCK não resultarão em páginas errôneas ou problemas de tradução para endereçar, a menos que sejam liberados. Em sistemas com TLBs de ferramentas de desenvolvimento, eles poderiam, no entanto, resultar em falhas de violação de proteção ou problemas de falta de TLB. Depois que todos os mapeamentos restritos para as páginas são excluídos, as páginas reais são mantidas em armazenamento.

Através de suas traduções de endereço virtual, as diferentes operações podem bloquear as mesmas páginas reais. Através de várias traduções virtuais das mesmas páginas ou solicitações de mlock empilhadas na faixa de endereço muito idêntica, um método solitário também pode ter várias páginas que são bloqueadas. Uma invocação para o Munmap () função que descongele o intervalo de endereços não rastreados faz o desbloqueio expressamente ou implicitamente.

Depois de apenas um garfo, as traduções bloqueadas não são passadas para o processo infantil. Os fios só podem fechar uma certa quantidade de carneiro físico, pois é uma mercadoria relativamente escassa. Tanto a restrição de ativos por processo rlimit_memlock quanto a limitação de “páginas com fio” em toda a plataforma podem ser bloqueadas por um único fio. Embora as implementações do NetBSD arredondassem para o múltiplo mais próximo do número de páginas, o código transportável deve garantir que talvez os argumentos adicionais e len sejam sincronizados com um.

Valores de retorno

Voltar 0 significa que a chamada é bem -sucedida e quase todas as páginas do escopo foram bloqueadas ou liberadas. O estado de bloqueio de cada página no domínio permanece inalterado se o valor numérico for -1, indicando uma exceção. O erro é indicado nesta situação, definindo o local global errno.

Erros

A função mlock () pode falhar devido a vários motivos. Nesta parte do artigo, discutiremos o número de exceções que obtivemos após o fracasso da função mlock () junto com suas razões para acontecer na execução. Aqui estão alguns dos erros que podemos encontrar até agora:

  • EAGIN: Esse erro pode ocorrer ao bloquear o intervalo especificado, iria além do servidor ou do limite por processo para armazenamento restrito, assim o mlock () trava nesse caso.
  • Einval: Este erro pode ocorrer quando o endereço fornecido, mas o comprimento não é coordenado por página. Nesse caso, a solução não funciona da maneira que deveria.
  • Enomem: O problema de falha ou tradução de uma página ocorre quando esse erro é encontrado. É porque pode haver alguns endereços não alocados em vários dos intervalos de endereço fornecidos.
  • EPERM: O erro EPERM é encontrado até agora em uma plataforma na qual a contabilidade da página de bloqueio não é suportada e a função mlock () é invocada por algum usuário sem raiz.

A função munlock () que é usada simultaneamente com a função mlock () pode falhar devido a vários motivos. Nesta parte do artigo, discutiremos o número de exceções que obtemos após o fracasso da função munlock (), juntamente com suas razões para acontecer na execução. Aqui estão alguns dos erros que podemos encontrar até agora:

  • Einval: A solução não arredonde e nem o endereço nem o comprimento fornecido estão alinhados.
  • Enomem: Existem endereços não alocados em vários intervalos de endereço fornecidos. O intervalo de endereços fornecido não é restrito inteiramente.

Exemplo:

Para entender o conceito da função mlock () C, damos uma olhada em um exemplo simples. Criamos um novo arquivo C chamado “MSEG.C ”dentro da pasta Kali Linux“ Works ”.

Iniciamos este código com o uso das bibliotecas C padrão necessárias para a execução suave do código C, i.e. stdio.h e unistd.h. O SYS/MMAN.h cabeçalho é usado para permitir o uso das funções de bloqueio de memória. Depois disso, a execução começa a partir da inicialização de uma variável inteira Data_size para 2048. A matriz de caracteres "data_lock" do data_size é definida e passada para a função Memory_lock () definida pelo usuário junto com a variável Data_size como um argumento na primeira instrução "se".

A função Memory_lock () definida pelo usuário é executada e recebe o tamanho de uma página na variável page_size. O Page_Offset é calculado e o endereço é ajustado ao limite da página. O tamanho é ajustado com a função Page_Offset e a função mlock () é invocada e retornada usando as variáveis ​​"tamanho" e "endereço". O método de instrução “se” perror () lançará um erro “Lock_memory” se o resultado retornado for igual a -1. Caso contrário, a declaração else imprimirá a “memória está bloqueada na RAM” através da função Printf.

Outra declaração "if-else" é usada para liberar a fechadura. A função Memory_unlock () é invocada na instrução "If", passando o Data_lock e o Data_size como seus argumentos. O mesmo procedimento é seguido por esta função que seguimos na função Memory_lock (). A única mudança é o uso da função munlock () com os mesmos argumentos para liberar o bloqueio e retornar o resultado. A segunda instrução "If" lançará uma exceção "desbloqueio_memory" usando a função Perror se o resultado for equivalente a -1. Caso contrário, a declaração else exibirá que "a memória é desbloqueada" usando a função Printf.

Criamos um arquivo de objeto deste arquivo C usando a opção GCC Compilers “-o”.

Depois de executar o arquivo de objeto, recebemos as mensagens de exibição enquanto a memória foi bloqueada e desbloqueada através do uso de funções Mlock () e Munlock ().

Conclusão

Trata -se do uso da função mlock de C no sistema operacional Kali Linux para mostrar a demonstração de como uma memória pode ser bloqueada e desbloqueada sem nenhum problema. Adicionamos a explicação, a sintaxe, os erros e o valor de retorno da função mlock junto com um exemplo detalhado. Este tutorial seria suficiente para os usuários conseguirem suas mãos com essa função na linguagem de programação C.