Quais são as diferenças fundamentais na arquitetura entre o Unix e o Linux? [duplicado]

3

Eu assisti uma pequena introdução ao Unix dos anos 70 ( link animação 3D começa às 1:56), no final, a arquitetura geral tripartida do Unix foi exibida como uma animação 3D. Como já vi diagramas da arquitetura Linux ovarall, fiquei confuso.

Ambos os diagramas, Unix e Linux, compartilham o Kernel, mas o Unix é empacotado pelo Shell e pelo Shell pelos Utilitários. Em vez disso, o Linux só é empacotado pelo Espaço do Usuário, e o Shell não envolve nada, mas é apenas um dos muitos processos dentro do Espaço do Usuário.

Como o Unix e o Linux diferem em um nível muito básico, o que eles têm em comum? Por que o Unix é tripartido e o Linux tem duas camadas? Um Shell é um conceito totalmente diferente dentro do Unix do que no Linux?

    
por Abdul Al Hazred 24.02.2015 / 00:31

2 respostas

2

Como a distinção permanece um pouco vaga para mim, isso pode não ser uma resposta muito clara. Vou apenas tentar expor meu ponto de vista, mais do que fatos técnicos reais.

Em primeiro lugar, é provavelmente relevante notar que o Linux é um sistema semelhante ao UNIX. Isso significa que, embora a maioria dos conceitos e implementações tenham sido inspiradas, algumas vezes tomadas, do UNIX, originalmente não havia base de código comum entre os dois sistemas. Na verdade, o Linux foi inspirado principalmente no MINIX, outro sistema semelhante ao UNIX, o licenciamento que Linus Torvalds achou muito restritivo.

Why is Unix tripartite and Linux two-layered ? Is a Shell a complete different concept within Unix than in Linux ?

Para mim, ambos são de duas camadas. O shell não tem nenhum tipo de relacionamento privilegiado com o kernel, nem deveria. A primeira camada privilegiada é o kernel, onde tudo é possível. A segunda camada, sem privilégios, é a userland, na qual vários programas são executados, incluindo o shell, e utilitários padrão como ls . Todos estes programas podem comunicar com o kernel através do UNIX ou Linux conjunto de chamadas do sistema (essas listas provavelmente não são completas).

Na minha opinião, essa é a única distinção de camada que realmente precisa ser mencionada quando se trata de UNIX ou Linux. Agora, enquanto o kernel não vê diferença entre um shell e outro programa, o usuário certamente faz a maneira como ele interage com cada um. Se uma diferença tiver que ser feita entre o shell e outros programas, então essa diferença definitivamente vem do usuário, mas permanece desconhecida para o sistema.

Isso é muito mais impressionante em seu vídeo do que seria para os usuários dos sistemas atuais. Dê uma olhada nos seus terminais: isso é incrivelmente mínimo, e provavelmente nunca pensaríamos em usar tais coisas hoje em dia (mesmo assim, admito que adoraria). A coisa é: naquela época, o shell era a primeira (e única) coisa que você tinha quando o seu sistema inicializava e você estava logado. Essa era a coisa que você tinha que passar se quisesse executar qualquer outro programa. Esta é provavelmente onde a diferença é: enquanto o shell não é diferente de qualquer outro programa no olho do kernel, ele é um gateway para outros programas para o usuário , e este gateway era muito mais visível no Anos 70, em "prime" do núcleo UNIX.

Claro, essa distinção é muito menos significativa hoje em dia, provavelmente por causa de duas coisas:

  1. Emulação de terminal. Você pode obter vários shells ao mesmo tempo e alternar entre eles. Isso significa que você tem algo antes do shell que lhe dá controle sobre ele.
  2. Interfaces gráficas. Agora você pode iniciar processos a partir de GUIs, gerenciadores de janela, ambientes de desktop, ... sem nunca ter visto um terminal. Temos até programas gráficos projetados para envolver as instâncias do shell e torná-los mais agradáveis de usar.

Agora, não sou muito bom em diagramas, mas acho que colocaria desta forma:

Onde eu diria isso:

  • Linhas tracejadas representam interação do usuário .
  • Linhas pontilhadas representam interação de shell para processo (processos de geração, manipulação de fluxos de E / S entre eles, ...).
  • Linhas simples representam interação do sistema .

Se você remover tudo, menos os elementos que envolvem a interação system , você terá duas coisas: o kernel e programas do usuário . Existem duas camadas, conectadas por chamadas do sistema.

Agora, como usuário, você vê o shell não apenas como outro programa, mas como um gateway para outros, você adiciona interação do usuário e shell-to-process interação. Aí vem a terceira camada, mas nada mudou para o kernel.

    
por 24.02.2015 / 02:03
1

Eu diria que sua fonte é falsa.

Existem muitos sistemas operacionais diferentes chamados "UNIX", mas em nenhum deles são shells, como processos "privilegiados", que formam a camada subjacente para outros utilitários do espaço de usuário.

Um shell é apenas outro processo do userspace.

    
por 24.02.2015 / 00:34