architecture - qual - linux resumo



Por que o Linux é chamado de kernel monolítico? (5)

tl-dr - Não, o Linux é sempre monolítico.

Módulos Linux podem significar modular em algum sentido. Como outros notaram monolítico é geralmente representando um microkernel versus kernel monolítico . Um microkernel tradicional só tem esses recursos,

  1. Agendamento
  2. Gerenciamento de memória
  3. Comunicações entre processos

Não há drivers de hardware , pilhas de protocolos , sistemas de arquivos , suspensão / retomada , gerenciamento de relógio , etc no kernel principal. Essas coisas são idênticas a qualquer tarefa do usuário (embora possam ter privilégios diferentes através do MMU / scheduler).

Previsões de Tanenbaum

  1. Microkernels são o futuro
  2. x86 vai morrer e arquiteturas RISC vai dominar o mercado
  3. (5 anos a partir de então) todo mundo estará executando um sistema operacional livre GNU

Programadores de PCs e servidores podem rir, mas dois e três são certamente verdadeiros para a maioria dos telefones celulares existentes. Tanenbaum estaria certo em todas as contas se o BlackBerry QNX fosse um sucesso.

Além disso, muitos L1-hypervisors têm um micro-kernel por baixo. Isso ocorre porque uma hipervisualização geralmente não faz muito além da troca de contexto .

Aparentemente, três prevê o sucesso do Linux. ;-)

Um argumento para microkernels é que todos os sub-sistemas monolíticos precisam sincronizar múltiplos valores de uma só vez. Para fazer isso, eles devem usar bloqueios e sofrerão da lei de Amdahl quando estendidos a arquiteturas paralelas. O contador é que os microkernels resultam em muitas mensagens IPC.

Um grande desenvolvimento é o uso de programação lock-free para evitar contenção em um kernel monolítico. Isso evita o bloqueio em um kernel monolítico e também reduz a sobrecarga do IPC. Recentemente, todas as CPUs estenderam seu ISA para incluir melhores primitivas para algoritmos livres de bloqueio . Então o Linux provavelmente continuará sendo um kernel monolítico por algum tempo.

https://src-bin.com

Eu li que o Linux é um kernel monolítico. O kernel monolítico significa compilar e vincular o código completo do kernel em um executável?

Se o Linux é capaz de suportar módulos, por que não quebrar todos os subsistemas em módulos e carregá-los quando necessário? Nesse caso, o kernel não precisa carregar todos os módulos inicialmente e pode manter um índice das funções no módulo e carregá-los quando necessário.


Answer #1

'Monolítico' neste contexto não se refere a haver um único executável grande, e como você diz, o Linux suporta o carregamento dinâmico de módulos do kernel em tempo de execução. Quando se fala de kernels, 'monolítico' significa que todo o sistema operacional é executado no modo 'privileged' ou 'supervisor', ao contrário de outros tipos de sistemas operacionais que usam um tipo de kernel, como um 'microkernel', onde apenas um mínimo O conjunto de funcionalidades é executado no modo privilegiado e a maior parte do sistema operacional é executada no espaço do usuário.

Os proponentes dos microkernels dizem que isso é melhor porque código menor significa menos bugs, e bugs rodando no modo supervisor podem causar problemas muito maiores do que no código de espaço do usuário (como uma maior chance de ter vulnerabilidades de segurança ou falhas totais no sistema na forma de 'kernel panic'). Alguns microkernels são suficientemente pequenos para que possam ser 'verificados formalmente', o que significa que você pode provar matematicamente que o kernel está 'correto' de acordo com uma especificação. L4 é um bom exemplo disso.


Answer #2

Da Wikipedia :

Um kernel monolítico é uma arquitetura de kernel em que todo o sistema operacional está trabalhando no espaço do kernel e sozinho como modo de supervisor. Diferente de outras arquiteturas, o kernel monolítico define sozinho uma interface virtual de alto nível sobre hardware de computador, com um conjunto de primitivas ou chamadas de sistema para implementar todos os serviços do sistema operacional, como gerenciamento de processos, concorrência e gerenciamento de memória e um ou mais drivers de dispositivo como módulos.

Versões recentes do Windows, por outro lado, usam um kernel híbrido .

