As aplicações modernas apontam
cada vez com mais clareza as fraquezas de alguns sistemas operacionais - que já podemos
chamar de ultrapassados - como o MS-DOS, indicando a necessidade cada vez maior de um
Sistema Operacional mais completo e seguro. Sistemas que consigam compartimentalizar
processos de forma que não interfiram uns nos outros.
As necessidades cada vez maiores de processamento também apontam para sistemas que sejam
inteligentes o suficiente para usar muito mais que os pobres 640 Kb do MS-DOS. Estudos
indicam que a evolução das aplicações consomem 1 bit de endereçamento por ano. Isto
equivale a dobrar a capacidade de endereçamento a cada ano. Os 16 bits da década de 80
já se esgotaram. A julgar pelo ritmo frenético em que as coisas estão acontecendo,
entre 96 e 98 estaremos estourando os 32 bits. Felizmente, o aparecimento de processadores
de 64 bits nos dão fôlego por mais trinta anos (espera-se).
Seja como for, qualquer Sistema Operacional que se apresente como moderno deve ter
capacidade para trabalhar com espaços de endereçamento grandes (32, 64,128, ... ).
Porém as características não param aí. Não podemos mais imaginar Sistemas
Operacionais multitarefa onde uma delas tome conta da máquina. O escalonamento
preemptivo, que permite a interrupção de uma tarefa por tempo ou por outra de alta
prioridade não é apenas uma necessidade, passa a ser item obrigatório.
Temos ainda a questão do multiprocessamento, ou seja, processamento paralelo, como ter
várias CPUs trabalhando em conjunto para obter resultados mais rápidos, é o desafio.
Tanto o UNIX quanto o NT estão aptos para tal.
Mas, por que não aproveitar ao máximo a característica do multiprocessamento para o
próprio núcleo do Sistema Operacional? As threads estão trazendo o conceito
deste tipo de aproveitamento de forma a maximizar sua utilização.
Estes são apenas alguns aspectos dentre tantos, como: segurança, sistema de arquivos
mais amplo e seguro, comunicação mais facilitada entre ambientes, internacionalização
de aplicativos, etc.
Nesta arena de batalha, despontam dois gladiadores, de peso: UNIX e NT. Qual deles sairá
vitorioso? Cada um que faça sua escolha, polegar para cima ou para baixo, é uma questão
de experimentar o quanto cada um pode oferecer.
1 Breve Histórico
Feitos em épocas diferentes, guardadas as devidas proporções, ambos os sistemas UNIX e
NT tiveram seu início como fruto de uma necessidade dos usuários. Ora no meio técnico e
acadêmico, ora pelos próprios ditames da nova era de usuários da computação pessoal.
1.1 UNIX
O Sistema Operacional UNIX tem sua origem nos Laboratórios Bell a partir do Multics, por
volta de 1969. O Multics pode ser considerado o precursor dos sistemas
interativos. A dificuldade de se trabalhar com sistemas operados apenas no modo Batch
fomentou a idéia de sistemas em que a resposta poderia ser imediata, contra os vários
minutos perdidos nos tradicionais batch. Embora tivesse dado um avanço, o Multics
apresentava ainda dificuldades aos programadores. Em 1969, Ken Thompson desenvolveu um
Sistema Operacional que viria ao encontro das necessidades dos programadores e também
tomando o acesso as máquinas mais fácil. Assim nasceu o UNIX.
Mas os problemas não paravam aí. Ao desenvolver sistemas baseados em linguagens
simbólicas, dependentes da própria máquina, perdia-se a possibilidade de se transportar
facilmente para outras máquinas. Atento a isso, Ken Thompson desenvolveu uma linguagem
chamada B. Esta, depois de modificada por Dennis Ritchie, teve seu nome alterado para C,
muito conhecida de nós até hoje. Feito isto, Ken, Ritchie e outros reescreveram o
sistema UNIX em C o que lhe dava a característica de portabilidade. Podemos então dizer
que o UNIX e a Linguagem C praticamente nasceram juntos.
Posteriormente, já na Universidade da Califórnia, Berkley, em 1976, Ken, após
apresentar o sistema UNIX, desenvolveu quase totalmente o que seria chamado de versão 6.
Em 1977, Ken retorna aos laboratórios Bell e continua trabalhando no UNIX. A esta altura,
a ampla utilização pelos Laboratórios Bell e empregados de agências governamentais
contribuíram para a divulgação cada vez maior do UNIX. As universidades também viram
no Sistema UNIX uma opção.
A partir de 1979 a demanda comercial aumentou, mas haviam problemas, especialmente, como a
proteção de dados confidenciais e programas de uso mais simples. Em 1982 a Bell lançou
o sistema III. Em 1983, o sistema V.
Apesar de se dizer um sistema aberto, a divulgação dos fontes no início de sua vida
tornou o UNIX um sistema cheio de clones (Xenix, SCO, UNIXWARE,...). Apesar de,
basicamente, todos se equivalerem, cada fabricante implementou alguns componentes que dão
os chamados sabores diferenciados para o UNIX.
1.2 NT
No giro tecnológico da informática é interessante notar como o hardware tem
evoluído rapidamente, enquanto os softwares nem sempre têm acompanhado.
Especialmente quando pensamos em sistemas operacionais, verificamos que o velho MS-DOS de
guerra é velho mesmo. Se considerarmos o quanto demora para projetar e construir um
sistema operacional até o momento em que chega às mãos do usuário final, percebemos
como passam rapidamente 10, 15 ou mais anos.
As constantes mudanças de hardware colaboram às vezes para a estagnação de
certos sistemas operacionais que dependem muito da máquina em que vão rodar. Construir
um Sistema Operacional independente de hardware é, ou era, o sonho de qualquer
desenvolvedor de software.
Certamente foi considerando estes aspectos que a Microsoft contratou David N. CuttIer, em
outubro de 1988, para liderar o esforço de desenvolvimento de um novo sistema operacional
para os anos 90. David já tinha larga experiência em Sistemas Operacionais e rapidamente
formou uma equipe para criar o novo Sistema Operacional que viria revolucionar e
provocar discussões acaloradas na sua implantação.
Alguns pontos básicos deveriam ser considerados, visando atender expectativas do mercado
em relação a um novo Sistema Operacional.
- Portabilidade - considerando as tecnologias emergentes de
máquinas RISC, multiprocessadores, arquiteturas 32 e 64 bits, enfim, as constantes
mudanças demonstravam a necessidade de escrever em linguagem portável.
- Multiprocessamento - de forma a tornar mais eficiente a
utilização de computadores multiprocessados, a arte de poder processar simultaneamente,
dividindo o tempo entre os processadores disponíveis.
- Distribuição - a revolução ocasionada pelo uso de
computadores pessoais mudou o enfoque anterior de concentrar em uma única máquina o
processamento e os dados. O que surge com força total na década de 90 é a capacidade de
compartilhar recursos, de estabelecer fácil comunicação e poder se valer do poder de
processamento compartilhado em uma rede.
- POSIX - com a adoção do POSIX pelo governo americano e
outros, parece inevitável que um sistema operacional de futuro esteja aderente a este.
Este desafio foi também considerado no desenvolvimento do NT.
- Segurança - este é um dos mais críticos itens dos
sistemas atuais. No desenvolvimento do NT foi considerado alcançar os níveis de
segurança C2, definido pelo governo americano, mas espera-se, em versões futuras, poder
satisfazer níveis de segurança mais altos.
2 Características
Embora guardem alguma relação entre si, especialmente na multitarefa, o Windows NT é um
sistema que procura responder às necessidades cada vez maiores de Sistemas Operacionais
ágeis e que possam multiplicar o poder dos computadores e se valer de computadores
multiprocessados.
2.1 UNIX
A estrutura do UNIX pode ser dividida basicamente em três: Kernel, Shell
e Aplicativos. Poderíamos acrescentar mais uma que seria a dos programas dos usuários
(fig. 1). O Kernel planeja tarefas e administra os dados. O shell é a
interface com o usuário. Esta interpreta os pedidos do usuário e executa os programas
para atender o pedido. Na camada de aplicativos encontramos capacidades especiais
incorporadas ao Sistema Operacional.

