RUSSINOVICK, M.; SOLOMON, D.A.; LONESCU, A. Windows Internals: Part 1. 6.ed. Washington: Microsoft Press, 2012. 34p. Tradução: Eduardo Vieira Barbosa. MODELO DO SISTEMA OPERACIONAL Na maioria dos sistemas multiusuários as aplicações são separadas do próprio sistema operacional – o código do kernel roda na forma privilegiada no processador com acesso aos dados do sistema e ao hardware; códigos de programas executam no processador na forma não privilegiada (chamado de modo usuário) com limitado conjunto de interfaces disponível, restrito acesso aos dados do sistema e não acesso direto ao hardware. Quando um programa em modo usuário invoca um serviço do sistema, o processador executa uma instrução especial que adequa a chamada para o modo kernel. Quando o serviço do sistema é completado, então o contexto do programa volta ao modo usuário e prossegue normalmente. O Windows é similar a maioria dos sistemas Unix em que o é um sistema operacional monolítico no sentido que o código do próprio sistema e drivers compartilham o mesmo espaço protegido de memória. Isso significa que qualquer componente ou driver pode potencialmente corromper dados usados por outros componentes. Entretanto, o Windows faz a implementação de alguns mecanismos de proteção, tais como PatchGuard e Kernel Mode Code Signing que ajudam a mitigar e prevenir as questões relativas a esse cenário. Todos os componentes do sistema operacional têm total proteção das aplicações maliciosas, porque elas não têm acesso direto ao código e dados da parte com privilégios do sistema operacional (embora eles possam rapidamente chamar outros serviços do kernel). Essa proteção é uma das razões que o Windows tem a reputação de ser robusto e estável como servidor de aplicações e como estação de trabalho (workstation), rápido e ágil da perspectiva do core dos serviços como gerenciamento de memória virtual, entrada/saída, rede, arquivo e compartilhamento de impressão. Os componentes em modo kernel também incorporam os básicos princípios da orientação a objeto. Por exemplo, em geral eles não conseguem dentro de outras estruturas de dados acessarem informações mantidas por componentes individuais. Ao invés, eles usam interfaces para passar um parâmetro para acessar e modificar estrutura de dados. Com relação ao amplo uso de objetos para representar recursos do sistema, o Windows não é um sistema orientado a objeto (OO) no senso restrito. A maioria do código escrito do sistema é em C por motivo de portabilidade. A linguagem de programação C não suporta diretamente construções de OO tais como vinculação dinâmica para tipo de dados, funções polimórficas ou herança de classe. Portanto, as implementações dos objetos baseados em C no Windows copiam, mas não dependem delas, características de particular linguagem de natureza OO.