Você está na página 1de 26

Windows 2000

C
APÊNDICE

O Microsoft Windows é um sistema operacional multitarefa Interface (POSIX ou IEEE Std. 1003.1), suporte a multiproces-
e preemptivo de 32 bits para o Pentium da Intel e micropro- sadores, extensibilidade, suporte internacional e compatibi-
cessadores posteriores. Sucessor do sistema operacional Win- lidade com aplicações MS-DOS e Microsoft Windows. Neste
dows NT, foi chamado anteriormente de Windows NT Version apêndice, discutimos os objetivos essenciais deste sistema, sua
5.0. Os objetivos essenciais do sistema são portabilidade, segu- arquitetura em camadas que o torna tão fácil de usar, o sistema
rança, compatibilidade com o Portable Operating System de arquivos, redes e a interface de programação.

C.1 História
Em meados dos anos 1980, a Microsoft e a IBM desenvolve- microkernel (como o Mach) e, portanto, melhorias podem ser
ram em cooperação o sistema operacional OS/2, que foi escrito feitas em uma parte do sistema operacional sem afetar, subs-
em linguagem de montagem para sistemas monoprocessado- tancialmente, outras partes. Com a inclusão dos Serviços de
res Intel 80286. Em 1988, a Microsoft decidiu inovar e desen- Terminal, o Windows é um sistema operacional multiusuário.
volver um sistema operacional portável com “nova tecnologia” O Windows foi lançado em 2000 e incorporou mudanças
(ou NT) que suportasse as interfaces de programação de apli- significativas. Ele adicionou um serviço de diretório com base
cações (APIs) tanto do OS/2 quanto do POSIX. Em outubro no X.500, melhor suporte à conexão de rede, suporte a disposi-
de 1988, Dave Cutler, o arquiteto do sistema operacional DEC tivos plug-and-play, um novo sistema de arquivos com suporte
VAX/VMS, foi contratado e ficou encarregado da construção a armazenamento hierárquico e um sistema de arquivos distri-
desse novo sistema operacional. buído, bem como suporte a mais processadores e mais memória.
Originalmente, a equipe pensou em usar a API do OS/2 Há quatro versões do Windows. A versão Professional des-
como ambiente nativo do NT, mas durante o desenvolvi- tina-se ao uso em computadores desktop. As outras três são
mento, ele foi alterado para usar a API do Windows de 32 versões de servidor: Server, Advanced Server e Datacenter
bits (ou API Win32) refletindo a popularidade do Windows Server, que diferem principalmente quanto ao montante de
3.0. As primeiras versões do NT foram o Windows NT 3.1 e memória e ao número de processadores que suportam. Elas
o Windows NT 3.1 Advanced Server. (Na época, o Windows usam o mesmo kernel e código do sistema operacional, mas as
de 16 bits estava na versão 3.1.) O Windows NT 4.0 adotou a versões Windows Server e Advanced Server são configuradas
interface de usuário do Windows 95 e incorporou software de para aplicações cliente-servidor e podem atuar como servido-
servidor Web e de navegador da Internet. Além disso, roti- res de aplicações em LANs NetWare e Microsoft. Atualmente,
nas de interface de usuário e código gráfico foram transfe- o Windows Datacenter Server suporta até 32 processadores e
ridos para o kernel visando melhorar o desempenho, com até 64 GB de RAM.
o efeito colateral de diminuir a confiabilidade do sistema. Em 1996, foram vendidas mais licenças do Windows NT
Embora versões anteriores do NT tenham sido portadas para Server do que todas as versões de licenças UNIX. O interes-
outras arquiteturas de microprocessadores, o Windows des- sante é que o código básico do Windows é da ordem de 30
continuou esta prática devido a fatores de mercado. Assim, milhões de linhas de código. Compare este tamanho com o
portabilidade refere-se, agora, à portabilidade entre sistemas código básico do Windows NT 4.0: cerca de 18 milhões de
com arquitetura Intel. O Windows usa uma arquitetura de linhas de código.

C.2 Princípios de Projeto


Os objetivos de projeto que a Microsoft estabeleceu para o ou de kernel, fornece os serviços básicos do sistema. Acima do
Windows incluem extensibilidade, portabilidade, confiabili- executivo, vários subsistemas de servidor operam em moda-
dade, compatibilidade, desempenho e suporte internacional. lidade de usuário. Entre eles estão os subsistemas ambien-
Extensibilidade refere-se à capacidade de um sistema ope- tais que emulam diferentes sistemas operacionais. Logo, todos
racional acompanhar os avanços na tecnologia de computação. os programas escritos para MS-DOS, Microsoft Windows e
Para facilitar as mudanças no tempo, os desenvolvedores imple- POSIX podem ser executados no Windows no ambiente apro-
mentaram o Windows usando uma arquitetura em camadas. O priado. (Consulte a Seção C.4 para mais informações sobre
executivo do Windows que executa em modalidade protegida subsistemas ambientais.) Devido à estrutura modular, subsis-
Windows 2000  4 5

temas ambientais adicionais podem ser adicionados sem afetar Portanto, essas aplicações podem ser compiladas para execu-
o executivo. Além disso, o Windows usa drivers carregáveis no ção no Windows sem alterações no código-fonte. Além disso,
sistema de I/O e, portanto, novos sistemas de arquivos, novos o Windows pode operar os binários executáveis de muitos
tipos de dispositivos de I/O e novos tipos de conexão de rede programas compilados para arquiteturas Intel X86 que exe-
podem ser adicionados enquanto o sistema está em execução. cutem sob o MS-DOS, o Windows de 16 bits, o OS/2, o LAN
O Windows usa um modelo cliente-servidor, como o sistema Manager e o Windows de 32 bits, por intermédio dos subsis-
operacional Mach, e suporta processamento distribuído por temas ambientais mencionados anteriormente. Esses subsis-
chamadas de procedimento remotas (RPCs) como definido temas ambientais dão suporte a vários sistemas de arquivos,
pela Open Software Foundation. inclusive o sistema de arquivos FAT do MS-DOS, o sistema
Um sistema operacional é portável quando ele pode ser de arquivos HPFS do OS/2, o sistema de arquivos de CD,
movido de uma arquitetura de hardware para outra com, rela- ISO9660, e o NTFS. A compatibilidade binária do Windows,
tivamente, poucas alterações. O Windows foi projetado para no entanto, não é perfeita. No MS-DOS, por exemplo, as apli-
ser portável. Como o sistema operacional UNIX, a maior parte cações podem acessar portas de hardware diretamente. Por
do sistema é escrita em C e C++. Todo o código dependente do questões de confiabilidade e segurança, o Windows proíbe tal
processador fica isolado em uma biblioteca de vínculo dinâ- acesso.
mico (DLL), chamada camada de abstração de hardware O Windows é projetado para alcançar bom desempenho.
(HAL – hardware-abstraction layer). Uma DLL é um arquivo Os subsistemas que compõem o Windows podem se comu-
mapeado para o espaço de endereçamento de um processo de nicar uns com os outros eficientemente por meio de um
tal modo que quaisquer funções da DLL parecem fazer parte recurso de chamada de procedimento local (LPC) que for-
do processo. As camadas superiores do Windows dependem nece transmissão de mensagens de alto desempenho. Exceto
da HAL, e não do hardware subjacente, o que ajuda o Windows no kernel, os threads dos subsistemas do Windows podem
a ser portável. A HAL manipula o hardware diretamente, iso- sofrer preempção por threads de prioridade mais alta. Logo,
lando o resto do Windows das diferenças de hardware entre as o sistema pode responder rapidamente a eventos exter-
plataformas em que ele executa. nos. Além disso, o Windows é projetado para multiproces-
Confiabilidade é a capacidade de manipular condições de samento simétrico; em um computador multiprocessador,
erro, inclusive a capacidade de o sistema operacional proteger vários threads podem ser executados ao mesmo tempo. A
a si próprio e a seus usuários de software defeituoso ou mali- escalabilidade atual do Windows é limitada, comparada com
cioso. O Windows resiste a defeitos e ataques usando proteção a do UNIX.
de hardware para memória virtual e mecanismos de proteção O Windows também é projetado para uso internacional.
de software para recursos do sistema operacional. Além disso, Ele dá suporte a diferentes localidades por meio da API de
o Windows vem com um sistema de arquivos nativo – o sis- suporte ao idioma nacional (NLS – national language sup-
tema de arquivos NTFS – que se recupera automaticamente de port). A API NLS fornece rotinas especializadas para a forma-
muitos tipos de erros que acometem os sistemas de arquivos tação de data, hora e moeda de acordo com costumes nacionais
após uma queda do sistema. O Windows NT 4.0 recebeu uma diferenciados. Comparações de cadeias de caracteres são espe-
classificação de segurança C-2 do governo dos Estados Unidos, cializadas para levar em conta diferentes conjuntos de caracte-
o que significa um nível moderado de proteção contra softwa- res. O UNICODE é o código de caracteres nativo do Windows;
res defeituosos e ataques maliciosos. o suporte a caracteres ANSI é feito convertendo-os em caracte-
O Windows fornece compatibilidade, no nível do código- res UNICODE antes de sua manipulação (conversão de 8 bits
fonte, a aplicações que seguem o padrão IEEE 1003.1 (POSIX). para 16 bits).

C.3 Componentes do Sistema


A arquitetura do Windows é um sistema de módulos em tornar o Windows portável. A HAL exporta uma interface de
camadas, como mostrado na Figura C.1. As camadas prin- máquina virtual que é usada pelo kernel, pelo executivo e pelos
cipais são a HAL, o kernel e o executivo, todas executadas drivers de dispositivos. Uma vantagem desta abordagem é que
em modalidade protegida, e um grande conjunto de subsis- apenas uma única versão de cada driver de dispositivo é neces-
temas que opera em modalidade de usuário. Os subsistemas sária – ela pode ser executada em todas as plataformas de hard-
de modalidade de usuário pertencem a duas categorias. Os ware sem portar o código do driver. A HAL também dá suporte ao
subsistemas ambientais emulam diferentes sistemas operacio- multiprocessamento simétrico. Por motivos de desempenho,
nais; os subsistemas de proteção fornecem funções de segu- os drivers de I/O (e os drivers gráficos do Windows) podem
rança. Uma das principais vantagens desse tipo de arquitetura acessar o hardware diretamente.
é que as interações entre os módulos são mantidas simples. O
resto desta seção descreve essas camadas e subsistemas. C.3.2 Kernel
O kernel do Windows fornece a base para o executivo e os sub-
C.3.1 Camada de Abstração de Hardware sistemas. O kernel nunca é removido da memória e sua execu-
A HAL é a camada de software que oculta diferenças de hardware, ção nunca sofre preempção. Ele tem quatro responsabilidades
dos níveis superiores do sistema operacional, para ajudar a principais: scheduling de threads, manipulação de interrup-
4 6   Apêndice C

processo aplicações aplicações aplicações aplicações aplicações


de login OS/2 Win16 Win32 MS-DOS POSIX

subsistema VDM VDM subsistema


de segurança Win18 MS-DOS POSIX

pacote de
autenticação

banco de dados do
gerenciador de contas subsistema
de segurança Win32 modalidade
de usuário

executivo
gerenciador de I/O
recurso de
monitor de gerenciador gerenciador
sistema de gerenciador gerenciador chamada de
arquivos referência de de plug de memória gerenciador
de objetos de processos procedimento
gerenciador segurança and play virtual de janelas
de caches local
drives de
dispositivos
kernel drivers de
drives de
rede dispositivos
gráficos
camada de abstração de hardware

hardware

Figura C.1 Diagrama de blocos do Windows.

ções e exceções, sincronização em baixo nível de processado- cedimento assíncronas, interrupções, objetos de notificação de
res e recuperação após falta de energia. Examinamos cada uma energia, objetos de status de energia, objetos processo e objetos
delas a seguir. perfil. O sistema usa uma chamada de procedimento assíncrona
O kernel é orientado a objetos. Um tipo de objeto no Win- (APC) para interromper um thread em execução e chamar um
dows é um tipo de dado definido pelo sistema, com um con- procedimento. O objeto interrupção vincula uma rotina de
junto de atributos (ou valores de dados) e um conjunto de serviço de interrupção a uma fonte de interrupção. O sistema
métodos (isto é, funções ou operações). Um objeto é apenas usa o objeto notificação de energia para chamar automatica-
uma instância de um tipo de objeto específico. O kernel exe- mente uma rotina especificada, após uma queda de energia, e
cuta seu trabalho usando um conjunto de objetos do kernel o objeto status de energia, para verificar se a energia falhou.
cujos atributos armazenam os dados do kernel e cujos métodos Um objeto processo representa as informações de espaço de
executam as atividades do kernel. endereçamento virtual e de controle necessárias à execução do
O kernel usa dois conjuntos de objetos: objetos despa- conjunto de threads associado a um processo. Para concluir,
chantes e objetos de controle. Os objetos despachantes con- o sistema usa o objeto perfil para medir o período de tempo
trolam o despacho e a sincronização no sistema. Exemplos usado por um bloco de código.
desses objetos são eventos, mutants, mutexes, semáforos,
threads e timers. O objeto evento é usado para registrar a
C.3.2.1 Threads e Scheduling
ocorrência de um evento e sincronizar esta ocorrência com
alguma ação. O mutant fornece exclusão mútua em modali- Como muitos outros sistemas operacionais modernos, o Win-
dade de kernel ou de usuário, com a noção de propriedade. dows usa as noções de processos e threads para código executá-
O mutex, disponível apenas em modalidade de kernel, for- vel. O processo tem um espaço de endereçamento de memória
nece exclusão mútua sem deadlock. Um objeto semáforo age virtual, além de informações como uma prioridade básica e afi-
como um contador ou porta para controlar a quantidade nidade com um ou mais processadores. Cada processo tem um
de threads que acessam um recurso. O objeto thread é uma ou mais threads, que são as unidades de execução despacha-
entidade executada pelo kernel e associada a um objeto pro- das pelo kernel. Cada thread tem seu próprio estado que inclui
cesso. Os objetos timer são usados para controlar o tempo e uma prioridade, afinidade com o processador e informações de
para sinalizar limites de tempo excedidos quando operações contabilidade.
demoram demais e têm de ser interrompidas. Os seis estados possíveis associados aos threads são: pronto,
O segundo conjunto de objetos do kernel é composto pelos disponível, em execução, em espera, em transição e encerrado.
objetos de controle. Esses objetos incluem chamadas de pro- O estado pronto significa que o thread está esperando para
Windows 2000  4 7

