Professional Documents
Culture Documents
Estrutura do Windows
Baseada no conceito de microkernel, a estrutura do windows pode ser
dividida em duas partes distintas: o bloco Kernel Mode e o bloco User
Mode.
Relativamente ao bloco User Mode, este congrega vários módulos
distintos e independentes mas que podem interagir entre si; todavia não
contactam directamente com a camada do núcleo (kernel) e só podem
aceder à sua área de endereçamento de memória. Esta filosofia, apesar
de menos eficiente (pois sempre que alguma aplicação, serviço ou
processo necessita de aceder ao kernel tem de comutar de contexto), é
muito mais segura, pois se alguma aplicação, serviço ou processo falhar,
não é necessário reiniciar todo o sistema, mas apenas a que originou o
erro. Assim, é aqui que podemos encontrar a correr muitos dos processos
do Sistema (Winlogon, Sesion manager,...), os vários serviços que são
lançados automaticamente no arranque do windows (Services.exe,
svchost.exe), as aplicações do utilizador, as “Subsystem DLLs” e ainda os
“Environment Subsystems” (ambientes que suportam a compatibilidade
com outros sistemas - OS/2? e POSIX.
Por seu lado, o bloco Kernel Mode executa num modo privilegiado, no
qual o código tem acesso directo ao hardware e à memória do sistema,
incluindo todos os endereços destinados ao User Mode. Este bloco está
organizado em camadas. A primeira camada, e mais profunda é a HAL
(Hardware Abstraction Layer), e é sobre esta que todas as outras
assentam. Consiste num conjunto de sub-rotinas que permite generalizar
o hardware, para que possa ser reconhecido e tratado todo da mesma
forma, independentemente das especificidades - no fundo, implementa
uma Máquina Virtual?. Sobre a HAL assenta o kernel (com as funções
mais básicas do SO, como o thread scheduling e as rotinas de
antendimento a interrupções), os Device Drivers? (componentes de
software que controlam o acesso ao hardware) e os Graphic Drivers? - é
de notar que apesar de ser uma decisão perigosa (pois entregar o
desenvolvimento de Graphic Drivers a empresas que desenvolvem esse
tipo de hardware, para operar nesta zona crítica do SO é sempre um
risco), a microsoft decidiu que os Graphic Drivers deveriam operar na
zona do kernel, para ter o máximo de desempenho possível. Por isso é
que, ao contrário dos sistemas UNIX, o Windows é particularmente
dotado para correr jogos com a máxima performance. Para finalizar, por
cima da camada do Kernel assenta ainda a camada Executive?(dividida
em vários módulos), sendo aqui que se encontram as funções mais
importantes do SO, nomeadamente os módulos de I/O, segurança,
gestão de processos, gestão de memória virtual, etc.
Em suma, convém dizer que com a implementação da estrutura do
Windows NT, a Microsoft conseguiu, face aos seus antecessores, um
sistema operativo muito mais estável e confiável.
Evolução do Windows
O Microsoft Windows é uma série de interfaces gráficos e sistema
operativos desenvolvidos pela Microsoft desde 1985. 1985 - Windows
1.01 1987 - Windows 2.03 1989 - Windows 2.11 1990 - Windows 3.0 1992
- Windows 3.1x 1992 - Windows For Workgroups 3.1 1993 - Windows NT
3.1 1993 - Windows For Workgroups 3.11 1994 - Windows 3.2 1994 -
Windows NT 3.5 1995 - Windows NT 3.51 1995 - Windows 95 1996 -
Windows NT 4.0 1998 - Windows 98 1999 - Windows 98 SE 2000 -
Windows 2000 2000 - Windows Me 2001 - Windows XP 2003 - Windows
XP 64-bit Edition 2003 2003 - Windows Server 2003 2005 - Windows XP
Professional x64 Edition 2006 - Windows Fundamentals for Legacy PCs
2007 - Windows Vista 2007 - Windows Home Server 2008 - Windows
Server 2008
Completamente Reentrante
Hoje em dia todos os Sistemas Operativos são completamente
reentrantes, em consequência de serem multitarefa. Nesta perspectiva,
dizer que o SO é completamente reentrante significa dizer que possui a
capacidade de estar a executar uma determinada tarefa A, interromper
essa mesma tarefa para executar uma outra B, mesmo que esteja a
executar código ao nível do Kernel e, quando voltar a executar a tarefa A,
saber o estado em que se encontrava, sem assim perder a coerência.
Kernel
O kernel é a mais fundamental unidade de código presente no Sistema
Operativo (S.O.).
É responsável por lidar com os recursos críticos do sistema, criando
assim uma camada de abstracção,
que isola e liberta as aplicações da necessidade de lidar com a memória
num
contexto ligado ao hardware da máquina.
Microkernel
Um MicroKernel, é, ao estilo dos Kernel actuais (que são os núcleos de
gestão dos recursos dos S.O.), um tipo de kernel muito mais compacto,
que apenas implementa as funções fundamentais de um kernel,
associadas aos recursos críticos, nomeadamente:
- Gestor de processos?;
- Gestor da memória virtual;
- Rotinas de atendimento das interrupções?
- Gestor de I/O? (Device Drivers?);
Thread
Hoje em dia é comum conseguir identificar diversos fluxos de execução
em programas de software, podendo esses fluxos executar em
simultâneo, conduzindo a elevados desempenhos. Cada fluxo é
denominado por thread. O SO encarrega-se de comutar a execução entre
as diversas threads em causa, dando a noção de que todas elas se
encontram a executar simultaneamente.
serviço
Serviços são aplicações que podem ser iniciadas automaticamente no
arranque do SO, ou iniciadas "manualmente" quando forem necessárias,
que executam tarefas especificas em background, sem necessitar à
partida de assistência por parte do utilizador.
Um processo pode recorrer a serviços. Um exemplo é o serviço
"configuração zero sem fios" do windows, que está relacionado
com a configuração de adaptadores wireless do tipo 802.11, o qual é, por
exemplo, utilizado pelo programa de configuração da rede wireless do
windows.
Device Driver
Um device driver é um programa especial que permite que os outros
programas de computador de interajam com um dispositivo de hardware.
Um device driver, normalmente, comunica com o dispositivo através dos
barramentos do computador ou subsistemas de comunicação, aos quais
o hardware está ligado. Quando um programa invoca uma rotina do
device driver, este envia as "ordens" necessárias ao dispositivo. Assim
que o dispositivo envie os dados respectivos de volta para o device driver,
este irá assinalar o facto ao programa que o chamou. Os device drivers
dependem do hardware e são específicos para cada sistema operativo.
Normalmente são os drivers que lidam com as interrupções requeridas
para qualquer interface do hardware assíncrono e dependente do tempo.
HAL
O HAL (Hardware abstraction Layer) é uma camada de abstracção,
implementada no software, entre o hardware de um computador e o
software de sistema. A sua função é a de "esconder" as diferenças do
hardware para o kernel do SO, de modo a que a maioria do código do
kernel não necessite de ser modificado para correr em sistemas com
hardware diferente. Num PC o HAL pode ser considerado como o driver
da motherboard e permite implementar uma espécie de Máquina Virtual?
idêntica para todos os computadores que executam o SO.
DLLs
Dynamic-link library (Biblioteca de ligação dinâmica) ou DLL, é a
implementação do conceito de bibliotecas partilhadas nos SOs
contemporâneos.
O propósito original das DLLs era economizar espaço em disco e
memória necessária para as aplicações. Com uma biblioteca padrão não-
partilhada, o número de linhas de código que são adicionadas ao
programa que faz a chamada dessa biblioteca é bastante elevado, pois
tudo o que é necessário da biblioteca para essa aplicação é copiado para
lá. Assim, se dois programas usam a mesma sub-rotina, esse código
certamente que vai ser adicionado aos dois. No entanto, para fazer face a
esta situação e sobretudo quando as funções são complexas (como as
funções gráficas), o código comum às várias aplicações pode ser
colocado numa DLL que existe como um único ficheiro que é carregado
apenas uma vez na memória, e descarregada quando terminarem as
aplicações.
No entanto, apesar de todos estes benefícios, surge também um
problema significante, conhecido como "DLL hell" (o inferno das DLLs),
que ocorre quando várias aplicações entram em conflito sobre qual a
versão de uma biblioteca que deve ser utilizada. Porém, estes conflitos
podem ser resolvidos facilmente se forem colocadas as diferentes
versões da DLL em conflito dentro das pastas das aplicações, em vez de
uma pasta para todo o sistema. De notar que essa solução não anula a
total economia conseguida com o uso dessas bibliotecas, mas anula uma
pequena parte.
Mais recentemente, com o framework Microsoft .NET a Microsoft
procurou criar uma solução mais elegante para o problema do DLL hell ao
permitir a coexistência de diferentes versões de uma mesma biblioteca.
Memória
Pode falar-se de memóra em vários contextos.
No contexto de hardware temos as voláteis(armazenam informação só
com alimentação - memória ram) e as não voláteis(armazenam
informação sem necessidade de alimentação - disco rígido)
Memória Virtual
A memória virtual é uma parte comum de muitos sistemas operativos em
computadores pessoais, e que hoje em dia todos a implementam, na
medida em que proporciona aos utilizadores um grande benefício por um
custo muito baixo.
Multiprocessamento
Multiprocessamento é a capacidade de um SO executar simultaneamente
dois ou mais processos. Pressupõe a existência de dois ou mais
processadores. Difere da [multitarefa], pois esta simula a simultaneidade,
utilizando-se de vários recursos, sendo o principal o compartilhamento de
tempo de uso do processador entre vários processos.
Preempetive
Um sistema operativo preemptivo é aquele que consegue
temporariamente interromper um processo (ou thread), para executar
outro, sem requerer a sua cooperação e com a intenção de o voltar a
activar mais tarde. Esta mudança é designada por context switch
("mudança de contexto"), sendo normalmente levada a cabo pelo kernel,
mais exactamente pela sua parte chamada preemptive scheduler
("agendador preemptivo"). Apenas como curiosidade, a grande maioria
dos SO que suportam esta funcionalidade, atribuem a cada processo um
tempo (designado por quantum) de 100ms.
Kernel Mode
Por oposição ao User Mode, é um modo de execução desprotegido,
destinado aos módulos do SO que gerem recursos críticos do sistema
(acesso a hardware, rotinas de atendimento de interrupções e acesso a
estruturas de dados críticas). Este modo caracteriza-se por:
- Acesso privilegiado a toda a memória e recursos do sistema.
- Se o CPU permitir vários níveis de privilégio (questões de segurança e
privilégios) o nível do kernel correrá com aceso ao mais elevado, e o nível
do utilizador ao nível 0.
- Melhor desempenho
User Mode
É um modo de execução mais protegido, cujo objectivo é isolar os
diferentes módulos que executam a este nível, não só entre si, mas
também dos que executam em Kernel Mode. Este modo caracteriza-se
por:
- Mais seguro e robusto, pois um eventual erro não obriga a reiniciar o
sistema mas sim a reiniciar o processo (redução dos "blue screen").
- Cada processo te acesso apenas à área de memória que lhe está
atribuída.
- Menor desempenho : sempre que tarefas no User Mode necessitem de
aceder à área do kernel, existem tempos de transiçao de User Mode a
Kernel Mode e vice-versa que aumentam o tempo de execução global.
POSIX
Portable Operating System Interface (POSIX) é uma família de normas
que define um SO standard. Essas normas forma definidas pelo IEEE e
ficaram conhecidas por IEEE 1003, sendo posteriormente reconhecidas
internacionalmente e assumindo a designação ISO/IEC 9945. Na prática,
essas normas especificam um conjunto reduzido de funções que
possibilita e garante que um programa que corre num SO que suporte as
normas POSIX, possa correr, sem alterações, em qualquer outro SO que
suporte essas mesmas. No fundo torna a aplicação mais abrangente pois
a aplicação que seja desenvolvida para POSIX correrá em todas os SOs
que tenham aderido a estas normas.