Você está na página 1de 4

Aula referente ao dia 15/02/2012 O sistema operacional Windows

Quando se pretende programar em Assembly essecial conhecer o processador e o sis tema operacional para os quais o executvel se destina. Neste texto abordaremos ap enas o sistema operacional Windows. O Windows assume o controle do computador praticamente desde o instante em que l igado at o momento em que desligado. Uma aplicao pode rodar apenas com a permisso do Windows, com a assitncia do Windows e sob o controle do Windows. deste modo que o Windows oferece a previsibilidade e a consistncia da interface com o usurio e po r este motivo que possui a capacidade de (aparentemente) rodar diversos programa s simultaneamente (a chamada multi-tarefa). Este sistema opercaional deveria ofe recer maior robustez em casos de falhas, mas isto um captulo parte Para resumir a histria, o sistema operacional Windows domina a sua mquina, control ando tudo o que for possvel: Hardware, Aplicativos, Microprocessador, Memria e Dad os, Interface do usurio e Arquivos. Controle do hardware A maioria dos microchips que trabalham com a unidade central de processamento (C PU) so programveis. Por exemplo, a placa de vdeo precisa ser informada do scan rate , resoluo e cores corretos. Os chips de entrada/sada da impressora precisam conhece r a porta normalmente utilizada e a que velocidade os dados devem ser transferid os. Os chips do teclado devem conhecer a taxa de repetio que devem usar. A comunic ao com estes dispositivos precisa ser controlada cada um ter sua prpria rea de memria e precisa ser informado do que se espera e quando. O Windows realiza todas estas tarefas bsicas, como qualquer outro sistema operacional. O Windows tambm assume o controle total da escrita e da leitura destes dispositiv os, o que pode ser uma grande vantagem para o programador. Por exemplo, para imp rimir um documento, o aplicativo precisa apenas informar em que parte da memria o documento se encontra e qual o seu tamanho. O Windows se encarrega da impresso u sando o driver de impresso adequado para a impressora em uso e coloca a tarefa na posio correta da fila de impresso, que pode conter outras tarefas de impresso de ou tros aplicativos. A tarefa de impresso sempre efetuada no modo grfico. O Windows i nforma a impressora onde cada ponto de impresso deve ser colocado no papel para f ormar a imagem impressa. As vantagens do programador do aplicativo so significant es - no h a necessidade de escrever drivers de impresso nem algoritmos grficos. O Windows faz um trabalho ainda melhor na tela do monitor, que tambm sempre est no modo grfico. Ele atende vrios aplicativos simultaneamente e capaz de colocar dive rsas janelas na tela, algumas delas sobrepostas. Sua tarefa criar a imagem final e de gerenciar cada uma das janelas respeitando a prioridade, a ordem na tela, tipo e estilo de cada uma delas. Uma boa parte do trabalho de programao consiste em aplicar estes fatores ao programa e obter uma sada correta para a tela. Em resumo: o Windows controla todo o hardware dos perifricos e impede (ou deveria impedir) o acesso direto a eles atravs de aplicativos. Controle dos aplicativos O que acontece quando se clica o cone de um programa? O Windows sabe exatamente a posio do clique e qual o cone que se encontra sob o cursor do mouse. Tambm sabe, at ravs da sua lista de "atalhos" e "propriedades", qual programa deve ser iniciado quando este cone em particular for clicado. Para iniciar o programa, o Windows carrega o programa lendo o arquivo correspond ente e colocando-o na memria. Depois, o Windows simplesmente chama este programa, ou seja, informa o processador para que ele execute todas as instrues a partir do endereo inicial do programa at encontrar uma instruo RET. Aps o RET, termina o progr ama e volta ao sistema operacional. Controle do microprocessador Ao iniciar um programa, o registrador EIP do processador recebe do Windows o end ereo inicial do programa. O Windows tambm controla todos os valores dos registrado res do processador, mantendo-os numa rea de memria chamada de contexto de registra dores. O Windows pode (e o faz com frequncia) parar o processador, armazenar os v