ser executado. O thread pronto de prioridade mais alta é pas- tema operacional de tempo real crítico, porque ele não garante
sado para o estado disponível, significando que ele será o pró- que um thread de tempo real comece a ser executado dentro de
ximo thread a ser executado. Em um sistema multiprocessador, um limite de tempo específico.
há um thread no estado disponível para cada processador. Um
thread está em execução quando está sendo executado em um
C.3.2.2 Exceções e Interrupções
processador. Ele será executado até sofrer preempção por um
thread de prioridade mais alta, até terminar, até seu quantum de O kernel também fornece a manipulação de interceptações para
tempo terminar ou até invocar uma chamada de sistema bloquea- exceções e interrupções geradas por hardware ou software. O
dora, como em caso de I/O. Um thread está no estado de espera Windows define várias exceções independentes de arquitetura
quando está aguardando um sinal, como na conclusão de uma que incluem violação de acesso à memória, estouro de intei-
operação de I/O. Um novo thread está no estado de transição ros, estouro positivo ou negativo de ponto flutuante, divisão de
enquanto espera pelos recursos necessários para execução. Um inteiro por zero, divisão de ponto flutuante por zero, instrução
thread entra no estado encerrado quando termina a execução. ilegal, desalinhamento de dados, instrução privilegiada, erro
O despachante usa um esquema de prioridades de 32 níveis de leitura de página, violação de página de proteção, cota de
para determinar a ordem de execução dos threads. As prio- arquivo de paginação excedida, ponto de interrupção de depu-
ridades são divididas em duas classes. A classe variável con- rador e depurador passo a passo.
tém threads que têm prioridades de 0 a 15 e a classe de tempo O manipulador de interceptações pode tratar exceções sim-
real contém threads com prioridades variando de 16 a 31. O ples; as outras são manipuladas pelo despachante de exceções
despachante usa uma fila para cada prioridade do scheduling do kernel. O despachante de exceções cria um registro de exce-
e percorre o conjunto de filas, da mais alta a mais baixa, até ção contendo a razão da exceção e encontra um manipulador
encontrar um thread que esteja pronto para ser executado. Se de exceções que possa lidar com ela.
um thread tem afinidade com um processador específico, mas Quando ocorre uma exceção em modalidade de kernel, o
este processador não está disponível, o despachante o ignorará despachante de exceções simplesmente chama uma rotina para
e continuará procurando por um thread que esteja pronto para localizar o manipulador de exceções. Se nenhum manipulador
ser executado. Se nenhum thread pronto for encontrado, o des- for encontrado, ocorre um erro fatal de sistema e o usuário é
pachante executará um thread especial chamado thread ocioso. deixado com a infame “tela azul da morte”, que significa falha
Quando o quantum de tempo de um thread expira, este do sistema.
thread é interrompido; se o thread estiver na classe de prio- A manipulação de exceções é mais complexa para processos de
ridade variável, sua prioridade é reduzida. No entanto, a prio- modalidade de usuário porque um subsistema ambiental (como o
ridade nunca é reduzida para um valor menor do que o da sistema POSIX) pode estabelecer uma porta de depurador e uma
prioridade base. A redução da prioridade do thread tende a porta de exceção para cada processo que ele cria. Se uma porta
limitar o consumo da CPU por threads limitados por com- de depurador for registrada, o manipulador de exceções envia
putação. Quando um thread de prioridade variável é liberado a exceção a esta porta. Se a porta de depurador não for encon-
de uma operação de espera, o despachante aumenta a prio- trada ou não manipular essa exceção, o despachante tenta encon-
ridade. O nível do aumento depende do motivo pelo qual o trar, então, um manipulador de exceções apropriado. Se nenhum
thread estava esperando; por exemplo, um thread em espera manipulador for encontrado, o depurador é chamado novamente
por I/O de teclado receberia um grande aumento de priori- para poder capturar o erro para depuração. Se nenhum depurador
dade, enquanto um thread em espera por uma operação de estiver em execução, uma mensagem é enviada à porta de exceção
disco receberia um aumento moderado. Essa estratégia tende a do processo para dar ao subsistema ambiental uma chance de tra-
fornecer bons tempos de resposta para threads interativos que duzir a exceção. Por exemplo, o ambiente POSIX traduz mensa-
estejam usando mouse e janelas. Ela também habilita threads gens de exceção do Windows para sinais POSIX antes de enviá-las
limitados por I/O a manterem os dispositivos de I/O ocupa- ao thread que causou a exceção. Para concluir, se nada mais fun-
dos enquanto permite que threads limitados por computação cionar, o kernel simplesmente encerra o processo que contém o
usem ciclos avulsos da CPU em background. Tal estratégia é thread causador da exceção.
usada por vários sistemas operacionais de compartilhamento O despachante de interrupções do kernel manipula interrup-
de tempo, inclusive o UNIX. Além disso, a janela corrente, com ções chamando uma rotina de serviço de interrupção (como em
a qual o usuário está interagindo, recebe um aumento de prio- um driver de dispositivo) ou uma rotina interna do kernel. A
ridade para melhorar seu tempo de resposta. interrupção é representada por um objeto interrupção que con-
O scheduling pode ocorrer quando um thread entra no tém todas as informações necessárias à manipulação da inter-
estado pronto ou de espera, quando um thread termina ou rupção. O uso de um objeto interrupção torna fácil associar
quando uma aplicação muda a prioridade ou a afinidade com rotinas de serviço de interrupções a uma interrupção sem que
o processador de um thread. Se um thread de tempo real de seja preciso acessar o hardware de interrupções diretamente.
prioridade mais alta passa para o estado pronto enquanto um Várias arquiteturas de processador, como Intel e DEC
thread de prioridade mais baixa está em execução, o thread de Alpha, têm diferentes tipos e números de interrupções.
prioridade mais baixa sofrerá preempção. Esta preempção for- Para portabilidade, o despachante de interrupções mapeia
nece ao thread de tempo real acesso preferencial à CPU quando as interrupções de hardware para um conjunto padrão. As
ele precisar deste acesso. No entanto, o Windows não é um sis- interrupções são priorizadas e servidas em ordem de prio-
4 8   Apêndice C

níveis de
interrupção tipos de interrupções

verificação de máquina ou erro de bus


falta de energia
notificação entre processadores (solicita que outro processador
atue; isto é, despache um processo ou atualize a TLB)
relógio (usado para rastrear o tempo)
perfil
interrupções de hardware tradicionais IRQ de PCs
despacho e chamada de procedimento adiada (DPC)(kernel)
chamada de procedimento assíncrona (APC)
passiva

Figura C.2 Níveis de solicitações de interrupções no Windows.

ridade. Há 32 níveis de interrupções (IRQLs - interrupt C.3.2.3 Sincronização de Processadores em Baixo Nível
request levels) no Windows. Oito são reservados para uso do
Outra responsabilidade do kernel é fornecer a sincronização
kernel; os outros 24 representam interrupções de hardware
de processadores em baixo nível. Ele faz isso usando chama-
por meio da HAL (embora a maioria dos sistemas x86 use
das de procedimento assíncronas (APCs). O mecanismo da
apenas 16 linhas). As interrupções no Windows são defini-
APC é semelhante ao mecanismo DPC mas é usado de modo
das na Figura C.2.
mais geral. O mecanismo da APC habilita threads a definirem
O kernel usa uma tabela de despacho de interrupções para
uma chamada de procedimento que ocorrerá inesperadamente
vincular cada nível de interrupção a uma rotina de serviço. Em
em algum momento futuro. Por exemplo, muitos serviços do
um computador multiprocessador, o Windows mantém uma
sistema aceitam uma rotina de modalidade de usuário como
tabela de despacho de interrupções separada para cada processa-
parâmetro. Em vez de invocar uma chamada de sistema sín-
dor e o IRQL de cada processador pode ser configurado indepen-
crona que bloqueará o thread até ser concluída, um thread de
dentemente para mascarar interrupções. Todas as interrupções
usuário pode invocar uma chamada de sistema assíncrona e
que ocorrem em um nível igual ao IRQL de um processador ou
fornecer uma APC. O thread de usuário continuará em execu-
menor do que ele, são bloqueadas até que o IRQL seja abaixado
ção. Quando o serviço do sistema terminar, o thread de usuá-
por um thread de nível do kernel. O Windows tira vantagem
rio será interrompido para executar a APC espontaneamente.
dessa propriedade no uso de interrupções de software para exe-
Uma APC pode ser enfileirada tanto em um thread do sis-
cutar funções do sistema. Por exemplo, o kernel usa interrupções
tema quanto em um thread de usuário, mas uma APC de moda-
de software para iniciar o despacho de um thread, para manipu-
lidade de usuário será executada apenas se o thread declarou a
lar timers e para dar suporte a operações assíncronas.
si próprio como passível de alerta. Uma APC é mais poderosa
O kernel usa a interrupção de despacho para controlar a
que uma DPC porque pode adquirir objetos e esperar neles,
mudança de contexto dos threads. Quando o kernel está em
causar erros de página e chamar serviços do sistema. Como
execução, ele aumenta o IRQL no processador para um nível
uma APC é executada no espaço de endereçamento do thread
acima do nível de despacho. Ao determinar que o despacho de
alvo, o executivo do Windows usa APCs para processamento
um thread é necessário, o kernel gera uma interrupção de des-
de I/O, extensivamente.
pacho, mas esta interrupção é bloqueada até que o kernel ter-
O Windows pode operar em máquinas multiprocessado-
mine o que está fazendo e diminua o IRQL. Nesse momento, a
ras simétricas e, portanto, o kernel deve impedir que dois de
interrupção de despacho pode ser servida e, portanto, o despa-
seus threads modifiquem uma estrutura de dados compar-
chante seleciona um thread para execução.
tilhada ao mesmo tempo. O kernel usa spinlocks, residentes
Quando o kernel decide que alguma função do sistema deve
na memória global, para conseguir exclusão mútua em mul-
eventualmente ser executada, porém não imediatamente, ele
tiprocessadores. Já que toda a atividade de um processador é
enfileira um objeto chamada de procedimento adiada (DPC),
interrompida quando um thread está tentando adquirir um
contendo o endereço da função a ser executada, e gera uma
spinlock, o thread que mantém um spinlock não sofre preemp-
interrupção de DPC. Quando o IRQL do processador cai o sufi-
ção e, assim, pode terminar sua execução e liberar o lock o mais
ciente, os objetos DPC são executados. O IRQL da interrupção de
rapidamente possível.
DPC é, normalmente, mais alto do que o de threads de usuário e,
assim, as DPCs interromperão a execução de threads de usuário.
Para evitar problemas, as DPCs restringem-se a um nível bem
C.3.2.4 Recuperação após Queda de Energia
simples. Elas não podem modificar a memória de um thread; A responsabilidade final do kernel é fornecer recuperação após
criar, adquirir ou esperar em objetos; chamar serviços do sis- queda de energia. Uma interrupção por queda de energia que
tema; ou gerar erros de página. tem a segunda prioridade mais alta, notifica o sistema opera-
Windows 2000  4 9

cional sempre que a perda de energia é detectada. O objeto dades físicas, como drives de disco, e não são excluídos quando
notificação de energia fornece um modo para que o driver de a contagem de referências e o contador de manipuladores aber-
dispositivo registre uma rotina a ser chamada quando a ener- tos chegam a zero.
gia é restaurada, de forma a assegurar que os dispositivos sejam Os objetos são manipulados por um conjunto padrão de
posicionados no estado apropriado quando da recuperação. métodos: create, open, close, delete, query name,
Para sistemas suportados por baterias, o objeto status de ener- parse e security. Os três últimos objetos precisam de
gia é útil. Antes de começar uma operação crítica, o driver exa- explicação:
mina o objeto status de energia para determinar se a energia • query name é chamado quando um thread tem um mani-
faltou ou não. Se o driver determina que não faltou energia, ele pulador para um objeto mas deseja saber o nome do objeto;
aumenta o IRQL de seu processador de falta de energia, exe-
cuta a operação e reposiciona o IRQL. Esta sequência de ações
• parse é usado pelo gerenciador de objetos na busca de um
objeto pelo seu nome;
bloqueia a interrupção por queda de energia até o término da
operação crítica. • security é chamado quando um processo abre ou altera a
proteção de um objeto.
C.3.3 Executivo O executivo do Windows permite que um objeto receba um
O executivo do Windows fornece um conjunto de serviços que nome. O espaço de nomes é global e, portanto, um processo
todos os subsistemas ambientais podem usar. Os serviços estão pode criar um objeto nomeado e um segundo processo pode
agrupados da seguinte forma: gerenciador de objetos, geren- abrir, então, um manipulador para o objeto e compartilhá-lo
ciador de memória virtual, gerenciador de processos, recurso com o primeiro processo. Um processo que esteja abrindo um
de chamada de procedimento local, gerenciador de I/O, moni- objeto nomeado pode solicitar que a busca diferencie ou não
tor de referência de segurança e gerenciador de plug-and-play. maiúsculas de minúsculas.
Um nome pode ser permanente ou temporário. Um nome
permanente representa uma entidade, como um drive de disco,
C.3.3.1 Gerenciador de Objetos que permanece mesmo se nenhum processo a está acessando.
Como um sistema orientado a objetos, o Windows usa objetos Um nome temporário só existe enquanto algum processo man-
para todos os seus serviços e entidades. Exemplos de objetos tém um manipulador para o objeto.
são os objetos diretório, objetos link simbólico, objetos semá- Embora o espaço de nomes não seja diretamente visível
foro, objetos evento, objetos processo e objetos thread, objetos através de uma rede, o método parse do gerenciador de obje-
porta e objetos arquivo. A função do gerenciador de objetos é tos é usado para ajudar no acesso a um objeto nomeado de
supervisionar o uso de todos os objetos. Quando um thread outro sistema. Quando um processo tenta abrir um objeto que
quer usar um objeto, ele chama o método open do geren- resida em um computador remoto, o gerenciador de objetos
ciador de objetos para obter um manipulador para o objeto. chama o método parse que chama, então, um redirecionador
Os manipuladores fornecem uma interface padronizada para de rede para encontrar o objeto.
todos os tipos de objetos. Como um manipulador de arquivo, o Nomes de objetos são estruturados como nomes de cami-
manipulador de objetos é um manipulador exclusivo para um nho de arquivos no MS-DOS e no UNIX. Os diretórios são
processo, conferindo a capacidade de acesso a um recurso do representados por um objeto diretório que contém os nomes
sistema e sua manipulação. de todos os objetos no diretório. O espaço de nomes de objetos
Já que o gerenciador de objetos é a única entidade que pode pode aumentar pela inclusão de domínios de objetos que são
gerar um manipulador de objeto, este é o local adequado para a conjuntos de objetos autocontidos. Exemplos de domínios de
verificação de segurança. Por exemplo, o gerenciador de obje- objetos são disquetes e drives de disco rígido. É fácil ver como
tos verifica se um processo tem o direito de acessar um objeto o espaço de nomes é estendido quando um disquete é adicio-
quando o processo tenta abrir este objeto. O gerenciador de nado ao sistema: o disquete tem seu próprio espaço de nomes
objetos também pode impor cotas, como o montante máximo que é enxertado no espaço de nomes existente.
de memória que um processo pode alocar. Os sistemas de arquivos do UNIX têm links simbólicos
O gerenciador de objetos pode rastrear os processos que e, portanto, vários apelidos ou aliases podem referenciar o
estão usando cada objeto. Cada cabeçalho de objeto contém mesmo arquivo. Da mesma forma, o Windows implementa um
uma contagem do número de processos que têm manipulado- objeto link simbólico. Uma das maneiras pelas quais o Win-
res para este objeto. Quando o contador chega a zero, o objeto é dows usa links simbólicos é no mapeamento de nomes de dri-
excluído do espaço de nomes (se for um objeto temporário em ves para as letras de drives padrão do MS-DOS. As letras de
vez de permanente, como explicado a seguir). O próprio Win- drives são apenas links simbólicos que podem ser remapeados
dows frequentemente usa ponteiros (em vez de manipuladores) para atender às preferências do usuário.
para acessar objetos, por isso o gerenciador de objetos tam- Um processo obtém um manipulador de objeto criando
bém mantém uma contagem de referências que ele incrementa um objeto, abrindo um objeto existente, recebendo um mani-
quando o Windows ganha acesso a um objeto e decrementa pulador duplicata de outro processo ou herdando um mani-
quando o objeto não é mais necessário. Quando a contagem de pulador de um processo pai, semelhante à maneira como
referências de um objeto temporário chega a zero, o objeto é um processo do UNIX obtém um descritor de arquivo. Esses
excluído da memória. Objetos permanentes representam enti- manipuladores são todos armazenados na tabela de obje-
5 0   Apêndice C

