Chamadas de Sistema e Processos

Chamadas ao Sistema

Se uma aplicação precisa realizar alguma instrução privilegiada, ela realiza uma chamada de sistema, que altera do modo usuário para o modo kernel.

Chamadas de sistema são a interface entre os programas do modo usuário e o SO no modo kernel. Ex: abort(), open(), delete()…

Existem interfaces para chamadas de sistemas, as mais utilizadas são a POSIX API para UNIX e Win32 para Windows.

https://imgur.com/p7RWcEm.png

https://imgur.com/2An0aqy.png

Interrupções x Traps

Interrupções

Traps

Processos

Um processo é caracterizado como um programa em execução. Em termos mais técnicos, um processo está contido na memória ram, enquanto um programa em si é um processo que está contido no disco esperando o swapping.

Programa:

Processo:

Cada processo possui:

Primeiro Plano

https://imgur.com/zuDRcrX.png

Segundo Plano (Daemons)

https://imgur.com/iOTyIFu.png

Espaço de Endereçamento

O espaço de endereçamento é uma lista de posições na memória onde o processo pode ler e escrever. Possui três segmentos:

https://imgur.com/i25QXfo.png

Process Control Block

O PCB é uma estrutura que contém todas as informações de que o SO precisa para gerenciar cada processo. Contém o ponteiro, o id do processo, o contador de programa (registrador que aponta para a próxima instrução a ser executada), registradores, etc.

https://imgur.com/MqKlxzi.png

https://imgur.com/QKBqrxa.png

O espaço de endereçamento não está contido no PCB.

Quando uma interrupção ocorre, o sistema precisa salvar o contexto corrente da execução da CPU – de modo a restaurar esse contexto quando seu processamento for concluído – essencialmente, suspendendo o processo para depois retorna-lo.

Criação

Processos são criados por outros processos, executando uma chamada de sistema. Ex: fork() que cria um clone do processo pai.

https://imgur.com/LWuUtgK.png

Finalização

Processos podem sofrer términos normais (voluntário) onde é executada a chamada de sistema exit ou exitProcess. Ou podem sofrer término por erro (voluntário) onde o processo que está sendo executado não pode ser finalizado. Além disso, pode ocorrer términos involuntários como algum bug no programa, interrupção de sinal ou algum outro comando como o kill (UNIX).

Estados

Um processo possui três estados básicos:

https://imgur.com/CGIY1WU.png

Existem outros estados atípicos:

Balancear a carga da CPU requer trocar o processo que está rodando, dando lugar a outro que precise dela.

Escalonador

A troca de processos, por sua vez, é feita pelo escalonador de processos. É o escalonador juntamente com um dado algoritmo de escalonamento que irá escolher qual o próximo processo a ser exxecutado. No entanto, o escalonador apenas escolhe, o dispatcher que é o responsável por “puxar o gatilho” e executar de fato o processo.

Curto prazo

Controla os processos que estão na memória e os aloca na CPU.

Longo prazo

Controla o grau de multiprogramação e administra o número de processos sendo executados simultaneamente.

Médio prazo

Controla os processos que serão removidos de forma parcial ou total da memória para serem suspenso.

A principal diferença entre o curto e longo prazo é a frequência de execução. O scheduler de curto prazo é executado pelo menos uma vez a cada 100 milissegundos.