Figura 1
Portabilidade é a característica mais marcante do UNIX.
Cerca de 90% do Kernel está escrito em C e o restante em linguagem de máquina.
Assim, quando se quer portar o UNIX para uma nova máquina, no máximo 10% deverá ser
reescrito. A portabilidade pode ser dividida em duas, a do próprio sistema e a dos
aplicativos. Os aplicativos escritos em C, Pascal, Basic, etc. são facilmente portados de
um sistema UNIX para outro. Eventualmente, algumas funções não padronizadas para todos
os sabores de UNIX deverão ser reescritas. No mais, é só recompilar.
Capacidade Multiusuário significa que o UNIX suporta mais que um usuário
simultaneamente. Estes usuários podem compartilhar os recursos como dados, impressoras,
etc. O sistema UNIX foi projetado de forma a atribuir níveis de segurança com relação
aos recursos que estarão disponíveis para cada usuário.
Capacidade Multitarefa é a capacidade dada ao usuário de realizar mais de uma tarefa
simultaneamente. Pode-se, por exemplo, estar editando um arquivo enquanto outro está
sendo impresso e um terceiro processo efetua manutenção em Banco de Dados. As tarefas
executadas simultaneamente podem ter prioridades diferentes e são executadas em
background. Existem limites para o número de tarefas simultâneas que dependem das
características da máquina que se estiver usando. Também o número maior de tarefas
afeta o tempo de resposta geral do sistema.
O sistema de arquivamento do UNIX é hierárquico. Os programas e dados podem ser
organizados convenientemente. Inicia sempre pelo /root e apresenta alguns subdiretórios
padrão (fig. 2).

