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

  1. A função open() abre o ficheiro indicado e devolve um file descriptor.

  2. O_RDONLY significa que o ficheiro será aberto apenas para leitura.

  3. 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

  1. write() serve para ler dados → Falso

  2. close() fecha um ficheiro aberto → Verdadeiro

  3. open() pode devolver -1 → Verdadeiro

  4. System calls permitem acesso direto ao hardware sem controlo → Falso

  5. read() precisa de um file descriptor → Verdadeiro

  6. O sistema operativo controla o acesso aos recursos → Verdadeiro