Notas de Aula - MAC 211 - Laboratório de Programação
Aula anterior (aula 8)
Aula 9 - 23/3/2010
Noções Básicas de Sistemas Operacionais
-
SO é o administrador do computador, ele gerencia os recursos de Hardware
-
Hierarquia de Armazenamento
-
registradores
-
memória cache
-
memória principal
-
disco magnético
-
disco óptico
-
fitas magnéticas
- Esquemas dos SOs modernos
- núcleo monolítico
- micronúcleo
- Figura 2.4 e 2.5 do Elmasri
-
Camadas
-
Hardware
-
Núcleo (Kernel)
-
Bibliotecas de tempo de execução (runtime libraries)
-
programas executáveis
-
serviços do SO (servidor de impressora, servidor de http), daemons
-
programas dos usuários
-
controladores de dispositivos de E/S device drivers (quase sempre,
ligado ao núcleo)
-
processos
-
modo privilegiado ou supervisor (núcleo) vs. modo usuário (nível do usuário,
user-level)
-
Características de SOs
-
multi-tarefa, multi-usuário (time-sharing)
-
sistemas de código-aberto vs. código fechado
-
software livre vs. software restrito
-
Funções de um SO
- execução de programas
- escalonamento
- operações de E/S
- manipulação do sistema de arquivos
- comunicação inter-processos (dentro de uma mesma máquina ou não)
- proteção
- detecção de erros
- alocação de recursos
- contabilidade
Bibliotecas estáticas vs. bibliotecas dinâmicas
- Bibliotecas dinâmica é um conceito inventado pela Sun e incorporado no
SunOS pela primeira vez no início da década de 1990.
- Bibliotecas estáticas:
- o compilador acrescenta ao executável
final o código das funções da biblioteca que o programa
utiliza
- Bibliotecas dinâmicas:
- as bibliotecas são
ligadas ao executável em tempo de execução;
- compilada como
código independente de posição PIC (Position
Independent Code)
- .dll no Windows, .so no UNIX
- há duas
opções
- carga na inicialização: ao carregar o programa, já carrega
todas as bibliotecas dinâmicas
- carga preguiçosa: apenas carrega a
biblioteca quando ela for necessária (é a mais
comum)
- Vantagens de bibliotecas
dinâmicas:
- Com bibliotecas estáticas o tamanho do arquivo
executável fica bem maior
- Com bibliotecas estáticas, o código da
biblioteca é adicionado ao executável mesmo que em tempo de execução ele não
seja utilizado
- Bibs dinâmicas são compartilhadas entre os vários
programas que as usam (tanto na memória quanto no disco)
- Acertos
(bug fixes) nas bibliotecas são
aproveitados pelos programas antigos
- Menor uso de memória na máquina
como um todo (imagine se libc fosse estática)
- É possível acrescentar
novas funcionalidades sem mexer no programa principal (p.ex., novos itens num
menu)
- Permite você fazer interposição de código
- Vantagens
de bibliotecas estáticas:
- Com bibliotecas estáticas, a versão das
bibliotecas é fixa, portanto, não há o perigo de incompatibilidade de
versões
- Todas as bibliotecas estão dentro do executável portanto não
há o risco de não se localizar uma biblioteca em tempo de
execução
- Mudanças no comportamento das bibliotecas novas não afetam a
corretude dos programas antigos
- busque na Web DLL hell
- A carga de um programa com bibliotecas
dinâmicas é mais lenta
- Hoje em dia, bibliotecas dinâmicas é o
padrão na maioria dos sistemas
- -shared opção do gcc para gerar bibliotecas dinâmicas
- -static no gcc, força a ligação com bibliotecas estáticas ao
invés de bibliotecas dinâmicas
- Variáveis de ambiente:
- LD_PRELOAD - lista de bibliotecas a serem carregadas antes de todas as
outras
- LD_BIND_NOW - faz as bibliotecas dinâmicas serem carregadas de uma vez no
início (caso contrário, o padrão é carga sob demanda, i.e., lazy binding).
- LD_LIBRARY_PATH - indica de onde pegar as bibliotecas dinâmicas
- o comando ldd mostra as bibliotecas dinâmicas que serão carregadas para um executável num determinado contexto.
- Mais informações:
-
Próxima aula: shells (e.g. bash)
Próxima aula (aula 10)
Página de MAC211
Página do Fabio
Página do DCC