tos do processo. Uma entrada da tabela de objetos contém os parte do espaço de endereçamento do processo. O segundo
direitos de acesso do objeto e define se o manipulador deve passo consigna a alocação atribuindo espaço no arquivo de
ser herdado por processos filhos. Quando um processo é con- paginação do Windows. O Windows pode limitar o espaço
cluído, o Windows fecha automaticamente todos os manipu- que um processo consome no arquivo de paginação impondo
ladores abertos para o processo. uma cota à memória consignada. Um processo pode descon-
Quando um usuário é autenticado pelo processo de login, signar a memória que não está mais usando para liberar sua
um objeto token de acesso é anexado ao processo do usuário. cota de paginação. Porque a memória é representada por obje-
O token de acesso contém informações como ID de segurança, tos, quando um processo (o pai) cria um segundo processo
IDs de grupos, privilégios, grupo primário e lista de controle (o filho), ele pode manter a capacidade de acessar a memória
de acesso default. Esses atributos determinam quais serviços e virtual do filho. É assim que os subsistemas ambientais con-
objetos podem ser usados por um determinado usuário. seguem gerenciar a memória de seus processos clientes. Por
No Windows, cada objeto é protegido por uma lista de con- razões de desempenho, o gerenciador de VM permite que um
trole de acesso que contém os IDs de segurança e os direitos de processo privilegiado tranque páginas selecionadas na memó-
acesso concedidos a cada processo. Quando um processo tenta ria física, assegurando que as páginas não sejam removidas
acessar um objeto, o sistema compara o ID de segurança no para o arquivo de paginação.
token de acesso do processo com a lista de controle de acesso Dois processos podem compartilhar memória obtendo
do objeto, para determinar se o acesso deve ser permitido. Essa manipuladores para o mesmo objeto memória, mas esta abor-
verificação é realizada apenas quando um objeto é aberto e, dagem pode ser ineficiente, já que todo o espaço de memória
portanto, serviços internos do Windows que usam ponteiros e de um objeto deve ser consignado antes que um dos processos
não abrem um manipulador para o objeto ignoram a verifica- possa acessar o objeto. O Windows fornece uma alternativa,
ção de acesso. chamada objeto seção, para representar um bloco de memória
Geralmente, o criador do objeto determina a lista de con- compartilhada. Após obter um manipulador para um objeto
trole de acesso para o objeto. Se nenhuma lista é fornecida seção, o processo pode mapear apenas a porção requerida da
explicitamente, uma lista pode ser herdada do objeto criador memória. Esta porção da memória é denominada uma visão.
ou uma lista default pode ser obtida a partir do objeto token de O mecanismo da visão também habilita um processo a aces-
acesso do usuário. sar um objeto que seja grande demais para caber na cota de
Um campo do token de acesso controla a auditoria do seu arquivo de paginação. O sistema pode usar a visão para
objeto. As operações auditadas são registradas no log de audi- percorrer o espaço de endereçamento do objeto, uma parte
toria do sistema com uma identificação do usuário. O campo de cada vez.
de auditoria pode verificar esse log para descobrir tentativas de Um processo pode controlar o uso de um objeto seção
invasão do sistema ou de acesso a objetos protegidos. de memória compartilhada de muitas maneiras. O tamanho
máximo de uma seção pode ser limitado. A seção pode usar
C.3.3.2 Gerenciador de Memória Virtual espaço em disco, como suporte, tanto no arquivo de paginação
do sistema como em um arquivo comum (um arquivo mapeado
A parte do executivo do Windows relacionada à memó- para a memória). Uma seção pode ser baseada, significando
ria virtual é o gerenciador de memória virtual (VM – vir- que a seção aparece no mesmo endereço virtual para todos os
tual memory). O projeto do gerenciador de VM presume que processos que a acessam. Para concluir, a proteção de memória
o hardware subjacente suporta o mapeamento virtual-físico, das páginas da seção pode ser configurada como somente de
um mecanismo de paginação e uma coerência de cache trans- leitura, leitura-gravação, somente de execução, página de pro-
parente em sistemas multiprocessadores e permita que várias teção ou cópia após gravação. Essas duas últimas configurações
entradas da tabela de páginas sejam mapeadas para o mesmo de proteção precisam ser melhor explicadas.
quadro de página. O gerenciador de VM do Windows usa um
esquema de gerenciamento com base em páginas, com um
• Uma página de proteção lança uma exceção se for acessada;
a exceção pode ser usada, por exemplo, para detectar se um
tamanho de página de 4 KB. Páginas de dados que são atribuí-
programa defeituoso está iterando além do final de um array.
das a um processo, mas não estão na memória física, são arma-
zenadas no arquivo de paginação em disco. • O mecanismo de cópia após gravação permite que o geren-
O gerenciador de VM usa endereços de 32 bits e, portanto, ciador de VM economize memória. Quando dois processos
cada processo tem um espaço de endereçamento virtual de 4 querem cópias independentes de um objeto, o gerenciador
GB. Os 2 GB superiores são idênticos para todos os proces- de VM insere apenas uma cópia compartilhada na memória
sos e são usados pelo Windows em modalidade de kernel. Os 2 física, mas ativa a propriedade de cópia após gravação para
GB inferiores são distintos para cada processo e são acessíveis esta região de memória. Se um dos processos tenta alterar
tanto por threads de modalidade de usuário quanto de kernel. dados em uma página de cópia após gravação, o gerenciador
Certas configurações do Windows reservam apenas 1 GB para de VM faz primeiro uma cópia privada da página para uso do
uso do sistema operacional, permitindo que um processo use 3 processo.
GB como espaço de endereçamento. A tradução de endereços virtuais no Windows usa várias
O gerenciador de VM do Windows usa um processo de dois estruturas de dados. Cada processo tem um diretório de
passos para alocar memória. O primeiro passo reserva uma páginas que contém 1.024 entradas de diretório de páginas
Windows 2000  5 1

entrada
entrada 0 diretório 1023 do
do diretório de páginas diretório
de páginas
de páginas

entrada 0 entrada entrada 0 entrada


da tabela 1023 da da tabela de 1023 da
tabela de de páginas 0 tabela de tabela de páginas 1023 tabela de
páginas páginas páginas páginas

página página página página


de 4K de 4K de 4K de 4K

Figura C.3 Formato da memória virtual.

deslocamento
de página

Figura C.4 Tradução de endereço virtual físico.

com 4 bytes de tamanho. Normalmente, o diretório de pági- concatenando 20 bits da PTE com os 12 bits inferiores do ende-
nas é privado, mas pode ser compartilhado entre processos reço virtual. Logo, a PTE de 32 bits tem 12 bits sobrando; esses
se o ambiente assim demandar. Cada entrada de diretório de bits descrevem a página. A PTE do Pentium reserva 3 bits para
páginas aponta para uma tabela de páginas que contém 1.024 uso do sistema operacional. O resto dos bits especifica se a
entradas de tabela de páginas (PTEs – page-table entries) página foi manipulada, foi acessada, é armazenável em cache, é
com 4 bytes de tamanho. Cada PTE aponta para um quadro de somente de leitura, é write through,* é de modalidade de Ker-
página de 4 KB na memória física. O tamanho total de todas nel ou é válida; portanto, eles descrevem o estado da página
as tabelas de páginas de um processo é de 4 MB e, portanto, o na memória. Para mais informações gerais sobre esquemas de
gerenciador de VM transferirá essas tabelas para disco quando paginação, consulte a Seção 7.4.
necessário. Consulte a Figura C.3 para ver um diagrama desta Uma página pode estar em um de seis estados: válido, livre,
estrutura. zerado, disponível, modificado ou inválido. Uma página válida
Um inteiro de 10 bits pode representar todos os valores de é a que está em uso por um processo ativo. Uma página livre é
0 a 1.023. Logo, um inteiro de 10 bits pode selecionar qualquer uma página não referenciada em uma PTE. Uma página zerada
entrada no diretório de páginas ou em uma tabela de páginas. é uma página livre que foi zerada e está pronta para uso ime-
Essa propriedade é usada quando um ponteiro de endereço vir- diato. Uma página disponível foi removida do conjunto de tra-
tual é convertido em um endereço em bytes na memória física. balho de um processo. Uma página modificada foi gravada,
Um endereço de memória virtual de 32 bits é dividido em três mas ainda não foi descarregada em disco. As páginas disponí-
inteiros, como mostrado na Figura C.4. Os primeiros 10 bits veis e modificadas são consideradas páginas em transição. Para
do endereço virtual são usados como um subscrito do diretó- concluir, uma página inválida não pode ser utilizada porque
rio de páginas. Esse endereço seleciona uma entrada do dire- um erro de hardware foi detectado.
tório de páginas que aponta para uma tabela de páginas. A A estrutura real da PTE do arquivo de páginas é mostrada
unidade de gerenciamento de memória (MMU) usa os próxi- na Figura C.5. A PTE contém 5 bits para a proteção da página,
mos 10 bits do endereço virtual para selecionar uma PTE desta 20 bits para o deslocamento no arquivo de páginas, 4 bits para
tabela de páginas. A PTE aponta para um quadro de página na a seleção do arquivo de paginação e 3 bits que descrevem o
memória física. Os 12 bits restantes do endereço virtual apon- estado da página. Essa PTE do arquivo de páginas aparece-
tam para um byte específico neste quadro de página. A MMU *Gravação feita sincronamente tanto no cache quanto na memória de
cria um ponteiro para este byte específico na memória física retaguarda. (N.R.T.)
5 2   Apêndice C

arquivo
endereço de página proteção de
páginas

Figura C.5 Entrada do arquivo de páginas na tabela de páginas.

ria como uma página inválida para o hardware. Como códi- o que tende a reduzir a quantidade total de erros de páginas.
gos executáveis e arquivos mapeados para a memória já têm Para mais informações sobre localidade, consulte a Seção 8.6.1.
uma cópia em disco, não precisam de espaço em um arquivo de Se não houver quadros de página disponíveis na lista de
paginação. Se uma dessas páginas não está na memória física, a livres, o Windows usa uma política de substituição FIFO, por
estrutura da PTE é a descrita a seguir: o bit mais significativo é processo, para tomar páginas de processos que estejam usando
usado para especificar a proteção da página, os 28 bits seguintes mais do que seu tamanho de conjunto de trabalho mínimo.
são usados para indexar uma estrutura de dados do sistema que O Windows monitora os erros de página de cada processo
indica um arquivo e o deslocamento dentro do arquivo para a que está em seu tamanho de conjunto de trabalho mínimo e
página, e os 3 bits inferiores especificam o estado da página. ajusta o tamanho do conjunto de trabalho de acordo. Especi-
É difícil que processos compartilhem uma página se cada ficamente, quando um processo é iniciado sob o Windows, ele
processo tem seu próprio conjunto de tabelas de páginas porque recebe um tamanho de conjunto de trabalho default de 30 pági-
cada processo terá sua própria PTE para o quadro de página. nas. O Windows verifica periodicamente este tamanho rou-
Quando uma página compartilhada não se encontra na memó- bando uma página válida do processo. Se o processo continuar
ria física, o endereço físico terá de ser armazenado nas PTEs a execução sem gerar um erro de página relacionado à página
de cada processo que a compartilhe. Todos os bits de proteção roubada, seu conjunto de trabalho é reduzido de 1 e a página é
e bits de estado da página dessas PTEs terão de ser configura- adicionada à lista de páginas livres.
dos e atualizados consistentemente. Para evitar tais problemas,
o Windows usa um endereçamento indireto. Para cada página
C.3.3.3 Gerenciador de Processos
que é compartilhada, o processo tem uma PTE que aponta para
uma entrada protótipo na tabela de páginas, em vez de para O gerenciador de processos do Windows fornece serviços para
o quadro de página. A PTE protótipo contém o endereço do criação, exclusão e uso de threads e processos. Ele não tem
quadro de página e os bits de proteção e de estado. Portanto, o conhecimento dos relacionamentos pai-filho ou das hierar-
primeiro acesso de um processo a uma página compartilhada quias de processos; tais refinamentos são deixados para o sub-
gera um erro de página. Após o primeiro acesso, acessos adi- sistema ambiental específico que possui o processo.
cionais são executados normalmente. Se a página for marcada Um exemplo de criação de processos no ambiente Win32 é
como somente de leitura, o gerenciador de VM faz uma cópia descrito a seguir. Quando uma aplicação Win32 chama Crea-
após gravação e o processo, efetivamente, não terá mais uma teProcess, uma mensagem é enviada ao subsistema Win32,
página compartilhada. Páginas compartilhadas nunca apare- que chama o gerenciador de processos para criar um processo.
cem no arquivo de páginas, mas são encontradas no sistema O gerenciador de processos chama o gerenciador de objetos
de arquivos. para criar um objeto processo e, então, retorna o manipulador
O gerenciador de VM rastreia todas as páginas de memória do objeto ao Win32. O Win32 chama o gerenciador de proces-
física em um banco de dados de quadros de página. Há uma sos novamente para criar um thread para o processo e, para
entrada para cada quadro de página. A entrada aponta para a concluir, o Win32 retorna manipuladores para o novo processo
PTE que aponta para o quadro de página e, assim, o gerencia- e o novo thread.
dor de VM pode manter o estado da página. Os quadros de
página são encadeados para formar, por exemplo, a lista de
C.3.3.4 Recurso de Chamada de Procedimento Local
páginas zeradas e a lista de páginas livres.
Quando ocorre um erro de página, o gerenciador de VM O sistema operacional usa o recurso de chamada de procedi-
censura a página extraviada, colocando-a no primeiro quadro mento local (LPC) para passar solicitações e resultados entre
da lista de livres. Mas ele não para por aí. Pesquisas mostram processos cliente e servidor, dentro de uma única máquina.
que a referência de um thread à memória tende a ter uma pro- Especificamente, ele usa a LPC para solicitar serviços aos vários
priedade de localidade: quando uma página é usada, é provável subsistemas do Windows. A LPC é semelhante, em muitos
que páginas adjacentes sejam referenciadas em futuro próximo. aspectos, aos mecanismos de RPC usados por muitos sistemas
(Pense na iteração sobre um array ou na busca das instruções operacionais para processamento distribuído entre redes, mas
sequenciais que formam o código executável de um thread.) é otimizada para uso dentro de um sistema Windows.
Devido à localidade, quando o gerenciador de VM censura A LPC é um mecanismo de transmissão de mensagens. O
uma página, ele também censura algumas páginas adjacentes, processo servidor publica um objeto porta de conexão global-
Windows 2000  5 3

