O que há em um sistema operacional que não seja o kernel

43

Pelo que entendi, o kernel faz toda a interação com o hardware e gerencia a memória, os dispositivos de E / S, etc. Portanto, o kernel está fazendo tudo, mas é apenas uma parte do sistema operacional. Então, o que mais existe em um sistema operacional? Apenas os aplicativos que acompanham? Por exemplo, o que o Ubuntu tem além de um kernel? A área de trabalho do Gnome e alguns outros aplicativos?

AnkurVj
fonte

Respostas:

54

A concha, é claro.

A metáfora original que nos deu a palavra "kernel" para isso em primeiro lugar é muitas vezes esquecida. A metáfora é que um sistema operacional é uma semente ou uma noz. O "kernel" da semente é o núcleo do sistema operacional, fornecendo serviços do sistema operacional aos programas aplicativos, cercados pelo "shell" da semente que é o que os usuários veem do lado de fora.

Algumas pessoas querem amarrar o "kernel" (e, de fato, o "shell") para serem mais específicos do que isso. Mas, na verdade, há muita variação entre os sistemas operacionais. Não menos importante, essas variações são o que constitui um "shell" (que pode variar de Solaris shatravés do Interpreter de Comando do Console da Netware ao Workplace Shell do OS / 2 e Explorer do Windows NT), mas também há muita variação de um sistema operacional para outro no o que é e não é parte de um "kernel" (que pode ou não incluir E / S de disco, por exemplo). É melhor lembrar que esses termos são metáforas .

Existem outras terminologias. Na terminologia de mainframe da IBM, o "kernel" na metáfora de semente / noz é chamado de programa de controle . Outros nomes incluem o supervisor , o monitor , o núcleo e o executivo . O núcleo é outra metáfora biológica bastante óbvia. É interessante que também haja outro nome. Harvey M. Deitel, em seus sistemas operacionais , chama o programa de controle de núcleo e diz

O núcleo normalmente representa uma pequena parte do código do que geralmente se pensa ser o sistema operacional inteiro [...]

A palavra "núcleo" vem do núcleo latino e significa o núcleo de uma noz (cf. o latim nux , que significa "noz"). Assim, mesmo chamar o programa de controle de "núcleo" está de fato fazendo essa mesma analogia do sistema operacional como uma porca. É uma analogia usada para mais do que apenas sistemas operacionais. Se você está familiarizado com a química, por exemplo, saberá que um núcleo atômico é cercado por elétrons nas conchas .

O que a pessoa pseudônima new123456escreve abaixo exemplifica os erros resultantes do esquecimento das origens dessas metáforas, na medida em que alguém confunde a parte pelo todo e confunde o kernel com todo o sistema operacional. Ser um programa "userland" não torna o shell menos do lado de fora do sistema operacional, nem o que envolve o kernel. Além disso, longe de ser uma idéia apenas para DOS que não se aplica ao Unix além da versão 7, essa idéia é generalizada e atual no mundo Unix.

(É irônico que new123456confunde com uma DOSism. A metáfora kernel / shell era bastante estranho para DOS em seus primeiros anos, o que favoreceu processador de comando e semelhantes, de CP / M. Como CP / M, antes disso, o MS-DOS foi dividido no sistema operacional de disco básico (BDOS), no sistema básico de entrada e saída (BIOS - não no firmware do sistema, nota), no processador de comandos e nos utilitários de manutenção - o código foi realmente dividido em arquivos dessa maneira. exemplo, de fato, de como a metáfora do kernel / shell realmente não cobre ou combina totalmente com as divisões reais em muitos sistemas operacionais.)

new123456está esquecendo o que a Deitel escreveu sobre o núcleo fazer parte do sistema operacional geral. Um sistema operacional é o kernel e o shell. Afinal, essa é a metáfora. Deitel também não está sozinho. Existem resmas de livros do Unix que explicam a metáfora do Unix-como-um-noz, a partir da década de 1980. Eu recomendo o Teach Yourself FreeBSD de Urban e Tiemann em 24 horas (SAMS, ISBN 9780672324246), pela simples razão de que na página 54 ele tem um diagrama que ilustra a metáfora do sistema operacional como uma semente e - surpreendentemente - é um dos poucos livros para fazê-lo.

