Enumere e explique resumidamente as principais responsabilidades de um sistema operacional.
Qual é a diferença entre modo usuário e modo kernel? Por que esta distinção é feita?
Descreva como são implementados os seguintes eventos: (i) chamada de sistema, (ii) tratamento de interrupção e (iii) tratamento de sinais. Quais são as semelhanças e diferenças entre estes eventos?
Qual é a diferença entre um sistema monolítico e um baseado em camadas?
Descreva o funcionamento da função fork(). Após o fork, como os processos pai e filho podem se comunicar/sincronizar?
O que é um processo Zumbi? Escreva um programa que crie processos zumbis.
Familiarize-se com as chamadas: fork(2), wait(2),
Abra um terminal e execute o comando: pstree -c -p
Descreva o que está vendo.
Resolva http://wiki.inf.ufpr.br/maziero/doku.php?id=so:criacao_de_processos
Resolva http://www.dei.isep.ipp.pt/~orlando/so2/processos.htm
Familiarize-se com as chamdas: execve(2), clone(2),
Durante as aulas de 26 e 28 de março foram iniciadas as ideias de produzir um conjunto de processos para se gerar uma árvore.
Utilize a ferramenta dot
, oriunda do pacote graphviz
(possui pacote nas ditribuições debian e ubuntu).
O comando dot
gera um grafo (ou uma árvore) dada as ligações entre os nós. Por exemplo o arquivo abaixo (nomeado como arvore-forks.dot):
graph {
4208 -- 4922;
4931 -- 4933;
4931 -- 4934;
4922 -- 4931;
4922 -- 4932;
4931 -- 4936;
4932 -- 4935;
4935 -- 4938;
4936 -- 4937;
}
O arquivo acima pode ser renderizado utilizando o comando:
dot -t png arvore-forks.dot -o arvore-forks.png
Gerando uma imagem como abaixo:
Neste exemplo foi impresso o PID do PAI de um processo e o PID do processo, o dot cuidou para gerar as ligações.
Dado o código abaixo:
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
int main(void)
{
if(fork()>0)
{
if(fork()==0)
if(fork()==0)
fork();
}
else
{
if(fork())
if(fork())
if(fork())
;
else
fork();
}
return 0;
}
C
, que gere um conjunto de processos que tenha uma árvore semelhante como da ilustração abaixo: