A salada de HALs no Windows
HAL (Hardware Abstraction Layer) é um módulo do kernel NT que faz a abstração de hardware entre plataformas diferentes e recursos específicos de hardware (controlador de interrupções, interfaces de E/S, etc.). Componentes internos do Windows e drivers de dispositivo são programados usando rotinas do HAL, que mantém uniformidade entre hardware e plataformas diferentes. Desde seu planejamento, o Windows NT teve como um de seus objetivos ser um sistema operacional portável, que pudesse ser adaptado a novas arquiteturas à medida que o mercado demandasse.
Até o Windows XP/Server 2003, o HAL correto era copiado na hora da instalação de acordo com o hardware (sempre chamando-se
WINDOWS 2000/XP/2003 (FAMÍLIA NT 5.x)
Os seguintes principais HALs estão disponíveis (
(existem outros)
Tradução:
PC padrão → Máquinas monoprocessadas sem ACPI e APIC (velharias como PC-Chips M598LMR e coisas do tipo).
Interface de energia e configuração avançada (ACPI) PC → Máquinas monoprocessadas com ACPI porém sem APIC (velharias como PC-Chips M810LMR e similares, ou placas mais modernas com APIC desativado no setup).
ACPI Uniprocessor PC → Máquinas monoprocessadas com ACPI e APIC.
ACPI Multiprocessor PC → Máquinas multiprocessadas com ACPI e APIC.
Se removermos o hardware caduco, sobram dois HALs: ACPI Uniprocessor PC e ACPI Multiprocessor PC.
O Sysprep nos permite preparar uma imagem pré-configurada que auto-detecta o hardware na próxima inicialização (Mini-Setup). A ferramenta pode ser configurada para substituir o HAL durante o Mini-Setup. Em teoria, o HAL ACPI Multiprocessor PC funciona em máquinas monoprocessadas (com alguma perda de desempenho) — o contrário nem inicia. Não é oferecido suporte por parte da Microsoft a instalações cujo HAL não corresponda ao que seria escolhido durante uma instalação normal.
A documentação diz que, quando a instalação de origem usa o HAL ACPI Multiprocessor PC (ou seja, feita num sistema multiprocessado), se você mandar o Sysprep substitui-lo pelo ACPI Uniprocessor PC, ele o fará apenas quando a máquina de destino for monoprocessada; caso contrário, manterá o HAL original — no caminho inverso o HAL sempre é trocado. Resolve todos os problemas, certo? Não. Pois não funciona sempre. Eu tive vários problemas de máquinas que não inicializaram neste cenário. No final, você é obrigado a manter duas imagens, uma para máquinas monoprocessadas e outra para multiprocessadas. E mais: fazer a imagem base numa máquina monoprocessada (se necessário, desativar o suporte a multiprocessamento temporariamente no setup) para que a deficiente lógica de substituição sob demanda do Sysprep não entre em ação.
Opções relevantes do
A MODERNIDADE (FAMÍLIA NT 6.x)
Toda essa problemática foi resolvida a partir do Windows Vista/Server 2008.
A partir deles a lista de HALs foi enxugada. Existem apenas dois na versão x86-32. O
Na versão x86-64, existe apenas um HAL: o
Quem usa o Sysprep a partir do Vista/Server 2008 não mais precisa se preocupar com a salada de HALs. \o/
Até o Windows XP/Server 2003, o HAL correto era copiado na hora da instalação de acordo com o hardware (sempre chamando-se
Hal.dll
no sistema alvo). Uma posterior mudança de hardware que porventura não fosse compatível fazia o Windows não iniciar mais. Era necessário no mínimo reparar o sistema.WINDOWS 2000/XP/2003 (FAMÍLIA NT 5.x)
Os seguintes principais HALs estão disponíveis (
\Windows\Driver Cache\i386\Driver.cab
):(existem outros)
Hal.dll PC padrão Halacpi.dll Interface de energia e configuração avançada (ACPI) PC Halaacpi.dll ACPI Uniprocessor PC Halmacpi.dll ACPI Multiprocessor PC
Tradução:
PC padrão → Máquinas monoprocessadas sem ACPI e APIC (velharias como PC-Chips M598LMR e coisas do tipo).
Interface de energia e configuração avançada (ACPI) PC → Máquinas monoprocessadas com ACPI porém sem APIC (velharias como PC-Chips M810LMR e similares, ou placas mais modernas com APIC desativado no setup).
ACPI Uniprocessor PC → Máquinas monoprocessadas com ACPI e APIC.
ACPI Multiprocessor PC → Máquinas multiprocessadas com ACPI e APIC.
Se removermos o hardware caduco, sobram dois HALs: ACPI Uniprocessor PC e ACPI Multiprocessor PC.
O Sysprep nos permite preparar uma imagem pré-configurada que auto-detecta o hardware na próxima inicialização (Mini-Setup). A ferramenta pode ser configurada para substituir o HAL durante o Mini-Setup. Em teoria, o HAL ACPI Multiprocessor PC funciona em máquinas monoprocessadas (com alguma perda de desempenho) — o contrário nem inicia. Não é oferecido suporte por parte da Microsoft a instalações cujo HAL não corresponda ao que seria escolhido durante uma instalação normal.
A documentação diz que, quando a instalação de origem usa o HAL ACPI Multiprocessor PC (ou seja, feita num sistema multiprocessado), se você mandar o Sysprep substitui-lo pelo ACPI Uniprocessor PC, ele o fará apenas quando a máquina de destino for monoprocessada; caso contrário, manterá o HAL original — no caminho inverso o HAL sempre é trocado. Resolve todos os problemas, certo? Não. Pois não funciona sempre. Eu tive vários problemas de máquinas que não inicializaram neste cenário. No final, você é obrigado a manter duas imagens, uma para máquinas monoprocessadas e outra para multiprocessadas. E mais: fazer a imagem base numa máquina monoprocessada (se necessário, desativar o suporte a multiprocessamento temporariamente no setup) para que a deficiente lógica de substituição sob demanda do Sysprep não entre em ação.
Opções relevantes do
sysprep.inf
:; Muda HAL para o ACPI Multiprocessor PC UpdateHAL=ACPIAPIC_MP,%WINDIR%\inf\hal.inf ; Muda HAL para o ACPI Uniprocessor PC UpdateUPHAL=ACPIAPIC_UP,%WINDIR%\inf\hal.inf
A MODERNIDADE (FAMÍLIA NT 6.x)
Toda essa problemática foi resolvida a partir do Windows Vista/Server 2008.
A partir deles a lista de HALs foi enxugada. Existem apenas dois na versão x86-32. O
Halacpi.dll
continua sendo o HAL para cacarecos monoprocessados sem APIC. A novidade é um HAL Halmacpi.dll
unificado com suporte para máquinas mono e multiprocessadas. Indo além, o sistema passou a ser capaz de mudar automaticamente o HAL na inicialização de acordo com o hardware.Na versão x86-64, existe apenas um HAL: o
Halmacpi.dll
. É obrigatória a presença de ACPI e APIC na arquitetura x86-64.Quem usa o Sysprep a partir do Vista/Server 2008 não mais precisa se preocupar com a salada de HALs. \o/
Esclareceu bastante!
ResponderExcluirGrato!