mente visível. Quando um cliente quer serviços de um subsis- do Windows que manipula o armazenamento em cache para
tema, ele abre um manipulador para o objeto porta de conexão todo o sistema de I/O. O gerenciador de I/O suporta operações
do subsistema e, então, envia uma solicitação de conexão para síncronas e assíncronas, fornece tempos limite para drivers e
esta porta. O servidor cria um canal e retorna um manipulador tem mecanismos para que um driver chame outro.
ao cliente. O canal é composto por um par de portas de comuni- O gerenciador de I/O converte as solicitações que recebe
cação privadas: uma para mensagens do cliente para o servidor e para uma forma padrão denominada pacote de solicitaçoes
a outra para mensagens do servidor para o cliente. Os canais de de I/O (IRP – I/O request packet). Em seguida, ele encami-
comunicação dão suporte a um mecanismo de retorno de cha- nha o IRP ao driver correto para processamento. Quando
mada e, portanto, o cliente e o servidor podem aceitar solicita- a operação é concluída, o gerenciador de I/O recebe o IRP
ções quando, normalmente, estariam esperando uma resposta. do driver que executou, mais recentemente, uma operação e
Quando um canal LPC é criado, uma de três técnicas de completa a solicitação.
transmissão de mensagens deve ser especificada. Em muitos sistemas operacionais, o armazenamento em
1. A primeira técnica é adequada a mensagens pequenas (até cache é feito pelo sistema de arquivos. Mas o Windows usa um
256 bytes). Neste caso, a fila de mensagens da porta é usada recurso de armazenamento em cache centralizado. O geren-
como memória intermediária e as mensagens são copiadas ciador de caches fornece serviços de cache para todos os com-
de um processo para o outro. ponentes sob controle do gerenciador de I/O e funciona em
2. A segunda técnica é para mensagens maiores. Neste caso, conjunto com o gerenciador de VM. O tamanho do cache muda
um objeto seção de memória compartilhada é criado para dinamicamente, de acordo com o montante de memória livre
o canal. As mensagens enviadas pela fila de mensagens da disponível no sistema. Lembre-se de que os 2 GB superiores
porta contêm um ponteiro e informações de tamanho refe- do espaço de endereçamento de um processo compõem a área
rentes ao objeto seção. Isso evita a necessidade da cópia de do sistema; ela é idêntica para todos os processos. O gerencia-
mensagens grandes: o emissor insere dados na seção com- dor de VM aloca até metade desse espaço ao cache do sistema.
partilhada e o receptor pode visualizá-los diretamente. O gerenciador de caches mapeia arquivos para esse espaço de
3. A terceira técnica de transmissão de mensagens por LPC, endereçamento e usa os recursos do gerenciador de VM para
chamada LPC rápida, é usada por componentes de exibição manipular o I/O de arquivos.
gráfica do subsistema Win32. Quando um cliente solicita O cache é dividido em blocos de 256 KB. Cada bloco do
uma conexão que usará a LPC rápida, o servidor posiciona cache pode manter uma visão (isto é, uma região mapeada para
três objetos: um thread servidor dedicado para manipular a memória) de um arquivo. Cada bloco do cache é descrito por
solicitações, um objeto seção de 64 KB e um objeto par de um bloco de controle de endereços virtuais (VACB – virtual-
eventos. O objeto par de eventos é um objeto de sincroni- address control block) que armazena o endereço virtual e o
zação usado pelo subsistema Win32 para fornecer notifica- deslocamento da visão no arquivo, assim como o número de
ção quando o thread cliente copia uma mensagem para o processos que a estão usando. Os VACBs residem em um único
servidor Win32 ou vice-versa. As mensagens LPC são pas- array mantido pelo gerenciador de caches.
sadas no objeto seção e a sincronização é executada pelo Para cada arquivo aberto, o gerenciador de caches mantém
objeto par de eventos. A LPC rápida tem diversas vantagens. um array separado de índices de VACBs. Esse array tem um
O objeto seção elimina a cópia de mensagens, pois repre- elemento para cada porção de 256 KB do arquivo; logo, um
senta uma região de memória compartilhada. O objeto par arquivo de 2 MB, por exemplo, teria um array de índices de
de eventos elimina o overhead do uso do objeto porta para VACBs com 8 entradas. Uma entrada do array de índices
passar mensagens contendo ponteiros e comprimentos. O de VACBs aponta para o VACB se esta porção do arquivo
thread servidor dedicado elimina o overhead da determi- está no cache; caso contrário, ela é null.
nação de qual thread cliente está chamando o servidor, já Quando o gerenciador de I/O recebe uma solicitação de
que existe um thread servidor por thread cliente. Por fim, leitura de nível de usuário, ele envia um IRP ao gerenciador
o kernel dá preferência no scheduling a esses threads servi- de caches (a menos que a solicitação peça especificamente
dores dedicados, para melhorar o desempenho. A desvanta- uma leitura fora do cache). O gerenciador de caches calcula
gem é que a LPC rápida usa mais recursos do que os outros a entrada no array de índices de VACBs do arquivo que cor-
dois métodos e, portanto, ela é usada pelo subsistema Win32 responda ao deslocamento em bytes da solicitação. A entrada
somente para o gerenciador de janelas e interfaces de dispo- aponta para a visão no cache ou é null. Se for null, o gerencia-
sitivos gráficos. dor de caches aloca um bloco do cache (e a entrada correspon-
dente no array de VACBs) e mapeia a visão para este bloco do
cache. Em seguida, o gerenciador de caches tenta copiar dados
C.3.3.5 Gerenciador de I/O
do arquivo mapeado para o buffer do chamador. Se a cópia
O gerenciador de I/O é responsável por sistemas de arquivos, for bem-sucedida, a operação é concluída. Se a cópia falhar, é
gerenciamento de caches, drivers de dispositivos e drivers de devido a um erro de página, o que provoca o envio, pelo geren-
rede. Ele controla os sistemas de arquivos instaláveis que estão ciador de VM, de uma solicitação de leitura fora do cache para
carregados e gerencia buffers para solicitações de I/O. Fun- o gerenciador de I/O. O gerenciador de I/O solicita ao driver
ciona com o gerenciador de VM para fornecer I/O de arquivo de dispositivo apropriado que leia os dados e os retorna ao
mapeado para a memória e controla o gerenciador de caches gerenciador de VM que os carrega no cache. Os dados, agora
5 4   Apêndice C

processo

I/O
gerenciador de I/O

I/O armazenado
gerenciador em cache sistema de
de caches arquivos

I/O não
cópia de dados armazenado
em cache

gerenciador erro de página


drive de disco
de VM

Figura C.6 I/O de arquivo.

no cache, são copiados no buffer do chamador e a solicitação O gerenciador de caches também é responsável por solicitar
de I/O é concluída. A Figura C.6 apresenta uma visão geral de ao gerenciador de VM que descarregue o conteúdo do cache. O
todas essas operações. Quando possível, para operações de I/O comportamento default do gerenciador de caches é a gravação
síncronas, armazenadas em cache e sem lock, o I/O é manipu- retardada do cache: ele acumula gravações por 4 a 5 segundos
lado pelo mecanismo de I/O rápido. Este mecanismo simples- e, então, o thread gravador do cache é ativado. Quando a gra-
mente copia dados para páginas do cache ou a partir de páginas vação do cache é requerida, um processo pode posicionar um
do cache, diretamente, e usa o gerenciador de caches para exe- flag ao abrir o arquivo ou pode chamar uma função explícita de
cutar qualquer I/O necessário. descarga do cache quando necessário.
Uma operação de leitura no nível do kernel é semelhante, Um processo de gravação rápida poderia, potencialmente,
exceto pelo fato de que os dados podem ser acessados direta- preencher todas as páginas livres do cache antes que o thread
mente no cache, em vez de serem copiados em um buffer no gravador do cache tivesse uma chance de despertar e descarre-
espaço do usuário. Para usar metadados do sistema de arqui- gar as páginas em disco. O gravador do cache impede que um
vos, ou estruturas de dados que descrevem o sistema de arqui- processo inunde o sistema agindo da seguinte forma: quando
vos, o kernel usa a interface de mapeamento do gerenciador de o montante de memória livre no cache se torna baixo, o geren-
caches para ler os metadados. Para modificar os metadados, o ciador de caches bloqueia, temporariamente, os processos que
sistema de arquivos usa a interface de fixação do gerenciador tentam gravar dados e desperta o thread gravador do cache
de caches. A fixação de uma página a tranca em um quadro de para descarregar páginas em disco. Se o processo de gravação
página da memória física para que o gerenciador de VM não rápida for, na verdade, um redirecionador de rede de um sis-
possa mover ou remover a página. Após atualizar os metada- tema de arquivos de rede, seu bloqueio por muito tempo pode
dos, o sistema de arquivos solicita ao gerenciador de caches que fazer com que transferências da rede expirem e sejam retrans-
libere a página. Como a página foi modificada, ela é marcada mitidas. Esta retransmissão desperdiçaria largura de banda da
como manipulada e, portanto, o gerenciador de VM descarre- rede. Para evitar tal desperdício, os redirecionadores de rede
gará a página em disco. É bom ressaltar que os metadados são podem solicitar ao gerenciador de caches que não deixe um
realmente armazenados em um arquivo normal. grande backlog de gravações acumularem no cache.
Para melhorar o desempenho, o gerenciador de caches Já que um sistema de arquivos de rede tem de transferir
mantém um pequeno histórico de solicitações de leitura e tenta dados entre um disco e a interface de rede, o gerenciador de
prever solicitações futuras. Se o gerenciador de caches encon- caches também fornece uma interface DMA para transferir
tra um padrão nas três solicitações anteriores, como um acesso os dados diretamente. A transferência direta de dados evita a
sequencial para diante ou para trás, ele pode buscar dados no cópia de dados por meio de um buffer intermediário.
cache antes de a próxima solicitação ser submetida pela apli-
cação. Desta forma, a aplicação pode encontrar seus dados já
C.3.3.6 Monitor de Referência de Segurança
armazenados em cache e não tem de esperar por I/O de disco.
As funções OpenFile e CreateFile da API Win32 podem A natureza orientada a objetos do Windows habilita-o a usar um
receber o flag FILE_FLAG_SEQUENTIAL_SCAN, que é uma mecanismo uniforme para executar validação de acesso e verifi-
dica para o gerenciador de caches tentar fazer a pré-busca de cações de auditoria, em tempo de execução, para cada entidade
192 KB antecipadamente às solicitações do thread. Normal- no sistema. Sempre que um processo abre um manipulador para
mente, o Windows executa operações de I/O em porções de 64 um objeto, o monitor de referência de segurança verifica o token
KB ou 16 páginas; logo, tal leitura antecipada é três vezes maior de segurança do processo e a lista de controle de acesso do objeto
do que o montante normal. para ver se o processo tem os direitos necessários.
Windows 2000  5 5

C.3.3.7 Gerenciador de Plug-and-Play O gerenciador de PnP manipula a reconfiguração dinâmica


como descrito a seguir. Primeiro, ele obtém uma lista de disposi-
O sistema operacional usa o gerenciador de plug-and-play tivos a partir de cada driver de bus (por exemplo, PCI, USB). Em
(PnP) para reconhecer e se adaptar a mudanças na configu- seguida, ele carrega o driver instalado (ou instala um, se neces-
ração de hardware. Para o PnP funcionar, tanto o dispositivo sário) e envia um comando add-device ao driver apropriado
quanto o driver devem dar suporte ao padrão PnP. O geren- de cada dispositivo. O gerenciador de PnP descobre a atribuição
ciador de PnP reconhece automaticamente dispositivos insta- ótima de recursos e, então, envia um comando start-device
lados e detecta alterações em dispositivos durante a operação a cada driver, junto com a atribuição de recursos para este dispo-
do sistema. O gerenciador também controla os recursos usa- sitivo. Se um dispositivo precisa ser reconfigurado, o gerenciador
dos por um dispositivo, assim como recursos que poderiam de PnP envia um comando query-stop que pergunta ao dri-
ser usados, e é responsável por carregar os drivers apropria- ver se o dispositivo pode ser desabilitado temporariamente. Se o
dos. Este gerenciamento de recursos de hardware – principal- driver puder desabilitar o dispositivo, todas as operações penden-
mente interrupções e amplitudes da memória de I/O – tem o tes serão concluídas e novas operações serão impedidas de come-
objetivo de determinar uma configuração de hardware em que çar. Em seguida, o gerenciador de PnP envia um comando stop;
todos os dispositivos possam operar. Por exemplo, se o dispo- ele pode, então, reconfigurar o dispositivo com outro comando
sitivo B pode usar apenas a interrupção 5 mas o dispositivo A start-device.
pode usar a 5 ou a 7, então, o gerenciador de PnP poderia atri- O gerenciador de PnP também suporta outros comandos,
buir a interrupção 5 ao dispositivo B e a 7 ao dispositivo A. Em como query-remove. Este comando é usado quando o
versões anteriores, o usuário teria de remover o dispositivo A e usuário está se preparando para ejetar um dispositivo PCCARD
reconfigurá-lo para usar a interrupção 7 antes de instalar o dis- e opera de um modo semelhante a query-stop. O comando
positivo B. Portanto, o usuário tinha de estudar os recursos do surprise-remove é usado quando um dispositivo falha ou,
sistema antes de instalar um novo hardware e tinha de determi- o que é mais provável, quando um usuário remove um dispositivo
nar quais recursos de hardware os dispositivos estavam usando. PCCARD sem usar o utilitário PCCARD para interrompê-lo antes.
A proliferação de dispositivos PCCARD e USB também exige O comando remove solicita que o driver pare de usar o dispositivo
que a configuração dinâmica de recursos seja suportada. e libere todos os recursos que tenham sido alocados a ele.

C.4 Subsistemas Ambientais


Os subsistemas ambientais são processos de modalidade de de teclado, mouse e exibição gráfica. Se ele falhar, o sistema é
usuário dispostos acima dos serviços nativos do executivo efetivamente desabilitado.
do Windows para habilitar o Windows a executar programas O ambiente Win32 categoriza as aplicações como gráficas ou
desenvolvidos para outros sistemas operacionais, inclusive o baseadas em caracteres. Uma aplicação baseada em caracteres é
Windows de 16 bits, o MS-DOS e o POSIX, e aplicações baseadas aquela em que a saída interativa vai para uma tela ASCII de 80
em caracteres para o OS/2 de 16 bits. Cada subsistema ambien- por 24. O Win32 transforma a saída de uma aplicação baseada
tal fornece uma API ou um ambiente de aplicações. em caracteres em uma representação gráfica em uma janela. Essa
O Windows usa o subsistema Win32 como o ambiente ope- transformação é fácil: sempre que uma rotina de saída é cha-
racional principal; portanto, esse subsistema inicia todos os pro- mada, o subsistema ambiental chama uma rotina Win32 para
cessos. Quando uma aplicação é executada, o subsistema Win32 exibir o texto. O ambiente Win32 executa esta função para todas
chama o gerenciador de VM para carregar o código executável da as janelas baseadas em caracteres, por isso ele pode transferir
aplicação. O gerenciador de memória retorna um status ao Win32 texto de tela entre janelas por meio da área de transferência. Essa
informando que tipo de executável é o código. Se o código não é transformação funciona tanto para aplicações MS-DOS quanto
um executável nativo do Win32, o ambiente Win32 verifica se o para aplicações POSIX de linha de comando.
subsistema ambiental apropriado está em execução; se o subsis-
tema não está em execução, ele é iniciado como um processo de C.4.1 Ambiente MS-DOS
modalidade de usuário. O Win32 cria, então, um processo para O ambiente MS-DOS não tem a complexidade dos outros sub-
executar a aplicação e passa o controle ao subsistema ambiental. sistemas ambientais do Windows. Ele é fornecido por uma
O subsistema ambiental usa o recurso LPC do Windows aplicação Win32 chamada máquina DOS virtual (VDM – vir-
para obter serviços do kernel para o processo. Esta abordagem tual DOS machine). Pelo fato de a VDM ser apenas um pro-
ajuda o Windows a ser robusto porque a correção dos parâme- cesso de modalidade de usuário, ela é paginada e despachada
tros, passados a uma chamada de sistema, pode ser verificada como qualquer outro thread do Windows. A VDM tem uma
antes que a rotina real do kernel seja invocada. O Windows unidade de execução de instruções para executar ou emular
proíbe que as aplicações misturem rotinas de APIs de ambien- instruções do Intel 486. A VDM também fornece rotinas para
tes diferentes. Por exemplo, uma aplicação Win32 não pode emular a BIOS de ROM do MS-DOS e serviços de interrupção
chamar uma rotina POSIX. de software “int 21” e tem drivers de dispositivos virtuais para
Como cada subsistema é executado como um processo de tela, teclado e portas de comunicação. A VDM tem como base
modalidade de usuário separado, a queda de um deles não afeta o código-fonte do MS-DOS 5.0; ela fornece à aplicação, pelo
os outros. A exceção é o Win32, que fornece todos os recursos menos, 620 KB de memória.
5 6   Apêndice C