Figura 2
2.2 NT
Também no caso do NT podemos dividir sua estrutura em duas partes: o modo usuário
(subsistemas protegidos) e o modo executivo (Kernel). Os subsistemas comunicam-se através
de mensagens, usando a filosofia cliente e servidor de processos. O executivo é capaz de
suportar qualquer número de processos servidores. Esta abordagem permite a
implementação de um Sistema Operacional em que os componentes são pequenos e
independentes. Os serviços são prestados por servidores especializados e atendem a
solicitações de clientes que podem ser outro processo servidor do sistema operacional ou
um programa aplicativo.
Cada subsistema protegido fornece uma API através da qual pode ser chamado. Quando deseja
um serviço aciona uma API que envia uma mensagem para o servidor. O servidor responde
mandando uma mensagem de volta.
Os subsistemas podem ser de ambiente ou integrais. O primeiro fornece API específica para
um sistema operacional. É assim que se torna possível coexistirem o ambiente WIN32,
POSIX, OS/2, Windows 16 e o MS-DOS. Cada um desses subsistemas tem um API, embora usem
sempre o WIN32 para receber entradas e exibir saídas para o usuário.
Já os subsistemas integrais executam funções importantes para o sistema operacional
como o subsistema de segurança. É ele que anota os privilégios especiais, recursos que
estão sendo auditados para acesso, mensagens de auditoria que devem ser geradas, etc.
Também são implementados vários serviços de rede através dos subsistemas integrais.

Figura 3
O executivo consiste em uma série de componentes
implementados em dois grupos fundamentais: serviços de sistema, que podem ser
chamados por outros componentes do próprio executivo e outros subsistemas; rotinas
internas, disponíveis apenas para componentes internos ao executivo.
As responsabilidades dos componentes do executivo são várias, como: Gerenciador de
Objetos, monitor de referência de segurança, gerenciador de processos, chamada de
procedimento (LPC), gerenciador de memória virtual, e outras. Cabe destacar uma delas, a
camada de abstração do Hardware (HAL). Ela coloca uma camada de código entre o
executivo e o hardware onde o NT está sendo processado. Esta camada é responsável pela
facilidade de portar o NT para qualquer hardware.
O subsistema de ambiente Win32 é o responsável pela interface com o usuário. Além de
controlar os dispositivos de entrada como teclado, mouse e outros, além do que é exibido
na tela, ele é o servidor para aplicações Win32. Quando uma aplicação não
reconhecida pelo Win32 ocorre, ele reconhece o tipo de aplicação e chama o respectivo
subsistema para executá-la. É assim que é possível emular o MS-DOS, o OS/2 e
aplicações Windows 16 bits.
3 Conceituação
Para entender melhor a diferença entre a forma de trabalhar dos sistemas operacionais
UNIX e NT é importante buscar alguns conceitos básicos como multitarefa, multithread,
multiprocessamento.
3.1 Monotarefa
Cada tarefa se ocupa totalmente com um processo ou operação de I/O de cada vez. Uma
tarefa é executada após terminar completamente outra (fig. 4). É assim que funciona o
tradicional MS-DOS.

Figura 4
3.2 Muititarefa
Significa que um determinado usuário pode realizar mais de uma tarefa ao mesmo tempo. Por
exemplo: atualizar um Banco de Dados e emitir um relatório. As tarefas podem ser
executadas em segundo plano ou não. Depende se há ou não interação com o usuário. O
limite de tarefas que podem ser abertas simultaneamente depende das características da
máquina. Porém, é certo que quanto maior número de tarefas abertas, tanto mais lento
será o tempo de resposta global do Sistema Operacional (fig. 5).

