Os módulos do kernel são específicos para o linux ou um mecanismo geral?

2

Eu li no livro de Tanenbaum sobre sistemas operacionais que existem anéis de proteção e o anel 0 pertence ao kernel. Em geral, pode-se dizer que "módulos do kernel manipulam o gerenciamento de memória e E / S do anel 0" ou é "módulo do kernel" específico para o Linux e não aplicável, por exemplo, para OpenBSD e MULTICS?

    
por Niklas Rosencrantz 18.04.2017 / 12:04

2 respostas

3

As idéias apresentadas por Andrew Tanenbaum geralmente não são diretamente aplicáveis ao Linux (ou qualquer kernel Unix monolítico tradicional). A resposta à sua pergunta é muito mais simples do que você está sugerindo: um módulo do kernel Linux é o código do kernel que foi compilado e vinculado em um arquivo separado, em vez de ser vinculado à imagem do kernel. Esse arquivo de objeto do kernel separado (.ko) pode ser carregado no espaço de endereço do kernel, sob demanda, no tempo de execução. Praticamente todos os drivers que podem ser compilados como módulos do kernel também podem ser vinculados estaticamente à imagem do kernel, sem qualquer diferença na funcionalidade, uma vez que o código tenha sido carregado.

O código do módulo é o código do kernel e é executado com o mesmo privilégio que todos os outros códigos do kernel. Um módulo do kernel pode, em princípio, substituir qualquer código do kernel, mas, para fazê-lo, o kernel propriamente dito deve fornecer um mecanismo para o módulo se conectar.

Nota complementar sobre terminologia: O Protection Rings é um conceito introduzido no sistema operacional Multics. "Ring 0" to "Ring 3" são termos específicos dos processadores Intel. Outras arquiteturas de processador usam outros termos, como o modo Usuário / Supervisor. Embora os processadores Intel forneçam quatro níveis diferentes de privilégio, a maioria dos sistemas operacionais usou apenas dois: Ring 3 para código de nível de usuário e Ring 0 para código de kernel, espelhando os modos User / Supervisor de outros processadores. (A exceção é o OS / 2, que usava três níveis de privilégio.)

O conceito de nível de privilégio foi expandido recentemente com o advento da tecnologia de virtualização em nível de hardware. Por exemplo, a arquitetura ARM define três níveis de privilégio: usuário, supervisor e hipervisor. Brincando, foi dito que finalmente quatro anéis são usados em máquinas baseadas em Intel: Anel 3 para código de nível de usuário, Anel 0 para código de kernel (máquina virtual), Anel -1 para código de hypervisor e Anel -2 para modo SMM. / p>     

por 18.04.2017 / 15:40
2

O conceito de kernel não se aplica a todos os sistemas operacionais. É generalizado, mas exatamente como aplicá-lo a um sistema particular pode ser uma questão de debate.

No caso de sistemas de multiprogramação onde os programas são isolados uns dos outros, existe uma definição precisa do kernel: o kernel é a parte do sistema que tem acesso a tudo. O kernel é a parte que não está isolada. O papel do kernel é pelo menos fornecer o mecanismo de isolamento, mas ele pode fazer mais. Em uma arquitetura de kernel Unix tradicional, que inclui o Linux, o kernel também contém drivers de hardware, protocolos de rede, drivers de sistema de arquivos, etc.

Na maioria dos sistemas, o isolamento entre os programas em execução depende de recursos de hardware (modos de privilégio de processador, unidade de gerenciamento de memória). O kernel é então a parte do sistema que é executada no modo de privilégio mais alto do processador, o modo no qual os privilégios de todo o sistema podem ser controlados. Nos processadores x86, este modo é chamado de “anel 0”; note que “ring 0” é terminologia x86, não um conceito geral. O conceito geral é chamado “modo kernel” ou “modo privilegiado” ou “modo supervisor”.

A afirmação “módulos do kernel tratam da E / S e gerenciamento de memória do anel 0” não faz sentido. O kernel, como um todo, lida com gerenciamento de memória (no nível de decidir qual processo possui qual memória e em qual endereço ele acessa) e I / O (no nível de cópia de dados dentro e fora de periféricos). O kernel, como um todo, é executado no modo kernel do processador, que é o anel 0 em um processador x86.

Um módulo do kernel é parte do kernel que é carregado após o boot. A única diferença entre um módulo e um código de tempo de inicialização é como ele é carregado. O código em um módulo do kernel é executado no mesmo nível de privilégios que o código do kernel carregado no momento da inicialização e pode executar as mesmas funções (qualquer código que possa ser carregado como um módulo também pode ser incluído na imagem do tempo de inicialização). Muitos sistemas Unix modernos têm módulos de kernel, incluindo Solaris, * BSD, Linux, etc.

    
por 19.04.2017 / 02:14