O shell de comandos do Windows é um programa que cria cia todo o I/O de teclado, mouse e tela. Como é o ambiente de
uma janela que se parece com um ambiente MS-DOS. Ele pode controle, foi projetado para ser extremamente robusto. Vários
operar tanto executáveis de 16 quanto de 32 bits. Quando uma recursos do Win32 contribuem para esta robustez. Diferente
aplicação MS-DOS é executada, o shell de comandos inicia um dos processos no ambiente Win16, cada processo Win32 tem
processo da VDM para executar o programa. sua própria fila de entradas. O gerenciador de janelas despacha
Se o Windows está em execução em um processador x86, todas as entradas do sistema para a fila de entradas do processo
aplicações gráficas MS-DOS são executadas em modalidade de apropriado e, portanto, um processo defeituoso não bloqueia
tela inteira e aplicações de caracteres podem executar em tela as entradas de outros processos. O kernel do Windows tam-
inteira ou em uma janela. Se o Windows está em execução em bém fornece execução multitarefa preemptiva, o que habilita o
uma arquitetura de processador diferente, todas as aplicações usuário a encerrar aplicações que tenham falhado ou não sejam
MS-DOS são executadas em janelas. Algumas aplicações MS- mais necessárias. Além disso, o Win32 valida todos os obje-
DOS acessam o hardware de disco diretamente, mas elas não tos antes de usá-los para impedir falhas que, de outro modo,
podem ser executadas no Windows porque o acesso a disco é poderiam ocorrer se uma aplicação tentasse usar um manipu-
privilegiado para proteção do sistema de arquivos. Em geral, lador inválido ou errado. O subsistema Win32 verifica o tipo
aplicações MS-DOS que acessam o hardware diretamente, não do objeto para o qual um manipulador aponta, antes de usar
podem ser executadas sob o Windows. o objeto. As contagens de referências mantidas pelo gerencia-
Como o MS-DOS não é um ambiente multitarefa, foram dor de objetos impedem que objetos sejam excluídos enquanto
escritas algumas aplicações que se apropriam da CPU - por ainda estão sendo usados e impedem seu uso após terem sido
exemplo, usando loops contínuos para causar atrasos ou pausas excluídos.
na execução. O mecanismo de prioridades do despachante do
Windows detecta esses atrasos e estrangula automaticamente C.4.4 Subsistema POSIX
o consumo da CPU (e faz com que a aplicação ofensiva opere O subsistema POSIX foi projetado para executar aplicações
incorretamente). POSIX que sigam o padrão POSIX.1 que é baseado no modelo
UNIX. As aplicações POSIX podem ser iniciadas pelo sub-
C.4.2 O Ambiente do Windows de 16 Bits sistema Win32 ou por outra aplicação POSIX. As aplicações
O ambiente de execução Win16 é fornecido por uma VDM que POSIX usam o servidor PSXSS.EXE do subsistema POSIX,
incorpora software adicional, chamado Windows on Windows, a biblioteca POSIX de vínculo dinâmico PSXDLL.DLL e o
para fornecer as rotinas e rotinas stub* do kernel do Windows gerenciador POSIX de sessão de console POSIX.EXE.
3.1 às funções do gerenciador de janelas e da interface de dis- Embora o padrão POSIX não especifique impressão, as
positivos gráficos (GDI - graphical-device-interface). As rotinas aplicações POSIX podem usar impressoras transparentemente
stub chamam as sub-rotinas apropriadas do Win32 – conver- por meio do mecanismo de redirecionamento do Windows.
tendo, ou traduzindo, endereços de 16 bits em endereços de 32 As aplicações POSIX têm acesso a qualquer sistema de arqui-
bits. Aplicações que se baseiam na estrutura interna do geren- vos do sistema Windows; o ambiente POSIX impõe permissões
ciador de janelas de 16 bits ou na GDI, podem não funcionar como as do UNIX em árvores de diretórios. Vários recursos do
porque o Windows on Windows não implementa realmente a Win32 não são suportados pelo subsistema POSIX, incluindo
API de 16 bits. arquivos mapeados para a memória, conexão de rede, gráficos
O Windows on Windows pode operar em multitarefa e troca dinâmica de dados.
com outros processos no Windows, mas ele se parece com
o Windows 3.1 em muitos aspectos. Apenas uma aplica- C.4.5 Subsistema OS/2
ção Win16 pode ser executada de cada vez e todas as apli-
Embora o Windows tenha sido projetado originalmente para
cações têm um único thread, residem no mesmo espaço
fornecer um ambiente operacional OS/2 robusto, o sucesso do
de endereçamento e compartilham a mesma fila de entra-
Microsoft Windows levou a uma mudança; durante o desen-
das. Essas características implicam que uma aplicação que
volvimento inicial do Windows, o ambiente Windows tornou-
pare de receber entradas bloqueará todas as outras aplica-
se o default. Consequentemente, o Windows fornece apenas
ções Win16, como no Windows 3.x, e uma aplicação Win16
recursos limitados no subsistema ambiental OS/2. Aplica-
pode fazer cair outras aplicações Win16 corrompendo o
ções baseadas em caracteres OS/2 1.x só podem ser executa-
espaço de endereçamento. Vários ambientes Win16 podem
das, no Windows, em computadores Intel x86. Aplicações OS/2
coexistir, no entanto, com o uso do comando start /separate
de modalidade real podem ser executadas em todas as plata-
win16application na linha de comando.
formas usando o ambiente MS-DOS. Aplicações limitadas que
C.4.3 Ambiente Win32 tenham código dual tanto para MS-DOS quanto para OS/2,
são executadas no ambiente OS/2, a menos que este ambiente
Como mencionado anteriormente, o principal subsistema do esteja desabilitado.
Windows é o Win32. Ele executa aplicações Win32 e geren-
C.4.6 Subsistemas de Login e Segurança
*Stubs são rotinas que não contêm código executável. Eles funcionam como
espaços reservados para funções que precisam ser totalmente implementadas. Antes que um usuário possa acessar objetos no Windows, ele
(N.R.T.) deve ser autenticado pelo subsistema de login. Para ser auten-
Windows 2000  5 7

ticado, um usuário deve ter uma conta e fornecer a senha para senha está correta. O subsistema de segurança gera, então, o
esta conta. token de acesso para o ID do usuário, contendo os privilé-
O subsistema de segurança gera tokens de acesso para gios, limites de cota e IDs de grupo apropriados. Sempre que
representar usuários no sistema. Ele chama um pacote de o usuário tenta acessar um objeto no sistema, como ao abrir
autenticação para fazer a autenticação usando informações um manipulador para o objeto, o token de acesso é passado
do subsistema de login ou do servidor de rede. Normalmente, ao monitor de referência de segurança que verifica privilégios
o pacote de autenticação simplesmente procura as informa- e cotas. O pacote de autenticação default, para domínios do
ções da conta em um banco de dados local e verifica se a Windows, é o Kerberos.

C.5 Sistema de Arquivos


Historicamente, os sistemas MS-DOS têm usado o sistema lido e gravado. Alguns atributos são padrão para todos os arqui-
de arquivos tabela de alocação de arquivos (FAT). O sistema vos, inclusive o nome do arquivo (ou nomes, se o arquivo tem
de arquivos FAT de 16 bits tem várias deficiências, inclusive aliases), a hora da criação e o descritor de segurança que especi-
fragmentação interna, uma limitação de tamanho de 2 GB e a fica o controle de acesso. Outros atributos são específicos de cer-
falta de proteção de acesso para arquivos. O sistema de arqui- tos tipos de arquivos. Por exemplo, arquivos do Macinstosh têm
vos FAT de 32 bits resolveu os problemas de fragmentação e dois atributos de dados, a ramificação de recursos e a ramifica-
tamanho, mas seu desempenho e recursos ainda são fracos em ção de dados. Um diretório tem atributos que implementam um
comparação com sistemas de arquivos modernos. O sistema de índice para os nomes de arquivos do diretório. Em geral, podem
arquivos NTFS é muito melhor. Ele foi projetado para incluir ser adicionados atributos conforme necessário e eles são acessa-
muitos recursos, como recuperação de dados, segurança, tole- dos com o uso de uma nomenclatura nome do arquivo:atributo.
rância a falhas, arquivos e sistemas de arquivos grandes, fluxos A maioria dos arquivos de dados tradicionais tem um atributo
de dados múltiplos, nomes UNICODE e compressão de arqui- de dados não nomeado que contém todos os dados do arquivo. É
vos. Por razões de compatibilidade, o Windows dá suporte aos bom ressaltar que o NTFS só retorna o tamanho do atributo não
sistemas de arquivos FAT e HPFS do OS/2. No entanto, enfati- nomeado em resposta a operações de consulta de arquivo, como
zamos aqui o NTFS, o sistema de arquivos básico do Windows. na execução do comando dir. É claro que alguns atributos são
pequenos e outros são grandes.
C.5.1 Formato Interno Cada arquivo do NTFS é descrito por um ou mais regis-
A entidade básica do NTFS é o volume. Um volume é criado tros de um array armazenado em um arquivo especial cha-
pelo utilitário administrador de discos do Windows e é baseado mado tabela de arquivos mestre (MFT - master file table).
em uma partição lógica de disco. O volume pode ocupar uma O tamanho de um registro é determinado quando o sistema
parte de um disco, um disco inteiro ou se estender por vários de arquivos é criado; ele varia de 1 a 4 KB. Atributos peque-
discos. nos são armazenados no próprio registro da MTF e são cha-
O NTFS não lida com setores individuais de um disco; em mados atributos residentes. Atributos grandes, como dados
vez disso, ele usa o cluster como unidade de alocação de disco. volumosos não nomeados, são chamados atributos não resi-
Um cluster é um grupo de setores de disco que compõe uma dentes; eles são armazenados em uma ou mais extensões contí-
potência de 2. O tamanho do cluster é configurado quando um guas no disco e um ponteiro para cada extensão é armazenado
sistema de arquivos NTFS é formatado. O tamanho default do no registro da MFT. Para um arquivo minúsculo, até mesmo o
cluster é o tamanho do setor para volumes até 512 MB, 1 KB atributo de dados pode caber dentro do registro da MFT. Se um
para volumes até 1 GB, 2 KB para volumes até 2 GB e 4 KB arquivo tem muitos atributos – ou se é altamente fragmentado
para volumes maiores. Este tamanho de cluster é muito menor de modo que muitos ponteiros sejam necessários para apon-
do que o do sistema de arquivos FAT de 16 bits e o tamanho tar para todos os fragmentos – um registro da MFT pode não
pequeno reduz o nível de fragmentação interna. Como exem- ser suficientemente grande. Neste caso, o arquivo é descrito
plo, considere um disco de 1.6 GB com 16.000 arquivos. Se você por um registro chamado registro de arquivo base que contém
usar um sistema de arquivos FAT de 16 bits, 400 MB podem ser ponteiros para registros de estouro que armazenam os pontei-
perdidos para a fragmentação interna porque o tamanho do ros e atributos adicionais.
cluster é de 32 KB. Sob o NTFS, apenas 17 MB seriam perdidos Cada arquivo de um volume NTFS tem um ID exclusivo
para armazenar os mesmos arquivos. chamado referência de arquivo. A referência de arquivo é uma
O NTFS usa números de cluster lógicos (LCNs – logical clus- quantidade de 64 bits composto por um número de arquivo
ter numbers) como endereços de disco. Ele os atribui numerando de 48 bits e um número de sequência de 16 bits. O número de
clusters do início para o fim do disco. Usando este esquema, arquivo é o número do registro (isto é, a posição no array) na
o sistema pode calcular um deslocamento no disco físico (em MFT que descreve o arquivo. O número de sequência é incre-
bytes) multiplicando o LCN pelo tamanho do cluster. mentado sempre que uma entrada da MFT é reutilizada. Esse
Um arquivo do NTFS não é um simples fluxo de bytes como incremento habilita o NTFS a executar verificações de consis-
no MS-DOS ou no UNIX; em vez disso, ele é um objeto estru- tência interna, como a captura de uma referência antiga a um
turado composto por atributos. Cada atributo de um arquivo é arquivo excluído depois que a entrada da MFT foi reutilizada
um fluxo de bytes independente que pode ser criado, excluído, para um novo arquivo.
5 8   Apêndice C

Como no MS-DOS e no UNIX, o espaço de nomes do registrados nas estruturas de metadados do sistema de arqui-
NTFS é organizado como uma hierarquia de diretórios. Cada vos. Essa verificação pode ser um processo lento e resultar na
diretório usa uma estrutura de dados chamada árvore B+ para perda de um número significativo de dados.
armazenar um índice dos nomes de arquivo do diretório. Esse O NTFS usa uma abordagem diferente para a robustez do
esquema é usado porque elimina o custo da reorganização da sistema de arquivos. No NTFS, todas as atualizações em estru-
árvore e porque cada caminho, da raiz da árvore até uma folha, turas de dados do sistema de arquivos são executadas dentro
tem o mesmo comprimento dos outros caminhos. A raiz de de transações. Antes de uma estrutura de dados ser alterada, a
índices de um diretório contém o nível de topo da árvore B+. transação grava um registro de log que contém informações de
Em um diretório grande, este nível de topo contém ponteiros reexecução e anulação de execução; depois que a estrutura de
para extensões de disco que armazenam o resto da árvore. Cada dados foi alterada, a transação grava um registro de consigna-
entrada do diretório contém o nome e a referência de arquivo ção no log para indicar que foi bem-sucedida. Após uma queda,
do arquivo, assim como uma cópia do marcador de tempo de o sistema pode restaurar as estruturas de dados do sistema de
atualizações e do tamanho do arquivo, extraídas dos atributos arquivos a um estado consistente processando os registros do
residentes do arquivo na MFT. Cópias dessas informações são log, reexecutando primeiro as operações de transações con-
armazenadas no diretório e, portanto, uma listagem de diretó- signadas e desfazendo, então, as operações de transações que
rio pode ser gerada eficientemente - dado que todos os nomes não foram consignadas com sucesso antes da queda. Periodica-
de arquivos, tamanhos e horas de atualizações estão disponí- mente (usualmente a cada 5 segundos), um registro de ponto
veis no próprio diretório, não há necessidade de coletar esses de verificação é gravado no log. O sistema não precisa de regis-
atributos nas entradas da MFT para cada um dos arquivos. tros de log antes do ponto de verificação para se recuperar de
Os metadados do volume NTFS são todos armazenados uma queda. Eles podem ser descartados para que o arquivo de
em arquivos. O primeiro arquivo é a MFT. O segundo arquivo, log não cresça sem limites. Na primeira vez em que um volume
que é usado durante a recuperação se a MFT está danificada, NTFS é acessado após a inicialização do sistema, o NTFS exe-
contém uma cópia das 16 primeiras entradas da MFT. Os pou- cuta automaticamente a recuperação do sistema de arquivos.
cos arquivos seguintes também são especiais. Eles são chama- Esse esquema não garante que todos os conteúdos dos
dos arquivo de log, arquivo de volume, tabela de definição de arquivos de usuário estejam corretos após uma queda; ele asse-
atributos, diretório raiz, arquivo de mapa de bits, arquivo de gura apenas que as estruturas de dados do sistema de arquivos
inicialização e arquivo de clusters inválidos. O arquivo de log (os arquivos de metadados) não estão danificadas e refletem
(Seção C.5.2) registra todas as atualizações de metadados para algum estado consistente que existia antes da queda. Seria pos-
o sistema de arquivos. O arquivo de volume contém o nome sível estender o esquema de transações aos arquivos de usuá-
do volume, a versão do NTFS que formatou o volume e um bit rios, mas o overhead prejudicaria o desempenho do sistema de
que informa se o volume pode ter sido corrompido e precisa arquivos.
de verificação de consistência. A tabela de definição de atri- O log é armazenado no terceiro arquivo de metadados, no
butos indica que tipos de atributos são usados no volume e que começo do volume. Ele é criado com um tamanho máximo fixo
operações podem ser executadas em cada um deles. O diretó- quando o sistema de arquivos é formatado. Tem duas seções: a
rio raiz é o diretório do nível de topo na hierarquia do sistema área de registros de log, que é uma fila circular de registros de
de arquivos. O arquivo de mapa de bits indica os clusters de log, e a área de reinicialização, que mantém informações de
um volume que são alocados a arquivos e os que estão livres. contexto na área de registros de log, como a posição em que o
O arquivo de inicialização contém o código de inicialização NTFS deve iniciar a leitura durante uma recuperação. Na ver-
do Windows e deve ficar localizado em um endereço de disco dade, a área de reinicialização mantém duas cópias de suas
específico para poder ser encontrado facilmente por um carre- informações e, portanto, a recuperação é possível mesmo que
gador de bootstrap simples da ROM. O arquivo de inicializa- uma cópia tenha sido danificada durante a queda.
ção também contém o endereço físico da MFT. Para concluir, o A funcionalidade de registro em log é fornecida pelo ser-
arquivo de clusters inválidos registra quaisquer áreas inválidas viço de arquivo de log do Windows. Além de gravar os regis-
do volume; o NTFS usa este registro para recuperação de erros. tros de log e executar ações de recuperação, o serviço de
arquivo de log controla o espaço livre no arquivo de log. Se o
C.5.2 Recuperação espaço livre se torna muito pequeno, o serviço de arquivo de
log enfileira transações pendentes e o NTFS interrompe todas
Em muitos sistemas de arquivos simples, a falta de energia na
as novas operações de I/O. Após as operações em curso serem
hora errada pode danificar as estruturas de dados do sistema
concluídas, o NTFS chama o gerenciador de caches para des-
de arquivos tão gravemente que o volume inteiro fica desorde-
carregar todos os dados e, então, reconfigura o arquivo de log e
nado. Muitas versões do UNIX armazenam metadados redun-
executa as transações enfileiradas.
dantes no disco e se recuperam de quedas usando o programa
fsck para verificar todas as estruturas de dados do sistema
de arquivos e restaurá-las eficazmente a um estado consistente. C.5.3 Segurança
Restaurá-las envolve, então, a exclusão de arquivos danificados A segurança de um volume NTFS é derivada do modelo de
e a liberação de clusters de dados que tenham sido gravados objetos do Windows. Um atributo descritor de segurança é
com dados do usuário, mas não tenham sido apropriadamente armazenado no registro da MFT de cada objeto arquivo. Esse
Windows 2000  5 9

