Anéis de proteção
Isso permite toda uma hierarquia de segmentos e permissões entre eles. Você deve ter notado uma chamada de segmento cruzado soa exatamente como uma chamada de sistema. Se você já analisou o conjunto do Linux X86, a maneira padrão de fazer uma chamada do sistema é int 0x80, que aumenta a interrupção 0x80 . Uma interrupção interrompe o processador e vai para um portão de interrupção, que então funciona da mesma forma que um portão de chamada – ele muda o nível de privilégio e o interrompe para outra área de código .
Linux usa anéis de proteção?
Mencionamos como uma das principais tarefas do sistema operacional é implementar a segurança; isto é, para não permitir que um aplicativo ou usuário interfira em qualquer outro que esteja em execução no sistema. Isso significa que os aplicativos não devem ser capazes de substituir a memória ou arquivos uns dos outros e acessar apenas os recursos do sistema, conforme ditado pela Política do Sistema.
No entanto, quando um aplicativo está em execução, ele tem uso exclusivo do processador. Vemos como isso funciona quando examinamos os processos no próximo capítulo. Garantir que o aplicativo acesse apenas a memória que possui é implementado pelo sistema de memória virtual, que examinamos no capítulo após o próximo. O ponto essencial é que o hardware é responsável por aplicar essas regras.
A interface de chamada do sistema que examinamos é o gateway para o aplicativo que chega aos recursos do sistema. Ao forçar o aplicativo a solicitar recursos através de uma chamada de sistema para o kernel, o kernel pode aplicar regras sobre que tipo de acesso pode ser fornecido. Por exemplo, quando um aplicativo faz uma chamada de sistema Open () para abrir um arquivo no disco, ele verificará as permissões do usuário em relação às permissões de arquivo e permitirá ou negará acesso.
4 . 1 . 1 níveis de privilégio
A proteção de hardware geralmente pode ser vista como um conjunto de anéis concêntricos em torno de um conjunto principal de operações.
Níveis de privilégio em x86
Figura 4 . 1 . 1 . 1 anéis
No anel mais interno estão as instruções mais protegidas; Aqueles que somente o kernel devem ter permissão para ligar. Por exemplo, a instrução HLT para interromper o processador não deve ser permissão para ser executado por um aplicativo de usuário, pois impediria o computador inteiro de funcionar. No entanto, o kernel precisa ser capaz de chamar esta instrução quando o computador for legitimamente desligado. 1
Cada anel interno pode acessar quais. Nem todas as arquiteturas têm vários níveis de anéis, como acima, mas a maioria fornecerá pelo menos um nível de “kernel” e “usuário”.
4 . 1 . 1 . 1 386 Modelo de proteção
O modelo de proteção 386 possui quatro anéis, embora a maioria dos sistemas operacionais (como Linux e Windows) use apenas dois dos anéis para manter a compatibilidade com outras arquiteturas que não permitem tantos níveis de proteção discreta.
386 mantém privilégios, fazendo com que cada código de aplicação em execução no sistema tenha um pequeno descritor, chamado de descritor de código, que descreve, entre outras coisas, seu nível de privilégio. Quando a execução do código do aplicativo faz um salto para algum outro código fora da região descrito por seu descritor de código, o nível de privilégio do alvo é verificado. Se for mais alto que o código em execução atualmente, o salto não é permitido pelo hardware (e o aplicativo falhará).
4 . 1 . 1 . 2 Aumentar o privilégio
Os aplicativos só podem aumentar seu nível de privilégio por chamadas específicas que permitem, como a instrução para implementar uma chamada do sistema. Estes são geralmente chamados de portão de chamada Porque eles funcionam apenas como um portão físico; uma pequena entrada através de uma parede impenetrável. Quando essa instrução é chamada, vimos como o hardware interrompe completamente o aplicativo em execução e as mãos controlam para o kernel. O kernel deve atuar como guardião; garantir que nada desagradável esteja chegando pelo portão. Isso significa que ele deve verificar os argumentos de chamada do sistema cuidadosamente para garantir que não seja enganado para fazer nada que não deveria (se puder, isso é um bug de segurança). À medida que o kernel corre no anel mais interno, ele tem permissões para fazer qualquer operação que desejar; Quando terminar, retornará o controle de volta ao aplicativo, que será executado novamente com seu nível de privilégio mais baixo.
4 . 1 . 1 . 3 chamadas rápidas do sistema
Um problema com armadilhas como descrito acima é que elas são muito caras para o processador implementar. Há muito estado a ser salvo antes que o contexto possa mudar. Os processadores modernos perceberam isso e se esforçam para reduzi -lo.
Para entender o mecanismo de chamada descrito acima, requer investigação do esquema de segmentação engenhoso, mas complicado, usado pelo processador. O motivo original da segmentação era poder usar mais do que os 16 bits disponíveis em um registro para um endereço, conforme ilustrado na Figura 4 . 1 . 1 . 3 . 1, segmentação x86 endereçando.
Segmentação expandindo o espaço de endereço de um processador dividindo -o em pedaços. O processador mantém os registros de segmento especial e os endereços são especificados por um registro de segmento e combinação de deslocamento. O valor do registro do segmento é adicionado à parte do deslocamento para encontrar um endereço final.
Figura 4 . 1 . 1 . 3 . 1 Segmentação x86 endereçamento
Quando o x86 se mudou para registros de 32 bits, o esquema de segmentação permaneceu, mas em um formato diferente. Em vez de tamanhos de segmento fixos, os segmentos podem ter qualquer tamanho. Isso significa que o processador precisa acompanhar todos esses diferentes segmentos e seus tamanhos, o que faz usando descritores. Os descritores do segmento disponíveis para todos são mantidos no Tabela de descritor global ou GDT para curta. Cada processo possui vários registros que apontam para entradas no GDT; Estes são os segmentos que o processo pode acessar (também existem local tabelas de descritor, e tudo intera
Pontos chave:
- O Linux implementa a segurança para evitar interferências entre aplicativos e usuários.
- O hardware aplica regras em relação à memória e acesso de recursos.
- A interface de chamada do sistema atua como um gateway para aplicativos para acessar recursos do sistema.
- Os níveis de privilégio determinam o acesso a determinadas instruções e operações.
- O modelo de proteção 386 tem quatro anéis, mas a maioria dos sistemas operacionais usa apenas dois.
- Cada código do aplicativo possui um descritor de código que define seu nível de privilégio.
- Os aplicativos só podem aumentar seu nível de privilégio por meio de chamadas específicas, como chamadas do sistema.
- O kernel atua como um guardião para garantir a segurança das chamadas do sistema.
- As chamadas rápidas do sistema visam reduzir a sobrecarga da troca de contexto.
- O esquema de segmentação x86 expande o espaço de endereço do processador.
Questões:
- Qual é o objetivo de implementar a segurança em um sistema operacional?
- Como o hardware aplica regras de acesso à memória?
- Qual o papel que o sistema chama de interface desempenha no acesso aos recursos do sistema?
- Como os níveis de privilégio são utilizados na proteção de hardware?
- Quantos anéis o modelo de proteção 386 tem?
- O que é um descritor de código?
- Como os aplicativos podem aumentar seu nível de privilégio?
- Qual é o papel do kernel como porteiro?
- Qual é o objetivo das chamadas de sistema rápido?
- Por que a segmentação foi introduzida no processador x86?
- Como funciona o esquema de segmentação x86?
- Quais são os descritores do segmento e onde eles são armazenados?
Anéis de proteção
Isso permite toda uma hierarquia de segmentos e permissões entre eles. Você deve ter notado uma chamada de segmento cruzado soa exatamente como uma chamada de sistema. Se você já analisou o conjunto do Linux X86, a maneira padrão de fazer uma chamada do sistema é int 0x80, que aumenta a interrupção 0x80 . Uma interrupção interrompe o processador e vai para um portão de interrupção, que então funciona da mesma forma que um portão de chamada – ele muda o nível de privilégio e o interrompe para outra área de código .
Linux usa anéis de proteção?
Mencionamos como uma das principais tarefas do sistema operacional é implementar a segurança; isto é, para não permitir que um aplicativo ou usuário interfira em qualquer outro que esteja em execução no sistema. Isso significa que os aplicativos não devem ser capazes de substituir a memória ou arquivos uns dos outros e acessar apenas os recursos do sistema, conforme ditado pela Política do Sistema.
No entanto, quando um aplicativo está em execução, ele tem uso exclusivo do processador. Vemos como isso funciona quando examinamos os processos no próximo capítulo. Garantir que o aplicativo acesse apenas a memória que possui é implementado pelo sistema de memória virtual, que examinamos no capítulo após o próximo. O ponto essencial é que o hardware é responsável por aplicar essas regras.
A interface de chamada do sistema que examinamos é o gateway para o aplicativo que chega aos recursos do sistema. Ao forçar o aplicativo a solicitar recursos através de uma chamada de sistema para o kernel, o kernel pode aplicar regras sobre que tipo de acesso pode ser fornecido. Por exemplo, quando um aplicativo faz uma chamada de sistema Open () para abrir um arquivo no disco, ele verificará as permissões do usuário em relação às permissões de arquivo e permitirá ou negará acesso.
4 . 1 . 1 níveis de privilégio
A proteção de hardware geralmente pode ser vista como um conjunto de anéis concêntricos em torno de um conjunto principal de operações.
Níveis de privilégio em x86
Figura 4 . 1 . 1 . 1 anéis
No anel mais interno estão as instruções mais protegidas; Aqueles que somente o kernel devem ter permissão para ligar. Por exemplo, a instrução HLT para interromper o processador não deve ser permissão para ser executado por um aplicativo de usuário, pois impediria o computador inteiro de funcionar. No entanto, o kernel precisa ser capaz de chamar esta instrução quando o computador for legitimamente desligado. 1
Cada anel interno pode acessar quais. Nem todas as arquiteturas têm vários níveis de anéis, como acima, mas a maioria fornecerá pelo menos um nível de “kernel” e “usuário”.
4 . 1 . 1 . 1 386 Modelo de proteção
O modelo de proteção 386 tem quatro anéis, embora a maioria dos sistemas operacionais (como Linux e Windows) use apenas dois dos anéis para manter a compatibilidade com outras arquiteturas que agora permitem tantos níveis de proteção discreta.
386 mantém privilégios, fazendo com que cada código de aplicação em execução no sistema tenha um pequeno descritor, chamado de descritor de código, que descreve, entre outras coisas, seu nível de privilégio. Quando a execução do código do aplicativo faz um salto para algum outro código fora da região descrito por seu descritor de código, o nível de privilégio do alvo é verificado. Se for mais alto que o código em execução atualmente, o salto não é permitido pelo hardware (e o aplicativo falhará).
4 . 1 . 1 . 2 Aumentar o privilégio
Os aplicativos só podem aumentar seu nível de privilégio por chamadas específicas que permitem, como a instrução para implementar uma chamada do sistema. Estes são geralmente chamados de portão de chamada Porque eles funcionam apenas como um portão físico; uma pequena entrada através de uma parede impenetrável. Quando essa instrução é chamada, vimos como o hardware interrompe completamente o aplicativo em execução e as mãos controlam para o kernel. O kernel deve atuar como guardião; garantir que nada desagradável esteja chegando pelo portão. Isso significa que ele deve verificar os argumentos de chamada do sistema cuidadosamente para garantir que não seja enganado para fazer nada que não deveria (se puder, isso é um bug de segurança). À medida que o kernel corre no anel mais interno, ele tem permissões para fazer qualquer operação que desejar; Quando terminar, retornará o controle de volta ao aplicativo, que será executado novamente com seu nível de privilégio mais baixo.
4 . 1 . 1 . 3 chamadas rápidas do sistema
Um problema com armadilhas como descrito acima é que elas são muito caras para o processador implementar. Há muito estado a ser salvo antes que o contexto possa mudar. Os processadores modernos perceberam isso e se esforçam para reduzi -lo.
Para entender o mecanismo de chamada descrito acima, requer investigação do esquema de segmentação engenhoso, mas complicado, usado pelo processador. O motivo original da segmentação era poder usar mais do que os 16 bits disponíveis em um registro para um endereço, conforme ilustrado na Figura 4 . 1 . 1 . 3 . 1, segmentação x86 endereçando .
Segmentação expandindo o espaço de endereço de um processador dividindo -o em pedaços. O processador mantém os registros de segmento especial e os endereços são especificados por um registro de segmento e combinação de deslocamento. O valor do registro do segmento é adicionado à parte do deslocamento para encontrar um endereço final.
Figura 4 . 1 . 1 . 3 . 1 Segmentação x86 endereçamento
Quando o x86 se mudou para registros de 32 bits, o esquema de segmentação permaneceu, mas em um formato diferente. Em vez de tamanhos de segmento fixos, os segmentos podem ter qualquer tamanho. Isso significa que o processador precisa acompanhar todos esses diferentes segmentos e seus tamanhos, o que faz usando descritores. Os descritores do segmento disponíveis para todos são mantidos no Tabela de descritor global ou GDT para curta. Cada processo possui vários registros que apontam para entradas no GDT; Estes são os segmentos que o processo pode acessar (também existem local Tabelas do descritor, e tudo interage com os segmentos do estado da tarefa, mas isso não é importante agora). A situação geral é ilustrada na Figura 4 . 1 . 1 . 3 . 2, segmentos x86 .
segmentos x86 em ação. Observe como uma “chamada abrangente” passa através de uma chamada de chamada que redireciona para um segmento de código em execução em um nível de anel mais baixo. A única maneira de modificar o seletor de segmento de código, usado implicitamente para todos os endereços de código, é através do mecanismo de chamada. Assim, o mecanismo de chamada garante que, para escolher um novo descritor de segmento e, portanto, possivelmente altere os níveis de proteção, você deve fazer a transição por meio de um ponto de entrada conhecido.
Figura 4 . 1 . 1 . 3 . 2 segmentos x86
Como o sistema operacional atribui os registros do segmento como parte do estado do processo, o hardware do processador sabe quais segmentos de memória o processo atualmente em execução pode acessar e pode aplicar proteção para garantir que o processo não toque nada, não deveria. Se sair dos limites, você recebe um falha de segmentação, Com os quais a maioria dos programadores está familiarizada.
A imagem se torna mais interessante quando o código de execução precisa fazer chamadas em código que reside em outro segmento. Conforme discutido na Seção 4 . 1 . 1 . 1, 386 Modelo de proteção, x86 faz isso com argolas, Onde o anel 0 é a maior permissão, o anel 3 é o mais baixo e os anéis internos podem acessar anéis externos, mas não vice-versa.
Conforme discutido na Seção 4 . 1 . 1 . 2, aumentando o privilégio, quando o código do anel 3 deseja pular para o código do anel 0, ele está essencialmente modificando seu seletor de segmento de código para apontar para um segmento diferente. Para fazer isso, deve usar um especial Limite Instrução Qual hardware garante passar pelo portão de chamada. Não há outra maneira de o processo em execução escolher um novo descritor de segmento de código e, portanto, o processador começará a executar o código no deslocamento conhecido no segmento Ring 0, que é responsável por manter a integridade (e.g. não ler código arbitrário e possivelmente malicioso e executá -lo. É claro que os atacantes nefastos sempre procurarão maneiras de fazer seu código fazer o que você não pretendia!).
Isso permite toda uma hierarquia de segmentos e permissões entre eles. Você deve ter notado uma chamada de segmento cruzado soa exatamente como uma chamada de sistema. Se você já analisou o conjunto do Linux X86, a maneira padrão de fazer uma chamada do sistema é int 0x80, que aumenta a interrupção 0x80 . Uma interrupção interrompe o processador e vai para um portão de interrupção, que então funciona da mesma forma que um portão de chamada – ele muda o nível de privilégio e o interrompe para outra área de código .
O problema com esse esquema é que é lento. É preciso muito esforço para fazer toda essa verificação, e muitos registros precisam ser salvos para entrar no novo código. E no caminho de volta, tudo precisa ser restaurado novamente.
Em uma segmentação moderna do sistema x86 e o sistema de anel de quatro níveis não é usado graças à memória virtual, discutida totalmente no capítulo 6, memória virtual . A única coisa que realmente acontece com a comutação de segmentação são as chamadas do sistema, que mudam essencialmente do modo 3 (Espaço de Usuários) para o Modo 0 e pula para o código do manipulador de chamadas do sistema dentro do kernel. Assim, o processador fornece extra Chamada rápida do sistema Instruções chamadas sysenter (e sysexit para voltar) que aceleram todo o processo em uma chamada INT 0x80, removendo a natureza geral de uma chamada distante-que é a possibilidade de fazer a transição para qualquer segmento em qualquer nível de anel-e restringir a chamada para fazer a transição apenas para o código 0 em um segmento específico e desligado, como armazenado em registros.
Como a natureza em geral foi substituída por tantas informações conhecidas, todo o processo pode ser acelerado e, portanto, temos um acima mencionado Chamada rápida do sistema. A outra coisa a observar é que o estado não é preservado quando o kernel recebe controle. O kernel deve ter cuidado para não destruir o estado, mas também significa que é livre para salvar apenas o mínimo de estado necessário para fazer o trabalho, por isso pode ser muito mais eficiente. Esta é uma filosofia muito RISC e ilustra como a linha fica entre os processadores RISC e CISC.
Para obter mais informações sobre como isso é implementado no kernel Linux, consulte a Seção 8 . 1 . 1, biblioteca do kernel .
4 . 2 outras maneiras de se comunicar com o kernel
4 . 2 . 1 ioctl
4 . 3 sistemas de arquivos
Sobre PROC, SYSFs, Debugfs, etc
Anéis de proteção
Anel 0 é o núcleo modo. Anel 3 é o do utilizador modo. Os outros anéis geralmente não são usados. VirtualBox carrega o kernel da máquina virtual em Anel 1.
Modo de kernel vs execução do modo de usuário
No modo kernel, o código de execução tem acesso completo e irrestrito ao hardware subjacente. Ele pode executar qualquer instrução da CPU e fazer referência a qualquer endereço de memória. No modo de usuário, o código de execução não tem capacidade de acessar diretamente o hardware ou a memória de referência. O código em execução no modo de usuário deve delegar as APIs do sistema para acessar hardware ou memória.
Esses dois modos não são meros rótulos; Eles são aplicados pelo hardware da CPU. Se o código executado no modo de usuário tentar fazer algo fora de sua alcance- como, digamos, acessando uma instrução privilegiada da CPU ou modificando a memória a que não tem acesso- uma exceção trappável é lançada. Em vez de todo o seu sistema travar, apenas esse aplicativo em particular trava. Esse é o valor do modo de usuário.
resultados correspondentes “”
Sem resultados correspondentes “”
Introdução à Core Linux Architecture: Rings de proteção
Este é o nosso próximo artigo sobre a arquitetura Core Linux, no artigo anterior que aprendemos sobre diferentes modos de processador, como privilégios que o código pode executar. Então, vimos o modo de kernel e o modo de usuário e essencialmente os anéis de proteção que vamos procurar hoje no diagrama a seguir. Podemos ver os diferentes anéis de proteção.
Então deixe’S Vá em frente e comece
Anéis de proteção em x86:
Deixar’s primeiro discuta o que é x86? E por que precisamos disso?
x86 é uma arquitetura de processador mais popular para computadores de mesa e algo quando você olha para os smartphones, pode ver esses processadores I.e. Arquitetura de processador mais popular para dispositivos móveis, pois é mais eficiente com sua utilização da bateria. Mas como computadores de mesa não’realmente preciso que eles tenham um pouco de diferença. Uma coisa que você pode ver o X em x86 essencialmente que’está apenas dizendo algum número com 86 no final eu.e. x86 Então, sempre que você puder ver uma família de processadores, você verá muitos diferentes, no entanto, eles sempre terminarão em 86.
Então, estamos indo mais profundamente em anéis de proteção. Podemos olhar para os anéis de proteção como uma representação gráfica dos níveis de privilégio da CPU que discutimos anteriormente. Nos artigos seguintes, iremos profundamente na arquitetura da CPU e como os anéis de proteção funcionam? é como ir para o nível baixo com ele.
Já sabíamos que a CPU’s “Modo de kernel” que é igual a “Anel 0” No diagrama e CPU’s “Modo de usuário” tem que lidar com “Anel 3”. Aqui você deve estar pensando nos anel 1 e 2. Essencialmente em um sistema operacional moderno’S, incluindo o Linux, utiliza apenas o anel 0 e o anel 3 em arquiteturas x86, devido à maneira como algo chamado “Tabela de página” é implementado.
É com certeza rápido e não há ninguém que’S é. É por isso que usamos anel 0 e anel 3.
A tabela de página é um arquivo de mapeamento de memória usado por sistemas de memória virtual em um sistema de computador. Embora as arquiteturas modernas possam ter x86, o que pode ter todos esses anéis. Em certos ambiente de virtualização, 1 é realmente usado. Que’é realmente uma caixa virtual ou máquina virtual. Coloca a VM’S Código do kernel Na verdade no anel 1 e o código do kernel real da máquina sublinhada está no anel 0.
Deixar’S Vá em frente e veja o que já sabíamos que é – se todos os processos começam no anel 3, como já falamos, como eles executam o anel 0 privilégios? Porque o kernel que lida com o sistema operacional sublinhado interface de usuário ou aplicativo ou processo, às vezes, precisamos olhar para os modos do sistema de arquivos ou coisas de entrada e saída. Estes são os anéis que são essencialmente restritos a tocar 0 privilégios ou tipo de privilégios do kernel.
Então, como isso ocorre? Como conhecemos operações de entrada e saída, manipulação do sistema de arquivos etc. Que’é algo chamado interface de chamada do sistema e que’é realmente um meio intermediário entre o espaço do usuário, que são os itens que estão executando no anel 3 e o espaço do kernel executando no anel 0.
Portanto, os processos de espaços do usuário podem ser essencialmente utilizados. Esta interface, isso’é o tipo de API do kernel para que o kernel invocar algumas de suas funções em si. Então deixe’s Verifique o que é uma chamada de sistema.
Chamada do sistema: é um pedido ao kernel por um processo do usuário para executar uma ação privilegiada i.e. uma ação do kernel.
Interrupções: é um sinal emitido à CPU que diz ” Há um evento que precisa de sua atenção imediata”.
O que uma interrupção faz? Como é útil? Eles podem iniciar chamadas do sistema como interrupções baseadas em software. Portanto, codificar em arquiteturas mais modernas da CPU podem usar outro processo de iniciação em vez da interrupção. Mas o principal processo por trás de tudo é o mesmo.
Isto’S uma pequena nuance, mas às vezes essas interrupções são mais intensivas, elas precisam ter certeza. Portanto, o tipo de arquitetura de sistemas mais modernos em vez daqueles interrupções pode ter outro. Portanto, a ideia sublinhada é a mesma.
Deixar’S Vá para um exemplo de chamada de sistema:
- O processo do usuário precisa de uma ação do kernel para iniciar uma interrupção.
- A interrupção ou instrução coloca a CPU no anel 0 e passa o controle para o kernel.
- O kernel determina se o processo do usuário deve receber a chamada do sistema com base em privilégios.
- Se concedido, o kernel executará a chamada do sistema.
- Uma vez terminado, o kernel inicia uma mudança no toque 3.
- O kernel oferece controle de volta ao processo do usuário.
Visita- HostDens
Vishwajit couve
Vishwajit Kale entrou no cenário de marketing digital em 2015 e é o estrategista de marketing digital da HostDens, uma empresa que pretende fornecer soluções confiáveis de hospedagem na web. Vishwajit tem experiência em marketing digital e de conteúdo, juntamente com o SEO. Ele gosta de escrever blogs de tecnologia, viajando e lendo.
Vishwajit couve
Vishwajit Kale entrou no cenário de marketing digital em 2015 e é o estrategista de marketing digital da HostDens, uma empresa que pretende fornecer soluções confiáveis de hospedagem na web. Vishwajit tem experiência em marketing digital e de conteúdo, juntamente com o SEO. Ele gosta de escrever blogs de tecnologia, viajando e lendo.
Camadas de um sistema operacional
Os sistemas operacionais podem ser divididos em várias camadas discretas, cada uma com seus próprios privilégios. Este sistema é conhecido como anel de proteção. O sistema operacional gerencia um computador’s Recursos, como processar o tempo na CPU e acesso à memória. Os computadores geralmente estão executando vários processos de software de uma só vez, e eles exigirão diferentes níveis de acesso a recursos e hardware.
Os sistemas operacionais podem ser divididos em várias camadas discretas, cada uma com seus próprios privilégios. Este sistema é conhecido como um anel de proteção.
O que é um anel de proteção?
O sistema operacional gerencia um computador’s Recursos, como processar o tempo na CPU e acesso à memória. Os computadores geralmente estão executando vários processos de software de uma só vez, e eles exigirão diferentes níveis de acesso a recursos e hardware.
Os processos são executados em camadas “argolas”, onde cada anel tem diferentes direitos de acesso a recursos. O anel central tem os mais altos privilégios, e cada camada subsequente diminuiu o acesso. Uma implementação comum de um anel de proteção para processadores x86 (um tipo comum de CPU) possui quatro anéis, numerados de 0 a 3, conforme descrito abaixo.
Por que camadas?
Quero manter
aprendizado?
Este conteúdo é retirado de
Curso online da Fundação Raspberry Pi,
Entendendo os sistemas de computador
Veja o curso
O modelo em camadas oferece dois benefícios principais. Em primeiro lugar, protege contra falhas do sistema. Erros em anéis mais altos (com menos acesso) geralmente podem ser recuperados de. Isso ocorre porque apenas o anel 0 tem acesso direto à memória e à CPU; portanto, se um processo correndo no anel externo falhar, ele poderá ser reiniciado sem perder dados ou causar um erro na CPU. Em segundo lugar, oferece maior segurança. Para executar instruções que exigem mais acesso aos recursos, o processo deve solicitar as permissões do sistema operacional. O sistema operacional pode então decidir se deve conceder a solicitação ou negar. Este processo de seleção ajuda a proteger seu sistema de comportamento indesejado ou malicioso.
As partes do anel de proteção
Anel 0 (mais privilegiado) e 3 (menos privilegiado)
Anel 0 é acessível ao núcleo, que é uma parte central da maioria dos sistemas operacionais e pode acessar tudo. Diz -se que o código em execução está sendo executado em modo de kernel. Os processos em execução no modo de kernel podem afetar todo o sistema; Se alguma coisa falhar aqui, provavelmente resultará em um desligamento do sistema. Este anel tem acesso direto à CPU e à memória do sistema; portanto, quaisquer instruções que requerem o uso de ambos serão executadas aqui.
Anel 3, o anel menos priviligado, é acessível aos processos de usuário que estão sendo executados em modo de usuário. É aqui que a maioria dos aplicativos em execução no seu computador residirá. Este anel não tem acesso direto à CPU ou memória e, portanto, precisa passar por quaisquer instruções envolvendo -as para tocar 0.
Anéis 1 e 2
Anéis 1 e 2 têm privilégios especiais que tocam 3 (modo de usuário). O anel 1 é usado para interagir e controlar o hardware conectado ao seu computador. Tocando uma música através de alto -falantes ou fones de ouvido ou exibindo vídeo em seu monitor, são exemplos de instruções que precisariam ser executadas neste anel. O anel 2 é usado para instruções que precisam interagir com os arquivos de armazenamento, carregamento ou salvamento do sistema. Esses tipos de permissões são chamados entrada e saída, Como eles envolvem a movimentação de dados para dentro ou para fora da memória de trabalho (RAM). Carregar um documento do Word do armazenamento, por exemplo, estaria no anel 2. Visualizar e editar o documento cairia no anel 3, a camada de aplicação.
Discussão
- Pense em um processo que pode ser executado em seu computador, como um programa de calculadora ou jogando um jogo. Que tipo de instruções estariam envolvidas e que anéis eles usariam?
- O que você acha que aconteceria se todo o código fosse executado no anel 0?