Geraldo Braz Junior
Unix
Histórico
Na década de 60, SOs eram predominantemente do
tipo batch;
Estes sistemas eram pouco produtivos para os
programadores;
Surgimento de sistemas de tempo compartilhado:
Dartmouth College (Dartmouth) e MIT (CTSS);
CTSS se tornou um sucesso na comunidade científica; MIT, Bell Labs e General Eletric iniciaram o projeto de
um novo sistema, o MULTICS (multi-plexed information and computing service)
A Bell Labs posteriormente abandonou o projeto
Histórico
Kent Thompson resolveu escrever em
linguagem de montagem um MULTICS mais enxuto para o minicomputador PDP-7;
Brian Kernighan, em tom de brincadeira,
chamou o sistema de UNICS (uniplexed information and computing service);
A ortografia foi posteriormente trocada para
Histórico
Unix PDP-11
O Unix impressionou e a Bell Labs, recebendo a adesão
de Dennis Ritchie e posteriormente todo um departamento;
O Unix foi portado para o PDP-11/20 e, posteriormente,
para o PDP-11/45 e PDP-11/70;
As duas últimas dominaram o mundo dos
minicomputadores na década de 70;
Poderosas, possuiam grande memória para a época (256
KB e 2 MB, respectivamente), hardware de proteção de memória e 16 palavras de bits. No entanto, limitavam os processos a 64 KB de espaço de instruções e 64 KB de dados.
Histórico
Unix em C
A dificuldade de reescrever o sistema para
cada nova máquina fez com que Thompson reescrevesse o Unix na linguagem B;
B não dispunha de estruturadas e Ritchie
projetou uma sucessora denominando-a de C;
Escrito o compilador, Thompson e Ritchie
reescreveram o Unix em C;
Em 1974 Ritchie e Thompson publicaram
um artigo sobre o Unix que ganhou o prêmio Turing da ACM;
Histórico
Unix nas Universidades
A detentora da Bell Labs, a AT&T, possuía
monopólio regulamentado na área de
telecomunicações, não podendo atuar no ramo de computadores;
O Unix foi, então, distribuído (inclusive o
código fonte) para as universidades por uma taxa modesta;
O PDP-11 era um computador muito usado
nas universidades e os sistemas
operacionais que o acompanhavam eram considerados terríveis;
Histórico
Unix na Indústria
Numerosos encontros científicos eram organizados em
função do Unix;
A versão 6 possuía 8200 linhas em C e 900 em
linguagem de montagem;
A versão 7 possuía 18.800 linhas em C e 2.100 em
linguagem de montagem;
Os estudantes que usavam Unix se formaram e
passaram a trabalhar na indústria;
No meio da década de 80 o Unix era amplamente
utilizado em minicomputadores e estações de trabalho de vários fabricantes;
Várias empresas criaram suas próprias versões do Unix; Um pequeno grupo (Microsoft) comercializou a versão 7
sob o nome de XENIX até que seus interesses mudaram…
Unix Portátil
Portar o Unix para uma nova máquina
requer:
1. Escrever um compilador C para a nova
máquina
2. Escrever drivers de dispositivos específicos
(terminais, impressoras, discos, etc…)
3. Reescrever a parte do Unix dependente de
máquina (como tradutores de interrupção e algumas rotinas para gerenciamento de
Unix em Diferentes Versões
Em 1984 a AT&T foi formalmente liberada para ativar
uma subsidária de computadores;
Em seguida foi lançado seu primeiro produto Unix
comercial, o System III;
Ele foi rapidamente substituido pelo System V; A AT&T decidiu atuar apenas no mercado de
comunicações e vendu seus negócios Unix para a Novell em 1993;
A Novell por sua vez vendeu para a Santa Cruz em
1995;
A essa altura, era irrelevante saber quem era o
proprietário do Unix já que todas as maiores companhias já tinham suas próprias licenças.
Unix de Berkeley
Uma das maiores universidades a adquirir a versão 6
do Unix foi a Universidade da Califórina em Berkeley;
Ela modificou o sistema substancialmente, auxiliada
por financiamentos da ARPA (advanced research
projets agency) do Departamento de Defesa dos EUA;
A versão do Unix de Berkeley foi chamada BSD
(Berkeley software distribution);
Na 4BSD foi incluído o uso de memória virtual e
paginação, nomes de arquivos maiores foram permitidos e o sistema de arquivos tornou-se
consideravelmente mais rápido. Foi introduzido o uso de redes e o protocolo utilizado, o TCP/IP, tornou-se o padrão de fato da Internet;
Berkeley introduziu diversos utilitários para o Unix,
como o vi, csh, compiladores Pascal e Lisp e muitos outros.
Unix Padrão
No final da década de 80, duas versões do
Unix parcialmente incompatíveis eram muito utilizadas: 4.3BSD e o System V;
Além disto, cada fabricante incluía seus
próprios aprimoramentos não padronizados;
Com isto, era impossível escrever programas
que executassem em qualquer sistema Unix;
Várias tentativas de padronização falharam. A
AT&T lançou a SVID (System V interface definition), ignorada pelos sistemas BSD;
A Comissão de Padrões do IEEE criou o projeto
Unix Padrão
O padrão POSIX 1003.1 define um conjunto
de procedimentos de biblioteca que cada chamada Unix deve suprir;
A maioria destes procedimentos realiza
uma chamada ao sistema;
Procedimentos típicos são open, read e
fork;
O objetivo é permitir ao desenvolvedor
escrever um programa usando somente os procedimentos definidos no 1003.1 sem se preocupar em qual versão de Unix seu
Padrão POSIX
1003.0 Visão geral
1003.1 Chamdas ao sistema 1003.2 Shell e utilitários
1003.3 Testes e conformidade
1003.4 Extensões para tempo real 1003.5 Bindings para Ada
1003.6 Extensões de segurança 1003.7 Administração do sistema
1003.8 Acesso transparente à arquivos 1003.9 Bindings para Fortran 77
Objetivos
Sistema operacional interativo projetado
para o uso de vários usuários simultaneamente;
Projetado por e para programadores;
Disponibiliza ferramentas para que vários
usuários possam trabalhar em conjunto, compartilhando informações de forma controlada.
Objetivos
O que programadores esperam do sistema? Simplicidade e consistencia: por exemplo, no
nível mais baixo um arquivo deve ser
simplesmente uma coleção de bytes. Diferentes classes de arquivo (sequencial, aleatório,
chaveado, etc…) incomoda
Desempenho e flexibilidade: peuqno número
de elementos básicos que podem ser combinados de diferentes maneiras
Sem redundância: exemplo: grep ard f
A outra opção:
executar grep
grep perguntaria: “Oi. Sou o grep. Procuro cadeias
Interfaces para o Unix
O Shell
O Unix possui um ambiente gráfico (X
Windows) mas muitos programadores abrem várias janelas de console;
Vários interpretadores de comando estão
disponíveis: Bourne, C e Korn são os mais comuns;
Alguns comandos simples: l s *. c
cp sr c d e s t p w d
Estrutura de
Diretórios
O Shell
Quando um programa inicia, ele
automaticamente tem acesso a:
Arquivo de entrada-padrão (para leitura) Arquivo de saída-padrão (para escrita)
Arquivo de erro-padrão (para escrita de msgs de
erro)
Em geral eles são associados a entrada
pelo teclado e saída para a tela;
Exemplo: sort
Lê linhas do terminal (até que se digite CTRL-D),
Redirecionadores e Pipes
Redirecionador de entrada-padrão (<) Redirecionador de saída-padrão (>) Redirecionadores
sort <in >out
Pipes
ls -l | more
sort < in | he ad –30
grep te r *.t | sort | head – 20 | tail –5 > foo
Execução em segundo plano (background)
wc –l < a >b & sort <x |head &
Utilitários Unix
Categorias:
Comandos para manipulação de arquivos e
diretórios
Filtros
Ferramentas de desenvolvimento de programas
(como editores e compiladores)
Processamento de texto Administração de sistema miscelâneas
Comandos de Arquivos e
Diretórios
cp mv rm mkdir rmdir chmodComandos Filtros
grep sort head tail
Edição e Processamento de
Texto
vi
emacs LaTeX
Compiladores
Gcc, g+ + Javac Pearl Phyton Fortran Etc...Comandos de Administração do
Sistema
useradd usermod userdel groupad d groupmo d groupde lComandos de Administração do
Sistema
uptime ps pstree top kill df edquota quota tar manNúcleo (kernel) do Unix
Núcleo: Parte Inferior
Camada mais inferior:
◦ Drivers
Caractere e bloco
Tecnicamente dispositivos de rede são orientados a
caractere, mas trabalham de forma diferente, por isso melhor separá-los
◦ Despacho de processos
Durante uma interrupção, código de baixo nível para o
processo, salva todas as suas variáveis e estado na tabela de processos do núcleo e inicia o driver
apropriado
Código em linguagem de montagem e é diferente de
Núcleo: Partes (1)
Acima da camada superior estão:
Tratadores de entradas por caracter e por
linha
Shell usa tratamento por linhas de comando
seguidas de enter
Vi e Emacs preferem por caracter
Roteamento
Garante que os pacotes corretos cheguem ao
dispositivo ou tratador correto
Unix possui todo o código de um roteador embora
não seja tão eficiente quanto implementações em hardware
Núcleo: Partes (I1)
Acima do código do roteador está o
tratamento de protocolos (TCP/IP)
No topo de drivre´s de bloco (Discos) está
o cache de buffer e o cache de páginas
Não existe um limite fixo na memória para o
tamanho do cache em implementações modernas
Núcleo: Partes (I1I)
No topo do cache de buffer está o Sistema
de Arquivos
A maioria dos sistemas UNIX suporte vários
tipos de sistemas de arquivos
Acima do sistema de arquivos está a
nomeação de arquivos:
Gerenciamento de diretório Ligação simbólica e física
Núcleo: Partes (IV)
No topo do cache de páginas está o
sistema de memória virtual
Algoritmo de substituição de páginas
Acima está o mapeamento de arquivos em
memória virtual e o código de
gerenciamento de falta de página
Decide o que fazer durante a ocorrência de
Núcleo: Partes (V)
Última coluna, módulo de gerenciamento
de processos
Escalonador de processos
Threads em alguns UNIX são vistos no núcleo
Tratamento de sinais
Núcleo: Partes (VI)
A camada mais superior
Interface de Chamadas ao Sistema
Todos as chamadas chegam a essa interface e são
redirecionadas para as camadas abaixo