disco 1 (2.5 GB) disco 2 (2.5 GB)

disco C: (FAT) 2 GB

drive lógico D: (NTFS) 3 GB

Figura C.7 Conjunto de volumes em dois drives.

atributo contém o token de acesso do proprietário do arquivo volta ao primeiro disco, alocando o segundo bloco de 64 KB.
e uma lista de controle de acesso que define os privilégios de Um conjunto de stripes forma um grande volume lógico, mas
acesso concedidos a cada usuário que tenha acesso ao arquivo. o formato físico pode melhorar a largura de banda de I/O por-
que, para um I/O volumoso, todos os discos podem transferir
C.5.4 Gerenciamento de Volumes e dados em paralelo. Para mais informações sobre RAID, con-
Tolerância a Falhas sulte a Seção 11.7.
O FtDisk é o driver de disco tolerante a falhas do Windows. Uma variação dessa ideia é o conjunto de stripes com pari-
Quando instalado, ele fornece diversas maneiras de combinar dade, mostrado na Figura C.9. Esse esquema também é cha-
drives de disco múltiplos em um volume lógico para melhorar mado RAID nível 5. Suponha que um conjunto de stripes tenha
o desempenho, a capacidade ou a confiabilidade. oito discos. Sete deles armazenarão stripes de dados, com um
Uma forma de combinar múltiplos discos é concatená- stripe de dados em cada disco, e o oitavo disco armazenará um
los logicamente para formar um grande volume lógico, como stripe de paridade para cada stripe de dados. O stripe de pari-
mostrado na Figura C.7. No Windows, este volume lógico, cha- dade contém o resultado do bitwise exclusive or* dos
mado um conjunto de volumes, pode ser composto por até stripes de dados. Se algum dos oito stripes for destruído, o sis-
32 partições físicas. Um conjunto de volumes contendo um
volume NTFS pode ser estendido sem afetar os dados já arma- disco 1 (2 GB) disco 2 (2 GB)
zenados no sistema de arquivos. Os metadados do mapa de bits
do volume NTFS são simplesmente estendidos para abranger
o novo espaço adicionado. O NTFS continua a usar o mesmo
mecanismo de LCN que ele usa para um único disco físico e o
driver FtDisk fornece o mapeamento de um deslocamento
no volume lógico para o deslocamento em um disco específico.
Outra maneira de combinar múltiplas partições físicas é
intercalar seus blocos à moda round-robin para formar o que
é chamado conjunto de stripes, como mostrado na Figura C.8.
Esse esquema também é chamado RAID nível 0 ou disk stri-
ping.* O FtDisk usa um tamanho de stripe de 64 KB. Os drive lógico C: 4 GB
primeiros 64 KB do volume lógico são armazenados na pri-
meira partição física, os segundos 64 KB são armazenados na
segunda partição física e assim por diante, até cada partição Figura C.8 Conjunto de stripes em dois drives.
ter contribuído com 64 KB de espaço. Em seguida, a alocação

*Disk striping é o processo de dividir um corpo de dados em blocos e espalhar *Um bitwise XOR toma dois padrões de bits de igual tamanho e executa a
esses blocos de dados por diversas partições em diversos discos. Cada stripe operação exclusive or lógico em cada par de bits corrrespondentes.
tem o tamanho da menor partição. (N.R.T.) (N.R.T.)
6 0   Apêndice C

disco 1 (2 GB) disco 2 (2 GB) disco 3 (2 GB)

paridade 0–15 LCNs 0–15 LCNs 16–31

LCNs 32–47 paridade 16–31 LCNs 48–63


LCNs 64–79 LCNs 80–95 paridade 32–47

paridade 48–63 LCNs 96–111 LCNs 112–127

drive lógico C: 4 GB

Figura C.9 Conjunto de stripes com paridade em três drives.

tema pode reconstruir os dados calculando o exclusive or em um conjunto de espelhos, o FtDisk grava os dados nas
dos sete restantes. Esta capacidade de reconstruir dados torna duas partições para que os conteúdos de dados das duas par-
o array de discos muito menos propenso à perda de dados em tições sejam idênticos. Se uma partição falhar, o FtDisk tem
caso de falha no disco. outra cópia seguramente armazenada no espelho. Os conjuntos
Observe que uma atualização em um stripe de dados tam- de espelhos também podem melhorar o desempenho porque
bém requer o recálculo do stripe de paridade. Portanto, sete solicitações de leitura podem ser divididas entre os dois espe-
gravações concorrentes em sete stripes de dados diferentes tam- lhos, dando a cada espelho metade da carga de trabalho. Para
bém demandariam atualizações em sete stripes de paridade. Se proteção contra a falha de um controlador de disco, podemos
os stripes de paridade estivessem todos no mesmo disco, este anexar os dois discos de um conjunto de espelhos a dois con-
disco poderia ter sete vezes a carga de I/O dos discos de dados. troladores de disco separados. Este esquema é chamado con-
Para evitar a criação deste gargalo, espalhamos os stripes de junto duplex.
paridade por todos os discos, atribuindo-os segundo o estilo Para lidar com setores de disco danificados, o FtDisk usa
round-robin. Para construir um conjunto de stripes com pari- uma técnica de hardware chamada reserva de setores e o NTFS
dade, precisamos de um mínimo de três partições de tamanho usa uma técnica de software chamada remapeamento de clus-
igual, localizadas em três discos separados. ters. A reserva de setores é um recurso de hardware fornecido
Um esquema ainda mais robusto é chamado espelhamento por muitos drives de disco. Quando um drive de disco é forma-
de disco ou RAID nível 1; ele é mostrado na Figura C.10. Um tado, a reserva de setores cria um mapa dos números de blo-
conjunto de espelhos é composto por duas partições de tama- cos lógicos relacionados a setores válidos no disco. Ela também
nho igual em dois discos. Quando uma aplicação grava dados deixa setores adicionais não mapeados, como reservas. Se um

disco 1 (2 GB) disco 2 (2 GB)

drive C: 2 GB cópia do drive C: 2 GB

Figura C.10 Conjunto de espelhos em dois drives.


Windows 2000  6 1

setor falhar, o FtDisk instruirá o drive de disco a substituí-lo alocados ou armazenados em disco. Em vez disso, lacunas são
por um reserva. O remapeamento de clusters é uma técnica de deixadas na sequência de números de clusters virtuais armaze-
software executada pelo sistema de arquivos. Se um bloco de nados na entrada da MFT do arquivo. Ao ler um arquivo, se o
disco fica danificado, o NTFS o substitui por um bloco dife- NTFS encontra uma lacuna nos números de clusters virtuais,
rente não alocado alterando quaisquer ponteiros afetados na ele apenas preenche com zeros esta parte do buffer do chama-
MFT. O NTFS também garante que o bloco inválido nunca seja dor. Esta técnica também é usada pelo UNIX.
alocado a qualquer arquivo.
Quando um bloco de disco é danificado, costuma ocorrer C.5.6 Pontos de Reanálise
perda de dados. Mas a reserva de setores ou o remapeamento Os pontos de reanálise são um novo recurso do sistema de
de clusters podem ser combinados com volumes tolerantes a arquivos. Efetivamente, eles retornam um código de erro
falhas, como os conjuntos de stripes, para mascarar a falha em quando acessados. Os dados de reanálise informam, então, ao
um bloco de disco. Se uma leitura falha, o sistema reconstrói gerenciador de I/O, o que fazer.
os dados perdidos lendo o espelho ou calculando a paridade Os pontos de montagem são formas de pontos de reaná-
exclusive or em um conjunto de stripes com paridade. lise usados na organização de arquivos. Diferente dos siste-
Os dados reconstruídos são armazenados em uma nova loca- mas UNIX, versões anteriores do Windows não forneciam
ção obtida pela reserva de setores ou pelo remapeamento de um modo de criar uma junção lógica de partições. Cada par-
clusters. tição recebia uma letra de drive diferente de todas as demais
partições. Isso significava, entre outras coisas, que se um
C.5.5 Compressão sistema de arquivos ficasse cheio, a estrutura de diretórios
O NTFS pode executar a compressão de dados em arquivos tinha de ser alterada para adicionar mais espaço. Os pontos
individuais ou em todos os arquivos de dados de um diretó- de montagem permitem a criação de um novo volume em
rio. Para comprimir um arquivo, o NTFS divide os dados do outro drive, a transferência dos dados antigos para o novo
arquivo em unidades de compressão, que são blocos de 16 volume e, então, a montagem do novo volume no local origi-
clusters contíguos. Quando cada unidade de compressão é gra- nal. Os dados parecem estar no mesmo local de antes e, por-
vada, um algoritmo de compressão de dados é aplicado. Se o tanto, ainda podem ser usados pelos programas instalados. O
resultado couber em menos de 16 clusters, a versão compri- ponto de montagem é implementado como um ponto de rea-
mida é armazenada. Em uma leitura, o NTFS pode determinar nálise com dados de reanálise contendo o nome verdadeiro
se os dados foram comprimidos: se o foram, o tamanho da uni- do volume.
dade de compressão armazenada é inferior a 16 clusters. Para O recurso de serviços de armazenamento remoto tam-
melhorar o desempenho, ao ler unidades de compressão con- bém usa pontos de reanálise. Quando um arquivo é transferido
tíguas, o NTFS executa pré-buscas e descompressões antes das para armazenamento off-line, os dados do arquivo original são
solicitações das aplicações. substituídos por um ponto de reanálise que contém informa-
Para arquivos dispersos ou arquivos que contenham zeros ções sobre onde este arquivo está. Quando o arquivo é acessado
em sua maioria, o NTFS usa outra técnica para economizar posteriormente, ele é recuperado e o ponto de reanálise é subs-
espaço. Clusters contendo somente zeros não são realmente tituído pelos dados do arquivo.

C.6 Conexão de rede


O Windows suporta conexão de redes entre pares e cliente-ser- interface habilita qualquer componente da camada de sessão a
vidor. Ele também tem recursos para gerenciamento de rede. utilizar qualquer mecanismo de transporte disponível. (Racio-
Os componentes de conexão de rede do Windows fornecem cínio semelhante levou ao mecanismo de fluxos do UNIX.) A
transporte de dados, comunicação entre processos, comparti- TDI suporta tanto o transporte com base em conexão quanto o
lhamento de arquivos por uma rede e o recurso de enviar jobs transporte sem conexão e tem funções para enviar qualquer tipo
de impressão a impressoras remotas. de dado.
Para descrever a conexão de rede no Windows, referimo-nos
a duas interfaces internas de conexão de rede: a especificação da C.6.1 Protocolos
interface de dispositivos de rede (NDIS – network device inter- O Windows implementa protocolos de transporte como dri-
face specification) e a interface do driver de transporte (TDI vers. Esses drivers podem ser carregados e descarregados dina-
– transport driver interface). A interface NDIS foi desenvol- micamente a partir do sistema, embora na prática o sistema
vida em 1989 pela Microsoft e a 3Com para separar os adap- normalmente tenha de ser reinicializado após uma alteração.
tadores de rede dos protocolos de transporte de modo que um O Windows vem com vários protocolos de conexão de rede.
possa ser alterado sem afetar o outro. A NDIS reside na inter- O protocolo bloco de mensagens de servidor (SMB –
face entre as camadas de controle do link de dados e de controle server message-block) foi introduzido pela primeira vez no
de acesso à mídia, no modelo OSI, e habilita muitos protoco- MS-DOS 3.1. O sistema usa o protocolo para enviar solicita-
los a operarem sobre muitos adaptadores de rede diferentes. Em ções de I/O pela rede. O protocolo SMB tem quatro tipos de
termos do modelo OSI, a TDI é a interface entre a camada de mensagens. As mensagens Session control são coman-
transporte (camada 4) e a camada de sessão (camada 5). Essa dos que iniciam e terminam uma conexão do redirecionador
6 2   Apêndice C

para um recurso compartilhado no servidor. O redirecionador podem compartilhar arquivos e impressoras com computado-
usa mensagens File para acessar arquivos no servidor. O sis- res Macintosh, por meio do AppleTalk, desde que um servidor
tema usa mensagens Printer para enviar dados a uma fila de Windows na rede esteja executando o pacote Windows Servi-
impressão remota e receber de volta informações de status; a ces for Macintosh.
mensagem Message é usada na comunicação com outra esta-
ção de trabalho. C.6.2 Mecanismos de Processamento
O sistema básico de entrada/saída de rede (NetBIOS – Distribuído
network basic input/output system) é uma interface de abstra-
ção de hardware para redes, análoga à interface de abstração de Embora o Windows não seja um sistema operacional distri-
hardware BIOS projetada para PCs executando o MS-DOS. O buído, ele suporta aplicações distribuídas. Os mecanismos
NetBIOS, desenvolvido no início dos anos 1980, tornou-se uma que dão suporte ao processamento distribuído no Windows
interface padrão de programação de rede. O NetBIOS é usado incluem o NetBIOS, pipes nomeados e mailslots, sockets do
para estabelecer nomes lógicos na rede, estabelecer conexões Windows, chamadas de procedimento remotas e a troca dinâ-
lógicas, ou sessões, entre dois nomes lógicos na rede e suportar mica de dados na rede (NetDDE, - network dynamic data
transferência de dados confiável para uma sessão, via solicita- exchange).
ções tanto do NetBIOS quanto do SMB. No Windows, as aplicações NetBIOS podem se comunicar
A interface de usuário estendida do NetBIOS (NetBEUI pela rede usando NetBEUI, NWLink ou TCP/IP.
– NetBIOS extended user interface) foi introduzida pela IBM Pipes nomeados são mecanismos de troca de mensagens
em 1985 como um protocolo de conexão de rede simples e efi- orientados a conexões. Eles foram desenvolvidos originalmente
ciente para até 254 máquinas. É o protocolo default da conexão como uma interface de alto nível para conexões NetBIOS por
de rede em pares do Windows 95 e do Windows for Work- uma rede. Um processo também pode usar pipes nomeados
groups. O Windows usa o NetBEUI quando quer compartilhar para se comunicar com outros processos na mesma máquina.
recursos com essas redes. Entre as limitações do NetBEUI estão Como os pipes nomeados são acessados por meio da interface
o fato de ele usar o nome real de um computador como ende- do sistema de arquivos, os mecanismos de segurança usados
reço e de não dar suporte a roteamento. para objetos arquivo também se aplicam a eles.
A suíte de protocolos TCP/IP, usada na Internet, tornou-se O nome de um pipe nomeado tem um formato chamado
a infraestrutura de conexão de rede padrão de fato; ela é ampla- convenção de nomeação uniforme (UNC – uniform naming
mente suportada. O Windows usa o TCP/IP para se conectar convention). Um nome UNC tem a aparência de um nome
com uma ampla variedade de sistemas operacionais e plata- de arquivo remoto típico. O formato de um nome UNC é \\
formas de hardware. O pacote TCP/IP do Windows inclui o server_name\share-name\x\y\z, no qual server_
protocolo simples de gerenciamento de rede (SNMP - Sim- name identifica um servidor na rede; share_name identifica
ple Network-Management Protocol), o protocolo dinâmico de qualquer recurso que esteja disponível aos usuários da rede,
configuração de hosts (DHCP - Dynamic Host-Configuration tais como diretórios, arquivos, pipes nomeados e impressoras;
Protocol), o serviço de nomes de Internet do Windows (WINS e a parte \x\y\z é um nome de caminho de arquivo normal.
- Windows Internet Name Service) e suporte ao NetBIOS. Mailslots são mecanismos de troca de mensagens sem cone-
O protocolo de transmissão ponto a ponto (PPTP – xão. Eles não são confiáveis porque uma mensagem enviada a
Point-To-Point Tunneling Protocol) é fornecido pelo Win- um mailslot pode ser perdida antes que o receptor pretendido
dows para a comunicação entre módulos de servidores de a receba. Mailslots são usados em aplicações de distribuição,
acesso remoto executados em máquinas Windows Server e como na busca de componentes na rede; eles também são usa-
outros sistemas clientes que estejam conectados pela Inter- dos pelo serviço Windows Computer Browser.
net. Os servidores de acesso remoto podem criptografar O Winsock é a API de sockets do Windows. É uma inter-
dados enviados pela conexão e suportam redes virtuais pri- face da camada de sessão amplamente compatível com sockets
vadas multiprotocolares na Internet. UNIX, com algumas extensões Windows. Ele fornece uma
Os protocolos NetWare da Novell (serviço de datagrama interface padronizada para muitos protocolos de transporte
IPX na camada de transporte SPX) são amplamente usados em que podem ter diferentes esquemas de endereçamento, de
LANs de PCs. O protocolo NWLink do Windows conecta o modo que qualquer aplicação Winsock possa ser executada em
NetBIOS a redes NetWare. Combinado a um redirecionador qualquer pilha de protocolos compatível com o Winsock.
(como o Client Service for NetWare da Microsoft ou o NetWare Uma chamada de procedimento remota (RPC) é um meca-
Client for Windows da Novell), esse protocolo habilita um nismo cliente-servidor que habilita uma aplicação em uma
cliente Windows a se conectar a um servidor NetWare. máquina a fazer uma chamada de procedimento para código
O Windows usa o protocolo de controle de link de dados em outra máquina. O cliente chama um procedimento local
(DLC – data-link control) para acessar mainframes IBM e – uma rotina stub – que empacota seus argumentos em uma
impressoras HP conectados diretamente à rede. A não ser nes- mensagem e os envia pela rede a um processo servidor espe-
ses casos, esse protocolo não é usado por sistemas Windows. cífico. A rotina stub do lado do cliente é então bloqueada.
O protocolo AppleTalk foi projetado como uma cone- Enquanto isso, o servidor desempacota a mensagem, chama
xão de baixo custo pela Apple para permitir que computa- o procedimento, empacota os resultados de retorno em uma
dores Macintosh compartilhem arquivos. Sistemas Windows mensagem e os envia de volta ao stub do cliente. O stub do
Windows 2000  6 3

