180 likes | 253 Views
Universidade Federal Rural do Semi-Árido Departamento de Ciências Exatas e Naturais Ciência da Computação. Software Básico. Aula 15: Carregamento dinâmico. Silvio Fernandes 2009.1. Introdução.
E N D
Universidade Federal Rural do Semi-Árido Departamento de Ciências Exatas e Naturais Ciência da Computação Software Básico Aula 15: Carregamento dinâmico Silvio Fernandes 2009.1
Introdução • Bibliotecas contém código e dados auxiliares, que provém serviços a programas independentes, o que permite o compartilhamento e a alteração de código e dados de forma modular • Alguns executáveis são tanto programas independentes quanto bibliotecas, mas a maioria das bibliotecas não são executáveis • A maior parte dos SO modernos provê bibliotecas que implementam a maioria dos serviços do sistema
Introdução • Bibliotecas podem ser classificadas • pela maneira como são compartilhadas, • pela maneira como são ligadas • e por quando são ligadas
Ligação dinâmica • Significa que os dados em uma biblioteca não são copiados para um novo executável ou biblioteca em tempo de compilação, mas permanecem em um arquivo separado no disco • O ligador apenas grava quais bibliotecas são necessárias para o executável em um índice • A ligação pode acontecer em tempo de carregamento ou em tempo de execução • Plugins são uma utilização comum de bibliotecas de ligação dinâmica
Carregamento dinâmico • É um subconjunto da ligação dinâmica em que uma biblioteca ligada é carregada ou descarregada do sistema em tempo de execução após requisição • A requisição pode ser feita implicitamente em tempo de compilação, ou explicitamente em tempo de execução • A maioria dos SO que suportam a ligação dinâmica também suportam o carregamento dinâmico através de uma API específica
Bibliotecas dinâmicas no Linux • O Linux oferece suporte a dois tipos de bibliotecas • A biblioteca estática contém funcionalidade ligada, de forma estática, a um programa no momento da compilação • As bibliotecas dinâmicas, que são carregadas quando um aplicativo é carregado e a ligação ocorre no momento da execução
Bibliotecas dinâmicas no Linux • Hierarquia de bibliotecas no Linux
Bibliotecas dinâmicas no Linux • As bibliotecas estáticas podem ser úteis em pequenos programas, que exigem funcionalidade mínima • Para programas que exigem várias bibliotecas, as bibliotecas compartilhadas podem reduzir a área de cobertura de memória do programa • Com uma biblioteca estática, cada programa de execução tem sua própria cópia da biblioteca
Bibliotecas dinâmicas no Linux • GNU/Linux fornece duas formas de lidar com as bibliotecas compartilhadas • É possível vincular dinamicamente seu programa com a biblioteca compartilhada, fazendo com que o Linux carregue a biblioteca na execução • Fazer com que o programa chame funções seletivamente com a biblioteca em um processo chamado carregamento dinâmico • Um programa pode carregar uma biblioteca específica e depois chamar uma determinada função dentro daquela biblioteca
Bibliotecas dinâmicas no Linux • Vínculo estático X dinâmico
Bibliotecas dinâmicas no Linux • A API de Dynamic Loading (DL) existe para o carregamento dinâmico e permite que uma biblioteca compartilhada fique disponível para um programa de espaço de usuário
Bibliotecas dinâmicas no Windows • Dynamic-link library (Biblioteca de ligação dinâmica) ou DLL, é a implementação feita pela Microsoft para o conceito de bibliotecas compartilhadas • Essas bibliotecas geralmente tem as extensões DLL, OCX (para bibliotecas que contêm controles ActiveX), ou DRV (para drivers de sistema legacy)
Bibliotecas dinâmicas no Windows • Os formatos de arquivos para DLL são os mesmos dos arquivos executáveis para Windows • Podem conter códigos , dados, e recursos (ícones, fontes, cursores, entre outros) em qualquer combinação • O propósito original das DLL era economizar espaço em disco e memória necessária para aplicativos, armazenando-as localmente no disco rígido
Bibliotecas dinâmicas no Windows • As DLL proveem os benefícios comuns de bibliotecas compartilhadas, como a modularidade • Uso de interfaces genéricas para plug-ins • Um problema significante, conhecido como "DLL hell" (literalmente, o inferno das DLL), ocorre quando vários aplicativos entram em conflito sobre qual versão de uma biblioteca deve ser utilizada
Bibliotecas dinâmicas no Windows • Cada função exportada por uma DLL é identificada por um numeral ordinal e, opcionalmente, um nome • Esse numeral representa a posição do ponteiro de endereçamento das funções, na Tabela de Endereços de Exportação da DLL
Bibliotecas dinâmicas no Windows • Arquivos DLL podem ser carregados explicitamente em tempo de execução, um processo chamado pela Microsoft como ligação dinâmica em tempo de execução, utilizando a função LoadLibrary (ou LoadLibraryEx) de sua API • Note que com a ligação implícita em tempo de execução, chamada pela Microsoft como ligação dinâmica em tempo de carregamento, se o arquivo DLL não for encontrado, o Windows mostrará uma mensagem de erro e não carregará o aplicativo
Bibliotecas dinâmicas no Windows • O desenvolvedor não tem maneiras de tratar a ausência de arquivos DLL ligados implicitamente pelo linker de tempo de compilação • Por outro lado, com a ligação explícita em tempo de execução, os desenvolvedores tem a oportunidade de criar um tratamento para esse tipo de exceção • A rotina de ligação explícita em tempo de execução é a mesma em qualquer linguagem, pois ela depende da API do Windows e não dos construtores das linguagens
Referências • http://www.ibm.com/developerworks/br/library/l-dynamic-libraries/index.html • http://pt.wikipedia.org/wiki/Biblioteca_(computa%C3%A7%C3%A3o) • http://pt.wikipedia.org/wiki/DLL