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