Resolução — System Calls
Exercício 1
Uma system call é um mecanismo que permite a um programa pedir serviços ao sistema operativo.
Ela é necessária porque os programas em modo utilizador não podem aceder diretamente ao hardware ou a recursos críticos do sistema.
As system calls funcionam como uma ponte entre o programa e o núcleo (kernel) do sistema operativo.
Exemplos:
abrir ficheiros
ler dados
criar processos
comunicar com dispositivos
Exercício 2
Funções das system calls:
open() → abre um ficheiro
read() → lê dados de um ficheiro
write() → escreve dados num ficheiro
close() → fecha um ficheiro aberto
Estas chamadas permitem a gestão segura de ficheiros pelo sistema operativo.
Exercício 3
A função open() abre o ficheiro indicado e devolve um file descriptor.
O_RDONLY significa que o ficheiro será aberto apenas para leitura.
Verifica-se se fd == -1 porque esse valor indica erro na abertura do ficheiro.
Isso pode acontecer por:
ficheiro inexistente
falta de permissões
erro no disco
Exercício 4
modo utilizador (user mode) → onde os programas normais executam com acesso limitado
modo núcleo (kernel mode) → onde o sistema operativo executa com acesso total ao hardware
As system calls permitem a passagem controlada do modo utilizador para o modo núcleo quando um programa precisa de um serviço do sistema.
Isso protege o sistema contra acessos perigosos.
Exercício 5
Quando um processo executa uma system call como read(), ele faz um pedido ao sistema operativo para ler dados.
O processo muda temporariamente de modo utilizador para modo núcleo.
O sistema operativo:
verifica permissões
localiza o recurso
executa a operação
devolve o resultado ao processo
Depois, o processo volta ao modo utilizador.
Exercício 6
write() serve para ler dados → Falso
close() fecha um ficheiro aberto → Verdadeiro
open() pode devolver -1 → Verdadeiro
System calls permitem acesso direto ao hardware sem controlo → Falso
read() precisa de um file descriptor → Verdadeiro
O sistema operativo controla o acesso aos recursos → Verdadeiro