it-swarm-pt.tech

Como um sistema unix ou linux funciona?

Gostaria de saber como o sistema operacional funciona em poucas palavras:

  • Os componentes básicos sobre os quais se baseia
  • Como esses componentes funcionam juntos
  • O que torna o UNIX UNIX
  • O que o torna tão diferente de outros sistemas operacionais como o Windows
37
Sander Versluys

Um sistema UNIX consiste em várias partes ou camadas, como eu gostaria de chamá-las.

Para iniciar um sistema, um programa chamado carregador de inicialização fica no primeiro setor de uma partição do disco rígido. Ele é iniciado pelo sistema e, por sua vez, localiza o kernel do sistema operacional e carrega-o.

Camadas

  1. O Kernel. Este é o programa central iniciado pelo gerenciador de inicialização. Ele faz a interação básica de hardware do sistema (disco, memória, vídeo, som) e oferece um ambiente virtual no qual ele pode iniciar programas. O kernel também envia todos os drivers que lidam com todas as pequenas diferenças entre os dispositivos de hardware. Para o mundo exterior (as camadas mais altas), cada classe de dispositivos parece se comportar exatamente da mesma maneira consistente - a qual, por sua vez, os programas podem desenvolver.

  2. Subsistemas em segundo plano. Existem apenas programas regulares, que ficam fora do seu caminho. Eles lidam com coisas como login remoto, fornecem um barramento central de mensagens e executam ações com base em eventos de hardware/rede. Por exemplo, descoberta bluetooth, gerenciamento wifi, etc. Quaisquer serviços de rede (servidor de arquivos, servidor de impressão, servidor web) também vivem nesse nível. Nos sistemas UNIX, esses são apenas programas normais.

  3. As ferramentas de linha de comando. Todos esses são pequenos programas que podem ser iniciados para edição de texto, download de arquivos ou administração do sistema. Neste ponto, um sistema UNIX é totalmente utilizável para administradores de sistema. No Windows, essa camada realmente não existe mais.

  4. A interface gráfica do usuário. Estes também são apenas programas, a única diferença é que eles desenham janelas na tela em vez de escrever texto. Isso facilita o uso do sistema para usuários regulares.

Qualquer serviço ou evento passará de baixo para cima.

Bibliotecas - a plataforma comum

Os programas fazem muitas coisas comuns, como exibir uma janela, desenhar coisas na tela ou baixar um arquivo. Essas coisas são as mesmas para vários programas, portanto, esse código é colocado em arquivos "biblioteca" separados (arquivos .so - significando objeto compartilhado). A biblioteca pode ser compartilhada entre todos os programas.

Para cada coisa imaginável, há uma biblioteca. Existe um para ler/gravar arquivos PNG. Há um para arquivos JPEG, para leitura de XML, criptografia, reprodução de vídeo e assim por diante.

No Linux, as bibliotecas comuns para desenvolvedores de aplicativos são Qt e Gtk. Essas bibliotecas usam bibliotecas de nível inferior internamente para suas necessidades específicas, enquanto expõem sua funcionalidade de uma maneira agradável e consistente e concisa para que os desenvolvedores de aplicativos criem aplicativos ainda mais rapidamente.

As bibliotecas fornecem a plataforma de aplicativos, na qual os programadores podem criar aplicativos de usuário final para um sistema operacional. Quanto mais bibliotecas de alta qualidade um sistema fornece, menos código um programador precisa escrever para criar um programa bonito.

Algumas bibliotecas podem ser usadas em diferentes sistemas operacionais (por exemplo, Qt é), outras são realmente especificamente vinculadas a um sistema operacional. Isso restringirá seu programa para poder executar apenas nessa plataforma.

Comunicação entre processos

Um terceiro componente de um sistema operacional é a maneira como os programas podem se comunicar. Estes são os mecanismos de comunicação entre processos (IPC). Estes existem em vários sabores, p. um pedaço de memória compartilhada ou um pequeno canal é configurado entre dois programas para trocar dados. Há também um barramento de mensagens central no qual cada programa pode postar uma mensagem e receber uma resposta. Isso é usado para comunicação global, onde não se sabe qual programa pode responder.