cliente é desbloqueado, recebe a mensagem, desempacota os • A aplicação chama o gerenciador de I/O para solicitar que
resultados da RPC e os retorna ao chamador. Esse empacota- um arquivo seja aberto com um nome de arquivo no formato
mento de argumentos também é denominado marshalling. UNC padrão.
O mecanismo de RPC do Windows segue o amplamente • O gerenciador de I/O constrói um pacote de solicitação de
usado padrão de ambiente de computação distribuída para I/O, como descrito na Seção C.3.3.5.
mensagens RPC e, portanto, programas escritos para usar
RPCs do Windows são altamente portáveis. O padrão RPC
• O gerenciador de I/O reconhece que o acesso é para um
arquivo remoto e chama um driver conhecido como prove-
é detalhado. Ele oculta muitas das diferenças de arquitetura
dor múltiplo de convenção universal de nomeação (MUP –
entre computadores, como os tamanhos de números binários
multiple universal-naming-convention provider).
e a ordem de bytes e bits em palavras do computador, especifi-
cando formatos de dados padrão para mensagens RPC. • O MUP envia o pacote de solicitação de I/O assincronamente
O Windows pode enviar mensagens RPC usando o Net- a todos os redirecionadores registrados.
BIOS, o Winsock em redes TCP/IP ou pipes nomeados em • Um redirecionador que possa atender à solicitação responde
redes LAN Manager. O recurso LPC, discutido anteriormente, ao MUP. Para não fazer a mesma pergunta a todos os redire-
é semelhante à RPC, exceto pelo fato de que, na LPC, as mensa- cionadores no futuro, o MUP usa um cache para lembrar do
gens são passadas entre dois processos em execução no mesmo redirecionador que pode manipular este arquivo.
computador. • O redirecionador envia a solicitação de rede para o sistema
É tedioso e propenso a erros escrever o código que empa- remoto.
cota e transmite argumentos, desempacota e executa o procedi-
mento remoto, empacota e envia os resultados de retorno e os
• Os drivers de rede do sistema remoto recebem a solicitação e
a passam ao driver do servidor.
desempacota e os retorna ao chamador. Felizmente, no entanto,
grande parte desse código pode ser gerada automaticamente a • O driver do servidor envia a solicitação ao driver apropriado
partir de uma simples descrição dos argumentos e resultados do sistema de arquivos local.
de retorno. • O driver de dispositivo apropriado é chamado para acessar
O Windows fornece a Linguagem de Definição de Inter- os dados.
faces da Microsoft para a descrição dos nomes de procedi- • Os resultados são retornados ao driver do servidor que envia
mentos remotos, argumentos e resultados. O compilador os dados de volta ao redirecionador solicitante. O redirecio-
desta linguagem gera arquivos de cabeçalho que declaram os nador retorna, então, os dados à aplicação chamadora por
stubs dos procedimentos remotos e os tipos de dados do argu- meio do gerenciador de I/O.
mento e das mensagens de valores de retorno. Ele também gera
código-fonte para as rotinas de stub usadas no lado do cliente Um processo semelhante ocorre para aplicações que usam a
e para um desempacotador e despachante no lado do servidor. API de rede Win32 em vez dos serviços UNC, exceto pelo fato
Quando a aplicação é vinculada, as rotinas de stub são incluídas. de que é usado um módulo chamado roteador multiprovedor,
Quando a aplicação executa o stub da RPC, o código gerado em vez de um MUP.
manipula o resto. Por razões de portabilidade, os redirecionadores e servi-
O modelo de objetos componentes (COM – Component dores usam a API TDI no transporte de rede. As próprias soli-
Object Model) é um mecanismo para a comunicação entre pro- citações são expressas em um protocolo de nível mais alto que,
cessos desenvolvido para o Windows. Os objetos COM forne- por default, é o protocolo SMB mencionado na Seção C.6.1.
cem uma interface bem definida para a manipulação dos dados A lista de redirecionadores é mantida no banco de dados do
do objeto. O Windows tem uma extensão chamada DCOM que registro do sistema.
pode ser usada por uma rede, utilizando o mecanismo de RPC
para fornecer um método transparente de desenvolvimento de C.6.4 Domínios
aplicações distribuídas. Muitos ambientes de rede têm grupos naturais de usuários,
como alunos de um laboratório de computação na escola ou
C.6.3 Redirecionadores e Servidores empregados de um departamento em uma empresa. Com fre-
No Windows, uma aplicação pode usar a API de I/O do sis- quência, é desejável que todos os membros do grupo possam
tema para acessar arquivos em um computador remoto como acessar recursos compartilhados nos diversos computadores
se eles fossem locais, contanto que o computador remoto do grupo. Para gerenciar os direitos de acesso globais desses
esteja executando um servidor MS-NET, como o fornecido grupos, o Windows usa o conceito de domínio. Anteriormente,
pelo Windows ou pelo Windows for Workgroups. Um redi- esses domínios não tinham qualquer relação com o sistema de
recionador é o objeto do lado do cliente que encaminha soli- nome de domínio (DNS) que mapeia nomes de hosts na Inter-
citações de I/O a arquivos remotos, onde elas são atendidas net para endereços IP; agora, no entanto, eles estão intima-
por um servidor. Por questões de desempenho e segurança, mente relacionados.
os redirecionadores e servidores são executados em modali- Especificamente, um domínio no Windows é um grupo
dade de kernel. de estações de trabalho e servidores Windows que comparti-
Especificamente, o acesso a um arquivo remoto ocorre lham uma política de segurança comum e um banco de dados
como descrito a seguir. de usuários. Já que agora o Windows usa o protocolo Kerbe-
6 4   Apêndice C

ros para crédito e autenticação, um domínio no Windows é domínios A e B sejam nós folhas e que os usuários de A usem,
a mesma coisa que uma região no Kerberos. Versões anterio- com frequência, recursos de B. Se um crédito transitivo padrão
res do NT usavam a ideia de controladores de domínio pri- for usado, as solicitações de autenticação têm de seguir para
mário e de backup; agora, todos os servidores de um domínio cima até o ancestral comum dos dois nós folhas; mas, se A e B
são controladores de domínio. Além disso, versões anteriores têm estabelecido um crédito de vínculo cruzado, as autentica-
demandavam a configuração de créditos unidirecionais entre ções podem ser enviadas diretamente ao outro nó.
domínios. O Windows usa uma abordagem hierárquica com
base no DNS e permite créditos transitivos que possam fluir C.6.5 Resolução de Nomes em Redes
para cima e para baixo na hierarquia. Esta abordagem reduz o TCP/IP
número de créditos requeridos para n domínios, de n*(n – 1) Em uma rede IP, a resolução de nomes é o processo de con-
para O(n). As estações de trabalho do domínio confiam que versão de um nome de computador em um endereço IP, como
o controlador de domínio forneça informações corretas sobre na resolução de www.bell-labs.com para 135.104.1.14. O Win-
os direitos de acesso de cada usuário (via o token de acesso do dows fornece vários métodos de resolução de nomes, incluindo
usuário). Todos os usuários podem restringir o acesso a suas o Windows Internet Name Service (WINS), a resolução distri-
próprias estações de trabalho, independente do que qualquer buída de nomes, o sistema de nomes de domínio (DNS), um
controlador de domínio tenha a dizer. arquivo de hosts e um arquivo LMHOSTS. A maioria desses
Já que uma empresa pode ter muitos departamentos e uma métodos é usada por muitos sistemas operacionais e, portanto,
escola pode ter muitas turmas, faz-se necessário, com frequên- descrevemos aqui apenas o WINS.
cia, gerenciar vários domínios dentro da mesma organização. Sob o WINS, dois ou mais servidores WINS mantêm um
Uma árvore de domínios é uma hierarquia de nomeação DNS banco de dados dinâmico de vinculações nome-para-endereço IP,
contígua para o gerenciamento de vários domínios. Por exem- junto com software cliente de consulta aos servidores. Pelo menos
plo, bell-labs.com pode ser a raiz da árvore, com research.bell- dois servidores são usados, para que o serviço WINS possa sobre-
labs.com e pez.bell-labs.com como filhos – domínios research viver à falha em um servidor e para que a carga de trabalho de
e pez. Uma floresta é um conjunto de nomes não contíguos. resolução de nomes possa ser distribuída por várias máquinas.
Um exemplo seriam as árvores bell-labs.com e/ou lucent.com. O WINS usa o protocolo dinâmico de configuração de hosts
Porém, uma floresta pode ser composta por apenas uma árvore (DHCP). O DHCP atualiza configurações de endereço auto-
de domínios. maticamente no banco de dados WINS, sem intervenção do
Os créditos de confiança podem ser estabelecidos, entre usuário ou do administrador, como descrito a seguir. Quando
domínios, de três formas: unidirecional, transitiva e de vínculo um cliente DHCP é inicializado, ele transmite uma mensagem
cruzado. Versões do NT até a versão 4.0 só permitiam o estabe- discover. Cada servidor DHCP que recebe a mensagem res-
lecimento de créditos de confiança unidirecionais. Um crédito ponde com uma mensagem offer contendo um endereço IP
unidirecional é exatamente o que seu nome sugere: o domínio e informações de configuração para o cliente. O cliente sele-
A é informado de que pode confiar no domínio B. No entanto, ciona, então, uma das configurações e envia uma mensagem
B não confiará em A a menos que outro relacionamento seja request ao servidor DHCP selecionado. O servidor DHCP
configurado. Sob um crédito transitivo, se A confia em B e B responde, com o endereço IP, as informações de configuração
confia em C, então, A, B e C confiam uns nos outros, porque anteriormente fornecidas e uma concessão para este endereço.
créditos transitivos são bidirecionais por default. Créditos tran- A concessão dá ao cliente o direito de usar o endereço IP por
sitivos são habilitados, por default, para novos domínios em um período de tempo especificado. Quando o tempo de con-
uma árvore e só podem ser configuradas entre domínios de cessão está a meio caminho de expirar, o cliente tenta renovar a
uma floresta. O terceiro tipo, um crédito de vínculo cruzado, concessão para este endereço. Se a concessão não for renovada,
é útil para reduzir o tráfego de autenticação. Suponha que os o cliente terá de obter uma nova.

C.7 Interface do Programador


A API Win32 é a interface básica para os recursos do Windows. a função CreateXXX para abrir um manipulador para XXX.
Esta seção descreve cinco aspectos principais da API Win32: Esse manipulador é exclusivo para este processo. Dependendo
o acesso a objetos do kernel, o compartilhamento de objetos do objeto que está sendo aberto, se a função create falhar, ela
entre processos, o gerenciamento de processos, a comunicação pode retornar 0 ou uma constante especial chamada INVA-
entre processos e o gerenciamento da memória. LID_HANDLE_VALUE. Um processo pode fechar qualquer
manipulador chamando a função CloseHandle e o sistema
C.7.1 Acesso a Objetos do Kernel e Seu pode excluir o objeto se a contagem de processos usuários do
objeto chegar a 0.
Compartilhamento O Windows fornece três formas de compartilhar objetos
O kernel do Windows fornece muitos serviços que os progra- entre processos. A primeira forma é a herança, por um processo
mas aplicativos podem usar. Os programas aplicativos obtêm filho, de um manipulador para o objeto. Quando o pai chama
esses serviços manipulando objetos do kernel. Um processo a função CreateXXX, ele fornece uma estrutura SECURI-
ganha acesso a um objeto do kernel de nome XXX chamando TIES_ATTRIBUTES com o campo bInheritHandle
Windows 2000  6 5

Figura C.11 Código para que um filho compartilhe um objeto herdado sem manipulador.

posicionado como TRUE. Este campo cria um manipulador valor do manipulador a partir do primeiro argumento da linha
passível de ser herdado. Em seguida, o processo filho pode ser de comando e poderia, então, compartilhar o semáforo com o
criado, passando um valor TRUE para o argumento bInhe- processo pai.
ritHandle da função CreateProcess. A Figura C.11 A segunda forma de compartilhar objetos é o fornecimento,
mostra um exemplo de código que cria um manipulador para por um processo, de um nome ao objeto, quando este é criado,
semáforo herdado por um processo filho. e a abertura deste nome pelo segundo processo. Este método
Supondo que o processo filho saiba quais manipulado- apresenta duas desvantagens. Em primeiro lugar, o Windows
res estão sendo compartilhados, o pai e o filho podem obter a não fornece um modo de verificar se um objeto com o nome
comunicação entre processos por meio dos objetos comparti- selecionado já existe. Em segundo lugar, o espaço de nomes de
lhados. No exemplo da Figura C.11, o processo filho obteria o objetos é global, sem levar em consideração o tipo do objeto.

Processo A

Processo B

Figura C.12 Código para compartilhamento de um objeto na busca de nome.

Processo A quer dar ao processo B acesso a um semáforo

Processo A

envia o valor do semáforo ao Processo B


usando uma mensagem ou um objeto memória compartilhado

Processo B

usa b_semaphore para acessar o semáforo

Figura C.13 Código para compartilhamento de um objeto passando um manipulador.


6 6   Apêndice C

