Escolar Documentos
Profissional Documentos
Cultura Documentos
Chamadas de Sistema
Provê uma interface para os serviços para o qual o SO foi feito. Essas chamadas
geralmente são escritas em linguagem C/C++. SImples tarefas como fazer uma
cópia de arquivo a outro geram muitas chamadas de sistemas (Aquisição do arquivo
fonte e destino, abertura, fechamento..). Tipicamente os desenvolvedores de
aplicações criam programas de acordo com a interface de programa de aplicação
(API). A API especifica um conjunto de funções que estão disponíveis a um
programador de aplicação, para uso de suas funções e executadas pelo SO. As três
mais conhecidas são Win32 API (Windows) POSIX (UNIX, Linux e Mac OS X) e
Java API para (JVM).
As chamadas de sistemas oferecem um conjunto mais detalhado e difícil para se
trabalhar do que as APIs, até mesmo por oferecem portabilidade e simplificação no
desenvolvimento.
Para a maioria das linguagens de programação o sistema suporta em tempo de
execução e provê uma interface com a chamada de sistema. Essa interface
intercepta uma função na API e faz a chamada de sistema correspondente,
geralmente associado a algum número. Quem faz o uso dessa função não precisa
saber como funciona a implementação da chamada de sistema. Porém é necessário
obedecer a API e entender o que o SO retornará de resultado. O SO esconde a
maioria dos detalhes do programador pela API.
Programas do sistema:
Também conhecidos como sistemas utilitários, esses programas provêem um
ambiente conveniente e de fácil execução ao usuário. Esses programas podem ser
divididos nessas categorias:
Manipulação de arquivos: Cria-se, deleta-se, renomeiam, imprimem e geralmente
manipula diretórios e pastas.
Status da Informação: Alguns simples programas pedem ao sistema a data, hora,
quantidade de memória disponível ou disco, número de usuários… Outras mais
complexas como performance, entradas e registros. Normalmente formatam e
imprimem saída no terminal.
Modificação de arquivos: Muitos editores de texto podem ser considerados criadores
e editores.
Apoio a linguagem de programação: Compiladores, assemblers, debuggers e
interpretadores para linguagens de programação são oferecidos pelo SO ou
baixadas da rede.
Carga e execução de programa: Uma vez montado ou compilado um programa
deve ser carregado na memória para execução. Carregadores absolutos,
carregadores relocáveis, editores de vínculos…
Comunicações: Conexões virtuais entre processos, usuários e máquinas. (WEB,
e-mail, transferência de arquivos de uma máquina para outra).
Criação e Implementação de um SO
Um sistema tão grande e complexo deve ser feito de forma minuciosa e cuidadosa.
Uma boa ideia é particionar o SO em problemas menores até ser encontrado um
sistema monolítico (indivisível), onde cada um desses pedaços menores do sistema
precisam estar em perfeita harmonia.
Estrutura Simples.
Muitos SO’s não tem suas estruturas muito definidas. começam pequenos, simples
e limitado. É criado para prover o máximo de funcionalidade em pouco espaço, logo
não é dividido em módulos. O MS-DOS é um bom exemplo disso. Ele não possui
interface e níveis de funcionalidade bem separados. Por exemplo, programas de
aplicação estão aptos a acessar rotinas básicas de E/S. Tais liberdades deixam o
MS-DOS vulnerável. Outro exemplo de pouca estruturação é o UNIX.
Abordagem em camadas:
Se o hardware tiver o apoio apropriado, o SO poderá ter mais controle. Numa
abordagem top-down, no geral a funcionalidade e característica são determinadas e
então separadas. Um sistema pode ser modularizado de diferentes maneiras. Um
método é a abordagem em camadas, na qual o SO é quebrado em um número de
níveis. A camada 0 é o hardware, o mais alto é o N, que é a interface com o usuário.
Um determinado nível pode invocar operações de um nível mais baixo.
A principal vantagem está na simplicidade de construção e de depuração e a
principal dificuldade envolve a definição adequada de vários niveis. Porque um nível
só consegue usar níveis menos, um planejamento tem que ser cuidadoso.
MicroKernels
Esse método estrutura o SO pela remoção de todos os componentes não essenciais
do kernel e implementando eles como um sistema de programas de níveis de
usuário. O resultado obtido é um Kernel pequeno. Entretanto os microkernels
proveem o mínimo necessário para o gerenciamento de memória e processos,
devido a facilidade de comunicação.
Benefícios:
Mais fácil de estender um microkernel. Substituição do módulo sem afetar o
sistema.
Mais fácil de portar o sistema operacional para novas arquiteturas
Mais confiável (menos códigos executando em modo kernel) e mais seguro.
Infortunadamente, a performance o microkernel pode sofrer uma crescente de
overhead.
Módulos
Aqui o kernel tem um conjunto de componentes de core e linkagem em adicional
aos serviços pelos módulos. A ideia do projeto é para o kernel prover serviços de
core enquanto outros serviços sao implementados dinamicamente.
Usa a técnica orientada a objeto;
Cada componente do núcleo é separado;
Cada um fala com a interface desejada;
Cada um é carregado conforme a necessidade de uso no kernel.
Superficialmente é parecido com microkernels, mas os módulos vão sendo
carregados e anexados ao resto do kernel ativo e a comunicação é mais direta.
Sistema de Boot
Depois de gerado o SO deve estar disponível para uso do hardware. Mas como o
hardware sabe onde o kernel está ou como carregar o kernel? Esse procedimento
de start é feito no boot do sistema. Na maioria dos sistemas uma parte pequena do
código que é conhecido como programa de bootstrap é carregado na memória.
Quando o CPU recebe um evento de reset como desligamento ou reinicialização, a
instrução de registro é carregado na memória predefinida.