O nome "núcleo" é provavelmente o nome mais antigo; certamente anterior ao Unix, que favorece a terminologia do kernel / shell que hoje - provavelmente em grande parte graças ao Unix - é a mais prevalente. Aqui está o que está no livro de Alan C. Shaw, de 1974, O design lógico dos sistemas operacionais (Prentice-Hall, ISBN 9780135401125), por exemplo:

A parte do sistema que reside permanentemente no armazenamento principal é chamada historicamente de núcleo . O núcleo geralmente consiste em um conjunto mínimo de primitivas e processos para o gerenciamento de processos, recursos e entrada / saída.
Shaw também tem um diagrama. ☺

JdeBP
fonte
7
Penso que esta é uma resposta brilhante, simplesmente porque me trouxe à mente a relação entre as metáforas "shell" e "kernel". Eu conhecia os dois, nunca os conectei. Eu sabia a resposta para a pergunta, mas ainda consegui aprender alguma coisa com essa resposta. Daí o voto positivo. Obrigado!
Andrew J. Brehm
Eu hesitaria em dizer isso, porque o shell UNIX foi extraído do próprio kernel desde a versão 7 e tem desde então um programa de userland em todos os sentidos da palavra. O que você diz é, no entanto, verdadeiro para um DOS (que é uma opção de design particularmente horrível).
precisa saber é o seguinte
Bem jogado, senhor. No entanto, deixe um @lugar ao mencionar meu nome de usuário para que seja publicado na minha fila de respostas.
precisa saber é o seguinte
Promovido por ser uma resposta tão abrangente com muita história interessante (eu não estava ciente do núcleo como um termo computacional - ou de sua etimologia latina). No entanto, acho que seria muito melhor uma resposta autônoma se não se referisse explicitamente à resposta de outro usuário (agora excluída).
Anthony G - justiça para Monica
45

Outras partes do sistema operacional incluem os drivers que interagem com o kernel; existem várias camadas de programas auxiliares que lidam com a interface do usuário, a rede e outras partes principais do sistema operacional que ficam entre o kernel e o aplicativo real.

Para dar um exemplo, mostrei a estrutura do OS X , como você pode ver na parte superior do Kernel (azul claro) existem várias camadas de funcionalidade "principal", ferramentas do sistema, serviços e APIs (Application Programming Interface) antes de você até chegar à GUI com a qual você normalmente trabalha nas próprias aplicações.

insira a descrição da imagem aqui

A maioria dos sistemas operacionais possui uma estrutura semelhante, mas há amplas possibilidades de diferenças em relação ao quanto de fato faz parte do kernel. Veja o artigo da Wikipedia sobre Microkernels para uma comparação.

EDIT - Para responder seu comentário (meu comentário ficou um pouco longo)

Você poderia inicializar apenas um kernel do Linux, mas não conseguiria realmente obter muito, são todos esses aplicativos auxiliares que fornecem toda a interface que você vê e usa.

Depois que o kernel é inicializado (e inicializado o hardware), ele tenta passar para outras partes do sistema operacional GNU / Linux que fornecem a funcionalidade para iniciar serviços (como o UDEV, que preenche /devinterfaces de dispositivos brutos para programas usarem coisas como discos rígidos, portas seriais e assim por diante) e programas para configurar a rede ( dhcpcd ) e APIs como o X.org para aplicativos poderem mostrar janelas e ícones através de um Gerenciador de Janelas como o GNOME ou KDE .

Mas sim, você pode simplesmente inicializar o próprio kernel, ele fica lá com um "Eu inicializei, e agora?" pronto.

Mokubai
fonte
então posso inicializar apenas um kernel e nenhuma das coisas adicionais que o sistema operacional normalmente possui?
AnkurVj
Em teoria, eu acho, mas não faria nada sem outros programas em cima disso. Existem pequenos sistemas operacionais que as pessoas criaram por diversão que nada mais são que um kernel, um shell e talvez um compilador ou montador (acho que o Linux começou dessa maneira, na verdade).
user55325
@AnkurVj Adicionei à minha resposta.
Mokubai
3
Eu não acho que você pode inicializar apenas o kernel do Linux. O kernel chega a um ponto em que chama init, quando o sistema muda do modo kernel para o modo usuário. Se o init não estiver disponível (ou um init falso, como o bash), o kernel entrará em pânico e trava. Portanto, deve haver algum processo init em execução para evitar o pânico; nesse momento, não é apenas o kernel em execução.
Joe Internet
1
Você pode inicializar um kernel simples, mas sem o restante do sistema operacional, o usuário não terá interação com ele.
Keltari