Figura 5
Podemos dividir a multitarefa em cooperativa e preemptiva.
No caso da multitarefa, cooperativa, quando uma tarefa é iniciada, pega o controle dos
recursos do Sistema Operacional e do Hardware, devolvendo-o eventualmente para a próxima.
Isto funciona conforme o comportamento da aplicação. Se ela demandar um processamento
longo sobre si mesma, pode prender o Sistema Operacional todo.
Na multitarefa preemptiva, o Sistema Operacional reparte fatias de tempo e recursos do
sistema para cada tarefa. Quando o tempo de uma tarefa estoura, ela é suspensa,
salvando-se seu estado para ser restaurado mais tarde, quando ela for novamente ativada.
Outra tarefa é restaurada para tomar o seu lugar. Também quando uma tarefa de alta
prioridade é detectada pode ser feita a troca. Este recurso garante que nenhuma
aplicação irá consumir todos os recursos do sistema.
3.3 Multithread
Permite que uma tarefa seja dividida em duas ou mais subtarefas (threads). Cada
subtarefa pega uma linha de operações da CPU. As linhas são executadas de forma
concorrente.
Multithread ou Multiplethread = múltiplas linhas de execução,
suplementam a capacidade de multitarefa.
Diferença básica entre multitarefa e multithread: na multitarefa é necessário
que se inicie outro programa para que haja execução simultânea. Na multithread
abre-se uma nova thread de um mesmo programa e basta utilizar variáveis comuns
para haver troca de informações. Isto requer menos recursos, diminuindo a complexidade
dos aplicativos. Esta característica também oferece vantagem mesmo quando se utiliza uma
única CPU.
3.4 Muitiprocessamento
É quando existem dois ou mais processadores (CPU) em uma mesma máquina. Podemos ainda
dividir o multiprocessamento em Simétrico e Assimétrico.
O MPS (multiprocessamento simétrico) aumenta quase linearmente o desempenho, na medida
que acrescentamos novos processadores. No MPS os processadores compartilham acesso a
recursos do Sistema Operacional como memória, disco e outros subsistemas. Todos os
processadores desempenham os mesmos tipos de funções, assumindo qualquer atividade que
chegue até eles.
Já no caso dos MPA (multiprocessadores assimétricos) há menor escalonabilidade, embora
em algumas situações específicas eles possam produzir melhores resultados. Isso se
explica pelo fato de trabalharem como uma equipe, com processadores especializados para
várias atividades.
Alguns superservidores apresentam, ao mesmo tempo, ambas as características, mas na maior
parte das vezes apenas uma ou outra.
Conclusão
Aliando-se a multitarefa, multithread e multiprocessamento é possível ter
ganhos importantes no tempo total de execução de uma tarefa (fig. 6).

Figura 6
Tanto o UNIX quanto
o NT se valem dos recursos de multitarefa e multiprocessamento. Começam
a surgir no mercado máquinas multiprocessadas, o que garante maior utilização
destas técnicas. Nem todos os Sistemas Operacionais UNIX utilizam o multiprocessamento
simétrico.
O NT, além de usar o multiprocessamento simétrico, trata as tarefas como
threads. Cada processo no NT tem pelo menos uma thread.
Um processo pode abrir novas threads, na medida que for necessário.
Essas threads, em geral, tratam de operações assíncronas que
podem, portanto, ocorrer a qualquer momento, independente do fluxo principal
do programa.
Alguns UNIX simulam a filosofia de threads detendo-se porém no
tratamento por processo. A vantagem do NT é tratar as threads
mesmo dentro do próprio Sistema Operacional, o que lhe traz vantagens
adicionais.
Aparentemente o NT é uma resposta à altura das expectativas de um sistema
operacional moderno e que também está muito aderente à nova filosofia
de Cliente/Servidor. O UNIX, sistema que já pode ser considerado de vida
média, certamente tem ainda muita aplicação. No entanto, deve evoluir
para conceitos que lhe dêem maior portabilidade - como o HAL do NT - e
evoluir para o melhor aproveitamento de máquinas multiprocessadas.
Referências bibliográficas:
1. CUSTER, Helen. Windows NT. São Paulo: Makron Books,
1993. 410p.
2. ENGLER, Natalie & LINTHICUM, David. Mais do que um PC turbinado.
Byte, São Paulo, v.3, n.4, p.134-135, abr. 1994.
3. EZZELL, Ben. The power under the hood. PC Magazine,
New York, v. 12, n. 12, p. 173-196, june 1993.
4. NORTON, Peter & WILTON, Richard. Novo guia Peter Norton
para programadores do IBM PC e PS/2. Rio de Janeiro: Campus,
1991. 472p.
5. ROBINSON, Jim et al. Windows NT: NOS or NOT? LAN Magazine,
USA, p. 164-176, feb. 1994
6. SANT'ANNA, Mauro. Multithread, o que significa e quais as vantagens.
PC World, Rio de Janeiro, v.2, n.22, p.76, abr. 1994.
7. THOMAS, Rebecca & YATES, Jean. UNIX Total. São
Paulo: McGraw Hili, 1989. 744p.
8. UDELL, Jon. Justificando o NT. Byte Brasil, São Paulo,
v.3, n.5, p.68-77, maio 1994.
9. WINDOWS NT a revolução no cenário do PC. PC World,
Rio de Janeiro, v. 1, n. 16, p.38-43, out. 1993.
bb@celepar.gov.br

|