alores contidos nos registradores e solicitar que o processador rode um programa diferente por algum tempo, ou seja, fornece a outro programa uma fatia de tempo . Terminando o segundo programa, o Windows reconstitui os valores armazenados e continua executando o primeiro programa a partir do ponto de interrupo. desta forma que funciona a multi-tarefa do Windows. Cada um dos programas que es tiver sendo executado recebe uma fatia de tempo - o processador rateado entre to dos eles e, mesmo em mquinas com apenas uma CPU, o usurio tem a impresso de que os programas so executados simultaneamente. O Windows faz o rateio de tempo de acord o com vrias prioridades. Por exemplo, operaes de leitura e escrita em disco possuem prioridades muito altas e podem bloquear a execuo de outros programas at que sejam finalizadas. Um programa pode pedir ao Windows para que inicie uma nova linha de execuo. Neste caso, o Windows atribuir a este thread fatias de tempo prprias, valores de registr adores prprios e um pilha prpria. A nova linha de execuo parece estar sendo executad a ao mesmo tempo que o thread principal do programa. Isto muito til quando um pro grama precisar dar continuidade a uma determinada tarefa, por exemplo um clculo m uito longo, e, ao mesmo tempo, manter a interface do usurio ativa. Isto chamado d e multi-threading. Controle de memria e dados Num dado momento, um programa pode ter todos os seus dados na memria. Estes so man tidos na memria que foi estabelecida por endereamento direto ou ento na pilha. Como o Windows preserva estes dados quando ratear o tempo entre vrios programas? O Windows mantm um mapa de memria de todos os dados de programas, ou seja, ele con hece o local exato dos dados dos programas na memria fsica do computador. Este map a de memria mantido numa rea de memria chamada de contexto de memria. Se a memria fsi a comear a se esgotar, o Windows passa a usar o disco rgido para armazenar os dado s dos programas. Isto explica porque, em sistemas com pouca memria, a atividade d o HD muito maior do que em sistemas com mais memria fsica. Esta memria em disco cha mada de memria virtual. Quando um programa precisa acessar seus dados, ele o faz usando um endereo virtua l. Isto significa que o endereo da rea de memria na verdade no o mesmo que o endereo dos dados na memria fsica. O Windows informa o processador onde as reas de memria re queridas se encontram realmente fornecendo o endereo da sua tabela de mapeamento de pginas ao programa atravs do registrador CR3. Controle da interface do usurio O Windows possui uma interface de usurio consistente, largamente difundida e util izada. As vantagens de uma interface padronizada so bvias - uma delas que, indepen dentemente do programa que esteja sendo executado, o usurio se sente "em casa". O Windows adquiriu esta uniformidade por que fornece componentes padro que podem ser includos nos programas. Exemplos disto so os menus que aparecem sob a barra de ttulo das janelas, dilogos, botes, barras de rolagem e arquivos de ajuda padroniza dos. O conjunto destes componentes padro denominado de GUI ou Graphical User Inte rface. Os aplicativos podem fazer uso destes componentes padro fazendo uma chamada a uma (Applications Programming Interface). As APIs contm procedimentos (ou funes) que podem ser chamados por um nome e que fornecem o componente desejado. Todas as AP Is so armazenadas em arquivos chamados DLL ou Dynamic Linked Library. Na verdade, as DLLs so executveis com a extenso .dll que contm funes nominadas que podem ser expo rtadas (ou seja, um aplicativo importa funes). Controle de arquivos O Windows mantm registros de todos os arquivos vitais ao sistema e de drivers de dispositivos perifricos. Para isto usa o Registro (registry), uma base de dados c om informaes sobre a configurao do sistema e dos aplicativos que devem rodar neste s istema. Alm disto, mantm o registro de todas as pastas (diretrios) com seus respect ivos contedos para que possam ser localizados quando solicitados. A comunicao sistema-aplicativo Como vimos, o sistema Windows controla todos os aspectos importantes do computad or e dos aplicativos que estejam rodando. Para que este controle cerrado possa s er mantido, necessrio haver um sistema de comunicao entre o sistema e os aplicativo s.