Das bibliotecas aos sistemas operacionais

Com bibliotecas, IPC e o kernel instalado, os programadores podem criar todos os tipos de aplicativos para serviços do sistema, administração de usuários, configuração, administração, trabalho de escritório, entretenimento, etc.) Isso forma o conjunto completo que usuários iniciantes reconhecem como o "sistema operacional".

Nos sistemas UNIX/Linux, todos os serviços são apenas programas. Todas as ferramentas de administração do sistema são apenas programas. Todos eles fazem o seu trabalho e podem ser encadeados. Resumi muitos dos principais programas em http://codingdomain.com/linux/sysadmin/


Peças distinguíveis com o Windows

O UNIX é principalmente um sistema de programas, arquivos e permissões restritas. Muitas complexidades são evitadas, tornando-o um sistema poderoso, embora pareça fácil.

Em detalhes, estes são os princípios que podem ser encontrados nos sistemas UNIX/Linux:

  • Existem maneiras uniformes de acessar informações. ("Tudo é apenas um arquivo"). Você pode abrir um arquivo, soquete de rede, IPC, parâmetros do kernel e bloquear um dispositivo como um arquivo. Daí a aparência dos sistemas de arquivos virtuais em/dev,/sys e/proc. A única API você precisa sempre de open, read e close.

  • O sistema subjacente é transparente. Todo programa opera sob as mesmas regras. Ao contrário do Windows, não há diferença artificial entre um "programa de console", "programa gui" ou "serviço em segundo plano". São todos apenas programas, que fazem coisas diferentes. Todos eles também podem ser observados, analisados ​​e depurados da mesma maneira.

  • As configurações são legíveis, editáveis ​​e podem ser anotadas com comentários. Eles geralmente têm um formato no estilo INI, mas podem usar um formato personalizado para as necessidades desse aplicativo. Por serem apenas arquivos, eles podem ser copiados para outros sistemas, arquivados ou armazenados em backup com ferramentas padrão.

  • Não existem aplicativos grandes "faça tudo de uma vez". O mantra é "faça uma coisa, faça bem". As ferramentas de linha de comando podem ser encadeadas e, juntas, poderosas. Serviços separados (por exemplo, SMTP, IMAP e POP e login) são subprogramas separados, evitando problemas complexos de código e segurança entrelaçados. Ambientes de desktop complexos delegam trabalho duro a programas individuais.

  • fork(). Novos programas são iniciados por um programa existente que é clonado. O clone configura tudo (por exemplo, identificadores de arquivo) e, opcionalmente, se substitui pelo novo código do programa. Isso torna muito fácil aplicar as mesmas configurações e restrições de segurança a novos programas, compartilhar memória ou configurar um mecanismo IPC. O custo de iniciar um processo também é muito baixo.

  • O sistema de arquivos é uma árvore, na qual outras partições de disco e compartilhamentos de rede podem ser montados. Novamente, existe uma maneira universal de acessar dados. Locais comuns do sistema (por exemplo, /usr Podem ser facilmente montados como compartilhamento de rede.

  • O sistema é construído para privilégios baixos do usuário. Após o login, todos os usuários (exceto root) ficam confinados em seus próprios recursos, executando apenas aplicativos e arquivos. Os serviços de rede reduzem seus privilégios o mais rápido possível. Existe uma maneira clara e clara de obter mais privilégios ou pedir a alguém para executar um trabalho privilegiado em seu nome. Todas as outras chamadas são limitadas pelas restrições e limitações do programa.

  • Todo programa armazena configurações em um arquivo/pasta oculto do diretório inicial do usuário. Nenhum programa tenta gravar um arquivo de configuração global.

  • Um favor em relação aos mecanismos de comunicação descritos abertamente sobre mecanismos secretos ou mecanismos 1-para-1 específicos. Outros fornecedores e desenvolvedores de software são incentivados a seguir a mesma especificação, para que as coisas possam ser facilmente conectadas, trocadas e, no entanto, permanecerem fracamente acopladas.

74
vdboor

O UNIX é um sistema operacional forte, desenvolvido com base em um design de som que se provou bem-sucedido por mais de 40 anos (é quase a eternidade na ciência da computação). A tecnologia central é baseada na linguagem C e em uma infinidade de pequenos programas: os comandos do UNIX. A filosofia básica foi resumida por McIlroy:

Escreva programas que fazem uma coisa e fazem bem. Escreva programas para trabalhar juntos. Escreva programas para lidar com fluxos de texto, porque essa é uma interface universal.

Mais informações sobre a filosofia UNIX podem ser encontradas em E.S. Raymond "The Art of UNIX Programming".

11
Didier Trosset

Existem algumas respostas excelentes aqui. No entanto, uma coisa que acho que ficou de fora é como o * nix difere de outros sistemas operacionais, particularmente o Microsoft Windows.

O conceito fundamental já abordado acima "faça uma coisa, faça bem" é tão central nos sistemas operacionais * nix que às vezes pode ser esquecido. No entanto, é essa filosofia de design que torna o Linux tão flexível e poderoso.

Por exemplo, a interface gráfica do usuário (GUI) para MS Windows está entrelaçada no sistema operacional. É praticamente impossível instalar um sistema operacional MS sem a GUI. No Linux, você pode facilmente acessar um servidor ou sistema incorporado que não possui nenhum componente gráfico. Pode ser totalmente orientado por linha de comando e ainda ser um servidor completo.

O design modular do Linux também permite que um administrador de sistema reduza um serviço, atualize-o e recupere-o sem reiniciar o sistema operacional. De fato, a única vez em que você deve reiniciar um sistema operacional Linux é quando o próprio kernel está sendo modificado ou atualizado.

Por exemplo, você pode instalar um novo gerenciador de janelas (gnome, kde, o que for) no Linux e um usuário atualmente conectado ao sistema pode nunca estar ciente.

No Windows, geralmente as alterações mais simples do sistema exigem uma reinicialização, embora às vezes isso seja mais um problema de segurança do que um requisito técnico real. Eu diria que essa é uma das falhas básicas dos sistemas operacionais da MS. No Linux, você pode atualizar muitos dos módulos de driver e ter pouco ou nenhum impacto sobre os usuários. No Windows, pode ser necessário reiniciar a caixa inteira se você simplesmente instalar um novo aplicativo.

Esse design modular também oferece ao Linux flexibilidade extraordinária. Cada sistema Linux pode ser personalizado para a tarefa específica que você precisa realizar, com o mínimo possível de sobrecarga de recursos. No Windows, você não pode desativar a interface da GUI para executar um servidor HTTP simples. Há uma pegada de memória que o Windows assume, o que cria uma barreira abaixo da qual o seu hardware não pode passar. Esse é o principal motivo pelo qual o Linux se tornou o sistema operacional preferido para muitos aplicativos móveis e incorporados.

Eu poderia continuar, mas espero que esses exemplos ajudem a explicar por que o Linux se tornou tão popular e como ele realmente difere daquele outro sistema operacional.

10
OldTimer

"Projeto do sistema operacional UNIX" seria um bom livro para ler.

3
Hemant

No espírito das recomendações dos dois livros anteriores, eu também recomendaria

A interface de programação LINUX por M. Kerrisk

que, embora direcionado ao tópico de programação de sistemas UNIX/Linux, revela toneladas de informações detalhadas sobre como o Linux e os sistemas UNIX geralmente funcionam da perspectiva do programador/usuário. Ele mergulha em grandes detalhes na maioria das marcações mencionadas na resposta do vdboor e revela detalhes suficientes de uma maneira compreensível e legível para ter uma idéia/imagem dos conceitos fundamentais do UNIX e de seus fundamentos.

2
darbehdar

Eu recomendaria ler Programação avançada em um ambiente Unix 2e para aprender muito sobre a API e o POSIX do Single Unix Standard (SUS), que fornecerão uma idéia sobre o que faz o Unix Unix e como os componentes funcionam. e trabalhem juntos.

No entanto, é um livro muito pesado em C e mais um manual de referência. Se você tiver um problema com insônia, leve-o para a cama com você. Além disso, se você é um programador Unix C, é um item obrigatório.

2
xenoterracide