Por exemplo, duas aplicações podem criar um objeto chamado Os processos são, tipicamente, membros da NORMAL_
pipe quando dois objetos distintos – e possivelmente diferentes PRIORITY_CLASS, a menos que o pai do processo seja da
– são desejados. IDLE_PRIORITY_CLASS ou que outra classe tenha sido
Os objetos nomeados apresentam a vantagem de que especificada quando CreateProcess foi chamada. A classe
processos não relacionados podem compartilhá-los ime- de prioridade de um processo pode ser alterada com a função
diatamente. O primeiro processo chama uma das funções SetPriorityClass ou com a passagem de um argumento
CreateXXX e fornece um nome no parâmetro lpszName. para o comando START. Por exemplo, o comando START /
O segundo processo pode obter um manipulador para compar- REALTIME cbserver.exe executaria o programa cbser-
tilhar este objeto chamando OpenXXX (ou CreateXXX) com ver na REALTIME_PRIORITY_CLASS. Apenas usuá-
o mesmo nome, como mostrado no exemplo da Figura C.12. rios com o privilégio de aumento de prioridade de scheduling
A terceira forma de compartilhar objetos é por meio da podem passar um processo para a REALTIME_PRIORITY_
função DuplicateHandle. Este método requer algum CLASS. Administradores e usuários avançados têm este privi-
outro método de comunicação entre processos para passar o légio por default.
manipulador duplicado. Dados um manipulador para um pro- Quando um usuário está executando um programa intera-
cesso e o valor de um manipulador dentro deste processo, um tivo, o sistema precisa fornecer um desempenho especialmente
segundo processo pode obter um manipulador para o mesmo bom para este processo. Portanto, o Windows tem uma regra de
objeto e, assim, compartilhá-lo. Um exemplo desse método é scheduling especial para processos da NORMAL_PRIORITY_
mostrado na Figura C.13. CLASS. O Windows distingue o processo de foreground que
está correntemente selecionado na tela dos processos de back-
C.7.2 Gerenciamento de Processos ground que não estão correntemente selecionados. Quando
No Windows, um processo é uma instância de uma aplicação um processo passa para foreground, o Windows aumenta o
em execução e um thread é uma unidade de código passível de quantum do scheduling de algum fator – normalmente, 3. (Este
ser incluída no schedule pelo sistema operacional. Logo, um fator pode ser alterado por meio da opção de desempenho na
processo contém um ou mais threads. O processo é iniciado seção do sistema no painel de controle.) Esse aumento dá ao
quando algum outro processo chama a rotina CreatePro- processo de foreground três vezes mais tempo para ser execu-
cess. Essa rotina carrega as bibliotecas de vínculo dinâmico tado antes que uma preempção de compartilhamento de tempo
usadas pelo processo e cria um thread primário. Threads adi- ocorra.
cionais podem ser criados pela função CreateThread. Cada Um thread começa com uma prioridade inicial determi-
thread é criado com sua própria pilha que, por default, tem nada por sua classe, mas a prioridade pode ser alterada pela
1 MB, a menos que seja especificado diferentemente em um função SetThreadPriority. Esta função usa um argu-
argumento de CreateThread. Como algumas funções C mento que especifica uma prioridade relativa à prioridade base
de tempo de execução mantêm o estado em variáveis estáticas, de sua classe:
como errno, uma aplicação multithreads precisa se proteger • THREAD_PRIORITY_LOWEST: base − 2
do acesso não sincronizado. A função encapsuladora begin- • THREAD_PRIORITY_BELOW_NORMAL: base − 1
threadex fornece sincronização apropriada.
Cada biblioteca de vínculo dinâmico ou arquivo executá-
• THREAD_PRIORITY_NORMAL: base + 0
vel, carregado no espaço de endereçamento de um processo, • THREAD_PRIORITY_ABOVE_NORMAL: base + 1
é identificado por meio de um manipulador de instância. O • THREAD_PRIORITY_HIGHEST: base + 2
valor do manipulador de instância é, na verdade, o endereço
Duas outras designações também são usadas no ajuste da
virtual onde o arquivo é carregado. Uma aplicação pode obter
prioridade. Lembre-se, da Seção C.3.2, de que o kernel tem
o manipulador para um módulo em seu espaço de endereça-
duas classes de prioridades: 16−31 para a classe de tempo
mento, passando o nome do módulo para GetModuleHan-
real e 0−15 para a classe de prioridade variável. THREAD_
dle. Se o nome passado é NULL, o endereço base do processo
PRIORITY_IDLE estabelece a prioridade 16 para thre-
é retornado. Os 64 KB inferiores do espaço de endereçamento
ads de tempo real e 1 para threads de prioridade variável.
não são usados e, portanto, um programa defeituoso que tente
THREAD_PRIORITY_TIME_CRITICAL estabelece a
eliminar a referencia de um ponteiro NULL gerará uma viola-
prioridade 31 para threads de tempo real e 15 para threads
ção de acesso.
de prioridade variável.
As prioridades no ambiente Win32 são baseadas no modelo
Como discutimos na Seção C.3.2, o kernel ajusta a priori-
de scheduling do Windows, mas nem todos os valores de prio-
dade de um thread dinamicamente, dependendo de o thread
ridade podem ser selecionados. O Win32 usa quatro classes de ser limitado por I/O ou limitado por CPU. A API Win32 for-
prioridades: nece um método para desabilitar esse ajuste por meio das
• IDLE_PRIORITY_CLASS (prioridade nível 4) funções SetProcessPriorityBoost e SetThread-
PriorityBoost.
• NORMAL_PRIORITY_CLASS (prioridade nível 8)
Um thread pode ser criado em estado suspenso, o que sig-
• HIGH_PRIORITY_CLASS (prioridade nível 13) nifica que ele não será executado até que outro thread o torne
• REALTIME_PRIORITY_CLASS (prioridade nível 24) elegível por meio da função ResumeThread. A função
Windows 2000  6 7

SuspendThread faz o oposto. Essas funções posicionam Um thread pode enviar uma mensagem a outro thread
um contador de modo que se um thread for suspenso duas ou a uma janela chamando PostMessage, PostThread-
vezes, ele tenha de ser retomado duas vezes antes que possa ser Message, SendMessage, SendThreadMessage ou
executado. SendMessageCallback. A diferença entre postar uma
Para sincronizar o acesso concorrente a objetos compar- mensagem e enviar uma mensagem é que as rotinas de posta-
tilhados por threads, o kernel fornece objetos de sincroniza- gem são assíncronas: elas retornam imediatamente e o thread
ção, como semáforos e mutexes. Além disso, a sincronização chamador não sabe quando a mensagem é realmente liberada.
de threads pode ser obtida com o uso das funções WaitFor- As rotinas de envio são síncronas: elas bloqueiam o chamador
SingleObject e WaitForMultipleObjects. Outro até que a mensagem tenha sido liberada e processada.
método de sincronização da API Win32 é a seção crítica. Uma Além de enviar uma mensagem, um thread pode enviar
seção crítica é uma região de código sincronizada que só pode dados com a mensagem. Os dados devem ser copiados porque
ser executada por um thread de cada vez. Um thread estabelece os processos têm espaços de endereçamento separados. O sis-
uma seção crítica chamando InitializeCriticalSec- tema copia os dados chamando SendMessage para enviar
tion. A aplicação deve chamar EnterCriticalSection uma mensagem do tipo WM_COPYDATA com uma estrutura
antes de entrar na seção crítica e LeaveCriticalSec- de dados COPYDATASTRUCT contendo o tamanho e o ende-
tion após sair da seção crítica. Essas duas rotinas garantem reço dos dados a serem transferidos. Quando a mensagem
que, se vários threads tentam entrar na seção crítica concorren- é enviada, o Windows copia os dados em um novo bloco de
temente, apenas um thread de cada vez tenha permissão para memória e fornece o endereço virtual do novo bloco ao pro-
prosseguir; os outros esperarão na rotina EnterCritical- cesso receptor.
Section. O mecanismo da seção crítica é um pouco mais Diferente dos threads no ambiente Windows de 16 bits,
rápido do que os objetos de sincronização do kernel. cada thread Win32 tem sua própria fila de entradas a partir da
Uma fibra é um código de modalidade de usuário que é qual ele recebe mensagens. (Todas as entradas são recebidas
incluído no schedule de acordo com um algoritmo de schedu- por meio de mensagens.) Essa estrutura é mais confiável do
ling definido pelo usuário. Um processo pode ter várias fibras, que a fila de entradas compartilhada do Windows de 16 bits
assim como pode ter vários threads. Uma diferença importante porque, com filas separadas, uma aplicação travada não pode
entre threads e fibras é que enquanto os threads podem execu- bloquear entradas das outras aplicações. Se uma aplicação
tar concorrentemente, apenas uma fibra de cada vez tem per- Win32 não chamar GetMessage para manipular eventos
missão para executar, mesmo em hardware multiprocessador. em sua fila de entradas, a fila ficará cheia; após, aproximada-
Esse mecanismo foi incluído no Windows para facilitar a por- mente, cinco segundos, o sistema marcará a aplicação como
tabilidade das aplicações legadas do UNIX escritas para um “Não Respondendo”.
modelo de execução de fibras.
O sistema cria uma fibra chamando ConvertThrea- C.7.4 Gerenciamento da Memória
dToFiber ou CreateFiber. A principal diferença entre A API Win32 fornece várias maneiras de uma aplicação usar
essas funções é que CreateFiber não inicia a execução da memória: memória virtual, arquivos mapeados para a memó-
fibra que foi criada. Para iniciar a execução, a aplicação deve ria, heaps e armazenamento local de threads.
chamar SwitchToFiber. A aplicação pode encerrar uma Uma aplicação chama VirtualAlloc para reservar ou
fibra chamando DeleteFiber. consignar memória virtual e VirtualFree para descon-
signar ou liberar memória. Essas funções habilitam a aplica-
C.7.3 Comunicação entre Processos ção a especificar o endereço virtual em que a memória está
Uma forma pela qual as aplicações Win32 podem executar a alocada. Elas operam com múltiplos do tamanho de página
comunicação entre processos é compartilhando objetos do kernel. da memória e o endereço inicial de uma região alocada deve
Outra forma é transmitindo mensagens, uma abordagem que é ser maior do que 0x10000. Veja exemplos dessas funções na
particularmente popular em aplicações de GUI do Windows. Figura C.14.

aloca 16 MB no topo de nosso espaço de endereçamento

consigna os 8 MB superiores do espaço alocado

faz algo com a memória

agora, desconsigna a memória

libera todo o espaço de endereçamento alocado

Figura C.14 Fragmentos de código para alocação de memória virtual.


6 8   Apêndice C

abre o arquivo ou cria se ele não existir

cria o mapeamento do arquivo com 8 MB de tamanho

agora, obtém uma visão do espaço mapeado

faz algo com o arquivo mapeado

agora, desfaz o mapeamento do arquivo

Figura C.15 Fragmentos de código para mapeamento de um arquivo para a memória.

Um processo pode trancar algumas de suas páginas consig- atualizações concorrentes feitas por múltiplos threads. O Win32
nadas na memória física chamando VirtualLock. O número fornece várias funções de gerenciamento de heaps para que um
máximo de páginas que um processo pode trancar é 30, a menos processo possa alocar e gerenciar um heap privado. �����������
São as fun-
que o processo chame primeiro SetProcessWorkingSet- ções HeapCreate, HeapAlloc, HeapRealloc, Heap-
Size para aumentar o tamanho máximo do conjunto de Size, HeapFree e HeapDestroy. A API Win32 também
trabalho. fornece as funções HeapLock e HeapUnlock para habili-
Uma segunda forma pela qual uma aplicação pode usar tar um thread a obter acesso exclusivo a um heap. Diferente de
a memória é mapeando um arquivo para a memória em seu VirtualLock, essas funções executam apenas sincronização;
espaço de endereçamento. O mapeamento da memória também elas não trancam páginas na memória física.
é uma forma conveniente de dois processos compartilharem Uma quarta forma de as aplicações usarem memória é por
memória: ambos mapeiam o mesmo arquivo para sua memó- meio de um mecanismo de armazenamento local de threads.
ria virtual. O mapeamento da memória é um processo de vários Normalmente, funções que dependem de dados globais ou
estágios, como podemos ver no exemplo da Figura C.15. estáticos não funcionam apropriadamente em um ambiente
Se um processo quiser mapear algum espaço de endereça- multithreads. Por exemplo, a função C strtok de tempo de
mento apenas para compartilhar uma região da memória com execução usa uma variável estática para rastrear sua posição
outro processo, nenhum arquivo será necessário. O processo corrente ao analisar uma cadeia de caracteres. Para que dois
pode chamar CreateFileMapping com um manipulador threads concorrentes executem strtok corretamente, eles
de arquivo igual a 0xffffffff e um tamanho específico. O objeto precisam de variáveis de posição corrente separadas. O meca-
mapeamento de arquivo resultante pode ser compartilhado por nismo de armazenamento local de threads aloca memória glo-
herança, por busca de nome ou por duplicação. bal por thread. Ele fornece métodos dinâmicos e estáticos para
Os heaps fornecem uma terceira forma de as aplicações criação de armazenamento local de threads. O método dinâ-
usarem memória. Um heap no ambiente Win32 é apenas uma mico é ilustrado na Figura C.16.
região de espaço de endereçamento reservado. Quando um pro- Para usar uma variável estática local de thread, a aplicação
cesso Win32 é inicializado, ele é criado com um heap default declara a variável como descrito a seguir para assegurar que
de 1 MB. Como muitas funções Win32 usam o heap default, cada thread tenha sua própria cópia privada:
o acesso ao heap é sincronizado para proteger as estruturas de
dados de alocação de espaço do heap contra danos causados por _ _declspec(thread) DWORD cur_pos = 0;

reserva um espaço para uma variável

configura-a com o valor 10

obtém o valor

libera o índice

Figura C.16 Código para armazenamento dinâmico local de threads.


Windows 2000  6 9

C.8 Resumo
A Microsoft projetou o Windows para ser um sistema opera- Ele fornece memória virtual, armazenamento em cache inte-
cional extensível e portável – capaz de se beneficiar de novas grado e scheduling preemptivo. O Windows suporta um
técnicas e novo hardware. O Windows suporta ambientes ope- modelo de segurança mais forte do que os de sistemas ope-
racionais múltiplos e multiprocessamento simétrico. Também racionais anteriores da Microsoft e inclui recursos de inter-
suporta uma ampla variedade de ambientes de aplicações nacionalização. O Windows opera em uma ampla variedade
devido ao uso que faz de objetos do kernel para fornecer ser- de computadores e, portanto, os usuários podem selecionar
viços básicos, além do suporte à computação cliente-servidor. e atualizar o hardware para que se ajuste a seus orçamentos e
Por exemplo, o Windows pode executar programas compila- requisitos de desempenho, sem precisar alterar as aplicações
dos para MS-DOS, Win16, Windows 95, Windows e POSIX. que executam.

Exercícios
C.1 Cite algumas razões pelas quais a transferência do código C.6 Quais são os passos que o gerenciador de caches deve percorrer
gráfico do Windows 2000, da modalidade de usuário para para copiar dados para dentro e para fora do cache?
a modalidade de kernel, pode diminuir a confiabilidade do
C.7 Quais são os principais problemas envolvidos na execução de
sistema. Quais dos objetivos de projeto originais do Windows
aplicações do Windows de 16 bits em uma VDM? Identifique
2000 são violados por tal degradação?
as soluções selecionadas pelo Windows para cada um
C.2 O gerenciador de VM do Windows usa um processo de dois desses problemas. Para cada solução, cite pelo menos uma
estágios para alocar memória. Identifique vários aspectos para desvantagem.
os quais esta abordagem é benéfica.
C.8 Que alterações seriam necessárias para que o Windows execute
C.3 Discuta algumas vantagens e algumas desvantagens da um processo que use um espaço de endereçamento de 64 bits?
estrutura de tabela de páginas usada no Windows.
C.9 O Windows tem um gerenciador de caches centralizado. Quais
C.4 Qual é o número máximo de erros de página que poderia são as vantagens e desvantagens deste gerenciador de caches?
ocorrer no acesso de (a) um endereço virtual e (b) um
C.10 O Windows usa um sistema de I/O dirigido por pacotes.
endereço virtual compartilhado? Que mecanismo de hardware
Discuta os prós e contras da abordagem de I/O dirigido por
a maioria dos processadores fornece para diminuir esses
pacotes.
números?
C.11 Considere um banco de dados na memória principal com 1
C.5 Qual é a finalidade de uma entrada protótipo da tabela de
terabyte. Que mecanismos você poderia usar no Windows
páginas no Windows?
para acessar este banco de dados?

Notas Bibliográficas
Solomon e Russinovich [2000] fornecem uma visão geral do soft [2000a]), emitida trimestralmente, fornece muitas
Windows e detalhes técnicos consideráveis sobre os meca- informações sobre o Windows e outros produtos da Micro-
nismos internos e componentes do sistema. Tate [2000] é soft. Iseminger [2000] fornece uma boa referência sobre o
uma boa referência sobre o uso do Windows. O Microsoft Active Directory do Windows. Richter [1997] oferece uma
Windows Server Resource Kit (Microsoft [2000b]) é um discussão detalhada sobre a criação de programas que usem
conjunto de seis volumes, útil para o uso e implantação do a API Win32. Silberschatz et al. [2010] apresentam uma boa
Windows. A Microsoft Developer Network Library (Micro- discussão sobre as árvores B+.

Você também pode gostar