Um aplicativo tem necessidade de se comunicar com o sistema quando quiser obter alguma informao da GUI, por exemplo, o tamanho de uma janela em particular ou o ta manho de uma string numa determinada fonte. O mesmo acontece quando o aplicativo necessitar de algum recurso da API, pois precisa informar com exatido como este recurso deve ser aplicado. Os mtodos mais comuns usados por aplicativos para se comunicarem com o sistema so: Dados na pilha: antes de fazer uma chamada a uma API, necessrio colocar na pilha, utilizando PUSH, os dados exigidos pela funo da API. Os dados, na maioria das vez es, so valores dword. Em alguns casos podem ser ponteiros de estruturas que conte nham mais dados ou ponteiros de strings de texto. Mensagens: pode-se enviar mensagens ao sistema chamando a funo SendMessage da API. Na realidade, a mensagem um dword colocado na pilha e que pode ser acompanhado por at 3 dwrods de dados adicionais. O sistema tambm precisa se comunicar com o aplicativo para fornecer o resultado d e uma chamada API ou para informar o aplicativo de que algo est acontecendo na GU I ou que algo importante est ocorrendo com o prprio sistema. Os mtodos mais comuns de comunicao entre o sistema e um aplicativo so: Retornando de uma API, o sistema geralmente pe um valor que representa o resultad o da chamada no registrador EAX. Em alguns casos, retornando de uma API, o sistema deixa dados na memria, num loca l especificado pelo programa quando fez a chamada API. Este local deve ter sido especificado pelo aplicativo PUSHando um ponteiro para a pilha antes da chamada API. Mensagens do sistema para o aplicativo. Quando isto ocorre, o sistema tambm envia dados para a pilha. O sistema precisa ter sido avisado pelo aplicativo do ender eo no seu cdigo que corresponde ao procedimento que gerencia este tipo de chamada. Este procedimento chamado de procedimento "callback" (chamada de retorno), "win dows procedure" (procedimento windows) ou simplesmente "WndProc". Manipuladores e Contextos de dispositivo Todos os "objetos" com os quais o Windows trabalha possuem manipuladores (handle s). Estes objetos podem ser janelas, controles, menus, dilogos, processos, thread s, reas de memria, displays, impressoras, arquivos, drives de disco e at fontes, br ushes e pens usados para desenhar e escrever. Um manipulador um valor dword que pode ser requisitado pelo aplicativo. Uma vez obtido, este manipulador utilizado pelo aplicativo para se comunicar com o Windows e solicitar seu uso ou modificaes . Todos os dispositivos que mostram ou produzem uma sada possuem contextos de dispo sitivo. O contexto de dispositivo uma rea de memria, mantida pelo Windows, que con tm informao sobre como o dispositivo deve mostrar sua sada. Portanto, uma janela em particular ter um contexto de dispositivo que conter informaes sobre a fonte e a cor que devem ser usadas para qualquer coisa que for desenhada ou escrita nesta jan ela. Uma impressora ter um contexto de dispositivo contendo as caractersticas da i mpressora, tamanho do papel, cores disponveis e assim por diante. Tipos de executveis Um "executvel" um arquivo que contm cdigo que pode ser executado pelo processador. Como iniciante, s preciso conhecer dois tipos: os arquivos com extenso .exe (aplic ativos) e os arquivos com extenso .dll (dynamic link library ou blibliotecas dinmi cas). Para poder ser executado pelo Windows, um arquivo executvel precisa estar no form ato PE (Portable Executable). Como o nome sugere, este tipo de arquivo possui p ortabilidade, o que permite pode seja executado em computadores tanto com proces sadores Intel, MIPS, Alpha, Power PC, Motorola 68000, assim como RISC. claro que , independentemente do tipo de processador, o sistema operacional precisa ser Wi ndows e o verso do formato PE precisa corresponder ao processador utilizado. O Windows sabe que o executvel um arquivo PE devido presena da assinatura "PE" log o no incio do arquivo. Um arquivo no-PE, por exemplo um executvel DOS, no possui est a assinatura e o Windows precisa tomar outras providncias para rod-lo. Uma Dll usada quando seu cdigo ou seus dados precisam ser compartilhados entre di versos aplicativos. O Windows usa Dlls para armazenar o cdigo da sua API. Uma Dll possui exportaes. Isto reduz sensivelmente o tamanho de cada exe porque, quando p

recisar do cdigo, recorre a uma Dll. Um campo de grande importncia num arquivo PE a lista de importao. Esta uma lista das funes das quais o Exe depende e que poder cha mar quando estiver sendo executado. Esta lista tambm possui o nome da Dll que con tm a funo. Ao carregar o Exe, o Windows checa se todas as funes e todas as Dlls esto d isponveis. Se no estiverem disponveis, o sistema no roda o programa. Diferentes verses do Windows possuem Dlls diferentes. Fica claro que, com toda a probabilidade, um programa escrito para rodar em Win98 acabe no rodando no WinNT. Para evitar este problema pode-se utilizar a funo da API GetVersionEx, a qual det ermina a verso atual do Windows, e, de posse desta informao, chamar a API correta. S que h um detalhe: se a API for chamada do modo usual, a Dll entra na lista de im portao e, se no estiver presente, o arquivo no executado. Contorna-se este problema utilizando a funo da API LoadLibrary (que carrega a Dll desejada se j no tiver sido carregada) e GetProcAddress (que acha o endereo na Dll da funo desejada). Assim como o Windows usa Dlls, tambm possvel escrever Dlls que acompanhem um aplic ativo composto de mais de um programa. Desta forma os programas podem compartilh ar o cdigo e os dados existentes na Dll. Existe mais um caso no qual o uso de Dll s pode ser vantajoso: coloca-se cdigo e dados que precisam de manuteno frequente nu ma Dll. Ao invs de ter que atualizar todo o arquivo exe, trabalha-se com um arqui vo menor e "segregado", o que facilita a manuteno.