2. ESPAÇOS LÓGICOS E FÍSICOS
Retomemos os conceitos envolvidos com os
arquivos de programa fonte. Qual é o objetivo
básico de um programa? Ensinar o computador a
executar um sequência de passos, manuseando
dados de forma interativa ou não, com o objetivo
final de realizar cálculos ou transformações com os
dados fornecidos durante a execução do programa.
Para isto, após o entendimento do problema,
idealiza-se conceitualmente uma forma de
representação do dados a serem manipulados e
depois disso um conjunto de operações especiais
que manipularão as estruturas criadas
possibilitando a obtenção dos resultados
esperados do programa.
3. Notem que ao projetar-se um programa, por mais
simples ou complexo que ele seja, define-se um
espaço lógico que reúne todas as abstrações feitas
para criar-se o programa, sejam elas de natureza
estrutural ou procedural/funcional.
Tais abstrações são os objetos lógicos do
programa. O espaço lógico contém todas as
definições necessárias para o programa, mas sem
qualquer vínculo com as linguagens de
programação ou com os processadores e
computadores que executarão os programas
criados a partir desta concepção.
O espaço lógico é a representação abstrata da
solução do problema, também abstrata.
4. Durante a implementação dos programas utilizam-
se, como meios de expressão, as linguagens de
programação que possibilitam expressar de
maneira concreta (apesar das limitações impostas
por qualquer linguagem de programação) as
formulações contidas no espaço lógico. Pode-se
dizer assim que os programas fonte representam,
numa dada linguagem de programação, o espaço
lógico do programa.
Num outro extremo, dentro do computador a
execução do programa tem que ocorrer dentro da
memória principal, como consequência e limitação
da arquitetura de Von Neumann.
5. Seja qual for o computador e a particularização da
arquitetura de seu hardware, a memória principal
pode sempre ser expressa como um vetor,
unidimensional, de posições de memória que se
iniciam num determinado ponto, usualmente o
zero, e terminam em outro, 536.870.912 para um
computador com 512 Mbytes de memória, por
exemplo.
Cada posição desta estrutura de memória é
idêntica, podendo armazenar o que se chama de
palavra de dados do computador, na prática um
conjunto de bits.
6. Tipicamente se organizam as memórias dos
microcomputadores em bytes, assim cada posição de
memória poderia armazenar um byte de informação,
sendo que nos referenciamos as posições de memória
pelos seus números de posição, os quais são
chamados de endereços.
Como a memória de um computador é um componente
eletrônico, fisicamente palpável, dizemos que os
endereços de memória representam fisicamente a
organização de memória de um computador. Sabemos
que um programa quando em execução na memória
principal de um computador se chama imagem
executável e que esta imagem ocupa um região de
memória finita e bem determinada. Ao conjunto de
posições de memória utilizado por uma imagem se dá o
nome de espaço físico desta imagem.
7. De um lado a concepção do programa, representada e
contida pelo seu espaço lógico. Do outro lado, durante
a execução da imagem temos que as posições de
memória usadas constituem o espaço físico deste
mesmo programa. De alguma forma, em algum instante
o espaço lógico do programa foi transformado e ligado a
organização de memória do sistema computacional em
uso, constituindo o espaço físico deste mesmo
programa.
A ligação entre o espaço lógico e físico representa, na
verdade, a um processo de mapeamento, onde cada
elemento do espaço lógico é unido de forma única a
uma posição de memória do computador, acabando por
definir um espaço físico. A este processo de ligação se
dá o nome de mapeamento ou binding (amarração),
como representado na Figura 4.8. No nosso contexto
binding significa o mapeamento do espaço lógico de um
programa no espaço físico que possibilita sua execução
dentro do sistema computacional em uso.
9. Veremos a seguir que o binding tem que ser
realizado por uma das entidades envolvidas no
processo de criação de programas, ou seja, em
alguns instante da compilação, ligação,
carregamento ou mesmo execução. É possível
também que o binding seja realizado por mais de
uma destas entidades, onde cada uma realiza uma
parcela deste processo de mapeamento.
11. Na Figura 4.10, onde se apresenta a estrutura
interna de arquivos gerados através de compilação
absoluta, temos os elementos seguintes:
Cabeçalho: Região onde são colocadas
informações gerais sobre o arquivo objeto e suas
partes. Também conhecido como header.
Código: Segmento onde reside o código do
programa, propriamente dito. É gerado da mesma
forma que na compilação absoluta.
TSE: A tabela de símbolos externos é o local onde
são listadas as posições de chamada de símbolos
externos (variáveis, estruturas ou funções).
12. Os arquivos objeto produzidos tem seus endereços
calculados a partir de um endereço de origem
padronizado ou informado antes da compilação.
Este endereço de origem, a partir do qual os
demais são definidos, é chamado de endereço
base de compilação ou apenas de endereço base.
Desta maneira a compilação se torna mais simples,
mas como consequência direta disto temos que:
•Um arquivo de programa executável só pode ser
executado numa região fixa de memória;
13. Não podem existir duas ou mais instâncias do
mesmo programa executável na memória, a não
ser que se realizem compilações adicionais
forçando a geração do código para uso em
diferentes regiões de memória;
Dois ou mais diferentes programas executáveis
não podem ser carregados na memória a não ser
que tenham sido compilados prevendo exatamente
a ordem de carregamento e as áreas adicionais de
memória que venham a utilizar;
Duas ou mais imagens executáveis não podem se
sobrepor na memória (ocupar os mesmos
endereços de memória) total ou parcialmente;
Uma imagem executável deve sempre ocupar uma
região contínua de memória;
14. A soma das imagens possíveis de serem
carregadas em memória para execução paralela
tem que ser menor ou igual a quantidade total de
memória disponível.
As razões para estas limitações são simples e
todas baseadas no fato de que dentro do arquivo
objeto só existem números binários. Tais números
representam tanto os códigos das instruções do
processador como os dado constantes do
programa e também os endereços determinados
pelo compilador.
Como existem apenas números binários em todo o
arquivo objeto, não é trivial a distinção entre
instruções, dados e endereços, tornando
praticamente impossível:
15. Reverter a compilação, pois o binding se tornou
irreversível, não sendo possível reconstituir-se o
espaço lógico que originou o programa;
Modificar o endereçamento do programa pois não
se pode distinguir que são os endereços dentro dos
arquivos objeto gerados pelos compiladores
absolutos.
16. EXERCÍCIOS
1) Qual é o objetivo básico de um programa?
2) O que é o espaço lógico?
3) O que é o espaço físico?
4) Como se dá a ligação entre o espaço lógico e o
espaço físico?
5) A compilação absoluta, temos os elementos
seguintes: Cabeçalho, Código e TSE, o que é cada
um deles?