Um kernel híbrido é uma arquitetura de kernel baseada na combinação de aspectos de microkernel e arquiteturas de kernel monolíticas usadas em sistemas operacionais de computadores. A categoria é controversa devido à similaridade ao núcleo monolítico; o termo foi descartado por alguns como marketing simples. As categorias tradicionais de kernel são kernels monolíticos e microkernels (com nanokernels e exokernels vistos como versões mais extremas de microkernels).


Answer #3

O kernel monolítico é um único grande processo sendo executado inteiramente em um único espaço de endereço. É um único arquivo binário estático. Todos os serviços do kernel existem e são executados no espaço de endereço do kernel. O kernel pode invocar funções diretamente. Os exemplos de sistemas operacionais baseados em kernel monolítico são Linux, Unix.

Acho que este post vai te ajudar mais a entender o conceito.

http://learnlinuxconcepts.blogspot.in/2014/03/what-are-monolithic-and-micro-kernels.html


Answer #4

Um kernel monolítico é um kernel onde todos os serviços (sistema de arquivos, VFS, drivers de dispositivos, etc), bem como a funcionalidade principal (agendamento, alocação de memória, etc.) são um grupo muito unido que compartilha o mesmo espaço. Isso se opõe diretamente a um microkernel .

Um microkernel prefere uma abordagem em que a funcionalidade principal seja isolada dos serviços do sistema e dos drivers de dispositivo (que são basicamente apenas serviços do sistema). Por exemplo, VFS (sistema de arquivos virtual) e sistemas de arquivos de dispositivos de bloco (minixfs, por exemplo) são processos separados que são executados fora do espaço do kernel, usando IPC para se comunicar com o kernel, outros serviços e processos do usuário. Em suma, se é um módulo no Linux, é um serviço em um microkernel, indicando um processo isolado.

Não confunda o termo kernel modular como sendo tudo menos monolítico. Alguns kernels monolíticos podem ser compilados para serem modulares (por exemplo, Linux), o que importa é que o módulo seja inserido e executado no mesmo espaço que lida com a funcionalidade principal (espaço do kernel).

A vantagem de um microkernel é que qualquer serviço com falha pode ser facilmente reiniciado, por exemplo, não há parada do kernel se o sistema de arquivos raiz lançar um aborto. Isso também pode ser visto como uma desvantagem, porque pode esconder bugs críticos (ou fazê-los parecer não tão críticos, porque o problema parece se corrigir continuamente). É visto como uma grande vantagem em cenários em que você simplesmente não pode consertar algo convenientemente depois de implantado.

A desvantagem para um microkernel é que o sistema de mensagens IPC assíncrono pode se tornar muito difícil de depurar, especialmente se as fibrils forem implementadas. Além disso, apenas rastrear um problema de gravação / gravação significa examinar o processo de espaço do usuário, o serviço de dispositivo de bloco, o serviço VFS, o serviço do sistema de arquivos e (possivelmente) o serviço PCI. Se você ficar em branco sobre isso, é hora de olhar para o serviço IPC. Isso é geralmente mais fácil em um kernel monolítico. O GNU Hurd sofre desses problemas de depuração ( reference ). Eu nem vou entrar em checkpointing quando estiver lidando com filas de mensagens complexas. Microkernels não são para os fracos de coração.

O caminho mais curto para um kernel estável e funcional é a abordagem monolítica. Qualquer abordagem pode oferecer uma interface POSIX, onde o design do kernel torna-se de pouco interesse para alguém que simplesmente quer escrever código para rodar em qualquer projeto.

Eu uso o Linux (monolítico) em produção. No entanto, a maior parte do meu aprendizado, hacking ou mexer com o desenvolvimento do kernel entra em um microkernel, especificamente o HelenOS .

Editar

Se você chegou até aqui com a minha resposta muito prolixa, provavelmente vai se divertir lendo o ' Grande debate Torvalds-Tanenbaum sobre o design do kernel '. É ainda mais divertido ler em 2013, mais de 20 anos depois de ter ocorrido. A parte mais engraçada foi a assinatura de Linus em uma das últimas mensagens:

Linus "my first, and hopefully last flamefest" Torvalds

Obviamente, isso não se realizou mais do que a previsão de Tanenbaum de que o x86 logo ficaria obsoleto.

NB:

Quando eu digo "Minix", eu não implico Minix 3. Além disso, quando menciono o HURD, estou fazendo referência (principalmente) ao microkernel Mach. Não é minha intenção depreciar o recente trabalho dos outros.





linux-kernel