Notas de Aula - MAC 211 - Laboratório de Programação
Aula anterior (aula 8)
Aula 9 - 24/3/2009
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 comercial
-
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
- Conceito inventado pela Sun (verificar) e incorporado no SunOS pela primeira vez na décad 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
- 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