O
SO oferece um ambiente para a execução de
programas através de SERVIÇOS para os programas
e para os usuários. Alguns serviços não
têm como preocupação apenas tornar
a máquina mais confortável para o usuário,
mas também, para que o próprio sistema seja
mais eficiente e seguro.
Tipos de Serviços
Execução
de Programas: capacidade do sistema de
carregar um programa na memória e executá-lo.
Operação
de I/O: uma vez que os programas do usuário
não podem executar operações de
E/ S diretamente, o sistema operacional deve prover
alguma forma de execução de tais operações.
Manipulação
de Sistemas de Arquivos: os usuários
têm necessidade de realizar acessos (ler, escrever,
etc) aos arquivos pelo nome. O SO é o responsável
pela gerência deste sistema, incluindo alocação
de espaço, busca otimizada, etc.
Detecção
de Erros: garantir a correta computação,
detectando erros no hardware (CPU e memória),
nos dispositivos de E/ S ou em programas do usuário.
Alocação
de Recursos: alocar recursos para múltiplos
usuários ou vários jobs executando ao
mesmo tempo.
Comunicações:
troca de informações entre processos executando
tanto no mesmo computador quanto em sistemas diferentes
interligados via rede. Implementado via memória
compartilhada ou troca de mensagens.
Proteção:
O SO é responsável pela proteção
de todo o sistema, seja mono ou multiusuário.
Usuários x Sistema Operacional
1. Chamadas de Sistema (System Calls)
Maneira pela qual os programas solicitam
serviços ao sistema operacional. As chamadas
ao sistema fornecem uma interface entre um programa
em execução e o SO e podem ser classificadas
em duas categorias:
1. Controle de Processos;
2. Gerência de Arquivos e Dispositivos de
I/O
Controle de Processos: nessa categoria
existem chamadas ao sistema para criação
e finalização de processos, manipulação
de tempo para manter a sincronização
entre processos concorrentes, carregamento e execução
de programas, obtenção e ativação
de atributos nos processos, etc.
Gerência de Arquivos e Dispositivos
de I/O: existem chamadas ao sistema para criar, apagar,
abrir e fechar arquivos, ler e escrever, alterar,
etc. Em geral, a única informação
necessária para acessar um arquivo é
o seu nome. No caso de dispositivos de I/O, existem
chamadas para requisitar e liberar um dispositivo.
2. Interpretador de Comandos
(SHELL)
O Shell é um utilitário
do SO que começa a ser executado quando o SO
é iniciado. Sua função é
aguardar comandos feitos pelo usuário através
da interface e então interpreta-los. O Shell
pode conter o código que executa o comando
pedido, ou então, cada comando é executado
por um programa independente. Neste segundo caso,
cada programa possui um nome próprio e a função
do interpretador é carrega-lo na memória
principal. Uma forma de visualizar o interpretador
de comandos é compreende-lo como uma cápsula
circulando o SO, ou seja, uma chamada entre o usuário
e o SO.
Comportamento do Sistema Operacional
Os sistemas operacionais têm uma
característica bastante interessante. Se não
existir nenhum programa a executar, nenhum dispositivo
de entrada/saída a ser atendido e nenhum usuário
aguardando uma resposta, o sistema operacional fica esperando
a ocorrência de algum evento. Eventos são,
em geral, representados por interrupções.
Quando uma interrupção
ocorre, o hardware transfere o controle para o sistema
operacional. Neste momento, o sistema operacional salva
o estado da máquina (registradores e contador de
programa) e determina qual foi o tipo de interrupção
que ocorreu, já que existem diferentes tipos de
interrupção. Por exemplo, uma chamada ao
sistema (create), uma interrupção
de um dispositivo de E/S (impressora), uma interrupção
de erro (tentativa de executar uma instrução
privilegiada). Para cada tipo de interrupção
um tratamento diferente tem de ser realizado.
Na visão do sistema operacional,
as chamadas ao sistema são agrupadas de acordo
com o seu tipo. Para cada chamada um segmento de código
é executado. Apesar do sistema tratar muitas chamadas,
a maioria dos eventos que ocorrem pertencem à classe
de interrupções dos dispositivos de E/S.
Uma operação de E/S é resultante
de uma chamada ao sistema requisitando tal serviço.
Uma situação prática seria um programa
abrir um arquivo e escrever alguma informação
nele. Neste caso, o dispositivo de E/S usado poderia ser
um disco e várias operações de E/S
e uma seqüência de chamadas ao sistema seriam
realizadas.
Uma vez que uma operação
de entrada/saída tem início dois fatos podem
ocorrer. O primeiro é quando o controle só
retorna para o programa do usuário, que gerou a
chamada ao sistema, quando a operação tiver
sido terminada. No segundo, o controle retorna ao programa
do usuário sem esperar que a operação
de entrada/saída tenha sido terminada. Ambas as
situações têm vantagens e desvantagens.
O primeiro caso é mais simples,
pois apenas uma operação de entrada/saída
fica pendente a cada momento. Em compensação,
limita a quantidade de operações simultâneas
que podem ser feitas. O segundo caso é mais complexo,
pois várias operações de entrada/saída
podem ficar pendentes ao mesmo tempo e o sistema operacional
precisa identificá-las para poder tratá-las.
Outro tipo de interrupções
que merece uma atenção especial são
as interrupções de erro. Elas são
geradas quando o programa que está sendo executado
tenta realizar algo não permitido pelo sistema
operacional. Por exemplo, realizar o acesso a uma posição
de memória protegida. Sempre que uma interrupção
de erro ocorre o sistema operacional deve terminar o programa
em execução de forma anormal. Uma mensagem
de erro é enviada e a área de memória
utilizada pode ser copiada num arquivo (dump)
para que o usuário possa tentar descobrir a causa
do erro. |