Você está na página 1de 3

Universidade Federal de Mato Grosso do Sul

Faculdade de Computação

Aluno: Izabella Coelho da Silva

Sistemas Operacionais
Lista de Exercícios 02 - Processos
Profª Valéria Q. Dos Reis

1. Qual é a diferença entre processo e programa? A Figura 1 representa um programa ou um processo


em memória? Explique cada seção da figura (text, data, heap, stack).

Figura 1 Figura 2

R: Processo é a atividade que cada nucleo (ou parte dele) do processador está executando. Programa é representado pelo
software onde direciona as instruções para quais processos precisam ser executados.

A figura 1 contem a representação de um tipo de alocação de memoria de um processo em execução


Text: Contem o codigo e suas constraints. Esse acontece durante o .exec e se mantem do mesmo tamanho durante toda
execução.
Data: Esta parte corresponde a memoria de trabalho do processo. (Exemplo, corresponde as variaveis globais do codigo)
Heap: Contem parte da memoria alocada dinamicamente, exemplo quando usamos o CALLOC da bilioteca stdlib do C.
Stack: É onde armazenamos alguns parâmetros de funções, endereços de retorno e essa parte da memoria é dinâmica
também.

2. O que é multiprogramação? Quais são suas vantagens? A multiprogramação apresenta desvantagens?


Justifique.
R: Basicamente a capacidade de executar varios processos “quase” paralelos. Acredito que uma
desvantagem pra quem deseja trabalhar na area de criar SO’S ou mesmo fazer a manutenção, a
complexidade para lidar com o pseudo paralelismo de processos deve ser bem maior.
3. Quais são os tipos de eventos em que processos são criados? E as razões em que eles são terminados?
R: Processos são criados no inicio do sistema e em chamadas de sistema. E eles terminam voluntaria
e involuntariamente, voluntaria quando chegam em um Return por exemplo ou por erro quando o
\programa.exe e não existe o arquivo. Involuntariamente quando estamos executando algum
programa que tem uma divisão por 0 e assim ele finaliza por erro fatal e também quando o
encerramos por outro processo, quando apertamos “ctrl+c”.
4. A Figura 2 ilustra os possíveis estados de um processo. Descreva as seis possíveis transições entre
esses estados. Por exemplo: a transição do estado novo (new) para o estado pronto (ready) se dá quando
um novo processo é criado.
R: New  Ready: Processo acabou de ser criado e entrou na fila para execução.
Ready  Running: O processo esta sendo executado.
Running  Waiting: O processo foi para o modo de espera.
Waiting  Running: O processo saiu da espera e esta sendo executado.
Running  Ready: O processo parou e esta pronto para ser executado.
Running  Terminated: O processo esta finalizado.

5. Na Figura 2, não há transições do estado pronto (ready) para bloqueado (waiting) e nem do estado
bloqueado para o estado executando (running). Por que? Há alguma situação em que alguma delas
pudesse ocorrer?
R: Na primeira situação, ready para block, não pode contecer porque para o processo estar bloqueado
ele precisa ser executado primeiro. E do bloqueado para o running não pode porque ele precisa estar
pronto primeiro para poder ser executado, ou seja precisa ir do block pro ready antes de ir pro
running
6. Descreva as ações executadas pelo kernel durante as trocas/mudanças de contexto.
R: Quando existe uma troca de contexto, o estado do primeiro processo precisa ser armazenado como está
para que quando o escalonador precise retornar a este, ele retorne onde parou. Este estado vai armazenar
todos os registradores que estão vinculados ao processo, um desses é contador de programa fisico do
nuleo que atualiza com o contador de programa de cada processo (cada um tem seu proprio contador
logico). E o contador fisico apenas atualiza de acordo com o estado que o contador logico do processo foi
armazenado. E então o novo processo pode se iniciar. Essa estrutura que armazea todas as informações,
nomeamos de bloco de controle de processos.

7. O que é uma tabela de processos? Para que ela é utilizada? Que informações ela armazena?
R: É a mesma coisa que mencionei na questão 6, o bloco de controle de processos ou tabela de
processos e armazena as informações necessárias para execução de cada processo.
8. Incluindo o processo pai inicial, quantos processos são criados pelo programa a seguir?
int main () {
fork();
fork();
fork();}

R: São criados 8 processos.

9. Usando o programa a seguir, identifique os valores de pid nas linhas A, B, C e D. (Suponha que os
pids reais do pai e do filho sejam 2600 e 2603, respectivamente.)
int main() {
pid_t pid, pid1;
pid = fork();
if(pid == 0) {
pid1 = getpid();
printf(“Child: pid = %d”, pid); /* A */
printf(“Child: pid1 = %d”, pid1); /* B */
}
else {
pid1 = getpid();
printf(“Parent: pid = %d”, pid); /* C */
printf(“Parent: pid1 = %d”, pid1); /* D */
}}
R:
Letra A – 0
Letra B – 0
Letra C – 2603
Letra D - 2603
10. Usando o programa a seguir, explique qual será a saída da linha A.
int value = 5;
int main() {
pid_t pid;
pid = fork();
if(pid == 0) {
value += 15;
return 0;
}
else {
if(pid > 0) {
wait(NULL);
printf(“PARENT: value = %d”, value); /* A */
return 0;
}
}}

R:
Saida:
PARENT: value = 15

Você também pode gostar