1 / 18

Software Básico

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.

Download Presentation

Software Básico

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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

  2. 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

  3. Introdução • Bibliotecas podem ser classificadas • pela maneira como são compartilhadas, • pela maneira como são ligadas • e por quando são ligadas

  4. 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

  5. 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

  6. 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

  7. Bibliotecas dinâmicas no Linux • Hierarquia de bibliotecas no Linux

  8. 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

  9. 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

  10. Bibliotecas dinâmicas no Linux • Vínculo estático X dinâmico

  11. 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

  12. 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)

  13. 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

  14. 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

  15. 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

  16. 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

  17. 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

  18. 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

More Related